Repository: claritychallenge/clarity (language: python)

Issue:
48 increased regression test code coverage



Discussion / hints:

Fix patch:
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 000000000..de288e1ea
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,3 @@
+{
+    "python.formatting.provider": "black"
+}
\ No newline at end of file


Test patch:
diff --git a/tests/regression/_regtest_outputs/test_enhancers.test_GHA.out b/tests/regression/_regtest_outputs/test_enhancers.test_GHA.out
new file mode 100644
index 000000000..2de2606b7
--- /dev/null
+++ b/tests/regression/_regtest_outputs/test_enhancers.test_GHA.out
@@ -0,0 +1,2 @@
+signal output:
+prerelease_combination4_smooth
diff --git a/tests/regression/_regtest_outputs/test_enhancers.test_GHA_config.out b/tests/regression/_regtest_outputs/test_enhancers.test_GHA_config.out
new file mode 100644
index 000000000..f0770c88e
--- /dev/null
+++ b/tests/regression/_regtest_outputs/test_enhancers.test_GHA_config.out
@@ -0,0 +1,987 @@
+config output:
+# This file is part of the HörTech Open Master Hearing Aid (openMHA)
+# Copyright © 2013 2017 2018 HörTech gGmbH
+#
+# openMHA is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, version 3 of the License.
+#
+# openMHA 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 Affero General Public License, version 3 for more details.
+#
+# You should have received a copy of the GNU Affero General Public License,
+# version 3 along with openMHA.  If not, see <http://www.gnu.org/licenses/>.
+
+
+# openMHA is a software platform to process audio signals with hearing
+# aid signal processing algorithms.  Signal processing algorithms are
+# implemented as plug-ins that are loaded into the MHA process at
+# runtime.
+#
+# The openMHA framework itself and also the MHA plugins support
+# configuration of their settings through a text-based configuration
+# language.  This file is an example configuration that can be used to
+# configure an MHA to perform signal processing with a non-adaptive
+# differential microphone, followed by dynamic compression to compensate
+# for sensorineural hearing loss.
+
+# Besides configuring the MHA, this file also has comments explaining
+# every setting. We have left out some of the more advanced settings
+# which have been left to their default value, because explaining all
+# the possible options that are not actually used here might only
+# distract from understanding this configuration.
+
+# We have to tell the MHA how many audio channels to process.  Think
+# of the number of audio channels as the number of microphones that
+# your hearing support system uses to pick up sound.  If you wore a
+# hearing aid device on each ear, and each hearing aid device had a
+# signal microphone to pick up sound, then your number of audio input
+# channels would be two.  If each of the hearing aid devices had not
+# only one, but two microphones at slightly different positions, then
+# you would configure the number of input audio channels to be
+# four. This is what we do here with the "nchannels_in" setting.
+#
+# This "nchannels_in" variable accepts values of type integer in the
+# range 1 to INT_MAX.  This is sometimes denoted like this in MHA:
+#
+# int:[1,[
+nchannels_in = 4
+
+# Note that the corresponding "nchannels_out" variable is not
+# writable, but is read-only.  We call read-only variable a "monitor
+# variable", or shorter, a "monitor".  The number of output channels
+# is auto-deduced by the MHA and can be read from the "nchannels_out"
+# monitor.
+
+# When we perform real-time signal processing, we process the signal
+# in small chunks of data: Take a chunk from the sound card capture
+# channels, process it, and output the result to the sound card output
+# channels.
+#
+# MHA always operates like this, processing data in small chunks, even
+# when the processed sound data comes from sound files.  The setting
+# "fragsize" tells the MHA how many audio sample per channel are to be
+# processed in each chunk.
+#
+# int:[1,[
+fragsize = 64
+
+# MHA processes discrete-time digital audio signals with a fixed
+# sampling rate.  The sampling rate tells MHA how many samples per
+# second have been digitized in each audio channel. Note that we use a
+# floating point data type here, so you can use a non-integer sampling
+# rate if you have to and your sound card supports it. The sampling
+# rate 44100 that we use here is the standard sampling rate used on
+# audio CDs and is supported by most sound cards.
+#
+# sampling rate in Hz
+# float:]0,[
+srate = 44100
+
+# The MHA framework can load a single MHA plugin to process the data.
+# We tell the MHA which plugin to load with the "mhalib" variable
+# (historical reasons).  Note that the data type of the "mhalib"
+# variable is string.
+#
+# When the assignment "mhalib = transducers" below is executed by the
+# MHA, then the MHA framework will look for a dynamic library file in
+# the file system with the name "transducers.so" (on linux, on windows
+# the extension would be .dll, on mac it would be .dylib).  The path
+# where MHA searches for this file is either the standard path for
+# shared libraries on the system, or, if the environment variable
+# "MHA_LIBRARY_PATH" is set, then MHA searches the directories listed
+# in this environment variable.
+#
+# Usually MHA configurations consist of more than just one plugin.
+# MHA provides structuring plugins that can themselves load other
+# plugins for this purpose.
+#
+# The transducers plugin that we load here can be used for calibration of
+# input and output sounds, see below.
+#
+# MHA library name
+# string
+mhalib = transducers
+
+# MHA supports different audio back-ends: Sound can come from and go
+# to either
+# - sound cards,
+# - the Jack audio server,
+# - sound files, or
+# - the network.
+#
+# Users select the desired audio backend by loading the respective MHA
+# IO library into the MHA process.  Similar to processing plugins, IO
+# libraries are loaded as dynamic libraries into the process when the
+# assignment to the "iolib" variable below is executed, and the same
+# search path and file name extensions are used, as when processing
+# plugins are loaded.  But because MHA IO libraries are the ultimate
+# sources and sinks of sound in the MHA, they export a different
+# interface to the MHA. Here we load the IO library that reads from
+# and writes to sound files.
+#
+# IO plugin library name
+# string
+iolib = MHAIOFile
+
+# In the future you may have several MHA processes running on the same
+# computer, performing different signal processing tasks.  You can use
+# this MHA variable to describe what the purpose of this instance of
+# the MHA is, so that you can tell to which MHA instance you are
+# currently connected and not get confused.
+#
+# Name of this mha instance
+# string
+instance = allplugins
+
+# parser "mha":
+#
+# Remember that above, we loaded the transducers plugin into the MHA
+# with the assignment "mhalib = transducers".  When the MHA executed
+# this assignment, it loaded the transducers plugin into the MHA
+# process.  For historical reasons, MHA makes the configuration
+# variables of this plugin available to the sub-"parser" "mha".  We
+# call the hierarchy layers in the MHA configuration tree "parsers"
+# because, besides providing hierarchy, they also perform the text
+# parsing of the configuration commands.
+#
+# So in the following, we will see how some variables of the transducers
+# plugin are getting set.
+
+# The transducers plugin is responsible for the correct calibration of
+# the sound in the MHA.  Remember that the MHA is a platform for
+# hearing aid signal processing algorithms, and that hearing aids
+# usually enhance the sound for hearing impaired listeners.  Hearing
+# impairment generally means that people suffering from it have
+# increased hearing thresholds, i.e. soft sounds that are audible for
+# normal hearing listeners may be imperceptible for hearing impaired
+# listeners.
+#
+# To provide accurate signal enhancement for hearing impaired people,
+# algorithms have to be able to determine the absolute physical sound
+# pressure level corresponding to a digital signal given to any MHA
+# plugin for processing.  Inside the MHA, we achieve this with a
+# convention.
+#
+# The convention that we use in the MHA is that the single-precision
+# floating point time-domain sound signal samples, that we process
+# inside the MHA plugins, have the physical unit Pascal (1 Pa = 1 N /
+# m^2).  With this convention in place, all plugins can determine the
+# absolute physical sound pressure level from the sound samples that
+# they process.
+#
+# However, when one just connects a microphone to a sound card and
+# uses that sound card to feed sound samples to the MHA, these sound
+# samples do not automatically follow the MHA level convention. The
+# same is true when using sound files instead of sound cards for input
+# and output.  Different microphones have different sensitivities.
+# Sound cards have adjustable amplification settings.  Sound files may
+# have been "normalized" before they have been saved to disk.  To be
+# able to implement our level convention, we need to be able to adjust
+# for arbitrary physical level to digital level mappings in the MHA.
+# We do this with the transducers plugin, which is the only plugin
+# that may not rely on this convention, because it is the one plugin
+# that has to make sure that all other plugins may rely on this
+# convention.  For this reason, it is usually loaded as the first plugin
+# into the MHA using the "mhalib = transducers" assignment.
+#
+# transducers
+
+# Remember that the configuration settings of the first plugin loaded
+# into the MHA process, which here is the "transducers" plugin, can be
+# accessed under the sub-parser named "mha". "transducers" has a
+# configuration variable "plugin_name".  When a string is written to
+# this configuration variable, then the transducers plugin will itself
+# load another MHA plugin into the MHA process, which receives the
+# calibrated input signal from transducers, and which sends its still
+# calibrated output signal to the transducers plugin to adjust for the
+# physical outputs.
+#
+# Here, transducers loads an mhachain, which is an MHA plugin that
+# itself can load several other signal processing plugins and arrange
+# them in a signal processing chain.
+#
+# Plugin name
+# string
+mha.plugin_name = mhachain
+
+# After the above assignment is executed, the configuration settings
+# of the mhachain plugins are accessible through the hierarchy
+# "mha.mhachain", i.e. here, the individual plugin name gets reused as
+# the hierarchy name.
+
+# parser "mha.calib_in":
+#
+# calibration module
+#
+# The transducers plugin seperates input calibration settings and
+# output calibration settings in two different sub-"parsers", named
+# "calib_in" and "calib_out".
+#
+# To adjust the input signals to influences like microphone
+# sensitivities, analogue amplifiers, and sound card A/D converter
+# sensitivities, we write channel-specific "peak levels" into the
+# transducers plugin's "calib_in.peaklevel" configuration variable,
+# which is a vector of floats.  Each element specifies the "peak
+# level" for the corresponding audio channel.  With peak level, we
+# refer to the physical sound pressure level which would cause the
+# sound card to transmit to the MHA a digitized signal with a digital
+# level of 0 dB re full scale (dB FS).
+#
+# Of course, this is only a theoretical consideration:  A digital
+# signal with 0 dB FS would be some rectangular waveform with maximum
+# possible amplitude, and if you ever saw such a digital signal for real,
+# the obvious suspicion would be that you were seeing was caused by
+# massive clipping.
+#
+# Instead, we suggest that you produce a known sound level of static
+# noise at the place of your microphones with the help of calibrated
+# measurement equipment.  The calibrated measurement equipment should
+# tell you the sound level in dB SPL Freefield with linear or Zero
+# (Z-) frequency weighting. No A-, B-, C- or D- Weighting should be
+# applied.
+#
+# This known sound level should be loud enough clearly to dominate
+# other ambient noises (use a sound-proof booth for low ambient
+# noises!), but still soft enough that no clipping occurs when the
+# sound is digitized. Of course, all your equipment should behave as
+# linear as possible.
+#
+# Then, your peak level for each channel is the physical level that
+# you measured minus the corresponding digital level in dB FS of the
+# signal produced by your sound card.  (The digital level in dB FS is
+# always negative, therefore, the peaklevel is always higher than the
+# physical sound level that you have used for calibration.)
+#
+# Yes, calibration is complicated (and we are not even finished, yet,
+# see next variable "fir").  But for hearing aid applications, it is
+# crucial to get it right.
+#
+# The peaklevels given in the following assignment are just example
+# values.  Note that a vector value is written with square brackets
+# surrounding the element values, which are separated by spaces.
+#
+# Reference peak level in dB (0 dB FS corresponds to this SPL level)
+# vector<float>
+# mha.calib_in.peaklevel = [100 100 100 100]
+mha.calib_in.peaklevel = [100 100 100 100]
+
+# Measuring and computing the correct peak level as above is not
+# enough to calibrate a hearing aid system. Microphones (or any other
+# component in your audio recording path) may have a non-flat
+# frequency response, which has to be compensated for with a filter,
+# before MHA plugins can actually rely on the level convention in the
+# MHA. For this purpose, you can specify a matrix of FIR filter
+# coefficients, with one filter per row. Rows are separated by
+# semicola.
+#
+# If your microphones' frequency responses, you can either leave out
+# the fir coefficients, or, as done here, provide FIR coefficients
+# that do not actually alter the signal. These non-modifying FIR
+# coefficients are included here to demonstrate the matrix data
+# format.
+#
+# FIR filter coefficients, one row for each channel
+# matrix<float>
+mha.calib_in.fir = [[1 0 0];[1 0 0];[1 0 0];[1 0 0]]
+
+# parser "mha.calib_out":
+#
+# Output calibration follows. The peaklevel and fir entries have the
+# same meaning as for input calibration: physical level in dB SPL Free
+# Field corresponding to a digital signal with 0 dB re full scale
+# digital level, and filter to correct the frequency responses of the
+# output amplifiers and transducers. When thinking of hearing aid
+# applications where the output sound is produced not in the free
+# field but in the ear canal of the hearing impaired listener with
+# hearing aid receivers, output calibration becomes more involved than
+# input calibration because effects like lost open ear gain may have
+# to be taken into account and suitable couplers simulating the
+# impedance of actual ears have to be used for physical measurements.
+#
+# Reference peak level in dB (0 dB FS corresponds to this SPL level)
+# vector<float>
+mha.calib_out.peaklevel = [120 120]
+# FIR filter coefficients, one row for each channel
+# matrix<float>
+mha.calib_out.fir = [[]]
+
+# parser "mha.calib_out.softclip":
+# 'Hardware' softclipper
+#
+# When hearing aid algorithms apply gains to amplify sounds for the
+# hearing impaired, the desired output signal may be louder than is
+# physically possible to produce with the given equipment. If this
+# situation is left unhandled, then the physical signal will be
+# clipped by the sound card, producing very unpleasant sound
+# artifacts.  It is always better to adapt and configure the hearing
+# aid algorithms in such a way that output signal is never in danger
+# of clipping.  Given the realities of such a flexible platform as the
+# master hearing aid, where the hearing support algorithm can be
+# connected to many different sound output transducers, we realize
+# that this is not always possible. In order to lighten the burden of
+# unpleasant clipping sound artifacts on the hearing impaired user
+# testing a configuration, we have introduced a softclipper that will
+# attenuate the overall signal with slower time constants when it is
+# in danger of clipping. Note that this solution is still sub-optimal,
+# because the prescribed output levels are not achieved, and because
+# the softclipper may still produce unpleasant artifacts a little less
+# harsh, but the solution is still better than hard clipping.
+#
+# The attack time constant, given in seconds, determines how quickly
+# the softclipper can react to rising sound levels that are in danger
+# of reaching hard clipping. Note that only a time constant of 0 can
+# guarantee that no hard clipping occurs in the operating range of the
+# softclipper.
+#
+# Note that the transducers plugin expects the values for these time
+# constants to be specified in units of seconds, even though typical
+# values for these settings are in the milliseconds range.  In MHA
+# configuration, we prefer that physical quantities be specified in SI
+# units whenever possible.
+#
+# attack filter time constant / s
+# float:[0,]
+mha.calib_out.softclip.tau_attack = 0.002
+
+# The decay time constant, in seconds, determines how quickly the
+# softclipper can follow falling sound levels to leave its operating
+# range when engaged.
+#
+# decay filter time constant / s
+# float:[0,]
+mha.calib_out.softclip.tau_decay = 0.005
+
+# Lower end of the operating range of the softclipper. This is some
+# value between 0 and one and denotes the amplitude of sound samples
+# with respect to full scale of the sound card at which the
+# softclipper engages and starts attenuating the signal.
+#
+# start point on linear scale (hard clipping at 1.0)
+# float:[0,]
+mha.calib_out.softclip.threshold = 0.6
+
+# The compression rate of the softclipper. This value of 0.5 means,
+# for every full dB that the mha output signal would be above the soft
+# clipper threshold if no clipping would occur, output only this many
+# dBs above that threshold.
+#
+# compression factor
+# float:[0,1]
+mha.calib_out.softclip.slope = 0.5
+
+# The softclipper measures the ratio of the number of samples that
+# were attenuated by it vs the number of unaffected samples, with a
+# time averaging performed by low pass filtering ones and zeros with
+# this time constant.
+#
+# clipping meter time constant / s
+# float:[0,]
+mha.calib_out.softclip.tau_clip = 1
+
+# When configuring an MHA, you can set a limit on the maximum clipped
+# ratio that you are willing to accept.  MHA will stop signal
+# processing with an error if this ratio is ever exceeded, and would
+# need to be restartet manually.  This is intended to be used in
+# scenarios where the hearing aid processing does not take into
+# account limitations of the sound output hardware, and you want to
+# stop measurements when it becomes clear that you cannot perform some
+# measurements either due to the limitations of the output hardware or
+# due to the severity of the hearing loss of the subject.
+#
+# maximum allowed clipped ratio
+# float:[0,1]
+mha.calib_out.softclip.max_clipped = 1
+
+# All the clipping described above is disabled by default and has to
+# be enabled here if desired.
+#
+# Will the soft/ hard clipping be executed
+# bool
+mha.calib_out.do_clipping = no
+
+
+# parser "mha.mhachain":
+#
+# MHA Chain
+#
+# Above, we have loaded an "mhachain" plugin into the transducers
+# plugin to process the calibrated signal.  The configuration settings
+# of this mhachain can be accessed below the hierarchy mha.mhachain.
+# An mhachain plugin can load several plugins in the specified order,
+# where each plugin processes the output signal of the previous
+# plugin.  Child plugins are loaded into an mhachain by assigning to
+# its "algos" variable a vector of strings, where each string is the
+# name of one child plugin.  Here, we load two plugins, an adaptive
+# differential microphone (adm), which is set to be non-adaptive,
+# and an overlapadd plugin.
+#
+# list of plugins
+# vector<string>
+mha.mhachain.algos = [adm overlapadd]
+
+# parser "mha.mhachain.adm":
+#
+# Adaptive differential microphone
+#
+# The adm plugin implements one or more independent adaptive
+# differential microphones by combining the signal from two
+# omnidirectional microphones (cf. Elko 1985).  In hearing aids, the
+# adaptive differential microphone algorithm can be applied to combine
+# the signal of two distinct omnidirectional microphones inside a
+# single hearing aid device, a front microphone and a rear microphone.
+# The adaptive algorithm is then used to steer a spatial zero so that
+# the sound source with the highest intensity in the rear hemisphere
+# of the hearing aid wearer's head is attenuated.
+#
+# The adm plugin needs to know which audio channels should be combined
+# to form each computed adaptive differential microphone, because
+# there is no default ordering of 4 channels.  With the following
+# assignments, we specify that the ordering (i.e. which microphone is
+# connected to which sound card channel) is in this case:
+# - channel index 0 = front microphone on the left hearing aid device
+# - channel index 1 = front microphone on the right hearing aid device
+# - channel index 2 = rear microphone on the left hearing aid device
+# - channel index 3 = rear microphone on the right hearing aid device
+# Both left channels will be combined by the ADM to form an adaptive
+# differential microphone. Independently, the same will be done for
+# both right channels.
+#
+# Channel indices for front microphones
+# vector<int>:[0,[
+mha.mhachain.adm.front_channels = [0 1]
+# Channel indices for rear microphones
+# vector<int>:[0,[
+mha.mhachain.adm.rear_channels = [2 3]
+
+# The adaptive differential microphone algorithm needs to know the
+# physical distance between front and rear microphone.  The physical
+# distance is given in meters for each microphone pair in the
+# following vector variable.  The unit here is meters even though
+# typical distances are more in the range of millimeters, because in
+# the MHA configuration we prefer that physical quantities be
+# specified in SI units whenever possible.
+#
+# distance between front and rear microphones
+# front-mid 0.0076m + mid-rear 0.0073m Kayser et al. 2009
+mha.mhachain.adm.distances = [0.0149 0.0149]
+
+# Here we set the plugin to be non-adaptive.
+mha.mhachain.adm.beta = 0.5
+
+# The adaptation process of this adaptive differential microphone
+# algorithm adapts on low-pass filtered signals.  This variable
+# determines the filter order used for the low-pass filter.  Higher
+# filter orders result in better spatial adaptation.
+#
+# Filter order of FIR lowpass filter
+# int:[46,128]
+mha.mhachain.adm.lp_order = 128
+
+# The output signal of the adaptive differential microphone shows a
+# comb filter effect with regular notches in the spectrum.  For
+# typical microphone distances in the order of 1cm, only the lowest
+# notch is relevant for speech spectrum.  To compensate the lowest
+# notch, a filter is applied that amplifies low frequencies.  This
+# variable specifies the filter order of this filter. Higher filter
+# orders result in better output signal quality.
+#
+# Filter order of FIR comb compensation filter
+# int:[46,128]
+mha.mhachain.adm.decomb_order = 128
+
+# Adaptive differential microphones combine the signal from two audio
+# input channels into a single audio output channel.  Even with the
+# adm plugin in the signal path, users may want to switch from active
+# directional filtering to omnidirectional microphone and back,
+# depending on the acoustical environment they find themselves in.  By
+# changing this variable at run time, users can select what the output
+# of the adm plugin should be:
+#
+# - For bypass = 0, the adm will not be bypassed, which means it will
+#   carry out its adaptive directional filtering.
+# - For bypass = 1, adm plugin will output the audio signals from the
+#   front microphones without modification.
+# - For bypass = 2, adm plugin will output the audio signals from the
+#   rear microphones without modification.
+#
+# In all three cases, the number of output channels will be the same,
+# namely, half the number of input channels.
+#
+# if 1, output front microphones directly, if 2, output rear microphones
+# int:[0,2]
+mha.mhachain.adm.bypass = 0
+
+# parser "mha.mhachain.overlapadd":
+#
+# overlapadd is one of the MHA plugins that perform conversion between
+# time domain and spectral domain as a service for algorithms that
+# process a series of short time fourier transform signals.  In this
+# way, not every MHA plugin that processes spectral signal has to
+# perform its own spectral analysis. overlapadd performs both, the
+# forward and the backward transform, and can load another MHA plugin
+# which analyses and modifies the signal while in the spectral domain.
+# The plugin performs the standard process of collecting the input
+# signal, windowing, zero-padding, fast fourier transform, inverse
+# fast fourier transform, additional windowing, and overlap-add time
+# signal output.
+#
+# The hop size, how much the analysis window is advanced from one
+# processing invocation to the next, is not controlled by the
+# overlapadd plugin itself, but is determined by the number of audio
+# samples per channel and processing block.  In this example
+# configuration, the hop size is determined by the "fragsize" setting
+# of the MHA itself.  This setting can be found near the top of this
+# configuration file.
+#
+# All other common overlap-add (OLA) and weighted overlap-add (WOLA)
+# settings can be configured by setting the configuration variables of
+# this overlapadd plugin.
+#
+# Waveform to spectrum overlap add and FFT method.
+# Audio data is collected up to wndlen, than windowed with
+# the given window function, zero padded up to fftlength
+# (symmetric zero padding or asymmetric zero padding possible),
+# and Fast-Fourier-transformed.
+# All parameter changes take effect after the next prepare call.
+
+# The overlapadd plugin again loads one plugin that processes the
+# signal in the spectral domain.  The plugin loaded here will receive
+# the STFT signal and produce a possibly modified version of the STFT
+# signal, which is then subjected to inverse FFT transform by the
+# overlapadd plugin and finally the overlap-add operation is performed
+# to produce the time-domain output signal.
+#
+# In this configuration, we use again an mhachain plugin to process
+# the signal.  Note that mhachain was used before in this
+# configuration file to form a signal processing chain of two
+# algorithms that pass on time-domain signal.  Here, we want it to
+# form a chain of algorithms that pass on spectral STFT signal to each
+# next plugin.  Some plugins in the MHA, like mhachain, can adapt to
+# the domain of the input signal that they receive.  Should you happen
+# to configure a plugin to be loaded at a place where it cannot
+# process the input signal that it receives, that plugin will raise an
+# error, and processing cannot start.
+#
+# Plugin name
+# string
+mha.mhachain.overlapadd.plugin_name = mhachain
+
+# The FFT length, in samples, to use for spectral analysis.  The FFT
+# length must be at least as large as the analysis window length,
+# which is configured later.  Note that for efficient FFT computation
+# the FFT length should be a product of powers of small primes.  The
+# openMHA uses MIT's FFTW library version 2 internally, which supports
+# efficient analysis also for small primes other than 2, therefore,
+# you are not restricted to powers of 2 in the choice of FFT length.
+#
+# FFT length int:[1,]
+mha.mhachain.overlapadd.fftlen = 256
+
+# parser "mha.mhachain.overlapadd.wnd":
+#
+# The window properties are specified in the sub-hierarchy wnd.
+#
+# Window type.
+#
+# The data type of the variable wnd.type is keyword_list.  The
+# variable offers a choice of predefined symbolic names, one of which
+# can be selected.  Most window types offered here should be
+# self-explanatory for users with a signal processing background.
+# Only the "user" window is a special case where the the window shape
+# can be specified sample-by-sample by the user.  For the example
+# configuration here we use the hanning window.
+#
+# keyword_list:[rect hanning hamming blackman bartlett user]
+mha.mhachain.overlapadd.wnd.type = hanning
+
+# If wnd.type above is user, then the window shape would have to be
+# specified here sample-by-sample in the vector wnd.user.  The value
+# of each sample would typically between 0 and 1.
+#
+# User provided window (used if window type==user).
+# vector<float>
+mha.mhachain.overlapadd.wnd.user = []
+
+# The window length, in samples.  The window length should be at least
+# as long as the hop size (determined by the fragsize setting outside
+# of the overlapadd plugin), and must be at most as long as the FFT
+# length.  A typical value would be for the window size to be either
+# exactly two (like here) or four times the hop size, to achieve 50%
+# or 75% overlap, respectively.  If the signal is not only analyzed in
+# the spectral domain, but also modified with frequency-dependent
+# gains, it is recommended to choose the window length shorter than
+# the FFT length to have some zero padding to pick up the time-domain
+# convolution from the corresponding frequency-domain modifications.
+#
+# window length/samples
+# int:[1,]
+mha.mhachain.overlapadd.wnd.len = 128
+
+# If the fft length is greater than the window length, then this
+# variable determines the relative placement of the window inside the
+# fft analysis buffer.
+#
+# window position
+# (0 = beginning, 0.5 = symmetric zero padding, 1 = end)
+# float:[0,1]
+mha.mhachain.overlapadd.wnd.pos = 0.5
+
+# In common overlap-add processing, the window would be applied as an
+# analysis window before transforming to the frequency domain.
+# However, there are other use cases (namely WOLA, weighted
+# overlap-add), where one commonly restricts the resynthesized time
+# signal that is produced by the inverse FFT with a synthesis window
+# to the original extent of the analysis window to restrict filter
+# "ringing".  You would usually split one of the common analysis
+# window used in overlap-add processing, by applying an exponent of
+# 0.5 to all the window samples and apply the analysis window before
+# the FFT and apply the synthesis window after the inverse FFT.  Note
+# that this is not commonly done in hearing aid signal processing, but
+# the MHA supports it should you need it.
+#
+# An exponent of 1 here means that the window is completely applied
+# before the FFT is performed.  Values lesser than one mean that all
+# window weights are exponentiated by this exponent (named wnd.exp
+# here) before the weights are applied to the input signal. Then, the
+# exponent (1-wnd.exp) is applied to the window weights before it is
+# applied as a synthesis window to the time signal that is produced by
+# the inverse FFT.
+#
+# If you perform standard overlap-add processing (OLA), and not
+# weighted overlap-add (WOLA), then leave this at its default value,
+# 1.
+#
+# window exponent to be applied to all elements of window function
+# float
+mha.mhachain.overlapadd.wnd.exp = 1
+
+# parser "mha.mhachain.overlapadd.zerownd":
+#
+# The settings in the sub-parser "zerownd" define a weighting
+# operation performed on the regions of the FFT buffer that are
+# pre-filled with the zero-padding.  If the signal is modified in the
+# spectral domain, then these regions of the FFT buffer usually
+# contain non-zero signal samples after the inverse FFT has been
+# performed.  This is caused by the convolution with the impulse
+# response that corresponds to the spectral changes that the spectral
+# algorithms have performed.
+#
+# If the effective impulse response exceeds the length of the
+# zero-padding regions in the FFT buffer, then this will cause
+# temporal aliasing effects that may be perceptible to the hearing
+# impaired user.  To improve the perceptual consequences, one might
+# apply a post-window to attenuate the signal energy in the
+# zero-padding area.  You can choose the shape of this post-window
+# with the configuration setting zerowind.type. This window will be
+# split in two and each part applied to the respective zero-padding
+# regions at the beginning and at the end of the FFT buffer.  Note
+# that a rectangular window will have a weight of one everywhere and
+# therefore will not affect these regions and will not improve the
+# temporal aliasing artifacts.  The default setting is a rectangular
+# window with no effect.
+#
+# zero padding post window type
+# Window type.
+# keyword_list:[rect hanning hamming blackman bartlett user]
+mha.mhachain.overlapadd.zerownd.type = rect
+
+# If the window type selected in zerownd.type is "user", then the weigths
+# of the desired window have to be specified here.
+#
+# User provided window (used if window type==user).
+# vector<float>
+mha.mhachain.overlapadd.zerownd.user = []
+
+# parser "mha.mhachain.overlapadd.smoothgains_bridge.mhachain":
+#
+# This mhachain plugin instance forms a signal processing chain in the
+# spectral domain: Its input signal is the STFT signal produced by
+# the overlapadd plugin, and its output signal is processed by the
+# same overlapadd instance to resynthesize it to a time domain signal.
+#
+# MHA Chain
+#
+# The plugins used to form a signal processing chain are loaded by the
+# mhachain plugin when the assignment to the configuration parameter
+# algos is executed.  This is a vector of strings, where the vector
+# value is delimited by square brackets, and the vector's elements are
+# separated by spaces.
+
+# Add smoothgains_bridge
+mha.mhachain.overlapadd.plugin_name = smoothgains_bridge
+mha.mhachain.overlapadd.smoothgains_bridge.plugin_name = mhachain
+
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.algos = [fftfilterbank dc combinechannels]
+
+# Use default mode
+mha.mhachain.overlapadd.smoothgains_bridge.mode = linear_phase
+
+# parser "mha.mhachain.overlapadd.smoothgains_bridge.mhachain.fftfilterbank":
+#
+# FFT based filterbank with overlapping filters
+#
+# For the dynamic compression which adapts the signal levels in the
+# different frequency bands for better audibility of the hearing
+# impaired opemMHA users, the signal has to be split into frequency
+# band. We do this here with the help of the MHA plugin fftfilterbank,
+# which separates our (here) 2 broadband audio channels and produces
+# (here) 2*9 narrowband audio channel, with 9 frequency bands
+# produced for each input broadband audio channel.
+#
+# FFT filterbank is not limited to 2 input channels, the above
+# paragraph just uses the current settings used here as an example.
+
+# fftfilterbank groups sets of FFT bins into frequency bands.
+#
+# Further below we will specify the center frequencies of these frequency
+# bands.  Here, we specify in what units we want to give the
+# frequencies below.  The default unit to specify frequencies in the
+# MHA is Hertz [Hz], but at some places, users have the choice of
+# selecting different frequency units.  Here, we choose that we want
+# to specify the frequencies in Hertz.
+#
+# Frequency unit
+# keyword_list:[Hz kHz Oct Oct/3 Bark Erb ERB_Glasberg1990]
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.fftfilterbank.unit = Hz
+
+# The configuration setting f of the fftfilterbank plugin expects a
+# vector with the center frequencies of the individual frequency
+# bands. The unit for the frequencies is Hertz.
+#
+# Frequencies
+# vector<float>
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.fftfilterbank.f = [177 297 500 841 1414 2378 4000 6727 11314]
+
+# The frequency bands that the fftfilterbank plugin produces can have
+# different shapes along the frequency axis.  The shapes and also the
+# cross-over frequencies between adjacent frequency bands can be
+# computed on different frequency scales, e.g. linear or logarithmic
+# scales.  Here we choose the logarithmic frequency scale.
+#
+# frequency scale of filter bank
+# keyword_list:[linear bark log erb ERB_Glasberg1990]
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.fftfilterbank.fscale = log
+
+# Frequency bands in the fftfilterbank can have different shapes
+# along the frequency axis.  Here we select a rectangular shape, which
+# also has the effect that frequency bands will not overlap,
+# i.e. every frequency bin is part of only exactly one frequency band.
+#
+# filter overlap type
+# keyword_list:[rect linear hanning exp gauss]
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.fftfilterbank.ovltype = rect
+
+# Above, when setting the configuration variable f, we used center
+# frequencies.  We could also have specified the edge frequencies if
+# we did the respective setting here.  When we specify center
+# frequencies, then the cross-over frequencies between adjacent
+# frequency bands are computed as the mean between the adjacent center
+# frequencies on the frequency scale specified by the variable fscale.
+# Also, in center frequency mode, the lowest frequency band always
+# extends to frequency 0Hz, while the highest frequency band always
+# extends to the Nyquist frequency.
+#
+# keyword_list:[center edge]
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.fftfilterbank.ftype = center
+
+# parser "mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc":
+#
+# dynamic compression
+#
+# Our standard dynamic compression algorithm measures the input sound
+# level in each frequency band and looks up the gain to be applied in
+# a gain table, and applies the gain to the signal in each respective
+# band.
+
+# Dynamic compression works by amplifying the signal with gains that
+# depend on the level of the input signal itself.  Multi-band dynamic
+# compression performs input signal level measurement in each
+# frequency band to deduce the gain applicable to the respective
+# frequency band.  Applicable gains would usually be higher for low
+# input levels, and lower for high input levels, to compress the
+# dynamimc range of the input signal into a smaller dynamic range at
+# the output of the compressor.
+#
+# Because the applicable gain depends on the frequency band as well as
+# on the input level, we use a 2-dimensional matrix to specify
+# applicable gains. The gaintable matrix has one row of gains for each
+# frequency band from the left audio channel, followed by one row of
+# gains for each frequency band from the right audio channel.  The
+# gains given are in dB.  Rows are enclosed by square brackets and
+# separated by semicola.  The entire matrix is enclosed in an
+# additional pair of square brackets.
+#
+# The first element in each row (i.e., taken together, the first
+# column) specifies the gain in dB to be applied if the input level in
+# the respective frequency band is equal to the value of the gtmin
+# element given for that respective band (see gtmin description
+# further below).
+#
+# The following elements in each row specify the gains in dB to be
+# applied for other input values, where the input level difference
+# between the individual elements in each row of the matrix is
+# determined by the value of gtstep for the respective band (see
+# gtstep description further below).
+#
+# This way, each row specifies the gains to be applied to the
+# respective frequency bands for certain discrete input levels.  The
+# actual input levels of the signal will regularly be different from
+# any of these discrete input levels.  Therefore, the gain values in
+# the rows are interpolated as well as extrapolated.
+#
+# The gain values that we use here in this example corrects the sound
+# perception for a hearing impaired listener with a very uncommon
+# mid-frequenc hearing loss.  Users of the openMHA may change the
+# values given here using their own rationale to help hearing-impaired
+# users.
+#
+# Note that we do not apply gains to the highest frequency bands here
+# on both sides (9th and 18th row).  Having the highest frequency band
+# here at all is just a trick to limit the extent of the
+# second-highest frequency band, so that it does not extend up to the
+# Nyquist frequency.
+#
+# gaintable data in dB gains
+# matrix<float>
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.gtdata = [[ 29.21981253 29.21981253 29.21981253 ... -8. -9. -10. ];[ 23.84914265 23.84914265 23.84914265 ... -8. -9. -10. ];[ 22.24055067 22.24055067 22.24055067 ... -8. -9. -10. ];[ 18.18189955 18.18189955 18.18189955 ... -8. -9. -10. ];[ 24.0078482 24.0078482 24.0078482 ... -8. -9. -10. ];[ 32.65372475 32.65372475 32.65372475 ... -8. -9. -10. ];[ 43.58627907 43.58627907 43.58627907 ... -8. -9. -10. ];[ 59.60913057 59.60913057 59.60913057 ... -8. -9. -10. ];[0. 0. 0. ... 0. 0. 0.];[ 24.21981253 24.21981253 24.21981253 ... -8. -9. -10. ];[ 20.03931925 20.03931925 20.03931925 ... -8. -9. -10. ];[ 18.17976681 18.17976681 18.17976681 ... -8. -9. -10. ];[ 22.77461942 22.77461942 22.77461942 ... -8. -9. -10. ];[ 27.70661528 27.70661528 27.70661528 ... -8. -9. -10. ];[ 32.65372475 32.65372475 32.65372475 ... -8. -9. -10. ];[ 43.58627907 43.58627907 43.58627907 ... -8. -9. -10. ];[ 71.59691189 71.59691189 71.59691189 ... -8. -9. -10. ];[0. 0. 0. ... 0. 0. 0.];]
+
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.log_interp = yes
+
+# Vector of input sound pressure levels for which the gains in the
+# leftmost column of the matrix "gtdata" above should be applied.
+# Each input sound level given here belongs to a different frequency
+# band. If only one value is given here, then this only value will
+# apply to all matrix rows / frequency bands.
+#
+# input level for first gain entry in dB SPL
+# vector<float>
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.gtmin = [-10]
+
+# Vector of step sizes in dB between discrete sound pressure levels
+# that determine the supporting points in the mapping from input sound
+# levels to applicable gains in matrix "gtdata" above.  Each entry in
+# this vector specifies the step size for a different row of gtdata.
+# If only one value is given here, then this only value will apply to
+# all rows / frequency bands.
+#
+# Each input sound level given here belongs to a different frequency
+# band. If only one value is given here, then this only value will
+# apply to all frequency bands.
+#
+# level step size in dB
+# vector<float>
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.gtstep = [1]
+
+# The dynamic compressor employs a common attack/decay low-pass filter
+# to determine the input level.  This vector describes the attack time
+# constants.  Each element corresponds to one frequency band. If only
+# one value is given here, then this only value will apply to all
+# frequency bands.
+#
+# attack time constant in s
+# vector<float>
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.tau_attack = [0.02]
+
+# The dynamic compressor employs a common attack/decay low-pass filter
+# to determine the input level.  This vector describes the decay or
+# release time constants.  Each element corresponds to one frequency
+# band. If only one value is given here, then this only value will
+# apply to all frequency bands.
+#
+# decay time constant in s
+# vector<float>
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.tau_decay = [0.1]
+
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.tau_rmslev = [0.1]
+
+# Name of fftfilterbank plugin.  Used to extract frequency information.
+# string
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.fb = fftfilterbank
+
+# The fftfilterbank that splits the broadband channels into frequency
+# bands for this compressor outputs the frequency bands as separate
+# audio channels. Without additional knowledge, the dynamic compressor
+# cannot determine whether an 18 channel input signal that it receives
+# has been generated from 2 broadband channels that have been split
+# into 9 bands each (like we do in this example), or maybe from 3
+# broadband channels that have been split into 6 bands each.  The
+# following setting tells the compressor the name of an algorithm
+# communication variable where the fftfilterbank has stored
+# information about the original number of broadband channels.
+#
+# name of audio channel number variable (empty: broadband)
+# string
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.chname = fftfilterbank_nchannels
+
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.bypass = no
+
+# parser "mha.mhachain.overlapadd.smoothgains_bridge.mhachain.combinechannels":
+#
+# Channel combiner
+#
+# The fftfilterbank has split the signal into frequency bands.  To be
+# able to combine the frequency bands back into broadband channels,
+# the combinechannels plugin needs to know how many broadband channels
+# have been split into bands.  The fftfilterbank that splits the
+# broadband channels into frequency bands for this compressor outputs
+# the frequency bands as separate audio channels. Without additional
+# knowledge, the combinechannels plugin cannot determine whether an 18
+# channel input signal that it receives has been generated from 2
+# broadband channels that have been split into 9 bands each (as it is
+# the case in this example), or maybe from 3 broadband channels that
+# have been split into 6 bands each.  The following setting tells the
+# combinechannels plugin how many broadband output channels it should
+# regenerate.
+#
+# Number of output channels
+# int:[1,]
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.combinechannels.outchannels = 2
+
+# parser "io":
+#
+# Sound file IO client.
+#
+# MHA supports different audio back-ends: Sound can come from and go
+# to either
+# - sound cards,
+# - the Jack audio server,
+# - sound files, or
+# - the network.
+#
+# Users select the desired audio backend by loading the respective MHA
+# IO library into the MHA process. In this example, we we have loaded
+# the IO library that reads from and writes to sound files, see the
+# assignment to "iolib" above.
+
+# This variable is used to select the input sound file.  The file name
+# of the sound file to use as the input sound signal to the MHA is
+# written to this variable.  The file name can contain either the
+# absolute path to the sound file, or the relative path (relative to
+# the current working directory of the MHA process).
+#
+# Read from input files and write to files of same format.
+# Input sound file name
+# string
+io.in = input
+
+# This variable is used to select the output sound file.  The file
+# name of the sound file to create and hold the output sound signal to
+# the MHA is written to this variable.  The file name can contain
+# either the absolute path to the sound file, or the relative path
+# (relative to the current working directory of the MHA process).
+#
+# Note that to ensure that the sound file was properly closed, the MHA
+# should be told to change to the release start (cmd=release), or it
+# should be told to exit (cmd=quit).
+#
+# Output sound file name
+# string
+io.out = output
+
+# Local Variables:
+# indent-tabs-mode: nil
+# coding: utf-8-unixs
+# End:
diff --git a/tests/regression/_regtest_outputs/test_enhancers.test_GHA_inputs.out b/tests/regression/_regtest_outputs/test_enhancers.test_GHA_inputs.out
new file mode 100644
index 000000000..da993f078
--- /dev/null
+++ b/tests/regression/_regtest_outputs/test_enhancers.test_GHA_inputs.out
@@ -0,0 +1,2 @@
+signal output:
+[0. 0. 0. ... 0. 0. 0.]
diff --git a/tests/regression/_regtest_outputs/test_enhancers.test_dsp_filter.out b/tests/regression/_regtest_outputs/test_enhancers.test_dsp_filter.out
new file mode 100644
index 000000000..a786d0c87
--- /dev/null
+++ b/tests/regression/_regtest_outputs/test_enhancers.test_dsp_filter.out
@@ -0,0 +1,2 @@
+signal output:
+[[[0.5568 0.862  0.0993 0.1481 0.3449 0.7114 0.5499 1.0058 0.5112 0.7095]]]
diff --git a/tests/regression/_regtest_outputs/test_enhancers.test_gha_audiogram.out b/tests/regression/_regtest_outputs/test_enhancers.test_gha_audiogram.out
new file mode 100644
index 000000000..0d7128e04
--- /dev/null
+++ b/tests/regression/_regtest_outputs/test_enhancers.test_gha_audiogram.out
@@ -0,0 +1,40 @@
+Audiogram original:
+[ 250  500 1000 2000 4000 8000]
+[2. 1. 2. 2. 2. 1.]
+[2. 1. 1. 2. 1. 2.]
+['NOTHING', 'NOTHING']
+Audiogram new:
+[ 500 1000 2000]
+[1. 2. 2.]
+[1. 1. 2.]
+['NOTHING', 'NOTHING']
+Audiogram original:
+[ 250  500 1000 2000 4000 8000]
+[16. 14. 15. 16. 17. 15.]
+[17. 14. 13. 17. 14. 16.]
+['MILD', 'MILD']
+Audiogram new:
+[ 500 1000 2000]
+[14. 15. 16.]
+[14. 13. 17.]
+['MILD', 'MILD']
+Audiogram original:
+[ 250  500 1000 2000 4000 8000]
+[47. 43. 46. 47. 50. 45.]
+[50. 41. 40. 52. 42. 47.]
+['MODERATE', 'MODERATE']
+Audiogram new:
+[ 500 1000 2000]
+[43. 46. 47.]
+[41. 40. 52.]
+['MODERATE', 'MODERATE']
+Audiogram original:
+[ 250  500 1000 2000 4000 8000]
+[62. 58. 61. 63. 67. 60.]
+[66. 54. 53. 69. 56. 63.]
+['SEVERE', 'SEVERE']
+Audiogram new:
+[ 500 1000 2000]
+[58. 61. 63.]
+[54. 53. 69.]
+['SEVERE', 'SEVERE']
diff --git a/tests/regression/_regtest_outputs/test_mc_conv_tasnet.test_convtasnet.out b/tests/regression/_regtest_outputs/test_mc_conv_tasnet.test_convtasnet.out
new file mode 100644
index 000000000..f209dcfd3
--- /dev/null
+++ b/tests/regression/_regtest_outputs/test_mc_conv_tasnet.test_convtasnet.out
@@ -0,0 +1,8 @@
+ctn output:
+[[ 0.001889 -0.008292]
+ [ 0.001597 -0.008242]
+ [ 0.001265 -0.008123]
+ ...
+ [-0.001017 -0.000657]
+ [-0.000668 -0.000418]
+ [-0.000345 -0.0002  ]]
diff --git a/tests/regression/_regtest_outputs/test_mc_conv_tasnet.test_overlap_add.out b/tests/regression/_regtest_outputs/test_mc_conv_tasnet.test_overlap_add.out
new file mode 100644
index 000000000..41fcc4a05
--- /dev/null
+++ b/tests/regression/_regtest_outputs/test_mc_conv_tasnet.test_overlap_add.out
@@ -0,0 +1,3 @@
+overlap add output:
+[ 0.          0.00999983  0.01999867 ... -0.02185133 -0.01185279
+ -0.00185307]
diff --git a/tests/regression/cfg_files/prerelease_combination3_smooth_template.cfg b/tests/regression/cfg_files/prerelease_combination3_smooth_template.cfg
new file mode 100644
index 000000000..7a3e5e8d7
--- /dev/null
+++ b/tests/regression/cfg_files/prerelease_combination3_smooth_template.cfg
@@ -0,0 +1,986 @@
+# This file is part of the HörTech Open Master Hearing Aid (openMHA)
+# Copyright © 2013 2017 2018 HörTech gGmbH
+#
+# openMHA is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, version 3 of the License.
+#
+# openMHA 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 Affero General Public License, version 3 for more details.
+#
+# You should have received a copy of the GNU Affero General Public License,
+# version 3 along with openMHA.  If not, see <http://www.gnu.org/licenses/>.
+
+
+# openMHA is a software platform to process audio signals with hearing
+# aid signal processing algorithms.  Signal processing algorithms are
+# implemented as plug-ins that are loaded into the MHA process at
+# runtime.
+#
+# The openMHA framework itself and also the MHA plugins support
+# configuration of their settings through a text-based configuration
+# language.  This file is an example configuration that can be used to
+# configure an MHA to perform signal processing with a non-adaptive
+# differential microphone, followed by dynamic compression to compensate
+# for sensorineural hearing loss.
+
+# Besides configuring the MHA, this file also has comments explaining
+# every setting. We have left out some of the more advanced settings
+# which have been left to their default value, because explaining all
+# the possible options that are not actually used here might only
+# distract from understanding this configuration.
+
+# We have to tell the MHA how many audio channels to process.  Think
+# of the number of audio channels as the number of microphones that
+# your hearing support system uses to pick up sound.  If you wore a
+# hearing aid device on each ear, and each hearing aid device had a
+# signal microphone to pick up sound, then your number of audio input
+# channels would be two.  If each of the hearing aid devices had not
+# only one, but two microphones at slightly different positions, then
+# you would configure the number of input audio channels to be
+# four. This is what we do here with the "nchannels_in" setting.
+#
+# This "nchannels_in" variable accepts values of type integer in the
+# range 1 to INT_MAX.  This is sometimes denoted like this in MHA:
+#
+# int:[1,[
+nchannels_in = 4
+
+# Note that the corresponding "nchannels_out" variable is not
+# writable, but is read-only.  We call read-only variable a "monitor
+# variable", or shorter, a "monitor".  The number of output channels
+# is auto-deduced by the MHA and can be read from the "nchannels_out"
+# monitor.
+
+# When we perform real-time signal processing, we process the signal
+# in small chunks of data: Take a chunk from the sound card capture
+# channels, process it, and output the result to the sound card output
+# channels.
+#
+# MHA always operates like this, processing data in small chunks, even
+# when the processed sound data comes from sound files.  The setting
+# "fragsize" tells the MHA how many audio sample per channel are to be
+# processed in each chunk.
+#
+# int:[1,[
+fragsize = 64
+
+# MHA processes discrete-time digital audio signals with a fixed
+# sampling rate.  The sampling rate tells MHA how many samples per
+# second have been digitized in each audio channel. Note that we use a
+# floating point data type here, so you can use a non-integer sampling
+# rate if you have to and your sound card supports it. The sampling
+# rate 44100 that we use here is the standard sampling rate used on
+# audio CDs and is supported by most sound cards.
+#
+# sampling rate in Hz
+# float:]0,[
+srate = 44100
+
+# The MHA framework can load a single MHA plugin to process the data.
+# We tell the MHA which plugin to load with the "mhalib" variable
+# (historical reasons).  Note that the data type of the "mhalib"
+# variable is string.
+#
+# When the assignment "mhalib = transducers" below is executed by the
+# MHA, then the MHA framework will look for a dynamic library file in
+# the file system with the name "transducers.so" (on linux, on windows
+# the extension would be .dll, on mac it would be .dylib).  The path
+# where MHA searches for this file is either the standard path for
+# shared libraries on the system, or, if the environment variable
+# "MHA_LIBRARY_PATH" is set, then MHA searches the directories listed
+# in this environment variable.
+#
+# Usually MHA configurations consist of more than just one plugin.
+# MHA provides structuring plugins that can themselves load other
+# plugins for this purpose.
+#
+# The transducers plugin that we load here can be used for calibration of
+# input and output sounds, see below.
+#
+# MHA library name
+# string
+mhalib = transducers
+
+# MHA supports different audio back-ends: Sound can come from and go
+# to either
+# - sound cards,
+# - the Jack audio server,
+# - sound files, or
+# - the network.
+#
+# Users select the desired audio backend by loading the respective MHA
+# IO library into the MHA process.  Similar to processing plugins, IO
+# libraries are loaded as dynamic libraries into the process when the
+# assignment to the "iolib" variable below is executed, and the same
+# search path and file name extensions are used, as when processing
+# plugins are loaded.  But because MHA IO libraries are the ultimate
+# sources and sinks of sound in the MHA, they export a different
+# interface to the MHA. Here we load the IO library that reads from
+# and writes to sound files.
+#
+# IO plugin library name
+# string
+iolib = MHAIOFile
+
+# In the future you may have several MHA processes running on the same
+# computer, performing different signal processing tasks.  You can use
+# this MHA variable to describe what the purpose of this instance of
+# the MHA is, so that you can tell to which MHA instance you are
+# currently connected and not get confused.
+#
+# Name of this mha instance
+# string
+instance = allplugins
+
+# parser "mha":
+#
+# Remember that above, we loaded the transducers plugin into the MHA
+# with the assignment "mhalib = transducers".  When the MHA executed
+# this assignment, it loaded the transducers plugin into the MHA
+# process.  For historical reasons, MHA makes the configuration
+# variables of this plugin available to the sub-"parser" "mha".  We
+# call the hierarchy layers in the MHA configuration tree "parsers"
+# because, besides providing hierarchy, they also perform the text
+# parsing of the configuration commands.
+#
+# So in the following, we will see how some variables of the transducers
+# plugin are getting set.
+
+# The transducers plugin is responsible for the correct calibration of
+# the sound in the MHA.  Remember that the MHA is a platform for
+# hearing aid signal processing algorithms, and that hearing aids
+# usually enhance the sound for hearing impaired listeners.  Hearing
+# impairment generally means that people suffering from it have
+# increased hearing thresholds, i.e. soft sounds that are audible for
+# normal hearing listeners may be imperceptible for hearing impaired
+# listeners.
+#
+# To provide accurate signal enhancement for hearing impaired people,
+# algorithms have to be able to determine the absolute physical sound
+# pressure level corresponding to a digital signal given to any MHA
+# plugin for processing.  Inside the MHA, we achieve this with a
+# convention.
+#
+# The convention that we use in the MHA is that the single-precision
+# floating point time-domain sound signal samples, that we process
+# inside the MHA plugins, have the physical unit Pascal (1 Pa = 1 N /
+# m^2).  With this convention in place, all plugins can determine the
+# absolute physical sound pressure level from the sound samples that
+# they process.
+#
+# However, when one just connects a microphone to a sound card and
+# uses that sound card to feed sound samples to the MHA, these sound
+# samples do not automatically follow the MHA level convention. The
+# same is true when using sound files instead of sound cards for input
+# and output.  Different microphones have different sensitivities.
+# Sound cards have adjustable amplification settings.  Sound files may
+# have been "normalized" before they have been saved to disk.  To be
+# able to implement our level convention, we need to be able to adjust
+# for arbitrary physical level to digital level mappings in the MHA.
+# We do this with the transducers plugin, which is the only plugin
+# that may not rely on this convention, because it is the one plugin
+# that has to make sure that all other plugins may rely on this
+# convention.  For this reason, it is usually loaded as the first plugin
+# into the MHA using the "mhalib = transducers" assignment.
+#
+# transducers
+
+# Remember that the configuration settings of the first plugin loaded
+# into the MHA process, which here is the "transducers" plugin, can be
+# accessed under the sub-parser named "mha". "transducers" has a
+# configuration variable "plugin_name".  When a string is written to
+# this configuration variable, then the transducers plugin will itself
+# load another MHA plugin into the MHA process, which receives the
+# calibrated input signal from transducers, and which sends its still
+# calibrated output signal to the transducers plugin to adjust for the
+# physical outputs.
+#
+# Here, transducers loads an mhachain, which is an MHA plugin that
+# itself can load several other signal processing plugins and arrange
+# them in a signal processing chain.
+#
+# Plugin name
+# string
+mha.plugin_name = mhachain
+
+# After the above assignment is executed, the configuration settings
+# of the mhachain plugins are accessible through the hierarchy
+# "mha.mhachain", i.e. here, the individual plugin name gets reused as
+# the hierarchy name.
+
+# parser "mha.calib_in":
+#
+# calibration module
+#
+# The transducers plugin seperates input calibration settings and
+# output calibration settings in two different sub-"parsers", named
+# "calib_in" and "calib_out".
+#
+# To adjust the input signals to influences like microphone
+# sensitivities, analogue amplifiers, and sound card A/D converter
+# sensitivities, we write channel-specific "peak levels" into the
+# transducers plugin's "calib_in.peaklevel" configuration variable,
+# which is a vector of floats.  Each element specifies the "peak
+# level" for the corresponding audio channel.  With peak level, we
+# refer to the physical sound pressure level which would cause the
+# sound card to transmit to the MHA a digitized signal with a digital
+# level of 0 dB re full scale (dB FS).
+#
+# Of course, this is only a theoretical consideration:  A digital
+# signal with 0 dB FS would be some rectangular waveform with maximum
+# possible amplitude, and if you ever saw such a digital signal for real,
+# the obvious suspicion would be that you were seeing was caused by
+# massive clipping.
+#
+# Instead, we suggest that you produce a known sound level of static
+# noise at the place of your microphones with the help of calibrated
+# measurement equipment.  The calibrated measurement equipment should
+# tell you the sound level in dB SPL Freefield with linear or Zero
+# (Z-) frequency weighting. No A-, B-, C- or D- Weighting should be
+# applied.
+#
+# This known sound level should be loud enough clearly to dominate
+# other ambient noises (use a sound-proof booth for low ambient
+# noises!), but still soft enough that no clipping occurs when the
+# sound is digitized. Of course, all your equipment should behave as
+# linear as possible.
+#
+# Then, your peak level for each channel is the physical level that
+# you measured minus the corresponding digital level in dB FS of the
+# signal produced by your sound card.  (The digital level in dB FS is
+# always negative, therefore, the peaklevel is always higher than the
+# physical sound level that you have used for calibration.)
+#
+# Yes, calibration is complicated (and we are not even finished, yet,
+# see next variable "fir").  But for hearing aid applications, it is
+# crucial to get it right.
+#
+# The peaklevels given in the following assignment are just example
+# values.  Note that a vector value is written with square brackets
+# surrounding the element values, which are separated by spaces.
+#
+# Reference peak level in dB (0 dB FS corresponds to this SPL level)
+# vector<float>
+# mha.calib_in.peaklevel = [100 100 100 100]
+mha.calib_in.peaklevel = {{ peaklevel_in }}
+
+# Measuring and computing the correct peak level as above is not
+# enough to calibrate a hearing aid system. Microphones (or any other
+# component in your audio recording path) may have a non-flat
+# frequency response, which has to be compensated for with a filter,
+# before MHA plugins can actually rely on the level convention in the
+# MHA. For this purpose, you can specify a matrix of FIR filter
+# coefficients, with one filter per row. Rows are separated by
+# semicola.
+#
+# If your microphones' frequency responses, you can either leave out
+# the fir coefficients, or, as done here, provide FIR coefficients
+# that do not actually alter the signal. These non-modifying FIR
+# coefficients are included here to demonstrate the matrix data
+# format.
+#
+# FIR filter coefficients, one row for each channel
+# matrix<float>
+mha.calib_in.fir = [[1 0 0];[1 0 0];[1 0 0];[1 0 0]]
+
+# parser "mha.calib_out":
+#
+# Output calibration follows. The peaklevel and fir entries have the
+# same meaning as for input calibration: physical level in dB SPL Free
+# Field corresponding to a digital signal with 0 dB re full scale
+# digital level, and filter to correct the frequency responses of the
+# output amplifiers and transducers. When thinking of hearing aid
+# applications where the output sound is produced not in the free
+# field but in the ear canal of the hearing impaired listener with
+# hearing aid receivers, output calibration becomes more involved than
+# input calibration because effects like lost open ear gain may have
+# to be taken into account and suitable couplers simulating the
+# impedance of actual ears have to be used for physical measurements.
+#
+# Reference peak level in dB (0 dB FS corresponds to this SPL level)
+# vector<float>
+mha.calib_out.peaklevel = {{ peaklevel_out }}
+# FIR filter coefficients, one row for each channel
+# matrix<float>
+mha.calib_out.fir = [[]]
+
+# parser "mha.calib_out.softclip":
+# 'Hardware' softclipper
+#
+# When hearing aid algorithms apply gains to amplify sounds for the
+# hearing impaired, the desired output signal may be louder than is
+# physically possible to produce with the given equipment. If this
+# situation is left unhandled, then the physical signal will be
+# clipped by the sound card, producing very unpleasant sound
+# artifacts.  It is always better to adapt and configure the hearing
+# aid algorithms in such a way that output signal is never in danger
+# of clipping.  Given the realities of such a flexible platform as the
+# master hearing aid, where the hearing support algorithm can be
+# connected to many different sound output transducers, we realize
+# that this is not always possible. In order to lighten the burden of
+# unpleasant clipping sound artifacts on the hearing impaired user
+# testing a configuration, we have introduced a softclipper that will
+# attenuate the overall signal with slower time constants when it is
+# in danger of clipping. Note that this solution is still sub-optimal,
+# because the prescribed output levels are not achieved, and because
+# the softclipper may still produce unpleasant artifacts a little less
+# harsh, but the solution is still better than hard clipping.
+#
+# The attack time constant, given in seconds, determines how quickly
+# the softclipper can react to rising sound levels that are in danger
+# of reaching hard clipping. Note that only a time constant of 0 can
+# guarantee that no hard clipping occurs in the operating range of the
+# softclipper.
+#
+# Note that the transducers plugin expects the values for these time
+# constants to be specified in units of seconds, even though typical
+# values for these settings are in the milliseconds range.  In MHA
+# configuration, we prefer that physical quantities be specified in SI
+# units whenever possible.
+#
+# attack filter time constant / s
+# float:[0,]
+mha.calib_out.softclip.tau_attack = 0.002
+
+# The decay time constant, in seconds, determines how quickly the
+# softclipper can follow falling sound levels to leave its operating
+# range when engaged.
+#
+# decay filter time constant / s
+# float:[0,]
+mha.calib_out.softclip.tau_decay = 0.005
+
+# Lower end of the operating range of the softclipper. This is some
+# value between 0 and one and denotes the amplitude of sound samples
+# with respect to full scale of the sound card at which the
+# softclipper engages and starts attenuating the signal.
+#
+# start point on linear scale (hard clipping at 1.0)
+# float:[0,]
+mha.calib_out.softclip.threshold = 0.6
+
+# The compression rate of the softclipper. This value of 0.5 means,
+# for every full dB that the mha output signal would be above the soft
+# clipper threshold if no clipping would occur, output only this many
+# dBs above that threshold.
+#
+# compression factor
+# float:[0,1]
+mha.calib_out.softclip.slope = 0.5
+
+# The softclipper measures the ratio of the number of samples that
+# were attenuated by it vs the number of unaffected samples, with a
+# time averaging performed by low pass filtering ones and zeros with
+# this time constant.
+#
+# clipping meter time constant / s
+# float:[0,]
+mha.calib_out.softclip.tau_clip = 1
+
+# When configuring an MHA, you can set a limit on the maximum clipped
+# ratio that you are willing to accept.  MHA will stop signal
+# processing with an error if this ratio is ever exceeded, and would
+# need to be restartet manually.  This is intended to be used in
+# scenarios where the hearing aid processing does not take into
+# account limitations of the sound output hardware, and you want to
+# stop measurements when it becomes clear that you cannot perform some
+# measurements either due to the limitations of the output hardware or
+# due to the severity of the hearing loss of the subject.
+#
+# maximum allowed clipped ratio
+# float:[0,1]
+mha.calib_out.softclip.max_clipped = 1
+
+# All the clipping described above is disabled by default and has to
+# be enabled here if desired.
+#
+# Will the soft/ hard clipping be executed
+# bool
+mha.calib_out.do_clipping = no
+
+
+# parser "mha.mhachain":
+#
+# MHA Chain
+#
+# Above, we have loaded an "mhachain" plugin into the transducers
+# plugin to process the calibrated signal.  The configuration settings
+# of this mhachain can be accessed below the hierarchy mha.mhachain.
+# An mhachain plugin can load several plugins in the specified order,
+# where each plugin processes the output signal of the previous
+# plugin.  Child plugins are loaded into an mhachain by assigning to
+# its "algos" variable a vector of strings, where each string is the
+# name of one child plugin.  Here, we load two plugins, an adaptive
+# differential microphone (adm), which is set to be non-adaptive,
+# and an overlapadd plugin.
+#
+# list of plugins
+# vector<string>
+mha.mhachain.algos = [adm overlapadd]
+
+# parser "mha.mhachain.adm":
+#
+# Adaptive differential microphone
+#
+# The adm plugin implements one or more independent adaptive
+# differential microphones by combining the signal from two
+# omnidirectional microphones (cf. Elko 1985).  In hearing aids, the
+# adaptive differential microphone algorithm can be applied to combine
+# the signal of two distinct omnidirectional microphones inside a
+# single hearing aid device, a front microphone and a rear microphone.
+# The adaptive algorithm is then used to steer a spatial zero so that
+# the sound source with the highest intensity in the rear hemisphere
+# of the hearing aid wearer's head is attenuated.
+#
+# The adm plugin needs to know which audio channels should be combined
+# to form each computed adaptive differential microphone, because
+# there is no default ordering of 4 channels.  With the following
+# assignments, we specify that the ordering (i.e. which microphone is
+# connected to which sound card channel) is in this case:
+# - channel index 0 = front microphone on the left hearing aid device
+# - channel index 1 = front microphone on the right hearing aid device
+# - channel index 2 = rear microphone on the left hearing aid device
+# - channel index 3 = rear microphone on the right hearing aid device
+# Both left channels will be combined by the ADM to form an adaptive
+# differential microphone. Independently, the same will be done for
+# both right channels.
+#
+# Channel indices for front microphones
+# vector<int>:[0,[
+mha.mhachain.adm.front_channels = [0 1]
+# Channel indices for rear microphones
+# vector<int>:[0,[
+mha.mhachain.adm.rear_channels = [2 3]
+
+# The adaptive differential microphone algorithm needs to know the
+# physical distance between front and rear microphone.  The physical
+# distance is given in meters for each microphone pair in the
+# following vector variable.  The unit here is meters even though
+# typical distances are more in the range of millimeters, because in
+# the MHA configuration we prefer that physical quantities be
+# specified in SI units whenever possible.
+#
+# distance between front and rear microphones
+# front-mid 0.0076m + mid-rear 0.0073m Kayser et al. 2009
+mha.mhachain.adm.distances = [0.0149 0.0149]
+
+# Here we set the plugin to be non-adaptive.
+mha.mhachain.adm.beta = 0.5
+
+# The adaptation process of this adaptive differential microphone
+# algorithm adapts on low-pass filtered signals.  This variable
+# determines the filter order used for the low-pass filter.  Higher
+# filter orders result in better spatial adaptation.
+#
+# Filter order of FIR lowpass filter
+# int:[46,128]
+mha.mhachain.adm.lp_order = 128
+
+# The output signal of the adaptive differential microphone shows a
+# comb filter effect with regular notches in the spectrum.  For
+# typical microphone distances in the order of 1cm, only the lowest
+# notch is relevant for speech spectrum.  To compensate the lowest
+# notch, a filter is applied that amplifies low frequencies.  This
+# variable specifies the filter order of this filter. Higher filter
+# orders result in better output signal quality.
+#
+# Filter order of FIR comb compensation filter
+# int:[46,128]
+mha.mhachain.adm.decomb_order = 128
+
+# Adaptive differential microphones combine the signal from two audio
+# input channels into a single audio output channel.  Even with the
+# adm plugin in the signal path, users may want to switch from active
+# directional filtering to omnidirectional microphone and back,
+# depending on the acoustical environment they find themselves in.  By
+# changing this variable at run time, users can select what the output
+# of the adm plugin should be:
+#
+# - For bypass = 0, the adm will not be bypassed, which means it will
+#   carry out its adaptive directional filtering.
+# - For bypass = 1, adm plugin will output the audio signals from the
+#   front microphones without modification.
+# - For bypass = 2, adm plugin will output the audio signals from the
+#   rear microphones without modification.
+#
+# In all three cases, the number of output channels will be the same,
+# namely, half the number of input channels.
+#
+# if 1, output front microphones directly, if 2, output rear microphones
+# int:[0,2]
+mha.mhachain.adm.bypass = 0
+
+# parser "mha.mhachain.overlapadd":
+#
+# overlapadd is one of the MHA plugins that perform conversion between
+# time domain and spectral domain as a service for algorithms that
+# process a series of short time fourier transform signals.  In this
+# way, not every MHA plugin that processes spectral signal has to
+# perform its own spectral analysis. overlapadd performs both, the
+# forward and the backward transform, and can load another MHA plugin
+# which analyses and modifies the signal while in the spectral domain.
+# The plugin performs the standard process of collecting the input
+# signal, windowing, zero-padding, fast fourier transform, inverse
+# fast fourier transform, additional windowing, and overlap-add time
+# signal output.
+#
+# The hop size, how much the analysis window is advanced from one
+# processing invocation to the next, is not controlled by the
+# overlapadd plugin itself, but is determined by the number of audio
+# samples per channel and processing block.  In this example
+# configuration, the hop size is determined by the "fragsize" setting
+# of the MHA itself.  This setting can be found near the top of this
+# configuration file.
+#
+# All other common overlap-add (OLA) and weighted overlap-add (WOLA)
+# settings can be configured by setting the configuration variables of
+# this overlapadd plugin.
+#
+# Waveform to spectrum overlap add and FFT method.
+# Audio data is collected up to wndlen, than windowed with
+# the given window function, zero padded up to fftlength
+# (symmetric zero padding or asymmetric zero padding possible),
+# and Fast-Fourier-transformed.
+# All parameter changes take effect after the next prepare call.
+
+# The overlapadd plugin again loads one plugin that processes the
+# signal in the spectral domain.  The plugin loaded here will receive
+# the STFT signal and produce a possibly modified version of the STFT
+# signal, which is then subjected to inverse FFT transform by the
+# overlapadd plugin and finally the overlap-add operation is performed
+# to produce the time-domain output signal.
+#
+# In this configuration, we use again an mhachain plugin to process
+# the signal.  Note that mhachain was used before in this
+# configuration file to form a signal processing chain of two
+# algorithms that pass on time-domain signal.  Here, we want it to
+# form a chain of algorithms that pass on spectral STFT signal to each
+# next plugin.  Some plugins in the MHA, like mhachain, can adapt to
+# the domain of the input signal that they receive.  Should you happen
+# to configure a plugin to be loaded at a place where it cannot
+# process the input signal that it receives, that plugin will raise an
+# error, and processing cannot start.
+#
+# Plugin name
+# string
+mha.mhachain.overlapadd.plugin_name = mhachain
+
+# The FFT length, in samples, to use for spectral analysis.  The FFT
+# length must be at least as large as the analysis window length,
+# which is configured later.  Note that for efficient FFT computation
+# the FFT length should be a product of powers of small primes.  The
+# openMHA uses MIT's FFTW library version 2 internally, which supports
+# efficient analysis also for small primes other than 2, therefore,
+# you are not restricted to powers of 2 in the choice of FFT length.
+#
+# FFT length int:[1,]
+mha.mhachain.overlapadd.fftlen = 256
+
+# parser "mha.mhachain.overlapadd.wnd":
+#
+# The window properties are specified in the sub-hierarchy wnd.
+#
+# Window type.
+#
+# The data type of the variable wnd.type is keyword_list.  The
+# variable offers a choice of predefined symbolic names, one of which
+# can be selected.  Most window types offered here should be
+# self-explanatory for users with a signal processing background.
+# Only the "user" window is a special case where the the window shape
+# can be specified sample-by-sample by the user.  For the example
+# configuration here we use the hanning window.
+#
+# keyword_list:[rect hanning hamming blackman bartlett user]
+mha.mhachain.overlapadd.wnd.type = hanning
+
+# If wnd.type above is user, then the window shape would have to be
+# specified here sample-by-sample in the vector wnd.user.  The value
+# of each sample would typically between 0 and 1.
+#
+# User provided window (used if window type==user).
+# vector<float>
+mha.mhachain.overlapadd.wnd.user = []
+
+# The window length, in samples.  The window length should be at least
+# as long as the hop size (determined by the fragsize setting outside
+# of the overlapadd plugin), and must be at most as long as the FFT
+# length.  A typical value would be for the window size to be either
+# exactly two (like here) or four times the hop size, to achieve 50%
+# or 75% overlap, respectively.  If the signal is not only analyzed in
+# the spectral domain, but also modified with frequency-dependent
+# gains, it is recommended to choose the window length shorter than
+# the FFT length to have some zero padding to pick up the time-domain
+# convolution from the corresponding frequency-domain modifications.
+#
+# window length/samples
+# int:[1,]
+mha.mhachain.overlapadd.wnd.len = 128
+
+# If the fft length is greater than the window length, then this
+# variable determines the relative placement of the window inside the
+# fft analysis buffer.
+#
+# window position
+# (0 = beginning, 0.5 = symmetric zero padding, 1 = end)
+# float:[0,1]
+mha.mhachain.overlapadd.wnd.pos = 0.5
+
+# In common overlap-add processing, the window would be applied as an
+# analysis window before transforming to the frequency domain.
+# However, there are other use cases (namely WOLA, weighted
+# overlap-add), where one commonly restricts the resynthesized time
+# signal that is produced by the inverse FFT with a synthesis window
+# to the original extent of the analysis window to restrict filter
+# "ringing".  You would usually split one of the common analysis
+# window used in overlap-add processing, by applying an exponent of
+# 0.5 to all the window samples and apply the analysis window before
+# the FFT and apply the synthesis window after the inverse FFT.  Note
+# that this is not commonly done in hearing aid signal processing, but
+# the MHA supports it should you need it.
+#
+# An exponent of 1 here means that the window is completely applied
+# before the FFT is performed.  Values lesser than one mean that all
+# window weights are exponentiated by this exponent (named wnd.exp
+# here) before the weights are applied to the input signal. Then, the
+# exponent (1-wnd.exp) is applied to the window weights before it is
+# applied as a synthesis window to the time signal that is produced by
+# the inverse FFT.
+#
+# If you perform standard overlap-add processing (OLA), and not
+# weighted overlap-add (WOLA), then leave this at its default value,
+# 1.
+#
+# window exponent to be applied to all elements of window function
+# float
+mha.mhachain.overlapadd.wnd.exp = 1
+
+# parser "mha.mhachain.overlapadd.zerownd":
+#
+# The settings in the sub-parser "zerownd" define a weighting
+# operation performed on the regions of the FFT buffer that are
+# pre-filled with the zero-padding.  If the signal is modified in the
+# spectral domain, then these regions of the FFT buffer usually
+# contain non-zero signal samples after the inverse FFT has been
+# performed.  This is caused by the convolution with the impulse
+# response that corresponds to the spectral changes that the spectral
+# algorithms have performed.
+#
+# If the effective impulse response exceeds the length of the
+# zero-padding regions in the FFT buffer, then this will cause
+# temporal aliasing effects that may be perceptible to the hearing
+# impaired user.  To improve the perceptual consequences, one might
+# apply a post-window to attenuate the signal energy in the
+# zero-padding area.  You can choose the shape of this post-window
+# with the configuration setting zerowind.type. This window will be
+# split in two and each part applied to the respective zero-padding
+# regions at the beginning and at the end of the FFT buffer.  Note
+# that a rectangular window will have a weight of one everywhere and
+# therefore will not affect these regions and will not improve the
+# temporal aliasing artifacts.  The default setting is a rectangular
+# window with no effect.
+#
+# zero padding post window type
+# Window type.
+# keyword_list:[rect hanning hamming blackman bartlett user]
+mha.mhachain.overlapadd.zerownd.type = rect
+
+# If the window type selected in zerownd.type is "user", then the weigths
+# of the desired window have to be specified here.
+#
+# User provided window (used if window type==user).
+# vector<float>
+mha.mhachain.overlapadd.zerownd.user = []
+
+# parser "mha.mhachain.overlapadd.smoothgains_bridge.mhachain":
+#
+# This mhachain plugin instance forms a signal processing chain in the
+# spectral domain: Its input signal is the STFT signal produced by
+# the overlapadd plugin, and its output signal is processed by the
+# same overlapadd instance to resynthesize it to a time domain signal.
+#
+# MHA Chain
+#
+# The plugins used to form a signal processing chain are loaded by the
+# mhachain plugin when the assignment to the configuration parameter
+# algos is executed.  This is a vector of strings, where the vector
+# value is delimited by square brackets, and the vector's elements are
+# separated by spaces.
+
+# Add smoothgains_bridge
+mha.mhachain.overlapadd.plugin_name = smoothgains_bridge
+mha.mhachain.overlapadd.smoothgains_bridge.plugin_name = mhachain
+
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.algos = [fftfilterbank dc combinechannels]
+
+# Use default mode
+mha.mhachain.overlapadd.smoothgains_bridge.mode = linear_phase
+
+# parser "mha.mhachain.overlapadd.smoothgains_bridge.mhachain.fftfilterbank":
+#
+# FFT based filterbank with overlapping filters
+#
+# For the dynamic compression which adapts the signal levels in the
+# different frequency bands for better audibility of the hearing
+# impaired opemMHA users, the signal has to be split into frequency
+# band. We do this here with the help of the MHA plugin fftfilterbank,
+# which separates our (here) 2 broadband audio channels and produces
+# (here) 2*9 narrowband audio channel, with 9 frequency bands
+# produced for each input broadband audio channel.
+#
+# FFT filterbank is not limited to 2 input channels, the above
+# paragraph just uses the current settings used here as an example.
+
+# fftfilterbank groups sets of FFT bins into frequency bands.
+#
+# Further below we will specify the center frequencies of these frequency
+# bands.  Here, we specify in what units we want to give the
+# frequencies below.  The default unit to specify frequencies in the
+# MHA is Hertz [Hz], but at some places, users have the choice of
+# selecting different frequency units.  Here, we choose that we want
+# to specify the frequencies in Hertz.
+#
+# Frequency unit
+# keyword_list:[Hz kHz Oct Oct/3 Bark Erb ERB_Glasberg1990]
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.fftfilterbank.unit = Hz
+
+# The configuration setting f of the fftfilterbank plugin expects a
+# vector with the center frequencies of the individual frequency
+# bands. The unit for the frequencies is Hertz.
+#
+# Frequencies
+# vector<float>
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.fftfilterbank.f = [177 297 500 841 1414 2378 4000 6727 11314]
+
+# The frequency bands that the fftfilterbank plugin produces can have
+# different shapes along the frequency axis.  The shapes and also the
+# cross-over frequencies between adjacent frequency bands can be
+# computed on different frequency scales, e.g. linear or logarithmic
+# scales.  Here we choose the logarithmic frequency scale.
+#
+# frequency scale of filter bank
+# keyword_list:[linear bark log erb ERB_Glasberg1990]
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.fftfilterbank.fscale = log
+
+# Frequency bands in the fftfilterbank can have different shapes
+# along the frequency axis.  Here we select a rectangular shape, which
+# also has the effect that frequency bands will not overlap,
+# i.e. every frequency bin is part of only exactly one frequency band.
+#
+# filter overlap type
+# keyword_list:[rect linear hanning exp gauss]
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.fftfilterbank.ovltype = rect
+
+# Above, when setting the configuration variable f, we used center
+# frequencies.  We could also have specified the edge frequencies if
+# we did the respective setting here.  When we specify center
+# frequencies, then the cross-over frequencies between adjacent
+# frequency bands are computed as the mean between the adjacent center
+# frequencies on the frequency scale specified by the variable fscale.
+# Also, in center frequency mode, the lowest frequency band always
+# extends to frequency 0Hz, while the highest frequency band always
+# extends to the Nyquist frequency.
+#
+# keyword_list:[center edge]
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.fftfilterbank.ftype = center
+
+# parser "mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc":
+#
+# dynamic compression
+#
+# Our standard dynamic compression algorithm measures the input sound
+# level in each frequency band and looks up the gain to be applied in
+# a gain table, and applies the gain to the signal in each respective
+# band.
+
+# Dynamic compression works by amplifying the signal with gains that
+# depend on the level of the input signal itself.  Multi-band dynamic
+# compression performs input signal level measurement in each
+# frequency band to deduce the gain applicable to the respective
+# frequency band.  Applicable gains would usually be higher for low
+# input levels, and lower for high input levels, to compress the
+# dynamimc range of the input signal into a smaller dynamic range at
+# the output of the compressor.
+#
+# Because the applicable gain depends on the frequency band as well as
+# on the input level, we use a 2-dimensional matrix to specify
+# applicable gains. The gaintable matrix has one row of gains for each
+# frequency band from the left audio channel, followed by one row of
+# gains for each frequency band from the right audio channel.  The
+# gains given are in dB.  Rows are enclosed by square brackets and
+# separated by semicola.  The entire matrix is enclosed in an
+# additional pair of square brackets.
+#
+# The first element in each row (i.e., taken together, the first
+# column) specifies the gain in dB to be applied if the input level in
+# the respective frequency band is equal to the value of the gtmin
+# element given for that respective band (see gtmin description
+# further below).
+#
+# The following elements in each row specify the gains in dB to be
+# applied for other input values, where the input level difference
+# between the individual elements in each row of the matrix is
+# determined by the value of gtstep for the respective band (see
+# gtstep description further below).
+#
+# This way, each row specifies the gains to be applied to the
+# respective frequency bands for certain discrete input levels.  The
+# actual input levels of the signal will regularly be different from
+# any of these discrete input levels.  Therefore, the gain values in
+# the rows are interpolated as well as extrapolated.
+#
+# The gain values that we use here in this example corrects the sound
+# perception for a hearing impaired listener with a very uncommon
+# mid-frequenc hearing loss.  Users of the openMHA may change the
+# values given here using their own rationale to help hearing-impaired
+# users.
+#
+# Note that we do not apply gains to the highest frequency bands here
+# on both sides (9th and 18th row).  Having the highest frequency band
+# here at all is just a trick to limit the extent of the
+# second-highest frequency band, so that it does not extend up to the
+# Nyquist frequency.
+#
+# gaintable data in dB gains
+# matrix<float>
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.gtdata = {{ gtdata }}
+
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.log_interp = yes
+
+# Vector of input sound pressure levels for which the gains in the
+# leftmost column of the matrix "gtdata" above should be applied.
+# Each input sound level given here belongs to a different frequency
+# band. If only one value is given here, then this only value will
+# apply to all matrix rows / frequency bands.
+#
+# input level for first gain entry in dB SPL
+# vector<float>
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.gtmin = [-10]
+
+# Vector of step sizes in dB between discrete sound pressure levels
+# that determine the supporting points in the mapping from input sound
+# levels to applicable gains in matrix "gtdata" above.  Each entry in
+# this vector specifies the step size for a different row of gtdata.
+# If only one value is given here, then this only value will apply to
+# all rows / frequency bands.
+#
+# Each input sound level given here belongs to a different frequency
+# band. If only one value is given here, then this only value will
+# apply to all frequency bands.
+#
+# level step size in dB
+# vector<float>
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.gtstep = [1]
+
+# The dynamic compressor employs a common attack/decay low-pass filter
+# to determine the input level.  This vector describes the attack time
+# constants.  Each element corresponds to one frequency band. If only
+# one value is given here, then this only value will apply to all
+# frequency bands.
+#
+# attack time constant in s
+# vector<float>
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.tau_attack = [0.02]
+
+# The dynamic compressor employs a common attack/decay low-pass filter
+# to determine the input level.  This vector describes the decay or
+# release time constants.  Each element corresponds to one frequency
+# band. If only one value is given here, then this only value will
+# apply to all frequency bands.
+#
+# decay time constant in s
+# vector<float>
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.tau_decay = [0.1]
+
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.tau_rmslev = [0.1]
+
+# Name of fftfilterbank plugin.  Used to extract frequency information.
+# string
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.fb = fftfilterbank
+
+# The fftfilterbank that splits the broadband channels into frequency
+# bands for this compressor outputs the frequency bands as separate
+# audio channels. Without additional knowledge, the dynamic compressor
+# cannot determine whether an 18 channel input signal that it receives
+# has been generated from 2 broadband channels that have been split
+# into 9 bands each (like we do in this example), or maybe from 3
+# broadband channels that have been split into 6 bands each.  The
+# following setting tells the compressor the name of an algorithm
+# communication variable where the fftfilterbank has stored
+# information about the original number of broadband channels.
+#
+# name of audio channel number variable (empty: broadband)
+# string
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.chname = fftfilterbank_nchannels
+
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.bypass = no
+
+# parser "mha.mhachain.overlapadd.smoothgains_bridge.mhachain.combinechannels":
+#
+# Channel combiner
+#
+# The fftfilterbank has split the signal into frequency bands.  To be
+# able to combine the frequency bands back into broadband channels,
+# the combinechannels plugin needs to know how many broadband channels
+# have been split into bands.  The fftfilterbank that splits the
+# broadband channels into frequency bands for this compressor outputs
+# the frequency bands as separate audio channels. Without additional
+# knowledge, the combinechannels plugin cannot determine whether an 18
+# channel input signal that it receives has been generated from 2
+# broadband channels that have been split into 9 bands each (as it is
+# the case in this example), or maybe from 3 broadband channels that
+# have been split into 6 bands each.  The following setting tells the
+# combinechannels plugin how many broadband output channels it should
+# regenerate.
+#
+# Number of output channels
+# int:[1,]
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.combinechannels.outchannels = 2
+
+# parser "io":
+#
+# Sound file IO client.
+#
+# MHA supports different audio back-ends: Sound can come from and go
+# to either
+# - sound cards,
+# - the Jack audio server,
+# - sound files, or
+# - the network.
+#
+# Users select the desired audio backend by loading the respective MHA
+# IO library into the MHA process. In this example, we we have loaded
+# the IO library that reads from and writes to sound files, see the
+# assignment to "iolib" above.
+
+# This variable is used to select the input sound file.  The file name
+# of the sound file to use as the input sound signal to the MHA is
+# written to this variable.  The file name can contain either the
+# absolute path to the sound file, or the relative path (relative to
+# the current working directory of the MHA process).
+#
+# Read from input files and write to files of same format.
+# Input sound file name
+# string
+io.in = {{ io_in }}
+
+# This variable is used to select the output sound file.  The file
+# name of the sound file to create and hold the output sound signal to
+# the MHA is written to this variable.  The file name can contain
+# either the absolute path to the sound file, or the relative path
+# (relative to the current working directory of the MHA process).
+#
+# Note that to ensure that the sound file was properly closed, the MHA
+# should be told to change to the release start (cmd=release), or it
+# should be told to exit (cmd=quit).
+#
+# Output sound file name
+# string
+io.out = {{ io_out }}
+
+# Local Variables:
+# indent-tabs-mode: nil
+# coding: utf-8-unixs
+# End:
diff --git a/tests/regression/cfg_files/prerelease_combination4_smooth_template.cfg b/tests/regression/cfg_files/prerelease_combination4_smooth_template.cfg
new file mode 100644
index 000000000..0a5b94ace
--- /dev/null
+++ b/tests/regression/cfg_files/prerelease_combination4_smooth_template.cfg
@@ -0,0 +1,989 @@
+# This file is part of the HörTech Open Master Hearing Aid (openMHA)
+# Copyright © 2013 2017 2018 HörTech gGmbH
+#
+# openMHA is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, version 3 of the License.
+#
+# openMHA 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 Affero General Public License, version 3 for more details.
+#
+# You should have received a copy of the GNU Affero General Public License,
+# version 3 along with openMHA.  If not, see <http://www.gnu.org/licenses/>.
+
+
+# openMHA is a software platform to process audio signals with hearing
+# aid signal processing algorithms.  Signal processing algorithms are
+# implemented as plug-ins that are loaded into the MHA process at
+# runtime.
+#
+# The openMHA framework itself and also the MHA plugins support
+# configuration of their settings through a text-based configuration
+# language.  This file is an example configuration that can be used to
+# configure an MHA to perform signal processing with a non-adaptive
+# differential microphone, followed by dynamic compression to compensate
+# for sensorineural hearing loss.
+
+# Besides configuring the MHA, this file also has comments explaining
+# every setting. We have left out some of the more advanced settings
+# which have been left to their default value, because explaining all
+# the possible options that are not actually used here might only
+# distract from understanding this configuration.
+
+# We have to tell the MHA how many audio channels to process.  Think
+# of the number of audio channels as the number of microphones that
+# your hearing support system uses to pick up sound.  If you wore a
+# hearing aid device on each ear, and each hearing aid device had a
+# signal microphone to pick up sound, then your number of audio input
+# channels would be two.  If each of the hearing aid devices had not
+# only one, but two microphones at slightly different positions, then
+# you would configure the number of input audio channels to be
+# four. This is what we do here with the "nchannels_in" setting.
+#
+# This "nchannels_in" variable accepts values of type integer in the
+# range 1 to INT_MAX.  This is sometimes denoted like this in MHA:
+#
+# int:[1,[
+nchannels_in = 4
+
+# Note that the corresponding "nchannels_out" variable is not
+# writable, but is read-only.  We call read-only variable a "monitor
+# variable", or shorter, a "monitor".  The number of output channels
+# is auto-deduced by the MHA and can be read from the "nchannels_out"
+# monitor.
+
+# When we perform real-time signal processing, we process the signal
+# in small chunks of data: Take a chunk from the sound card capture
+# channels, process it, and output the result to the sound card output
+# channels.
+#
+# MHA always operates like this, processing data in small chunks, even
+# when the processed sound data comes from sound files.  The setting
+# "fragsize" tells the MHA how many audio sample per channel are to be
+# processed in each chunk.
+#
+# int:[1,[
+fragsize = 64
+
+# MHA processes discrete-time digital audio signals with a fixed
+# sampling rate.  The sampling rate tells MHA how many samples per
+# second have been digitized in each audio channel. Note that we use a
+# floating point data type here, so you can use a non-integer sampling
+# rate if you have to and your sound card supports it. The sampling
+# rate 44100 that we use here is the standard sampling rate used on
+# audio CDs and is supported by most sound cards.
+#
+# sampling rate in Hz
+# float:]0,[
+srate = 44100
+
+# The MHA framework can load a single MHA plugin to process the data.
+# We tell the MHA which plugin to load with the "mhalib" variable
+# (historical reasons).  Note that the data type of the "mhalib"
+# variable is string.
+#
+# When the assignment "mhalib = transducers" below is executed by the
+# MHA, then the MHA framework will look for a dynamic library file in
+# the file system with the name "transducers.so" (on linux, on windows
+# the extension would be .dll, on mac it would be .dylib).  The path
+# where MHA searches for this file is either the standard path for
+# shared libraries on the system, or, if the environment variable
+# "MHA_LIBRARY_PATH" is set, then MHA searches the directories listed
+# in this environment variable.
+#
+# Usually MHA configurations consist of more than just one plugin.
+# MHA provides structuring plugins that can themselves load other
+# plugins for this purpose.
+#
+# The transducers plugin that we load here can be used for calibration of
+# input and output sounds, see below.
+#
+# MHA library name
+# string
+mhalib = transducers
+
+# MHA supports different audio back-ends: Sound can come from and go
+# to either
+# - sound cards,
+# - the Jack audio server,
+# - sound files, or
+# - the network.
+#
+# Users select the desired audio backend by loading the respective MHA
+# IO library into the MHA process.  Similar to processing plugins, IO
+# libraries are loaded as dynamic libraries into the process when the
+# assignment to the "iolib" variable below is executed, and the same
+# search path and file name extensions are used, as when processing
+# plugins are loaded.  But because MHA IO libraries are the ultimate
+# sources and sinks of sound in the MHA, they export a different
+# interface to the MHA. Here we load the IO library that reads from
+# and writes to sound files.
+#
+# IO plugin library name
+# string
+iolib = MHAIOFile
+
+# In the future you may have several MHA processes running on the same
+# computer, performing different signal processing tasks.  You can use
+# this MHA variable to describe what the purpose of this instance of
+# the MHA is, so that you can tell to which MHA instance you are
+# currently connected and not get confused.
+#
+# Name of this mha instance
+# string
+instance = allplugins
+
+# parser "mha":
+#
+# Remember that above, we loaded the transducers plugin into the MHA
+# with the assignment "mhalib = transducers".  When the MHA executed
+# this assignment, it loaded the transducers plugin into the MHA
+# process.  For historical reasons, MHA makes the configuration
+# variables of this plugin available to the sub-"parser" "mha".  We
+# call the hierarchy layers in the MHA configuration tree "parsers"
+# because, besides providing hierarchy, they also perform the text
+# parsing of the configuration commands.
+#
+# So in the following, we will see how some variables of the transducers
+# plugin are getting set.
+
+# The transducers plugin is responsible for the correct calibration of
+# the sound in the MHA.  Remember that the MHA is a platform for
+# hearing aid signal processing algorithms, and that hearing aids
+# usually enhance the sound for hearing impaired listeners.  Hearing
+# impairment generally means that people suffering from it have
+# increased hearing thresholds, i.e. soft sounds that are audible for
+# normal hearing listeners may be imperceptible for hearing impaired
+# listeners.
+#
+# To provide accurate signal enhancement for hearing impaired people,
+# algorithms have to be able to determine the absolute physical sound
+# pressure level corresponding to a digital signal given to any MHA
+# plugin for processing.  Inside the MHA, we achieve this with a
+# convention.
+#
+# The convention that we use in the MHA is that the single-precision
+# floating point time-domain sound signal samples, that we process
+# inside the MHA plugins, have the physical unit Pascal (1 Pa = 1 N /
+# m^2).  With this convention in place, all plugins can determine the
+# absolute physical sound pressure level from the sound samples that
+# they process.
+#
+# However, when one just connects a microphone to a sound card and
+# uses that sound card to feed sound samples to the MHA, these sound
+# samples do not automatically follow the MHA level convention. The
+# same is true when using sound files instead of sound cards for input
+# and output.  Different microphones have different sensitivities.
+# Sound cards have adjustable amplification settings.  Sound files may
+# have been "normalized" before they have been saved to disk.  To be
+# able to implement our level convention, we need to be able to adjust
+# for arbitrary physical level to digital level mappings in the MHA.
+# We do this with the transducers plugin, which is the only plugin
+# that may not rely on this convention, because it is the one plugin
+# that has to make sure that all other plugins may rely on this
+# convention.  For this reason, it is usually loaded as the first plugin
+# into the MHA using the "mhalib = transducers" assignment.
+#
+# transducers
+
+# Remember that the configuration settings of the first plugin loaded
+# into the MHA process, which here is the "transducers" plugin, can be
+# accessed under the sub-parser named "mha". "transducers" has a
+# configuration variable "plugin_name".  When a string is written to
+# this configuration variable, then the transducers plugin will itself
+# load another MHA plugin into the MHA process, which receives the
+# calibrated input signal from transducers, and which sends its still
+# calibrated output signal to the transducers plugin to adjust for the
+# physical outputs.
+#
+# Here, transducers loads an mhachain, which is an MHA plugin that
+# itself can load several other signal processing plugins and arrange
+# them in a signal processing chain.
+#
+# Plugin name
+# string
+mha.plugin_name = mhachain
+
+# After the above assignment is executed, the configuration settings
+# of the mhachain plugins are accessible through the hierarchy
+# "mha.mhachain", i.e. here, the individual plugin name gets reused as
+# the hierarchy name.
+
+# parser "mha.calib_in":
+#
+# calibration module
+#
+# The transducers plugin seperates input calibration settings and
+# output calibration settings in two different sub-"parsers", named
+# "calib_in" and "calib_out".
+#
+# To adjust the input signals to influences like microphone
+# sensitivities, analogue amplifiers, and sound card A/D converter
+# sensitivities, we write channel-specific "peak levels" into the
+# transducers plugin's "calib_in.peaklevel" configuration variable,
+# which is a vector of floats.  Each element specifies the "peak
+# level" for the corresponding audio channel.  With peak level, we
+# refer to the physical sound pressure level which would cause the
+# sound card to transmit to the MHA a digitized signal with a digital
+# level of 0 dB re full scale (dB FS).
+#
+# Of course, this is only a theoretical consideration:  A digital
+# signal with 0 dB FS would be some rectangular waveform with maximum
+# possible amplitude, and if you ever saw such a digital signal for real,
+# the obvious suspicion would be that you were seeing was caused by
+# massive clipping.
+#
+# Instead, we suggest that you produce a known sound level of static
+# noise at the place of your microphones with the help of calibrated
+# measurement equipment.  The calibrated measurement equipment should
+# tell you the sound level in dB SPL Freefield with linear or Zero
+# (Z-) frequency weighting. No A-, B-, C- or D- Weighting should be
+# applied.
+#
+# This known sound level should be loud enough clearly to dominate
+# other ambient noises (use a sound-proof booth for low ambient
+# noises!), but still soft enough that no clipping occurs when the
+# sound is digitized. Of course, all your equipment should behave as
+# linear as possible.
+#
+# Then, your peak level for each channel is the physical level that
+# you measured minus the corresponding digital level in dB FS of the
+# signal produced by your sound card.  (The digital level in dB FS is
+# always negative, therefore, the peaklevel is always higher than the
+# physical sound level that you have used for calibration.)
+#
+# Yes, calibration is complicated (and we are not even finished, yet,
+# see next variable "fir").  But for hearing aid applications, it is
+# crucial to get it right.
+#
+# The peaklevels given in the following assignment are just example
+# values.  Note that a vector value is written with square brackets
+# surrounding the element values, which are separated by spaces.
+#
+# Reference peak level in dB (0 dB FS corresponds to this SPL level)
+# vector<float>
+# mha.calib_in.peaklevel = [100 100 100 100]
+mha.calib_in.peaklevel = {{ peaklevel_in }}
+
+# Measuring and computing the correct peak level as above is not
+# enough to calibrate a hearing aid system. Microphones (or any other
+# component in your audio recording path) may have a non-flat
+# frequency response, which has to be compensated for with a filter,
+# before MHA plugins can actually rely on the level convention in the
+# MHA. For this purpose, you can specify a matrix of FIR filter
+# coefficients, with one filter per row. Rows are separated by
+# semicola.
+#
+# If your microphones' frequency responses, you can either leave out
+# the fir coefficients, or, as done here, provide FIR coefficients
+# that do not actually alter the signal. These non-modifying FIR
+# coefficients are included here to demonstrate the matrix data
+# format.
+#
+# FIR filter coefficients, one row for each channel
+# matrix<float>
+mha.calib_in.fir = [[1 0 0];[1 0 0];[1 0 0];[1 0 0]]
+
+# parser "mha.calib_out":
+#
+# Output calibration follows. The peaklevel and fir entries have the
+# same meaning as for input calibration: physical level in dB SPL Free
+# Field corresponding to a digital signal with 0 dB re full scale
+# digital level, and filter to correct the frequency responses of the
+# output amplifiers and transducers. When thinking of hearing aid
+# applications where the output sound is produced not in the free
+# field but in the ear canal of the hearing impaired listener with
+# hearing aid receivers, output calibration becomes more involved than
+# input calibration because effects like lost open ear gain may have
+# to be taken into account and suitable couplers simulating the
+# impedance of actual ears have to be used for physical measurements.
+#
+# Reference peak level in dB (0 dB FS corresponds to this SPL level)
+# vector<float>
+mha.calib_out.peaklevel = {{ peaklevel_out }}
+# FIR filter coefficients, one row for each channel
+# matrix<float>
+mha.calib_out.fir = [[]]
+
+# parser "mha.calib_out.softclip":
+# 'Hardware' softclipper
+#
+# When hearing aid algorithms apply gains to amplify sounds for the
+# hearing impaired, the desired output signal may be louder than is
+# physically possible to produce with the given equipment. If this
+# situation is left unhandled, then the physical signal will be
+# clipped by the sound card, producing very unpleasant sound
+# artifacts.  It is always better to adapt and configure the hearing
+# aid algorithms in such a way that output signal is never in danger
+# of clipping.  Given the realities of such a flexible platform as the
+# master hearing aid, where the hearing support algorithm can be
+# connected to many different sound output transducers, we realize
+# that this is not always possible. In order to lighten the burden of
+# unpleasant clipping sound artifacts on the hearing impaired user
+# testing a configuration, we have introduced a softclipper that will
+# attenuate the overall signal with slower time constants when it is
+# in danger of clipping. Note that this solution is still sub-optimal,
+# because the prescribed output levels are not achieved, and because
+# the softclipper may still produce unpleasant artifacts a little less
+# harsh, but the solution is still better than hard clipping.
+#
+# The attack time constant, given in seconds, determines how quickly
+# the softclipper can react to rising sound levels that are in danger
+# of reaching hard clipping. Note that only a time constant of 0 can
+# guarantee that no hard clipping occurs in the operating range of the
+# softclipper.
+#
+# Note that the transducers plugin expects the values for these time
+# constants to be specified in units of seconds, even though typical
+# values for these settings are in the milliseconds range.  In MHA
+# configuration, we prefer that physical quantities be specified in SI
+# units whenever possible.
+#
+# attack filter time constant / s
+# float:[0,]
+mha.calib_out.softclip.tau_attack = 0 #0.002
+
+# The decay time constant, in seconds, determines how quickly the
+# softclipper can follow falling sound levels to leave its operating
+# range when engaged.
+#
+# decay filter time constant / s
+# float:[0,]
+mha.calib_out.softclip.tau_decay = 0.05
+
+# Lower end of the operating range of the softclipper. This is some
+# value between 0 and one and denotes the amplitude of sound samples
+# with respect to full scale of the sound card at which the
+# softclipper engages and starts attenuating the signal.
+#
+# start point on linear scale (hard clipping at 1.0)
+# float:[0,]
+mha.calib_out.softclip.threshold = 0.056 #95 dB where 0 dB FS = 120 dB
+
+# Hard clip at this limit
+mha.calib_out.softclip.hardlimit = 0.1 # hardclip at 100 dB
+
+# The compression rate of the softclipper. This value of 0.5 means,
+# for every full dB that the mha output signal would be above the soft
+# clipper threshold if no clipping would occur, output only this many
+# dBs above that threshold.
+#
+# compression factor
+# float:[0,1]
+mha.calib_out.softclip.slope = 0.2
+
+# The softclipper measures the ratio of the number of samples that
+# were attenuated by it vs the number of unaffected samples, with a
+# time averaging performed by low pass filtering ones and zeros with
+# this time constant.
+#
+# clipping meter time constant / s
+# float:[0,]
+mha.calib_out.softclip.tau_clip = 1
+
+# When configuring an MHA, you can set a limit on the maximum clipped
+# ratio that you are willing to accept.  MHA will stop signal
+# processing with an error if this ratio is ever exceeded, and would
+# need to be restartet manually.  This is intended to be used in
+# scenarios where the hearing aid processing does not take into
+# account limitations of the sound output hardware, and you want to
+# stop measurements when it becomes clear that you cannot perform some
+# measurements either due to the limitations of the output hardware or
+# due to the severity of the hearing loss of the subject.
+#
+# maximum allowed clipped ratio
+# float:[0,1]
+mha.calib_out.softclip.max_clipped = 1
+
+# All the clipping described above is disabled by default and has to
+# be enabled here if desired.
+#
+# Will the soft/ hard clipping be executed
+# bool
+mha.calib_out.do_clipping = yes
+
+
+# parser "mha.mhachain":
+#
+# MHA Chain
+#
+# Above, we have loaded an "mhachain" plugin into the transducers
+# plugin to process the calibrated signal.  The configuration settings
+# of this mhachain can be accessed below the hierarchy mha.mhachain.
+# An mhachain plugin can load several plugins in the specified order,
+# where each plugin processes the output signal of the previous
+# plugin.  Child plugins are loaded into an mhachain by assigning to
+# its "algos" variable a vector of strings, where each string is the
+# name of one child plugin.  Here, we load two plugins, an adaptive
+# differential microphone (adm), which is set to be non-adaptive,
+# and an overlapadd plugin.
+#
+# list of plugins
+# vector<string>
+mha.mhachain.algos = [adm overlapadd]
+
+# parser "mha.mhachain.adm":
+#
+# Adaptive differential microphone
+#
+# The adm plugin implements one or more independent adaptive
+# differential microphones by combining the signal from two
+# omnidirectional microphones (cf. Elko 1985).  In hearing aids, the
+# adaptive differential microphone algorithm can be applied to combine
+# the signal of two distinct omnidirectional microphones inside a
+# single hearing aid device, a front microphone and a rear microphone.
+# The adaptive algorithm is then used to steer a spatial zero so that
+# the sound source with the highest intensity in the rear hemisphere
+# of the hearing aid wearer's head is attenuated.
+#
+# The adm plugin needs to know which audio channels should be combined
+# to form each computed adaptive differential microphone, because
+# there is no default ordering of 4 channels.  With the following
+# assignments, we specify that the ordering (i.e. which microphone is
+# connected to which sound card channel) is in this case:
+# - channel index 0 = front microphone on the left hearing aid device
+# - channel index 1 = front microphone on the right hearing aid device
+# - channel index 2 = rear microphone on the left hearing aid device
+# - channel index 3 = rear microphone on the right hearing aid device
+# Both left channels will be combined by the ADM to form an adaptive
+# differential microphone. Independently, the same will be done for
+# both right channels.
+#
+# Channel indices for front microphones
+# vector<int>:[0,[
+mha.mhachain.adm.front_channels = [0 1]
+# Channel indices for rear microphones
+# vector<int>:[0,[
+mha.mhachain.adm.rear_channels = [2 3]
+
+# The adaptive differential microphone algorithm needs to know the
+# physical distance between front and rear microphone.  The physical
+# distance is given in meters for each microphone pair in the
+# following vector variable.  The unit here is meters even though
+# typical distances are more in the range of millimeters, because in
+# the MHA configuration we prefer that physical quantities be
+# specified in SI units whenever possible.
+#
+# distance between front and rear microphones
+# front-mid 0.0076m + mid-rear 0.0073m Kayser et al. 2009
+mha.mhachain.adm.distances = [0.0149 0.0149]
+
+# Here we set the plugin to be non-adaptive.
+mha.mhachain.adm.beta = 0.5
+
+# The adaptation process of this adaptive differential microphone
+# algorithm adapts on low-pass filtered signals.  This variable
+# determines the filter order used for the low-pass filter.  Higher
+# filter orders result in better spatial adaptation.
+#
+# Filter order of FIR lowpass filter
+# int:[46,128]
+mha.mhachain.adm.lp_order = 128
+
+# The output signal of the adaptive differential microphone shows a
+# comb filter effect with regular notches in the spectrum.  For
+# typical microphone distances in the order of 1cm, only the lowest
+# notch is relevant for speech spectrum.  To compensate the lowest
+# notch, a filter is applied that amplifies low frequencies.  This
+# variable specifies the filter order of this filter. Higher filter
+# orders result in better output signal quality.
+#
+# Filter order of FIR comb compensation filter
+# int:[46,128]
+mha.mhachain.adm.decomb_order = 128
+
+# Adaptive differential microphones combine the signal from two audio
+# input channels into a single audio output channel.  Even with the
+# adm plugin in the signal path, users may want to switch from active
+# directional filtering to omnidirectional microphone and back,
+# depending on the acoustical environment they find themselves in.  By
+# changing this variable at run time, users can select what the output
+# of the adm plugin should be:
+#
+# - For bypass = 0, the adm will not be bypassed, which means it will
+#   carry out its adaptive directional filtering.
+# - For bypass = 1, adm plugin will output the audio signals from the
+#   front microphones without modification.
+# - For bypass = 2, adm plugin will output the audio signals from the
+#   rear microphones without modification.
+#
+# In all three cases, the number of output channels will be the same,
+# namely, half the number of input channels.
+#
+# if 1, output front microphones directly, if 2, output rear microphones
+# int:[0,2]
+mha.mhachain.adm.bypass = 0
+
+# parser "mha.mhachain.overlapadd":
+#
+# overlapadd is one of the MHA plugins that perform conversion between
+# time domain and spectral domain as a service for algorithms that
+# process a series of short time fourier transform signals.  In this
+# way, not every MHA plugin that processes spectral signal has to
+# perform its own spectral analysis. overlapadd performs both, the
+# forward and the backward transform, and can load another MHA plugin
+# which analyses and modifies the signal while in the spectral domain.
+# The plugin performs the standard process of collecting the input
+# signal, windowing, zero-padding, fast fourier transform, inverse
+# fast fourier transform, additional windowing, and overlap-add time
+# signal output.
+#
+# The hop size, how much the analysis window is advanced from one
+# processing invocation to the next, is not controlled by the
+# overlapadd plugin itself, but is determined by the number of audio
+# samples per channel and processing block.  In this example
+# configuration, the hop size is determined by the "fragsize" setting
+# of the MHA itself.  This setting can be found near the top of this
+# configuration file.
+#
+# All other common overlap-add (OLA) and weighted overlap-add (WOLA)
+# settings can be configured by setting the configuration variables of
+# this overlapadd plugin.
+#
+# Waveform to spectrum overlap add and FFT method.
+# Audio data is collected up to wndlen, than windowed with
+# the given window function, zero padded up to fftlength
+# (symmetric zero padding or asymmetric zero padding possible),
+# and Fast-Fourier-transformed.
+# All parameter changes take effect after the next prepare call.
+
+# The overlapadd plugin again loads one plugin that processes the
+# signal in the spectral domain.  The plugin loaded here will receive
+# the STFT signal and produce a possibly modified version of the STFT
+# signal, which is then subjected to inverse FFT transform by the
+# overlapadd plugin and finally the overlap-add operation is performed
+# to produce the time-domain output signal.
+#
+# In this configuration, we use again an mhachain plugin to process
+# the signal.  Note that mhachain was used before in this
+# configuration file to form a signal processing chain of two
+# algorithms that pass on time-domain signal.  Here, we want it to
+# form a chain of algorithms that pass on spectral STFT signal to each
+# next plugin.  Some plugins in the MHA, like mhachain, can adapt to
+# the domain of the input signal that they receive.  Should you happen
+# to configure a plugin to be loaded at a place where it cannot
+# process the input signal that it receives, that plugin will raise an
+# error, and processing cannot start.
+#
+# Plugin name
+# string
+mha.mhachain.overlapadd.plugin_name = mhachain
+
+# The FFT length, in samples, to use for spectral analysis.  The FFT
+# length must be at least as large as the analysis window length,
+# which is configured later.  Note that for efficient FFT computation
+# the FFT length should be a product of powers of small primes.  The
+# openMHA uses MIT's FFTW library version 2 internally, which supports
+# efficient analysis also for small primes other than 2, therefore,
+# you are not restricted to powers of 2 in the choice of FFT length.
+#
+# FFT length int:[1,]
+mha.mhachain.overlapadd.fftlen = 256
+
+# parser "mha.mhachain.overlapadd.wnd":
+#
+# The window properties are specified in the sub-hierarchy wnd.
+#
+# Window type.
+#
+# The data type of the variable wnd.type is keyword_list.  The
+# variable offers a choice of predefined symbolic names, one of which
+# can be selected.  Most window types offered here should be
+# self-explanatory for users with a signal processing background.
+# Only the "user" window is a special case where the the window shape
+# can be specified sample-by-sample by the user.  For the example
+# configuration here we use the hanning window.
+#
+# keyword_list:[rect hanning hamming blackman bartlett user]
+mha.mhachain.overlapadd.wnd.type = hanning
+
+# If wnd.type above is user, then the window shape would have to be
+# specified here sample-by-sample in the vector wnd.user.  The value
+# of each sample would typically between 0 and 1.
+#
+# User provided window (used if window type==user).
+# vector<float>
+mha.mhachain.overlapadd.wnd.user = []
+
+# The window length, in samples.  The window length should be at least
+# as long as the hop size (determined by the fragsize setting outside
+# of the overlapadd plugin), and must be at most as long as the FFT
+# length.  A typical value would be for the window size to be either
+# exactly two (like here) or four times the hop size, to achieve 50%
+# or 75% overlap, respectively.  If the signal is not only analyzed in
+# the spectral domain, but also modified with frequency-dependent
+# gains, it is recommended to choose the window length shorter than
+# the FFT length to have some zero padding to pick up the time-domain
+# convolution from the corresponding frequency-domain modifications.
+#
+# window length/samples
+# int:[1,]
+mha.mhachain.overlapadd.wnd.len = 128
+
+# If the fft length is greater than the window length, then this
+# variable determines the relative placement of the window inside the
+# fft analysis buffer.
+#
+# window position
+# (0 = beginning, 0.5 = symmetric zero padding, 1 = end)
+# float:[0,1]
+mha.mhachain.overlapadd.wnd.pos = 0.5
+
+# In common overlap-add processing, the window would be applied as an
+# analysis window before transforming to the frequency domain.
+# However, there are other use cases (namely WOLA, weighted
+# overlap-add), where one commonly restricts the resynthesized time
+# signal that is produced by the inverse FFT with a synthesis window
+# to the original extent of the analysis window to restrict filter
+# "ringing".  You would usually split one of the common analysis
+# window used in overlap-add processing, by applying an exponent of
+# 0.5 to all the window samples and apply the analysis window before
+# the FFT and apply the synthesis window after the inverse FFT.  Note
+# that this is not commonly done in hearing aid signal processing, but
+# the MHA supports it should you need it.
+#
+# An exponent of 1 here means that the window is completely applied
+# before the FFT is performed.  Values lesser than one mean that all
+# window weights are exponentiated by this exponent (named wnd.exp
+# here) before the weights are applied to the input signal. Then, the
+# exponent (1-wnd.exp) is applied to the window weights before it is
+# applied as a synthesis window to the time signal that is produced by
+# the inverse FFT.
+#
+# If you perform standard overlap-add processing (OLA), and not
+# weighted overlap-add (WOLA), then leave this at its default value,
+# 1.
+#
+# window exponent to be applied to all elements of window function
+# float
+mha.mhachain.overlapadd.wnd.exp = 1
+
+# parser "mha.mhachain.overlapadd.zerownd":
+#
+# The settings in the sub-parser "zerownd" define a weighting
+# operation performed on the regions of the FFT buffer that are
+# pre-filled with the zero-padding.  If the signal is modified in the
+# spectral domain, then these regions of the FFT buffer usually
+# contain non-zero signal samples after the inverse FFT has been
+# performed.  This is caused by the convolution with the impulse
+# response that corresponds to the spectral changes that the spectral
+# algorithms have performed.
+#
+# If the effective impulse response exceeds the length of the
+# zero-padding regions in the FFT buffer, then this will cause
+# temporal aliasing effects that may be perceptible to the hearing
+# impaired user.  To improve the perceptual consequences, one might
+# apply a post-window to attenuate the signal energy in the
+# zero-padding area.  You can choose the shape of this post-window
+# with the configuration setting zerowind.type. This window will be
+# split in two and each part applied to the respective zero-padding
+# regions at the beginning and at the end of the FFT buffer.  Note
+# that a rectangular window will have a weight of one everywhere and
+# therefore will not affect these regions and will not improve the
+# temporal aliasing artifacts.  The default setting is a rectangular
+# window with no effect.
+#
+# zero padding post window type
+# Window type.
+# keyword_list:[rect hanning hamming blackman bartlett user]
+mha.mhachain.overlapadd.zerownd.type = rect
+
+# If the window type selected in zerownd.type is "user", then the weigths
+# of the desired window have to be specified here.
+#
+# User provided window (used if window type==user).
+# vector<float>
+mha.mhachain.overlapadd.zerownd.user = []
+
+# parser "mha.mhachain.overlapadd.smoothgains_bridge.mhachain":
+#
+# This mhachain plugin instance forms a signal processing chain in the
+# spectral domain: Its input signal is the STFT signal produced by
+# the overlapadd plugin, and its output signal is processed by the
+# same overlapadd instance to resynthesize it to a time domain signal.
+#
+# MHA Chain
+#
+# The plugins used to form a signal processing chain are loaded by the
+# mhachain plugin when the assignment to the configuration parameter
+# algos is executed.  This is a vector of strings, where the vector
+# value is delimited by square brackets, and the vector's elements are
+# separated by spaces.
+
+# Add smoothgains_bridge
+mha.mhachain.overlapadd.plugin_name = smoothgains_bridge
+mha.mhachain.overlapadd.smoothgains_bridge.plugin_name = mhachain
+
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.algos = [fftfilterbank dc combinechannels]
+
+# Use default mode
+mha.mhachain.overlapadd.smoothgains_bridge.mode = linear_phase
+
+# parser "mha.mhachain.overlapadd.smoothgains_bridge.mhachain.fftfilterbank":
+#
+# FFT based filterbank with overlapping filters
+#
+# For the dynamic compression which adapts the signal levels in the
+# different frequency bands for better audibility of the hearing
+# impaired opemMHA users, the signal has to be split into frequency
+# band. We do this here with the help of the MHA plugin fftfilterbank,
+# which separates our (here) 2 broadband audio channels and produces
+# (here) 2*9 narrowband audio channel, with 9 frequency bands
+# produced for each input broadband audio channel.
+#
+# FFT filterbank is not limited to 2 input channels, the above
+# paragraph just uses the current settings used here as an example.
+
+# fftfilterbank groups sets of FFT bins into frequency bands.
+#
+# Further below we will specify the center frequencies of these frequency
+# bands.  Here, we specify in what units we want to give the
+# frequencies below.  The default unit to specify frequencies in the
+# MHA is Hertz [Hz], but at some places, users have the choice of
+# selecting different frequency units.  Here, we choose that we want
+# to specify the frequencies in Hertz.
+#
+# Frequency unit
+# keyword_list:[Hz kHz Oct Oct/3 Bark Erb ERB_Glasberg1990]
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.fftfilterbank.unit = Hz
+
+# The configuration setting f of the fftfilterbank plugin expects a
+# vector with the center frequencies of the individual frequency
+# bands. The unit for the frequencies is Hertz.
+#
+# Frequencies
+# vector<float>
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.fftfilterbank.f = [177 297 500 841 1414 2378 4000 6727 11314]
+
+# The frequency bands that the fftfilterbank plugin produces can have
+# different shapes along the frequency axis.  The shapes and also the
+# cross-over frequencies between adjacent frequency bands can be
+# computed on different frequency scales, e.g. linear or logarithmic
+# scales.  Here we choose the logarithmic frequency scale.
+#
+# frequency scale of filter bank
+# keyword_list:[linear bark log erb ERB_Glasberg1990]
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.fftfilterbank.fscale = log
+
+# Frequency bands in the fftfilterbank can have different shapes
+# along the frequency axis.  Here we select a rectangular shape, which
+# also has the effect that frequency bands will not overlap,
+# i.e. every frequency bin is part of only exactly one frequency band.
+#
+# filter overlap type
+# keyword_list:[rect linear hanning exp gauss]
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.fftfilterbank.ovltype = rect
+
+# Above, when setting the configuration variable f, we used center
+# frequencies.  We could also have specified the edge frequencies if
+# we did the respective setting here.  When we specify center
+# frequencies, then the cross-over frequencies between adjacent
+# frequency bands are computed as the mean between the adjacent center
+# frequencies on the frequency scale specified by the variable fscale.
+# Also, in center frequency mode, the lowest frequency band always
+# extends to frequency 0Hz, while the highest frequency band always
+# extends to the Nyquist frequency.
+#
+# keyword_list:[center edge]
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.fftfilterbank.ftype = center
+
+# parser "mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc":
+#
+# dynamic compression
+#
+# Our standard dynamic compression algorithm measures the input sound
+# level in each frequency band and looks up the gain to be applied in
+# a gain table, and applies the gain to the signal in each respective
+# band.
+
+# Dynamic compression works by amplifying the signal with gains that
+# depend on the level of the input signal itself.  Multi-band dynamic
+# compression performs input signal level measurement in each
+# frequency band to deduce the gain applicable to the respective
+# frequency band.  Applicable gains would usually be higher for low
+# input levels, and lower for high input levels, to compress the
+# dynamimc range of the input signal into a smaller dynamic range at
+# the output of the compressor.
+#
+# Because the applicable gain depends on the frequency band as well as
+# on the input level, we use a 2-dimensional matrix to specify
+# applicable gains. The gaintable matrix has one row of gains for each
+# frequency band from the left audio channel, followed by one row of
+# gains for each frequency band from the right audio channel.  The
+# gains given are in dB.  Rows are enclosed by square brackets and
+# separated by semicola.  The entire matrix is enclosed in an
+# additional pair of square brackets.
+#
+# The first element in each row (i.e., taken together, the first
+# column) specifies the gain in dB to be applied if the input level in
+# the respective frequency band is equal to the value of the gtmin
+# element given for that respective band (see gtmin description
+# further below).
+#
+# The following elements in each row specify the gains in dB to be
+# applied for other input values, where the input level difference
+# between the individual elements in each row of the matrix is
+# determined by the value of gtstep for the respective band (see
+# gtstep description further below).
+#
+# This way, each row specifies the gains to be applied to the
+# respective frequency bands for certain discrete input levels.  The
+# actual input levels of the signal will regularly be different from
+# any of these discrete input levels.  Therefore, the gain values in
+# the rows are interpolated as well as extrapolated.
+#
+# The gain values that we use here in this example corrects the sound
+# perception for a hearing impaired listener with a very uncommon
+# mid-frequenc hearing loss.  Users of the openMHA may change the
+# values given here using their own rationale to help hearing-impaired
+# users.
+#
+# Note that we do not apply gains to the highest frequency bands here
+# on both sides (9th and 18th row).  Having the highest frequency band
+# here at all is just a trick to limit the extent of the
+# second-highest frequency band, so that it does not extend up to the
+# Nyquist frequency.
+#
+# gaintable data in dB gains
+# matrix<float>
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.gtdata = {{ gtdata }}
+
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.log_interp = yes
+
+# Vector of input sound pressure levels for which the gains in the
+# leftmost column of the matrix "gtdata" above should be applied.
+# Each input sound level given here belongs to a different frequency
+# band. If only one value is given here, then this only value will
+# apply to all matrix rows / frequency bands.
+#
+# input level for first gain entry in dB SPL
+# vector<float>
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.gtmin = [-10]
+
+# Vector of step sizes in dB between discrete sound pressure levels
+# that determine the supporting points in the mapping from input sound
+# levels to applicable gains in matrix "gtdata" above.  Each entry in
+# this vector specifies the step size for a different row of gtdata.
+# If only one value is given here, then this only value will apply to
+# all rows / frequency bands.
+#
+# Each input sound level given here belongs to a different frequency
+# band. If only one value is given here, then this only value will
+# apply to all frequency bands.
+#
+# level step size in dB
+# vector<float>
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.gtstep = [1]
+
+# The dynamic compressor employs a common attack/decay low-pass filter
+# to determine the input level.  This vector describes the attack time
+# constants.  Each element corresponds to one frequency band. If only
+# one value is given here, then this only value will apply to all
+# frequency bands.
+#
+# attack time constant in s
+# vector<float>
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.tau_attack = [0.02]
+
+# The dynamic compressor employs a common attack/decay low-pass filter
+# to determine the input level.  This vector describes the decay or
+# release time constants.  Each element corresponds to one frequency
+# band. If only one value is given here, then this only value will
+# apply to all frequency bands.
+#
+# decay time constant in s
+# vector<float>
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.tau_decay = [0.1]
+
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.tau_rmslev = [0.1]
+
+# Name of fftfilterbank plugin.  Used to extract frequency information.
+# string
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.fb = fftfilterbank
+
+# The fftfilterbank that splits the broadband channels into frequency
+# bands for this compressor outputs the frequency bands as separate
+# audio channels. Without additional knowledge, the dynamic compressor
+# cannot determine whether an 18 channel input signal that it receives
+# has been generated from 2 broadband channels that have been split
+# into 9 bands each (like we do in this example), or maybe from 3
+# broadband channels that have been split into 6 bands each.  The
+# following setting tells the compressor the name of an algorithm
+# communication variable where the fftfilterbank has stored
+# information about the original number of broadband channels.
+#
+# name of audio channel number variable (empty: broadband)
+# string
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.chname = fftfilterbank_nchannels
+
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.bypass = no
+
+# parser "mha.mhachain.overlapadd.smoothgains_bridge.mhachain.combinechannels":
+#
+# Channel combiner
+#
+# The fftfilterbank has split the signal into frequency bands.  To be
+# able to combine the frequency bands back into broadband channels,
+# the combinechannels plugin needs to know how many broadband channels
+# have been split into bands.  The fftfilterbank that splits the
+# broadband channels into frequency bands for this compressor outputs
+# the frequency bands as separate audio channels. Without additional
+# knowledge, the combinechannels plugin cannot determine whether an 18
+# channel input signal that it receives has been generated from 2
+# broadband channels that have been split into 9 bands each (as it is
+# the case in this example), or maybe from 3 broadband channels that
+# have been split into 6 bands each.  The following setting tells the
+# combinechannels plugin how many broadband output channels it should
+# regenerate.
+#
+# Number of output channels
+# int:[1,]
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.combinechannels.outchannels = 2
+
+# parser "io":
+#
+# Sound file IO client.
+#
+# MHA supports different audio back-ends: Sound can come from and go
+# to either
+# - sound cards,
+# - the Jack audio server,
+# - sound files, or
+# - the network.
+#
+# Users select the desired audio backend by loading the respective MHA
+# IO library into the MHA process. In this example, we we have loaded
+# the IO library that reads from and writes to sound files, see the
+# assignment to "iolib" above.
+
+# This variable is used to select the input sound file.  The file name
+# of the sound file to use as the input sound signal to the MHA is
+# written to this variable.  The file name can contain either the
+# absolute path to the sound file, or the relative path (relative to
+# the current working directory of the MHA process).
+#
+# Read from input files and write to files of same format.
+# Input sound file name
+# string
+io.in = {{ io_in }}
+
+# This variable is used to select the output sound file.  The file
+# name of the sound file to create and hold the output sound signal to
+# the MHA is written to this variable.  The file name can contain
+# either the absolute path to the sound file, or the relative path
+# (relative to the current working directory of the MHA process).
+#
+# Note that to ensure that the sound file was properly closed, the MHA
+# should be told to change to the release start (cmd=release), or it
+# should be told to exit (cmd=quit).
+#
+# Output sound file name
+# string
+io.out = {{ io_out }}
+
+# Local Variables:
+# indent-tabs-mode: nil
+# coding: utf-8-unixs
+# End:
diff --git a/tests/regression/test_enhancers.py b/tests/regression/test_enhancers.py
new file mode 100644
index 000000000..dca3f304b
--- /dev/null
+++ b/tests/regression/test_enhancers.py
@@ -0,0 +1,94 @@
+import json
+import tempfile
+
+import numpy as np
+import torch
+
+from clarity.enhancer.dsp import filter
+from clarity.enhancer.gha.audiogram import Audiogram
+from clarity.enhancer.gha.gha_interface import GHAHearingAid as gha
+from clarity.enhancer.gha.gha_utils import format_gaintable, get_gaintable
+
+gha_params = {  # hyperparameters for GHA Hearing Aid, BE CAREFUL if making changes
+    "fs": 44100,
+    "ahr": 20,
+    "audf": None,
+    "cfg_file": "prerelease_combination3_smooth",
+    "noisegatelevels": None,
+    "noisegateslope": 0,
+    "cr_level": 0,
+    "max_output_level": 100,
+    "equiv0dBSPL": 100,
+    "test_nbits": 16,
+}
+
+
+def test_dsp_filter(regtest):
+    amfir = filter.AudiometricFIR(sr=44100, nfir=220)
+    torch.manual_seed(0)
+    signal = torch.rand(10, dtype=torch.float)
+    signal = torch.reshape(signal, (1, 1, -1))
+    signal.to(amfir.device)
+    output = amfir(signal)
+    output = np.round(output.detach().numpy(), 4)
+    regtest.write(f"signal output: \n{output}\n")
+
+
+def test_gha_audiogram(regtest):
+    cfs = np.array([250, 500, 1000, 2000, 4000, 8000])
+    for i in [1, 10, 30, 40]:
+        np.random.seed(0)
+        levels_l = np.round(np.log10(np.random.rand(6) / 20) * (-i), 0)
+        levels_r = np.round(np.log10(np.random.rand(6) / 20) * (-i), 0)
+        ag = Audiogram(levels_l, levels_r, cfs)
+        regtest.write(
+            f"Audiogram original: \n{ag.cfs}\n{ag.levels_l}\n{ag.levels_r}\n{ag.severity}\n"
+        )
+        ag = ag.select_subset_of_cfs(np.array([500, 1000, 2000]))
+        regtest.write(
+            f"Audiogram new: \n{ag.cfs}\n{ag.levels_l}\n{ag.levels_r}\n{ag.severity}\n"
+        )
+
+
+def test_GHA_inputs(regtest):
+
+    enhancer = gha(**gha_params)
+
+    infile_names = [
+        f"tests/test_data/scenes/S06001_mix_CH{ch}.wav" for ch in range(1, 4)
+    ]
+    fd_merged, merged_filename = tempfile.mkstemp(
+        prefix="clarity-merged-", suffix=".wav"
+    )
+    enhancer.create_HA_inputs(infile_names, merged_filename)
+
+    signal = enhancer.read_signal(merged_filename)
+    np.set_printoptions(threshold=100)
+    regtest.write(f"signal output: \n{signal[:,0]}\n")
+
+
+def test_GHA_config(regtest):
+
+    enhancer = gha(**gha_params)
+    listeners = json.load(open("tests/test_data/metadata/listeners.json"))
+    listener = listeners["L0001"]
+    cfs = np.array(listener["audiogram_cfs"], dtype="int")
+    audiogram_left = np.array(listener["audiogram_levels_l"])
+    audiogram_right = np.array(listener["audiogram_levels_r"])
+    audiogram = Audiogram(cfs=cfs, levels_l=audiogram_left, levels_r=audiogram_right)
+
+    cfg_template = f"tests/test_data/openMHA/{enhancer.cfg_file}_template.cfg"
+
+    gaintable = get_gaintable(
+        audiogram,
+        enhancer.noisegatelevels,
+        enhancer.noisegateslope,
+        enhancer.cr_level,
+        enhancer.max_output_level,
+    )
+    formatted_sGt = format_gaintable(gaintable, noisegate_corr=True)
+
+    config = enhancer.create_configured_cfgfile(
+        "input", "output", formatted_sGt, cfg_template
+    )
+    regtest.write(f"config output: \n{config}\n")
diff --git a/tests/regression/test_mc_conv_tasnet.py b/tests/regression/test_mc_conv_tasnet.py
new file mode 100644
index 000000000..0bba4b728
--- /dev/null
+++ b/tests/regression/test_mc_conv_tasnet.py
@@ -0,0 +1,97 @@
+import numpy as np
+import torch
+import torchaudio
+from omegaconf import OmegaConf
+from tqdm import tqdm
+
+from clarity.dataset.cec1_dataset import CEC1Dataset
+from clarity.enhancer.dnn.mc_conv_tasnet import ConvTasNet, overlap_and_add
+
+
+def test_overlap_add(regtest):
+    signal = torch.Tensor(np.sin(np.arange(0, 2 * np.pi, 0.001) * 10))
+    signal = torch.reshape(signal, (2, -1))
+
+    frame_step = 100
+    output = overlap_and_add(signal, frame_step, None)
+    regtest.write(f"overlap add output: \n{output.detach().numpy()}\n")
+
+
+def test_convtasnet(regtest):
+    torch.manual_seed(0)
+    cfg = {}
+    cfg["path"] = {"exp_folder": "./"}
+    cfg["mc_convtasnet"] = {
+        "N_spec": 256,
+        "N_spat": 128,  # 6 * 30
+        "L": 20,
+        "B": 256,
+        "H": 512,
+        "P": 3,
+        "X": 6,
+        "R": 4,
+        "C": 1,  # num_speakers
+        "num_channels": 6,  # should be consistent with dataloader num_channels
+        "norm_type": "cLN",
+        "causal": True,
+        "mask_nonlinear": "relu",
+    }
+
+    cfg["test_dataset"] = {
+        "scenes_folder": "tests/test_data/scenes",
+        "scenes_file": "tests/test_data/metadata/scenes.test.json",
+        "sr": 44100,
+        "downsample_factor": 20,
+        "wav_sample_len": None,
+        "wav_silence_len": 0,
+        "num_channels": 2,
+        "norm": 1,
+        "testing": False,
+    }
+
+    cfg["test_loader"] = {
+        "batch_size": 1,
+        "shuffle": False,
+        "num_workers": 10,
+    }
+    cfg = OmegaConf.create(cfg)
+    device = "cuda" if torch.cuda.is_available() else None
+    test_set = CEC1Dataset(**cfg["test_dataset"])
+    test_loader = torch.utils.data.DataLoader(dataset=test_set, **cfg["test_loader"])
+
+    if cfg["test_dataset"]["downsample_factor"] != 1:
+        down_sample = torchaudio.transforms.Resample(
+            orig_freq=cfg.test_dataset["sr"],
+            new_freq=cfg.test_dataset["sr"] // cfg.test_dataset["downsample_factor"],
+            resampling_method="sinc_interpolation",
+        )
+        up_sample = torchaudio.transforms.Resample(
+            orig_freq=cfg.test_dataset["sr"] // cfg.test_dataset["downsample_factor"],
+            new_freq=cfg.test_dataset["sr"],
+            resampling_method="sinc_interpolation",
+        )
+
+    with torch.no_grad():
+        for batch in tqdm(test_loader, desc="testing"):
+            noisy, scene = batch
+            out = []
+            for ear in ["left", "right"]:
+                torch.cuda.empty_cache()
+                # load denoising module
+                den_model = ConvTasNet(**cfg.mc_convtasnet)
+
+                den_model = torch.nn.parallel.DataParallel(den_model.to(device))
+                den_model.eval()
+
+                noisy = torch.reshape(noisy, (1, 6, -1))
+                noisy = noisy.to(device)
+                if cfg.test_dataset["downsample_factor"] != 1:
+                    proc = down_sample(noisy)
+                enhanced = (den_model(proc)).squeeze(1)
+                if cfg.test_dataset["downsample_factor"] != 1:
+                    enhanced = up_sample(enhanced)
+                enhanced = torch.clamp(enhanced, -1, 1)
+                out.append(enhanced.detach().cpu().numpy()[0])
+
+            out = np.stack(out, axis=0).transpose()
+    regtest.write(f"ctn output: \n{np.round(out, 6)}\n")
diff --git a/tests/test_data/metadata/listeners.json b/tests/test_data/metadata/listeners.json
new file mode 100644
index 000000000..4a85ddf1d
--- /dev/null
+++ b/tests/test_data/metadata/listeners.json
@@ -0,0 +1,2741 @@
+{
+  "L0001": {
+    "name": "L0001",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      45,
+      45,
+      35,
+      45,
+      60,
+      65,
+      70,
+      65
+    ],
+    "audiogram_levels_r": [
+      40,
+      40,
+      45,
+      45,
+      60,
+      65,
+      80,
+      80
+    ]
+  },
+  "L0002": {
+    "name": "L0002",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      30,
+      35,
+      40,
+      45,
+      50,
+      70,
+      80,
+      80
+    ],
+    "audiogram_levels_r": [
+      10,
+      20,
+      35,
+      45,
+      45,
+      55,
+      65,
+      70
+    ]
+  },
+  "L0003": {
+    "name": "L0003",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      20,
+      30,
+      35,
+      45,
+      50,
+      60,
+      65,
+      60
+    ],
+    "audiogram_levels_r": [
+      20,
+      25,
+      30,
+      50,
+      60,
+      70,
+      80,
+      75
+    ]
+  },
+  "L0004": {
+    "name": "L0004",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      30,
+      35,
+      30,
+      45,
+      55,
+      50,
+      60,
+      50
+    ],
+    "audiogram_levels_r": [
+      25,
+      35,
+      35,
+      40,
+      50,
+      55,
+      55,
+      55
+    ]
+  },
+  "L0005": {
+    "name": "L0005",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      35,
+      45,
+      50,
+      50,
+      50,
+      55,
+      60,
+      55
+    ],
+    "audiogram_levels_r": [
+      45,
+      50,
+      50,
+      45,
+      40,
+      60,
+      60,
+      60
+    ]
+  },
+  "L0008": {
+    "name": "L0008",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      25,
+      30,
+      40,
+      40,
+      50,
+      60,
+      60,
+      70
+    ],
+    "audiogram_levels_r": [
+      30,
+      40,
+      40,
+      40,
+      40,
+      55,
+      50,
+      70
+    ]
+  },
+  "L0009": {
+    "name": "L0009",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      20,
+      20,
+      35,
+      45,
+      55,
+      60,
+      65,
+      55
+    ],
+    "audiogram_levels_r": [
+      25,
+      25,
+      50,
+      50,
+      55,
+      60,
+      70,
+      55
+    ]
+  },
+  "L0010": {
+    "name": "L0010",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      70,
+      65,
+      60,
+      50,
+      45,
+      50,
+      75,
+      80
+    ],
+    "audiogram_levels_r": [
+      80,
+      80,
+      70,
+      45,
+      50,
+      45,
+      65,
+      70
+    ]
+  },
+  "L0011": {
+    "name": "L0011",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      50,
+      45,
+      45,
+      60,
+      65,
+      65,
+      65,
+      70
+    ],
+    "audiogram_levels_r": [
+      50,
+      45,
+      50,
+      60,
+      65,
+      65,
+      60,
+      75
+    ]
+  },
+  "L0012": {
+    "name": "L0012",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      40,
+      40,
+      45,
+      60,
+      65,
+      65,
+      65,
+      75
+    ],
+    "audiogram_levels_r": [
+      35,
+      35,
+      40,
+      55,
+      65,
+      65,
+      75,
+      80
+    ]
+  },
+  "L0013": {
+    "name": "L0013",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      5,
+      5,
+      25,
+      45,
+      45,
+      55,
+      45,
+      65
+    ],
+    "audiogram_levels_r": [
+      15,
+      10,
+      30,
+      50,
+      45,
+      55,
+      60,
+      70
+    ]
+  },
+  "L0014": {
+    "name": "L0014",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      25,
+      45,
+      50,
+      50,
+      50,
+      55,
+      75,
+      55
+    ],
+    "audiogram_levels_r": [
+      35,
+      45,
+      45,
+      55,
+      55,
+      60,
+      70,
+      80
+    ]
+  },
+  "L0015": {
+    "name": "L0015",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      25,
+      20,
+      15,
+      30,
+      45,
+      55,
+      70,
+      65
+    ],
+    "audiogram_levels_r": [
+      30,
+      35,
+      20,
+      35,
+      45,
+      50,
+      75,
+      70
+    ]
+  },
+  "L0017": {
+    "name": "L0017",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      25,
+      20,
+      20,
+      35,
+      35,
+      45,
+      55,
+      65
+    ],
+    "audiogram_levels_r": [
+      60,
+      55,
+      45,
+      40,
+      50,
+      45,
+      45,
+      65
+    ]
+  },
+  "L0019": {
+    "name": "L0019",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      20,
+      15,
+      15,
+      20,
+      40,
+      60,
+      60,
+      55
+    ],
+    "audiogram_levels_r": [
+      55,
+      55,
+      45,
+      50,
+      55,
+      70,
+      80,
+      80
+    ]
+  },
+  "L0021": {
+    "name": "L0021",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      50,
+      35,
+      35,
+      45,
+      55,
+      55,
+      60,
+      65
+    ],
+    "audiogram_levels_r": [
+      60,
+      50,
+      60,
+      50,
+      60,
+      75,
+      75,
+      80
+    ]
+  },
+  "L0022": {
+    "name": "L0022",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      15,
+      15,
+      25,
+      35,
+      55,
+      55,
+      65,
+      65
+    ],
+    "audiogram_levels_r": [
+      20,
+      20,
+      30,
+      45,
+      55,
+      60,
+      60,
+      80
+    ]
+  },
+  "L0023": {
+    "name": "L0023",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      15,
+      20,
+      45,
+      60,
+      60,
+      65,
+      80,
+      80
+    ],
+    "audiogram_levels_r": [
+      5,
+      10,
+      40,
+      45,
+      50,
+      60,
+      70,
+      80
+    ]
+  },
+  "L0024": {
+    "name": "L0024",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      35,
+      35,
+      30,
+      45,
+      65,
+      65,
+      75,
+      80
+    ],
+    "audiogram_levels_r": [
+      25,
+      25,
+      25,
+      35,
+      70,
+      70,
+      75,
+      80
+    ]
+  },
+  "L0026": {
+    "name": "L0026",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      45,
+      55,
+      60,
+      60,
+      60,
+      60,
+      60,
+      55
+    ],
+    "audiogram_levels_r": [
+      60,
+      65,
+      65,
+      75,
+      60,
+      60,
+      65,
+      65
+    ]
+  },
+  "L0027": {
+    "name": "L0027",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      45,
+      50,
+      45,
+      50,
+      50,
+      70,
+      55,
+      60
+    ],
+    "audiogram_levels_r": [
+      45,
+      50,
+      50,
+      50,
+      60,
+      50,
+      60,
+      60
+    ]
+  },
+  "L0028": {
+    "name": "L0028",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      20,
+      40,
+      45,
+      35,
+      50,
+      55,
+      50,
+      65
+    ],
+    "audiogram_levels_r": [
+      30,
+      40,
+      45,
+      45,
+      50,
+      55,
+      80,
+      80
+    ]
+  },
+  "L0029": {
+    "name": "L0029",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      45,
+      45,
+      55,
+      55,
+      55,
+      70,
+      65,
+      65
+    ],
+    "audiogram_levels_r": [
+      45,
+      50,
+      55,
+      55,
+      65,
+      70,
+      60,
+      60
+    ]
+  },
+  "L0031": {
+    "name": "L0031",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      20,
+      25,
+      45,
+      55,
+      55,
+      55,
+      55,
+      40
+    ],
+    "audiogram_levels_r": [
+      20,
+      25,
+      45,
+      55,
+      60,
+      60,
+      60,
+      50
+    ]
+  },
+  "L0032": {
+    "name": "L0032",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      20,
+      15,
+      40,
+      60,
+      45,
+      65,
+      60,
+      70
+    ],
+    "audiogram_levels_r": [
+      15,
+      10,
+      30,
+      45,
+      45,
+      55,
+      60,
+      70
+    ]
+  },
+  "L0034": {
+    "name": "L0034",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      30,
+      35,
+      50,
+      60,
+      65,
+      65,
+      70,
+      80
+    ],
+    "audiogram_levels_r": [
+      35,
+      45,
+      50,
+      55,
+      65,
+      65,
+      80,
+      80
+    ]
+  },
+  "L0035": {
+    "name": "L0035",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      40,
+      45,
+      55,
+      60,
+      45,
+      40,
+      65,
+      70
+    ],
+    "audiogram_levels_r": [
+      35,
+      50,
+      60,
+      70,
+      70,
+      55,
+      60,
+      80
+    ]
+  },
+  "L0036": {
+    "name": "L0036",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      50,
+      50,
+      60,
+      75,
+      65,
+      80,
+      80,
+      80
+    ],
+    "audiogram_levels_r": [
+      40,
+      35,
+      55,
+      65,
+      50,
+      50,
+      75,
+      80
+    ]
+  },
+  "L0038": {
+    "name": "L0038",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      40,
+      35,
+      25,
+      75,
+      70,
+      75,
+      70,
+      75
+    ],
+    "audiogram_levels_r": [
+      75,
+      60,
+      65,
+      50,
+      45,
+      50,
+      55,
+      80
+    ]
+  },
+  "L0039": {
+    "name": "L0039",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      10,
+      10,
+      30,
+      50,
+      60,
+      60,
+      70,
+      80
+    ],
+    "audiogram_levels_r": [
+      10,
+      10,
+      35,
+      55,
+      55,
+      65,
+      65,
+      80
+    ]
+  },
+  "L0040": {
+    "name": "L0040",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      70,
+      70,
+      60,
+      60,
+      40,
+      30,
+      20,
+      30
+    ],
+    "audiogram_levels_r": [
+      30,
+      45,
+      40,
+      35,
+      30,
+      15,
+      15,
+      5
+    ]
+  },
+  "L0041": {
+    "name": "L0041",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      50,
+      65,
+      75,
+      60,
+      45,
+      45,
+      35,
+      30
+    ],
+    "audiogram_levels_r": [
+      35,
+      55,
+      55,
+      40,
+      35,
+      40,
+      20,
+      25
+    ]
+  },
+  "L0042": {
+    "name": "L0042",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      25,
+      25,
+      40,
+      45,
+      40,
+      45,
+      55,
+      55
+    ],
+    "audiogram_levels_r": [
+      45,
+      40,
+      60,
+      75,
+      70,
+      70,
+      80,
+      80
+    ]
+  },
+  "L0044": {
+    "name": "L0044",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      50,
+      50,
+      55,
+      60,
+      70,
+      60,
+      80,
+      80
+    ],
+    "audiogram_levels_r": [
+      60,
+      45,
+      60,
+      55,
+      75,
+      65,
+      70,
+      80
+    ]
+  },
+  "L0045": {
+    "name": "L0045",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      15,
+      10,
+      10,
+      20,
+      60,
+      70,
+      75,
+      80
+    ],
+    "audiogram_levels_r": [
+      10,
+      10,
+      10,
+      20,
+      70,
+      70,
+      75,
+      80
+    ]
+  },
+  "L0047": {
+    "name": "L0047",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      25,
+      30,
+      40,
+      50,
+      55,
+      60,
+      55,
+      70
+    ],
+    "audiogram_levels_r": [
+      20,
+      35,
+      40,
+      50,
+      50,
+      60,
+      50,
+      55
+    ]
+  },
+  "L0048": {
+    "name": "L0048",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      25,
+      30,
+      35,
+      40,
+      45,
+      55,
+      55,
+      80
+    ],
+    "audiogram_levels_r": [
+      70,
+      75,
+      70,
+      70,
+      70,
+      75,
+      50,
+      65
+    ]
+  },
+  "L0049": {
+    "name": "L0049",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      65,
+      40,
+      55,
+      50,
+      70,
+      80,
+      70,
+      80
+    ],
+    "audiogram_levels_r": [
+      80,
+      80,
+      80,
+      65,
+      45,
+      45,
+      40,
+      55
+    ]
+  },
+  "L0051": {
+    "name": "L0051",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      45,
+      50,
+      60,
+      65,
+      60,
+      65,
+      70,
+      80
+    ],
+    "audiogram_levels_r": [
+      45,
+      45,
+      60,
+      70,
+      60,
+      60,
+      80,
+      80
+    ]
+  },
+  "L0053": {
+    "name": "L0053",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      30,
+      40,
+      45,
+      50,
+      45,
+      45,
+      60,
+      50
+    ],
+    "audiogram_levels_r": [
+      25,
+      40,
+      45,
+      55,
+      50,
+      50,
+      50,
+      45
+    ]
+  },
+  "L0054": {
+    "name": "L0054",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      10,
+      10,
+      30,
+      60,
+      80,
+      80,
+      70,
+      60
+    ],
+    "audiogram_levels_r": [
+      15,
+      10,
+      20,
+      50,
+      70,
+      75,
+      65,
+      60
+    ]
+  },
+  "L0055": {
+    "name": "L0055",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      25,
+      35,
+      30,
+      65,
+      60,
+      65,
+      45,
+      55
+    ],
+    "audiogram_levels_r": [
+      0,
+      15,
+      10,
+      55,
+      55,
+      65,
+      45,
+      45
+    ]
+  },
+  "L0056": {
+    "name": "L0056",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      20,
+      25,
+      45,
+      60,
+      60,
+      65,
+      80,
+      80
+    ],
+    "audiogram_levels_r": [
+      15,
+      20,
+      40,
+      55,
+      60,
+      55,
+      75,
+      80
+    ]
+  },
+  "L0057": {
+    "name": "L0057",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      25,
+      25,
+      30,
+      40,
+      45,
+      70,
+      75,
+      80
+    ],
+    "audiogram_levels_r": [
+      30,
+      25,
+      30,
+      35,
+      55,
+      65,
+      75,
+      70
+    ]
+  },
+  "L0058": {
+    "name": "L0058",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      25,
+      35,
+      30,
+      50,
+      60,
+      70,
+      75,
+      70
+    ],
+    "audiogram_levels_r": [
+      25,
+      35,
+      30,
+      60,
+      60,
+      75,
+      80,
+      80
+    ]
+  },
+  "L0059": {
+    "name": "L0059",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      10,
+      10,
+      20,
+      40,
+      45,
+      50,
+      75,
+      80
+    ],
+    "audiogram_levels_r": [
+      10,
+      10,
+      20,
+      45,
+      40,
+      60,
+      80,
+      80
+    ]
+  },
+  "L0061": {
+    "name": "L0061",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      10,
+      10,
+      20,
+      25,
+      50,
+      55,
+      50,
+      55
+    ],
+    "audiogram_levels_r": [
+      10,
+      10,
+      10,
+      10,
+      60,
+      70,
+      55,
+      55
+    ]
+  },
+  "L0062": {
+    "name": "L0062",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      50,
+      50,
+      50,
+      55,
+      65,
+      55,
+      80,
+      80
+    ],
+    "audiogram_levels_r": [
+      45,
+      55,
+      50,
+      60,
+      55,
+      70,
+      75,
+      80
+    ]
+  },
+  "L0063": {
+    "name": "L0063",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      30,
+      30,
+      25,
+      30,
+      40,
+      50,
+      70,
+      80
+    ],
+    "audiogram_levels_r": [
+      30,
+      30,
+      25,
+      30,
+      40,
+      55,
+      70,
+      75
+    ]
+  },
+  "L0064": {
+    "name": "L0064",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      40,
+      30,
+      20,
+      50,
+      60,
+      65,
+      80,
+      75
+    ],
+    "audiogram_levels_r": [
+      40,
+      35,
+      30,
+      50,
+      60,
+      75,
+      80,
+      80
+    ]
+  },
+  "L0065": {
+    "name": "L0065",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      45,
+      45,
+      35,
+      40,
+      45,
+      35,
+      45,
+      55
+    ],
+    "audiogram_levels_r": [
+      45,
+      50,
+      40,
+      50,
+      50,
+      40,
+      50,
+      65
+    ]
+  },
+  "L0066": {
+    "name": "L0066",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      25,
+      30,
+      35,
+      35,
+      45,
+      50,
+      65,
+      80
+    ],
+    "audiogram_levels_r": [
+      60,
+      76,
+      76,
+      76,
+      65,
+      65,
+      45,
+      50
+    ]
+  },
+  "L0067": {
+    "name": "L0067",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      40,
+      40,
+      40,
+      50,
+      50,
+      65,
+      75,
+      80
+    ],
+    "audiogram_levels_r": [
+      45,
+      50,
+      50,
+      50,
+      60,
+      75,
+      80,
+      80
+    ]
+  },
+  "L0068": {
+    "name": "L0068",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      35,
+      35,
+      45,
+      50,
+      60,
+      60,
+      70,
+      80
+    ],
+    "audiogram_levels_r": [
+      25,
+      20,
+      30,
+      55,
+      60,
+      60,
+      75,
+      75
+    ]
+  },
+  "L0069": {
+    "name": "L0069",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      10,
+      15,
+      20,
+      40,
+      40,
+      35,
+      40,
+      10
+    ],
+    "audiogram_levels_r": [
+      5,
+      10,
+      25,
+      40,
+      40,
+      30,
+      25,
+      10
+    ]
+  },
+  "L0070": {
+    "name": "L0070",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      35,
+      50,
+      55,
+      55,
+      50,
+      50,
+      50,
+      40
+    ],
+    "audiogram_levels_r": [
+      25,
+      40,
+      50,
+      55,
+      50,
+      50,
+      45,
+      55
+    ]
+  },
+  "L0071": {
+    "name": "L0071",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      20,
+      20,
+      30,
+      40,
+      50,
+      55,
+      65,
+      45
+    ],
+    "audiogram_levels_r": [
+      20,
+      20,
+      35,
+      45,
+      50,
+      55,
+      65,
+      45
+    ]
+  },
+  "L0072": {
+    "name": "L0072",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      25,
+      40,
+      55,
+      65,
+      65,
+      70,
+      65,
+      60
+    ],
+    "audiogram_levels_r": [
+      20,
+      30,
+      55,
+      65,
+      65,
+      75,
+      60,
+      50
+    ]
+  },
+  "L0073": {
+    "name": "L0073",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      25,
+      40,
+      70,
+      65,
+      60,
+      60,
+      55,
+      55
+    ],
+    "audiogram_levels_r": [
+      15,
+      30,
+      60,
+      55,
+      60,
+      55,
+      55,
+      60
+    ]
+  },
+  "L0074": {
+    "name": "L0074",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      10,
+      10,
+      25,
+      45,
+      40,
+      50,
+      70,
+      50
+    ],
+    "audiogram_levels_r": [
+      5,
+      15,
+      25,
+      35,
+      40,
+      55,
+      70,
+      75
+    ]
+  },
+  "L0076": {
+    "name": "L0076",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      25,
+      30,
+      50,
+      45,
+      50,
+      60,
+      55,
+      60
+    ],
+    "audiogram_levels_r": [
+      25,
+      30,
+      40,
+      45,
+      45,
+      50,
+      50,
+      80
+    ]
+  },
+  "L0077": {
+    "name": "L0077",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      30,
+      30,
+      25,
+      40,
+      50,
+      55,
+      65,
+      70
+    ],
+    "audiogram_levels_r": [
+      30,
+      35,
+      30,
+      40,
+      50,
+      60,
+      50,
+      65
+    ]
+  },
+  "L0078": {
+    "name": "L0078",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      20,
+      15,
+      10,
+      10,
+      45,
+      70,
+      80,
+      75
+    ],
+    "audiogram_levels_r": [
+      35,
+      30,
+      50,
+      40,
+      70,
+      65,
+      70,
+      80
+    ]
+  },
+  "L0080": {
+    "name": "L0080",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      35,
+      35,
+      45,
+      60,
+      50,
+      55,
+      60,
+      45
+    ],
+    "audiogram_levels_r": [
+      30,
+      40,
+      50,
+      45,
+      40,
+      65,
+      55,
+      50
+    ]
+  },
+  "L0081": {
+    "name": "L0081",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      30,
+      35,
+      45,
+      75,
+      70,
+      60,
+      80,
+      80
+    ],
+    "audiogram_levels_r": [
+      30,
+      35,
+      50,
+      75,
+      65,
+      70,
+      80,
+      80
+    ]
+  },
+  "L0082": {
+    "name": "L0082",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      30,
+      35,
+      45,
+      45,
+      50,
+      60,
+      65,
+      70
+    ],
+    "audiogram_levels_r": [
+      20,
+      30,
+      35,
+      45,
+      55,
+      65,
+      75,
+      80
+    ]
+  },
+  "L0083": {
+    "name": "L0083",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      20,
+      25,
+      45,
+      55,
+      50,
+      45,
+      50,
+      40
+    ],
+    "audiogram_levels_r": [
+      20,
+      30,
+      45,
+      60,
+      60,
+      50,
+      30,
+      25
+    ]
+  },
+  "L0084": {
+    "name": "L0084",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      15,
+      30,
+      30,
+      50,
+      60,
+      60,
+      50,
+      45
+    ],
+    "audiogram_levels_r": [
+      25,
+      25,
+      40,
+      50,
+      65,
+      55,
+      55,
+      40
+    ]
+  },
+  "L0085": {
+    "name": "L0085",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      55,
+      45,
+      55,
+      75,
+      80,
+      80,
+      80,
+      80
+    ],
+    "audiogram_levels_r": [
+      40,
+      35,
+      30,
+      50,
+      55,
+      65,
+      70,
+      60
+    ]
+  },
+  "L0086": {
+    "name": "L0086",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      40,
+      40,
+      25,
+      30,
+      45,
+      50,
+      80,
+      80
+    ],
+    "audiogram_levels_r": [
+      60,
+      50,
+      40,
+      40,
+      45,
+      55,
+      80,
+      80
+    ]
+  },
+  "L0088": {
+    "name": "L0088",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      20,
+      15,
+      15,
+      30,
+      50,
+      60,
+      70,
+      60
+    ],
+    "audiogram_levels_r": [
+      10,
+      10,
+      10,
+      20,
+      30,
+      40,
+      55,
+      50
+    ]
+  },
+  "L0089": {
+    "name": "L0089",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      50,
+      45,
+      55,
+      55,
+      50,
+      50,
+      65,
+      65
+    ],
+    "audiogram_levels_r": [
+      45,
+      45,
+      50,
+      50,
+      55,
+      50,
+      75,
+      70
+    ]
+  },
+  "L0090": {
+    "name": "L0090",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      20,
+      30,
+      40,
+      50,
+      60,
+      80,
+      80,
+      80
+    ],
+    "audiogram_levels_r": [
+      20,
+      30,
+      40,
+      50,
+      55,
+      60,
+      70,
+      75
+    ]
+  },
+  "L0091": {
+    "name": "L0091",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      25,
+      35,
+      25,
+      25,
+      30,
+      40,
+      35,
+      40
+    ],
+    "audiogram_levels_r": [
+      20,
+      20,
+      20,
+      15,
+      30,
+      35,
+      35,
+      40
+    ]
+  },
+  "L0092": {
+    "name": "L0092",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      40,
+      60,
+      60,
+      60,
+      55,
+      65,
+      80,
+      80
+    ],
+    "audiogram_levels_r": [
+      30,
+      50,
+      60,
+      55,
+      55,
+      65,
+      80,
+      80
+    ]
+  },
+  "L0093": {
+    "name": "L0093",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      15,
+      15,
+      40,
+      35,
+      40,
+      50,
+      60,
+      65
+    ],
+    "audiogram_levels_r": [
+      10,
+      20,
+      35,
+      55,
+      50,
+      45,
+      55,
+      65
+    ]
+  },
+  "L0094": {
+    "name": "L0094",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      15,
+      20,
+      35,
+      25,
+      40,
+      55,
+      55,
+      55
+    ],
+    "audiogram_levels_r": [
+      20,
+      20,
+      50,
+      35,
+      50,
+      70,
+      30,
+      35
+    ]
+  },
+  "L0095": {
+    "name": "L0095",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      45,
+      50,
+      55,
+      60,
+      50,
+      40,
+      55,
+      75
+    ],
+    "audiogram_levels_r": [
+      55,
+      70,
+      60,
+      65,
+      50,
+      50,
+      65,
+      80
+    ]
+  },
+  "L0096": {
+    "name": "L0096",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      45,
+      45,
+      55,
+      75,
+      65,
+      65,
+      80,
+      70
+    ],
+    "audiogram_levels_r": [
+      30,
+      35,
+      45,
+      65,
+      70,
+      70,
+      65,
+      70
+    ]
+  },
+  "L0097": {
+    "name": "L0097",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      5,
+      25,
+      40,
+      60,
+      65,
+      50,
+      70,
+      75
+    ],
+    "audiogram_levels_r": [
+      5,
+      25,
+      45,
+      70,
+      60,
+      60,
+      65,
+      75
+    ]
+  },
+  "L0098": {
+    "name": "L0098",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      45,
+      55,
+      55,
+      40,
+      35,
+      40,
+      65,
+      65
+    ],
+    "audiogram_levels_r": [
+      50,
+      55,
+      55,
+      40,
+      40,
+      45,
+      45,
+      75
+    ]
+  },
+  "L0099": {
+    "name": "L0099",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      50,
+      65,
+      70,
+      55,
+      55,
+      60,
+      65,
+      75
+    ],
+    "audiogram_levels_r": [
+      55,
+      60,
+      50,
+      55,
+      55,
+      55,
+      45,
+      55
+    ]
+  },
+  "L0100": {
+    "name": "L0100",
+    "audiogram_cfs": [
+      250,
+      500,
+      1000,
+      2000,
+      3000,
+      4000,
+      6000,
+      8000
+    ],
+    "audiogram_levels_l": [
+      5,
+      5,
+      0,
+      10,
+      75,
+      70,
+      65,
+      50
+    ],
+    "audiogram_levels_r": [
+      20,
+      40,
+      55,
+      40,
+      20,
+      15,
+      5,
+      -5
+    ]
+  }
+}
\ No newline at end of file
diff --git a/tests/test_data/metadata/scenes.test.json b/tests/test_data/metadata/scenes.test.json
new file mode 100644
index 000000000..4470b334e
--- /dev/null
+++ b/tests/test_data/metadata/scenes.test.json
@@ -0,0 +1,50 @@
+[
+  {
+    "dataset": "dev",
+    "room": "R06001",
+    "scene": "S06001",
+    "target": {
+      "name": "T024_BMR_00659",
+      "time_start": 78260,
+      "time_end": 243635
+    },
+    "duration": 287735,
+    "interferers": [
+      {
+        "position": 1,
+        "time_start": 0,
+        "time_end": 287735,
+        "type": "speech",
+        "name": "scf_04310.wav",
+        "offset": 31593565
+      },
+      {
+        "position": 3,
+        "time_start": 0,
+        "time_end": 287735,
+        "type": "noise",
+        "name": "CIN_washing_013.wav",
+        "offset": 245097
+      }
+    ],
+    "SNR": 2.5580,
+    "listener": {
+      "rotation": [
+        {
+          "sample": 90952.7142,
+          "angle": -125.8235
+        },
+        {
+          "sample": 100246.7142,
+          "angle": -112.0054
+        }
+      ],
+      "hrir_filename": [
+        "VP_E4-ED",
+        "VP_E4-BTE_fr",
+        "VP_E4-BTE_mid",
+        "VP_E4-BTE_rear"
+      ]
+    }
+  }
+]
\ No newline at end of file
diff --git a/tests/test_data/metadata/scenes_listeners.json b/tests/test_data/metadata/scenes_listeners.json
new file mode 100644
index 000000000..a48613c54
--- /dev/null
+++ b/tests/test_data/metadata/scenes_listeners.json
@@ -0,0 +1,12502 @@
+{
+  "S06001": [
+    "L0064",
+    "L0068",
+    "L0008"
+  ],
+  "S06002": [
+    "L0044",
+    "L0082",
+    "L0078"
+  ],
+  "S06003": [
+    "L0066",
+    "L0051",
+    "L0077"
+  ],
+  "S06004": [
+    "L0059",
+    "L0092",
+    "L0036"
+  ],
+  "S06005": [
+    "L0081",
+    "L0023",
+    "L0048"
+  ],
+  "S06006": [
+    "L0023",
+    "L0015",
+    "L0097"
+  ],
+  "S06007": [
+    "L0042",
+    "L0085",
+    "L0095"
+  ],
+  "S06008": [
+    "L0024",
+    "L0053",
+    "L0015"
+  ],
+  "S06009": [
+    "L0012",
+    "L0056",
+    "L0076"
+  ],
+  "S06010": [
+    "L0089",
+    "L0015",
+    "L0059"
+  ],
+  "S06011": [
+    "L0070",
+    "L0054",
+    "L0096"
+  ],
+  "S06012": [
+    "L0099",
+    "L0035",
+    "L0088"
+  ],
+  "S06013": [
+    "L0077",
+    "L0071",
+    "L0083"
+  ],
+  "S06014": [
+    "L0044",
+    "L0010",
+    "L0088"
+  ],
+  "S06015": [
+    "L0002",
+    "L0014",
+    "L0066"
+  ],
+  "S06016": [
+    "L0098",
+    "L0001",
+    "L0096"
+  ],
+  "S06017": [
+    "L0080",
+    "L0056",
+    "L0041"
+  ],
+  "S06018": [
+    "L0055",
+    "L0011",
+    "L0032"
+  ],
+  "S06019": [
+    "L0090",
+    "L0038",
+    "L0040"
+  ],
+  "S06020": [
+    "L0024",
+    "L0086",
+    "L0072"
+  ],
+  "S06021": [
+    "L0014",
+    "L0013",
+    "L0054"
+  ],
+  "S06022": [
+    "L0082",
+    "L0078",
+    "L0017"
+  ],
+  "S06023": [
+    "L0051",
+    "L0088",
+    "L0049"
+  ],
+  "S06024": [
+    "L0021",
+    "L0088",
+    "L0056"
+  ],
+  "S06025": [
+    "L0086",
+    "L0035",
+    "L0095"
+  ],
+  "S06026": [
+    "L0088",
+    "L0093",
+    "L0048"
+  ],
+  "S06027": [
+    "L0071",
+    "L0014",
+    "L0094"
+  ],
+  "S06028": [
+    "L0064",
+    "L0054",
+    "L0091"
+  ],
+  "S06029": [
+    "L0040",
+    "L0049",
+    "L0031"
+  ],
+  "S06030": [
+    "L0032",
+    "L0031",
+    "L0005"
+  ],
+  "S06031": [
+    "L0096",
+    "L0044",
+    "L0076"
+  ],
+  "S06032": [
+    "L0011",
+    "L0014",
+    "L0022"
+  ],
+  "S06033": [
+    "L0026",
+    "L0005",
+    "L0013"
+  ],
+  "S06034": [
+    "L0086",
+    "L0065",
+    "L0084"
+  ],
+  "S06035": [
+    "L0047",
+    "L0083",
+    "L0040"
+  ],
+  "S06036": [
+    "L0036",
+    "L0093",
+    "L0068"
+  ],
+  "S06037": [
+    "L0092",
+    "L0047",
+    "L0072"
+  ],
+  "S06038": [
+    "L0080",
+    "L0100",
+    "L0059"
+  ],
+  "S06039": [
+    "L0013",
+    "L0055",
+    "L0096"
+  ],
+  "S06040": [
+    "L0019",
+    "L0078",
+    "L0093"
+  ],
+  "S06041": [
+    "L0098",
+    "L0056",
+    "L0032"
+  ],
+  "S06042": [
+    "L0041",
+    "L0003",
+    "L0045"
+  ],
+  "S06043": [
+    "L0019",
+    "L0038",
+    "L0062"
+  ],
+  "S06044": [
+    "L0028",
+    "L0056",
+    "L0069"
+  ],
+  "S06045": [
+    "L0010",
+    "L0015",
+    "L0024"
+  ],
+  "S06046": [
+    "L0038",
+    "L0008",
+    "L0091"
+  ],
+  "S06047": [
+    "L0099",
+    "L0085",
+    "L0095"
+  ],
+  "S06048": [
+    "L0012",
+    "L0004",
+    "L0021"
+  ],
+  "S06049": [
+    "L0099",
+    "L0032",
+    "L0095"
+  ],
+  "S06050": [
+    "L0091",
+    "L0021",
+    "L0065"
+  ],
+  "S06051": [
+    "L0014",
+    "L0062",
+    "L0019"
+  ],
+  "S06052": [
+    "L0005",
+    "L0095",
+    "L0003"
+  ],
+  "S06053": [
+    "L0032",
+    "L0031",
+    "L0021"
+  ],
+  "S06054": [
+    "L0077",
+    "L0035",
+    "L0010"
+  ],
+  "S06055": [
+    "L0003",
+    "L0086",
+    "L0069"
+  ],
+  "S06056": [
+    "L0097",
+    "L0015",
+    "L0044"
+  ],
+  "S06057": [
+    "L0011",
+    "L0038",
+    "L0012"
+  ],
+  "S06058": [
+    "L0100",
+    "L0051",
+    "L0058"
+  ],
+  "S06059": [
+    "L0070",
+    "L0031",
+    "L0010"
+  ],
+  "S06060": [
+    "L0081",
+    "L0074",
+    "L0008"
+  ],
+  "S06061": [
+    "L0094",
+    "L0015",
+    "L0065"
+  ],
+  "S06062": [
+    "L0034",
+    "L0044",
+    "L0059"
+  ],
+  "S06063": [
+    "L0076",
+    "L0090",
+    "L0028"
+  ],
+  "S06064": [
+    "L0035",
+    "L0010",
+    "L0027"
+  ],
+  "S06065": [
+    "L0027",
+    "L0057",
+    "L0084"
+  ],
+  "S06066": [
+    "L0042",
+    "L0021",
+    "L0094"
+  ],
+  "S06067": [
+    "L0071",
+    "L0029",
+    "L0002"
+  ],
+  "S06068": [
+    "L0076",
+    "L0067",
+    "L0090"
+  ],
+  "S06069": [
+    "L0082",
+    "L0053",
+    "L0059"
+  ],
+  "S06070": [
+    "L0064",
+    "L0042",
+    "L0026"
+  ],
+  "S06071": [
+    "L0089",
+    "L0002",
+    "L0073"
+  ],
+  "S06072": [
+    "L0013",
+    "L0056",
+    "L0008"
+  ],
+  "S06073": [
+    "L0086",
+    "L0047",
+    "L0023"
+  ],
+  "S06074": [
+    "L0040",
+    "L0077",
+    "L0059"
+  ],
+  "S06075": [
+    "L0096",
+    "L0048",
+    "L0059"
+  ],
+  "S06076": [
+    "L0093",
+    "L0099",
+    "L0097"
+  ],
+  "S06077": [
+    "L0022",
+    "L0053",
+    "L0064"
+  ],
+  "S06078": [
+    "L0068",
+    "L0013",
+    "L0001"
+  ],
+  "S06079": [
+    "L0094",
+    "L0032",
+    "L0056"
+  ],
+  "S06080": [
+    "L0027",
+    "L0040",
+    "L0038"
+  ],
+  "S06081": [
+    "L0099",
+    "L0072",
+    "L0063"
+  ],
+  "S06082": [
+    "L0090",
+    "L0068",
+    "L0005"
+  ],
+  "S06083": [
+    "L0066",
+    "L0090",
+    "L0068"
+  ],
+  "S06084": [
+    "L0008",
+    "L0028",
+    "L0072"
+  ],
+  "S06085": [
+    "L0011",
+    "L0044",
+    "L0027"
+  ],
+  "S06086": [
+    "L0072",
+    "L0084",
+    "L0078"
+  ],
+  "S06087": [
+    "L0089",
+    "L0095",
+    "L0001"
+  ],
+  "S06088": [
+    "L0005",
+    "L0080",
+    "L0055"
+  ],
+  "S06089": [
+    "L0053",
+    "L0074",
+    "L0009"
+  ],
+  "S06090": [
+    "L0068",
+    "L0032",
+    "L0088"
+  ],
+  "S06091": [
+    "L0099",
+    "L0013",
+    "L0022"
+  ],
+  "S06092": [
+    "L0002",
+    "L0066",
+    "L0068"
+  ],
+  "S06093": [
+    "L0054",
+    "L0001",
+    "L0036"
+  ],
+  "S06094": [
+    "L0002",
+    "L0001",
+    "L0084"
+  ],
+  "S06095": [
+    "L0096",
+    "L0015",
+    "L0032"
+  ],
+  "S06096": [
+    "L0021",
+    "L0095",
+    "L0034"
+  ],
+  "S06097": [
+    "L0051",
+    "L0047",
+    "L0031"
+  ],
+  "S06098": [
+    "L0015",
+    "L0076",
+    "L0065"
+  ],
+  "S06099": [
+    "L0098",
+    "L0013",
+    "L0003"
+  ],
+  "S06100": [
+    "L0047",
+    "L0072",
+    "L0019"
+  ],
+  "S06101": [
+    "L0042",
+    "L0023",
+    "L0083"
+  ],
+  "S06102": [
+    "L0100",
+    "L0058",
+    "L0019"
+  ],
+  "S06103": [
+    "L0026",
+    "L0047",
+    "L0003"
+  ],
+  "S06104": [
+    "L0008",
+    "L0035",
+    "L0044"
+  ],
+  "S06105": [
+    "L0089",
+    "L0054",
+    "L0061"
+  ],
+  "S06106": [
+    "L0090",
+    "L0008",
+    "L0095"
+  ],
+  "S06107": [
+    "L0080",
+    "L0100",
+    "L0073"
+  ],
+  "S06108": [
+    "L0099",
+    "L0070",
+    "L0062"
+  ],
+  "S06109": [
+    "L0085",
+    "L0029",
+    "L0035"
+  ],
+  "S06110": [
+    "L0063",
+    "L0093",
+    "L0049"
+  ],
+  "S06111": [
+    "L0002",
+    "L0023",
+    "L0026"
+  ],
+  "S06112": [
+    "L0045",
+    "L0056",
+    "L0057"
+  ],
+  "S06113": [
+    "L0062",
+    "L0014",
+    "L0057"
+  ],
+  "S06114": [
+    "L0097",
+    "L0005",
+    "L0008"
+  ],
+  "S06115": [
+    "L0045",
+    "L0027",
+    "L0026"
+  ],
+  "S06116": [
+    "L0092",
+    "L0049",
+    "L0061"
+  ],
+  "S06117": [
+    "L0065",
+    "L0088",
+    "L0022"
+  ],
+  "S06118": [
+    "L0049",
+    "L0019",
+    "L0077"
+  ],
+  "S06119": [
+    "L0040",
+    "L0009",
+    "L0053"
+  ],
+  "S06120": [
+    "L0029",
+    "L0083",
+    "L0012"
+  ],
+  "S06121": [
+    "L0051",
+    "L0066",
+    "L0056"
+  ],
+  "S06122": [
+    "L0051",
+    "L0068",
+    "L0017"
+  ],
+  "S06123": [
+    "L0015",
+    "L0089",
+    "L0077"
+  ],
+  "S06124": [
+    "L0076",
+    "L0057",
+    "L0021"
+  ],
+  "S06125": [
+    "L0077",
+    "L0019",
+    "L0080"
+  ],
+  "S06126": [
+    "L0069",
+    "L0005",
+    "L0051"
+  ],
+  "S06127": [
+    "L0056",
+    "L0026",
+    "L0028"
+  ],
+  "S06128": [
+    "L0098",
+    "L0090",
+    "L0063"
+  ],
+  "S06129": [
+    "L0099",
+    "L0014",
+    "L0011"
+  ],
+  "S06130": [
+    "L0013",
+    "L0034",
+    "L0038"
+  ],
+  "S06131": [
+    "L0010",
+    "L0064",
+    "L0002"
+  ],
+  "S06132": [
+    "L0015",
+    "L0065",
+    "L0089"
+  ],
+  "S06133": [
+    "L0083",
+    "L0049",
+    "L0072"
+  ],
+  "S06134": [
+    "L0078",
+    "L0092",
+    "L0036"
+  ],
+  "S06135": [
+    "L0069",
+    "L0013",
+    "L0062"
+  ],
+  "S06136": [
+    "L0038",
+    "L0044",
+    "L0092"
+  ],
+  "S06137": [
+    "L0028",
+    "L0070",
+    "L0032"
+  ],
+  "S06138": [
+    "L0059",
+    "L0019",
+    "L0011"
+  ],
+  "S06139": [
+    "L0004",
+    "L0084",
+    "L0072"
+  ],
+  "S06140": [
+    "L0034",
+    "L0021",
+    "L0080"
+  ],
+  "S06141": [
+    "L0065",
+    "L0042",
+    "L0035"
+  ],
+  "S06142": [
+    "L0100",
+    "L0008",
+    "L0036"
+  ],
+  "S06143": [
+    "L0097",
+    "L0024",
+    "L0017"
+  ],
+  "S06144": [
+    "L0034",
+    "L0073",
+    "L0063"
+  ],
+  "S06145": [
+    "L0061",
+    "L0086",
+    "L0026"
+  ],
+  "S06146": [
+    "L0017",
+    "L0094",
+    "L0078"
+  ],
+  "S06147": [
+    "L0024",
+    "L0090",
+    "L0066"
+  ],
+  "S06148": [
+    "L0099",
+    "L0069",
+    "L0083"
+  ],
+  "S06149": [
+    "L0080",
+    "L0055",
+    "L0099"
+  ],
+  "S06150": [
+    "L0034",
+    "L0086",
+    "L0096"
+  ],
+  "S06151": [
+    "L0038",
+    "L0002",
+    "L0057"
+  ],
+  "S06152": [
+    "L0054",
+    "L0055",
+    "L0005"
+  ],
+  "S06153": [
+    "L0084",
+    "L0024",
+    "L0042"
+  ],
+  "S06154": [
+    "L0095",
+    "L0026",
+    "L0063"
+  ],
+  "S06155": [
+    "L0092",
+    "L0049",
+    "L0076"
+  ],
+  "S06156": [
+    "L0011",
+    "L0013",
+    "L0083"
+  ],
+  "S06157": [
+    "L0008",
+    "L0011",
+    "L0038"
+  ],
+  "S06158": [
+    "L0022",
+    "L0008",
+    "L0051"
+  ],
+  "S06159": [
+    "L0002",
+    "L0072",
+    "L0056"
+  ],
+  "S06160": [
+    "L0027",
+    "L0026",
+    "L0073"
+  ],
+  "S06161": [
+    "L0062",
+    "L0081",
+    "L0063"
+  ],
+  "S06162": [
+    "L0084",
+    "L0081",
+    "L0005"
+  ],
+  "S06163": [
+    "L0091",
+    "L0014",
+    "L0083"
+  ],
+  "S06164": [
+    "L0094",
+    "L0012",
+    "L0069"
+  ],
+  "S06165": [
+    "L0035",
+    "L0049",
+    "L0085"
+  ],
+  "S06166": [
+    "L0094",
+    "L0068",
+    "L0077"
+  ],
+  "S06167": [
+    "L0064",
+    "L0095",
+    "L0093"
+  ],
+  "S06168": [
+    "L0039",
+    "L0003",
+    "L0001"
+  ],
+  "S06169": [
+    "L0031",
+    "L0051",
+    "L0081"
+  ],
+  "S06170": [
+    "L0090",
+    "L0042",
+    "L0056"
+  ],
+  "S06171": [
+    "L0011",
+    "L0080",
+    "L0044"
+  ],
+  "S06172": [
+    "L0051",
+    "L0067",
+    "L0064"
+  ],
+  "S06173": [
+    "L0064",
+    "L0010",
+    "L0027"
+  ],
+  "S06174": [
+    "L0100",
+    "L0022",
+    "L0040"
+  ],
+  "S06175": [
+    "L0048",
+    "L0056",
+    "L0010"
+  ],
+  "S06176": [
+    "L0005",
+    "L0077",
+    "L0068"
+  ],
+  "S06177": [
+    "L0024",
+    "L0078",
+    "L0095"
+  ],
+  "S06178": [
+    "L0013",
+    "L0026",
+    "L0059"
+  ],
+  "S06179": [
+    "L0067",
+    "L0005",
+    "L0096"
+  ],
+  "S06180": [
+    "L0074",
+    "L0064",
+    "L0073"
+  ],
+  "S06181": [
+    "L0009",
+    "L0015",
+    "L0076"
+  ],
+  "S06182": [
+    "L0026",
+    "L0003",
+    "L0005"
+  ],
+  "S06183": [
+    "L0094",
+    "L0097",
+    "L0022"
+  ],
+  "S06184": [
+    "L0098",
+    "L0055",
+    "L0017"
+  ],
+  "S06185": [
+    "L0088",
+    "L0058",
+    "L0032"
+  ],
+  "S06186": [
+    "L0064",
+    "L0078",
+    "L0019"
+  ],
+  "S06187": [
+    "L0010",
+    "L0096",
+    "L0074"
+  ],
+  "S06188": [
+    "L0096",
+    "L0098",
+    "L0057"
+  ],
+  "S06189": [
+    "L0021",
+    "L0097",
+    "L0049"
+  ],
+  "S06190": [
+    "L0022",
+    "L0064",
+    "L0049"
+  ],
+  "S06191": [
+    "L0021",
+    "L0083",
+    "L0032"
+  ],
+  "S06192": [
+    "L0005",
+    "L0065",
+    "L0071"
+  ],
+  "S06193": [
+    "L0062",
+    "L0032",
+    "L0073"
+  ],
+  "S06194": [
+    "L0059",
+    "L0098",
+    "L0012"
+  ],
+  "S06195": [
+    "L0008",
+    "L0078",
+    "L0042"
+  ],
+  "S06196": [
+    "L0004",
+    "L0083",
+    "L0090"
+  ],
+  "S06197": [
+    "L0091",
+    "L0036",
+    "L0039"
+  ],
+  "S06198": [
+    "L0014",
+    "L0098",
+    "L0081"
+  ],
+  "S06199": [
+    "L0084",
+    "L0068",
+    "L0081"
+  ],
+  "S06200": [
+    "L0053",
+    "L0019",
+    "L0024"
+  ],
+  "S06201": [
+    "L0069",
+    "L0090",
+    "L0013"
+  ],
+  "S06202": [
+    "L0017",
+    "L0068",
+    "L0011"
+  ],
+  "S06203": [
+    "L0015",
+    "L0068",
+    "L0026"
+  ],
+  "S06204": [
+    "L0004",
+    "L0072",
+    "L0070"
+  ],
+  "S06205": [
+    "L0068",
+    "L0004",
+    "L0080"
+  ],
+  "S06206": [
+    "L0055",
+    "L0042",
+    "L0013"
+  ],
+  "S06207": [
+    "L0059",
+    "L0012",
+    "L0021"
+  ],
+  "S06208": [
+    "L0059",
+    "L0004",
+    "L0058"
+  ],
+  "S06209": [
+    "L0058",
+    "L0029",
+    "L0002"
+  ],
+  "S06210": [
+    "L0039",
+    "L0061",
+    "L0012"
+  ],
+  "S06211": [
+    "L0094",
+    "L0024",
+    "L0035"
+  ],
+  "S06212": [
+    "L0001",
+    "L0035",
+    "L0021"
+  ],
+  "S06213": [
+    "L0001",
+    "L0049",
+    "L0062"
+  ],
+  "S06214": [
+    "L0004",
+    "L0095",
+    "L0039"
+  ],
+  "S06215": [
+    "L0024",
+    "L0031",
+    "L0073"
+  ],
+  "S06216": [
+    "L0019",
+    "L0077",
+    "L0058"
+  ],
+  "S06217": [
+    "L0044",
+    "L0022",
+    "L0004"
+  ],
+  "S06218": [
+    "L0035",
+    "L0061",
+    "L0056"
+  ],
+  "S06219": [
+    "L0076",
+    "L0049",
+    "L0088"
+  ],
+  "S06220": [
+    "L0099",
+    "L0055",
+    "L0031"
+  ],
+  "S06221": [
+    "L0093",
+    "L0013",
+    "L0017"
+  ],
+  "S06222": [
+    "L0085",
+    "L0092",
+    "L0053"
+  ],
+  "S06223": [
+    "L0027",
+    "L0063",
+    "L0024"
+  ],
+  "S06224": [
+    "L0022",
+    "L0038",
+    "L0054"
+  ],
+  "S06225": [
+    "L0082",
+    "L0041",
+    "L0040"
+  ],
+  "S06226": [
+    "L0031",
+    "L0049",
+    "L0062"
+  ],
+  "S06227": [
+    "L0068",
+    "L0008",
+    "L0022"
+  ],
+  "S06228": [
+    "L0094",
+    "L0003",
+    "L0065"
+  ],
+  "S06229": [
+    "L0012",
+    "L0022",
+    "L0068"
+  ],
+  "S06230": [
+    "L0051",
+    "L0088",
+    "L0068"
+  ],
+  "S06231": [
+    "L0024",
+    "L0093",
+    "L0069"
+  ],
+  "S06232": [
+    "L0051",
+    "L0099",
+    "L0059"
+  ],
+  "S06233": [
+    "L0013",
+    "L0041",
+    "L0071"
+  ],
+  "S06234": [
+    "L0098",
+    "L0062",
+    "L0099"
+  ],
+  "S06235": [
+    "L0084",
+    "L0010",
+    "L0063"
+  ],
+  "S06236": [
+    "L0067",
+    "L0002",
+    "L0068"
+  ],
+  "S06237": [
+    "L0055",
+    "L0071",
+    "L0035"
+  ],
+  "S06238": [
+    "L0062",
+    "L0049",
+    "L0076"
+  ],
+  "S06239": [
+    "L0014",
+    "L0031",
+    "L0017"
+  ],
+  "S06240": [
+    "L0047",
+    "L0019",
+    "L0089"
+  ],
+  "S06241": [
+    "L0095",
+    "L0026",
+    "L0072"
+  ],
+  "S06242": [
+    "L0066",
+    "L0031",
+    "L0068"
+  ],
+  "S06243": [
+    "L0070",
+    "L0029",
+    "L0041"
+  ],
+  "S06244": [
+    "L0073",
+    "L0057",
+    "L0083"
+  ],
+  "S06245": [
+    "L0024",
+    "L0059",
+    "L0074"
+  ],
+  "S06246": [
+    "L0098",
+    "L0099",
+    "L0014"
+  ],
+  "S06247": [
+    "L0077",
+    "L0035",
+    "L0049"
+  ],
+  "S06248": [
+    "L0001",
+    "L0072",
+    "L0097"
+  ],
+  "S06249": [
+    "L0074",
+    "L0001",
+    "L0036"
+  ],
+  "S06250": [
+    "L0051",
+    "L0019",
+    "L0098"
+  ],
+  "S06251": [
+    "L0051",
+    "L0086",
+    "L0095"
+  ],
+  "S06252": [
+    "L0026",
+    "L0069",
+    "L0076"
+  ],
+  "S06253": [
+    "L0014",
+    "L0080",
+    "L0039"
+  ],
+  "S06254": [
+    "L0086",
+    "L0066",
+    "L0047"
+  ],
+  "S06255": [
+    "L0098",
+    "L0003",
+    "L0021"
+  ],
+  "S06256": [
+    "L0045",
+    "L0008",
+    "L0001"
+  ],
+  "S06257": [
+    "L0042",
+    "L0065",
+    "L0084"
+  ],
+  "S06258": [
+    "L0092",
+    "L0065",
+    "L0071"
+  ],
+  "S06259": [
+    "L0017",
+    "L0042",
+    "L0059"
+  ],
+  "S06260": [
+    "L0048",
+    "L0034",
+    "L0094"
+  ],
+  "S06261": [
+    "L0013",
+    "L0005",
+    "L0012"
+  ],
+  "S06262": [
+    "L0044",
+    "L0053",
+    "L0085"
+  ],
+  "S06263": [
+    "L0057",
+    "L0021",
+    "L0084"
+  ],
+  "S06264": [
+    "L0041",
+    "L0027",
+    "L0011"
+  ],
+  "S06265": [
+    "L0068",
+    "L0049",
+    "L0048"
+  ],
+  "S06266": [
+    "L0083",
+    "L0023",
+    "L0091"
+  ],
+  "S06267": [
+    "L0083",
+    "L0098",
+    "L0035"
+  ],
+  "S06268": [
+    "L0085",
+    "L0017",
+    "L0067"
+  ],
+  "S06269": [
+    "L0099",
+    "L0086",
+    "L0066"
+  ],
+  "S06270": [
+    "L0047",
+    "L0049",
+    "L0071"
+  ],
+  "S06271": [
+    "L0062",
+    "L0090",
+    "L0098"
+  ],
+  "S06272": [
+    "L0023",
+    "L0027",
+    "L0021"
+  ],
+  "S06273": [
+    "L0021",
+    "L0063",
+    "L0066"
+  ],
+  "S06274": [
+    "L0093",
+    "L0074",
+    "L0023"
+  ],
+  "S06275": [
+    "L0089",
+    "L0051",
+    "L0059"
+  ],
+  "S06276": [
+    "L0098",
+    "L0076",
+    "L0068"
+  ],
+  "S06277": [
+    "L0036",
+    "L0077",
+    "L0078"
+  ],
+  "S06278": [
+    "L0081",
+    "L0054",
+    "L0080"
+  ],
+  "S06279": [
+    "L0010",
+    "L0071",
+    "L0051"
+  ],
+  "S06280": [
+    "L0024",
+    "L0080",
+    "L0009"
+  ],
+  "S06281": [
+    "L0097",
+    "L0036",
+    "L0004"
+  ],
+  "S06282": [
+    "L0059",
+    "L0076",
+    "L0065"
+  ],
+  "S06283": [
+    "L0002",
+    "L0084",
+    "L0011"
+  ],
+  "S06284": [
+    "L0013",
+    "L0065",
+    "L0001"
+  ],
+  "S06285": [
+    "L0061",
+    "L0008",
+    "L0019"
+  ],
+  "S06286": [
+    "L0097",
+    "L0001",
+    "L0045"
+  ],
+  "S06287": [
+    "L0099",
+    "L0049",
+    "L0039"
+  ],
+  "S06288": [
+    "L0024",
+    "L0091",
+    "L0048"
+  ],
+  "S06289": [
+    "L0032",
+    "L0017",
+    "L0070"
+  ],
+  "S06290": [
+    "L0073",
+    "L0056",
+    "L0064"
+  ],
+  "S06291": [
+    "L0028",
+    "L0056",
+    "L0068"
+  ],
+  "S06292": [
+    "L0100",
+    "L0070",
+    "L0024"
+  ],
+  "S06293": [
+    "L0072",
+    "L0024",
+    "L0084"
+  ],
+  "S06294": [
+    "L0054",
+    "L0022",
+    "L0035"
+  ],
+  "S06295": [
+    "L0031",
+    "L0071",
+    "L0058"
+  ],
+  "S06296": [
+    "L0064",
+    "L0069",
+    "L0078"
+  ],
+  "S06297": [
+    "L0064",
+    "L0038",
+    "L0034"
+  ],
+  "S06298": [
+    "L0071",
+    "L0035",
+    "L0093"
+  ],
+  "S06299": [
+    "L0009",
+    "L0064",
+    "L0005"
+  ],
+  "S06300": [
+    "L0039",
+    "L0099",
+    "L0013"
+  ],
+  "S06301": [
+    "L0031",
+    "L0061",
+    "L0010"
+  ],
+  "S06302": [
+    "L0099",
+    "L0029",
+    "L0039"
+  ],
+  "S06303": [
+    "L0096",
+    "L0051",
+    "L0014"
+  ],
+  "S06304": [
+    "L0082",
+    "L0048",
+    "L0059"
+  ],
+  "S06305": [
+    "L0067",
+    "L0073",
+    "L0009"
+  ],
+  "S06306": [
+    "L0098",
+    "L0083",
+    "L0088"
+  ],
+  "S06307": [
+    "L0070",
+    "L0092",
+    "L0073"
+  ],
+  "S06308": [
+    "L0078",
+    "L0042",
+    "L0076"
+  ],
+  "S06309": [
+    "L0036",
+    "L0057",
+    "L0045"
+  ],
+  "S06310": [
+    "L0008",
+    "L0009",
+    "L0027"
+  ],
+  "S06311": [
+    "L0058",
+    "L0001",
+    "L0049"
+  ],
+  "S06312": [
+    "L0001",
+    "L0023",
+    "L0011"
+  ],
+  "S06313": [
+    "L0069",
+    "L0038",
+    "L0095"
+  ],
+  "S06314": [
+    "L0065",
+    "L0089",
+    "L0038"
+  ],
+  "S06315": [
+    "L0073",
+    "L0032",
+    "L0057"
+  ],
+  "S06316": [
+    "L0095",
+    "L0017",
+    "L0013"
+  ],
+  "S06317": [
+    "L0054",
+    "L0055",
+    "L0085"
+  ],
+  "S06318": [
+    "L0073",
+    "L0055",
+    "L0042"
+  ],
+  "S06319": [
+    "L0004",
+    "L0083",
+    "L0008"
+  ],
+  "S06320": [
+    "L0032",
+    "L0062",
+    "L0013"
+  ],
+  "S06321": [
+    "L0035",
+    "L0084",
+    "L0058"
+  ],
+  "S06322": [
+    "L0032",
+    "L0034",
+    "L0042"
+  ],
+  "S06323": [
+    "L0051",
+    "L0053",
+    "L0083"
+  ],
+  "S06324": [
+    "L0064",
+    "L0042",
+    "L0077"
+  ],
+  "S06325": [
+    "L0058",
+    "L0040",
+    "L0008"
+  ],
+  "S06326": [
+    "L0053",
+    "L0088",
+    "L0012"
+  ],
+  "S06327": [
+    "L0002",
+    "L0073",
+    "L0080"
+  ],
+  "S06328": [
+    "L0071",
+    "L0009",
+    "L0067"
+  ],
+  "S06329": [
+    "L0080",
+    "L0073",
+    "L0071"
+  ],
+  "S06330": [
+    "L0021",
+    "L0013",
+    "L0040"
+  ],
+  "S06331": [
+    "L0015",
+    "L0026",
+    "L0067"
+  ],
+  "S06332": [
+    "L0036",
+    "L0071",
+    "L0096"
+  ],
+  "S06333": [
+    "L0012",
+    "L0069",
+    "L0089"
+  ],
+  "S06334": [
+    "L0065",
+    "L0008",
+    "L0031"
+  ],
+  "S06335": [
+    "L0041",
+    "L0078",
+    "L0038"
+  ],
+  "S06336": [
+    "L0022",
+    "L0047",
+    "L0059"
+  ],
+  "S06337": [
+    "L0054",
+    "L0070",
+    "L0017"
+  ],
+  "S06338": [
+    "L0089",
+    "L0048",
+    "L0096"
+  ],
+  "S06339": [
+    "L0086",
+    "L0034",
+    "L0049"
+  ],
+  "S06340": [
+    "L0071",
+    "L0082",
+    "L0095"
+  ],
+  "S06341": [
+    "L0074",
+    "L0085",
+    "L0099"
+  ],
+  "S06342": [
+    "L0044",
+    "L0045",
+    "L0039"
+  ],
+  "S06343": [
+    "L0003",
+    "L0021",
+    "L0096"
+  ],
+  "S06344": [
+    "L0015",
+    "L0029",
+    "L0068"
+  ],
+  "S06345": [
+    "L0041",
+    "L0036",
+    "L0048"
+  ],
+  "S06346": [
+    "L0001",
+    "L0085",
+    "L0082"
+  ],
+  "S06347": [
+    "L0069",
+    "L0009",
+    "L0021"
+  ],
+  "S06348": [
+    "L0064",
+    "L0100",
+    "L0045"
+  ],
+  "S06349": [
+    "L0021",
+    "L0090",
+    "L0059"
+  ],
+  "S06350": [
+    "L0039",
+    "L0086",
+    "L0048"
+  ],
+  "S06351": [
+    "L0038",
+    "L0040",
+    "L0011"
+  ],
+  "S06352": [
+    "L0083",
+    "L0053",
+    "L0055"
+  ],
+  "S06353": [
+    "L0039",
+    "L0062",
+    "L0098"
+  ],
+  "S06354": [
+    "L0077",
+    "L0048",
+    "L0092"
+  ],
+  "S06355": [
+    "L0028",
+    "L0023",
+    "L0002"
+  ],
+  "S06356": [
+    "L0088",
+    "L0081",
+    "L0055"
+  ],
+  "S06357": [
+    "L0061",
+    "L0092",
+    "L0099"
+  ],
+  "S06358": [
+    "L0004",
+    "L0022",
+    "L0065"
+  ],
+  "S06359": [
+    "L0026",
+    "L0029",
+    "L0082"
+  ],
+  "S06360": [
+    "L0012",
+    "L0023",
+    "L0035"
+  ],
+  "S06361": [
+    "L0080",
+    "L0090",
+    "L0036"
+  ],
+  "S06362": [
+    "L0040",
+    "L0022",
+    "L0039"
+  ],
+  "S06363": [
+    "L0064",
+    "L0059",
+    "L0095"
+  ],
+  "S06364": [
+    "L0093",
+    "L0022",
+    "L0098"
+  ],
+  "S06365": [
+    "L0080",
+    "L0017",
+    "L0096"
+  ],
+  "S06366": [
+    "L0004",
+    "L0084",
+    "L0094"
+  ],
+  "S06367": [
+    "L0059",
+    "L0078",
+    "L0073"
+  ],
+  "S06368": [
+    "L0053",
+    "L0002",
+    "L0038"
+  ],
+  "S06369": [
+    "L0089",
+    "L0027",
+    "L0080"
+  ],
+  "S06370": [
+    "L0077",
+    "L0086",
+    "L0054"
+  ],
+  "S06371": [
+    "L0013",
+    "L0044",
+    "L0023"
+  ],
+  "S06372": [
+    "L0095",
+    "L0066",
+    "L0032"
+  ],
+  "S06373": [
+    "L0054",
+    "L0049",
+    "L0064"
+  ],
+  "S06374": [
+    "L0010",
+    "L0035",
+    "L0005"
+  ],
+  "S06375": [
+    "L0054",
+    "L0041",
+    "L0057"
+  ],
+  "S06376": [
+    "L0071",
+    "L0038",
+    "L0044"
+  ],
+  "S06377": [
+    "L0058",
+    "L0027",
+    "L0053"
+  ],
+  "S06378": [
+    "L0003",
+    "L0059",
+    "L0091"
+  ],
+  "S06379": [
+    "L0086",
+    "L0010",
+    "L0098"
+  ],
+  "S06380": [
+    "L0026",
+    "L0059",
+    "L0003"
+  ],
+  "S06381": [
+    "L0078",
+    "L0098",
+    "L0010"
+  ],
+  "S06382": [
+    "L0004",
+    "L0040",
+    "L0008"
+  ],
+  "S06383": [
+    "L0002",
+    "L0038",
+    "L0055"
+  ],
+  "S06384": [
+    "L0011",
+    "L0010",
+    "L0058"
+  ],
+  "S06385": [
+    "L0069",
+    "L0023",
+    "L0036"
+  ],
+  "S06386": [
+    "L0072",
+    "L0070",
+    "L0024"
+  ],
+  "S06387": [
+    "L0059",
+    "L0053",
+    "L0029"
+  ],
+  "S06388": [
+    "L0056",
+    "L0067",
+    "L0063"
+  ],
+  "S06389": [
+    "L0002",
+    "L0067",
+    "L0044"
+  ],
+  "S06390": [
+    "L0085",
+    "L0074",
+    "L0008"
+  ],
+  "S06391": [
+    "L0090",
+    "L0021",
+    "L0067"
+  ],
+  "S06392": [
+    "L0064",
+    "L0028",
+    "L0001"
+  ],
+  "S06393": [
+    "L0081",
+    "L0023",
+    "L0097"
+  ],
+  "S06394": [
+    "L0082",
+    "L0024",
+    "L0013"
+  ],
+  "S06395": [
+    "L0056",
+    "L0040",
+    "L0029"
+  ],
+  "S06396": [
+    "L0041",
+    "L0003",
+    "L0028"
+  ],
+  "S06397": [
+    "L0089",
+    "L0028",
+    "L0013"
+  ],
+  "S06398": [
+    "L0069",
+    "L0094",
+    "L0017"
+  ],
+  "S06399": [
+    "L0097",
+    "L0098",
+    "L0073"
+  ],
+  "S06400": [
+    "L0026",
+    "L0096",
+    "L0095"
+  ],
+  "S06401": [
+    "L0008",
+    "L0042",
+    "L0057"
+  ],
+  "S06402": [
+    "L0063",
+    "L0004",
+    "L0098"
+  ],
+  "S06403": [
+    "L0005",
+    "L0080",
+    "L0014"
+  ],
+  "S06404": [
+    "L0059",
+    "L0049",
+    "L0026"
+  ],
+  "S06405": [
+    "L0073",
+    "L0040",
+    "L0081"
+  ],
+  "S06406": [
+    "L0059",
+    "L0027",
+    "L0066"
+  ],
+  "S06407": [
+    "L0057",
+    "L0045",
+    "L0080"
+  ],
+  "S06408": [
+    "L0065",
+    "L0002",
+    "L0053"
+  ],
+  "S06409": [
+    "L0084",
+    "L0048",
+    "L0088"
+  ],
+  "S06410": [
+    "L0076",
+    "L0005",
+    "L0085"
+  ],
+  "S06411": [
+    "L0091",
+    "L0088",
+    "L0044"
+  ],
+  "S06412": [
+    "L0005",
+    "L0073",
+    "L0065"
+  ],
+  "S06413": [
+    "L0021",
+    "L0066",
+    "L0058"
+  ],
+  "S06414": [
+    "L0080",
+    "L0009",
+    "L0003"
+  ],
+  "S06415": [
+    "L0045",
+    "L0005",
+    "L0042"
+  ],
+  "S06416": [
+    "L0092",
+    "L0049",
+    "L0035"
+  ],
+  "S06417": [
+    "L0084",
+    "L0083",
+    "L0057"
+  ],
+  "S06418": [
+    "L0064",
+    "L0042",
+    "L0035"
+  ],
+  "S06419": [
+    "L0019",
+    "L0090",
+    "L0056"
+  ],
+  "S06420": [
+    "L0041",
+    "L0093",
+    "L0085"
+  ],
+  "S06421": [
+    "L0059",
+    "L0027",
+    "L0026"
+  ],
+  "S06422": [
+    "L0056",
+    "L0002",
+    "L0092"
+  ],
+  "S06423": [
+    "L0009",
+    "L0090",
+    "L0026"
+  ],
+  "S06424": [
+    "L0058",
+    "L0061",
+    "L0049"
+  ],
+  "S06425": [
+    "L0098",
+    "L0049",
+    "L0055"
+  ],
+  "S06426": [
+    "L0080",
+    "L0066",
+    "L0094"
+  ],
+  "S06427": [
+    "L0070",
+    "L0028",
+    "L0001"
+  ],
+  "S06428": [
+    "L0024",
+    "L0090",
+    "L0008"
+  ],
+  "S06429": [
+    "L0071",
+    "L0022",
+    "L0057"
+  ],
+  "S06430": [
+    "L0002",
+    "L0077",
+    "L0042"
+  ],
+  "S06431": [
+    "L0096",
+    "L0032",
+    "L0011"
+  ],
+  "S06432": [
+    "L0088",
+    "L0069",
+    "L0047"
+  ],
+  "S06433": [
+    "L0029",
+    "L0084",
+    "L0028"
+  ],
+  "S06434": [
+    "L0011",
+    "L0099",
+    "L0027"
+  ],
+  "S06435": [
+    "L0092",
+    "L0019",
+    "L0081"
+  ],
+  "S06436": [
+    "L0098",
+    "L0086",
+    "L0095"
+  ],
+  "S06437": [
+    "L0064",
+    "L0070",
+    "L0045"
+  ],
+  "S06438": [
+    "L0053",
+    "L0048",
+    "L0002"
+  ],
+  "S06439": [
+    "L0069",
+    "L0047",
+    "L0044"
+  ],
+  "S06440": [
+    "L0085",
+    "L0084",
+    "L0088"
+  ],
+  "S06441": [
+    "L0054",
+    "L0057",
+    "L0032"
+  ],
+  "S06442": [
+    "L0070",
+    "L0024",
+    "L0001"
+  ],
+  "S06443": [
+    "L0082",
+    "L0026",
+    "L0090"
+  ],
+  "S06444": [
+    "L0064",
+    "L0061",
+    "L0074"
+  ],
+  "S06445": [
+    "L0005",
+    "L0089",
+    "L0067"
+  ],
+  "S06446": [
+    "L0099",
+    "L0096",
+    "L0039"
+  ],
+  "S06447": [
+    "L0003",
+    "L0061",
+    "L0084"
+  ],
+  "S06448": [
+    "L0027",
+    "L0032",
+    "L0098"
+  ],
+  "S06449": [
+    "L0059",
+    "L0098",
+    "L0080"
+  ],
+  "S06450": [
+    "L0003",
+    "L0041",
+    "L0091"
+  ],
+  "S06451": [
+    "L0040",
+    "L0047",
+    "L0031"
+  ],
+  "S06452": [
+    "L0068",
+    "L0012",
+    "L0091"
+  ],
+  "S06453": [
+    "L0072",
+    "L0040",
+    "L0082"
+  ],
+  "S06454": [
+    "L0015",
+    "L0032",
+    "L0028"
+  ],
+  "S06455": [
+    "L0071",
+    "L0011",
+    "L0069"
+  ],
+  "S06456": [
+    "L0099",
+    "L0065",
+    "L0045"
+  ],
+  "S06457": [
+    "L0042",
+    "L0070",
+    "L0059"
+  ],
+  "S06458": [
+    "L0096",
+    "L0055",
+    "L0014"
+  ],
+  "S06459": [
+    "L0053",
+    "L0004",
+    "L0080"
+  ],
+  "S06460": [
+    "L0002",
+    "L0042",
+    "L0034"
+  ],
+  "S06461": [
+    "L0065",
+    "L0064",
+    "L0070"
+  ],
+  "S06462": [
+    "L0099",
+    "L0098",
+    "L0064"
+  ],
+  "S06463": [
+    "L0005",
+    "L0092",
+    "L0074"
+  ],
+  "S06464": [
+    "L0059",
+    "L0090",
+    "L0022"
+  ],
+  "S06465": [
+    "L0090",
+    "L0047",
+    "L0055"
+  ],
+  "S06466": [
+    "L0004",
+    "L0065",
+    "L0076"
+  ],
+  "S06467": [
+    "L0083",
+    "L0023",
+    "L0008"
+  ],
+  "S06468": [
+    "L0013",
+    "L0090",
+    "L0058"
+  ],
+  "S06469": [
+    "L0061",
+    "L0001",
+    "L0011"
+  ],
+  "S06470": [
+    "L0032",
+    "L0019",
+    "L0086"
+  ],
+  "S06471": [
+    "L0076",
+    "L0008",
+    "L0054"
+  ],
+  "S06472": [
+    "L0004",
+    "L0054",
+    "L0065"
+  ],
+  "S06473": [
+    "L0022",
+    "L0099",
+    "L0047"
+  ],
+  "S06474": [
+    "L0067",
+    "L0024",
+    "L0094"
+  ],
+  "S06475": [
+    "L0024",
+    "L0066",
+    "L0053"
+  ],
+  "S06476": [
+    "L0082",
+    "L0010",
+    "L0027"
+  ],
+  "S06477": [
+    "L0022",
+    "L0023",
+    "L0077"
+  ],
+  "S06478": [
+    "L0100",
+    "L0008",
+    "L0083"
+  ],
+  "S06479": [
+    "L0008",
+    "L0089",
+    "L0098"
+  ],
+  "S06480": [
+    "L0064",
+    "L0031",
+    "L0058"
+  ],
+  "S06481": [
+    "L0092",
+    "L0013",
+    "L0089"
+  ],
+  "S06482": [
+    "L0029",
+    "L0044",
+    "L0034"
+  ],
+  "S06483": [
+    "L0044",
+    "L0055",
+    "L0042"
+  ],
+  "S06484": [
+    "L0044",
+    "L0083",
+    "L0073"
+  ],
+  "S06485": [
+    "L0026",
+    "L0072",
+    "L0088"
+  ],
+  "S06486": [
+    "L0026",
+    "L0005",
+    "L0098"
+  ],
+  "S06487": [
+    "L0092",
+    "L0029",
+    "L0100"
+  ],
+  "S06488": [
+    "L0082",
+    "L0005",
+    "L0054"
+  ],
+  "S06489": [
+    "L0012",
+    "L0032",
+    "L0100"
+  ],
+  "S06490": [
+    "L0073",
+    "L0096",
+    "L0040"
+  ],
+  "S06491": [
+    "L0073",
+    "L0083",
+    "L0027"
+  ],
+  "S06492": [
+    "L0056",
+    "L0023",
+    "L0076"
+  ],
+  "S06493": [
+    "L0089",
+    "L0010",
+    "L0086"
+  ],
+  "S06494": [
+    "L0013",
+    "L0083",
+    "L0057"
+  ],
+  "S06495": [
+    "L0001",
+    "L0013",
+    "L0017"
+  ],
+  "S06496": [
+    "L0069",
+    "L0095",
+    "L0059"
+  ],
+  "S06497": [
+    "L0090",
+    "L0072",
+    "L0056"
+  ],
+  "S06498": [
+    "L0063",
+    "L0082",
+    "L0061"
+  ],
+  "S06499": [
+    "L0099",
+    "L0021",
+    "L0023"
+  ],
+  "S06500": [
+    "L0054",
+    "L0003",
+    "L0031"
+  ],
+  "S06501": [
+    "L0022",
+    "L0003",
+    "L0057"
+  ],
+  "S06502": [
+    "L0095",
+    "L0032",
+    "L0008"
+  ],
+  "S06503": [
+    "L0067",
+    "L0100",
+    "L0010"
+  ],
+  "S06504": [
+    "L0053",
+    "L0064",
+    "L0009"
+  ],
+  "S06505": [
+    "L0094",
+    "L0028",
+    "L0059"
+  ],
+  "S06506": [
+    "L0012",
+    "L0067",
+    "L0009"
+  ],
+  "S06507": [
+    "L0071",
+    "L0059",
+    "L0095"
+  ],
+  "S06508": [
+    "L0097",
+    "L0042",
+    "L0053"
+  ],
+  "S06509": [
+    "L0090",
+    "L0073",
+    "L0067"
+  ],
+  "S06510": [
+    "L0031",
+    "L0004",
+    "L0073"
+  ],
+  "S06511": [
+    "L0044",
+    "L0032",
+    "L0064"
+  ],
+  "S06512": [
+    "L0011",
+    "L0059",
+    "L0015"
+  ],
+  "S06513": [
+    "L0021",
+    "L0004",
+    "L0058"
+  ],
+  "S06514": [
+    "L0003",
+    "L0029",
+    "L0066"
+  ],
+  "S06515": [
+    "L0096",
+    "L0002",
+    "L0055"
+  ],
+  "S06516": [
+    "L0073",
+    "L0088",
+    "L0080"
+  ],
+  "S06517": [
+    "L0076",
+    "L0013",
+    "L0009"
+  ],
+  "S06518": [
+    "L0085",
+    "L0066",
+    "L0044"
+  ],
+  "S06519": [
+    "L0004",
+    "L0100",
+    "L0083"
+  ],
+  "S06520": [
+    "L0015",
+    "L0013",
+    "L0056"
+  ],
+  "S06521": [
+    "L0059",
+    "L0015",
+    "L0076"
+  ],
+  "S06522": [
+    "L0005",
+    "L0026",
+    "L0083"
+  ],
+  "S06523": [
+    "L0098",
+    "L0048",
+    "L0005"
+  ],
+  "S06524": [
+    "L0001",
+    "L0063",
+    "L0057"
+  ],
+  "S06525": [
+    "L0027",
+    "L0088",
+    "L0024"
+  ],
+  "S06526": [
+    "L0027",
+    "L0029",
+    "L0099"
+  ],
+  "S06527": [
+    "L0041",
+    "L0097",
+    "L0056"
+  ],
+  "S06528": [
+    "L0004",
+    "L0077",
+    "L0098"
+  ],
+  "S06529": [
+    "L0065",
+    "L0008",
+    "L0038"
+  ],
+  "S06530": [
+    "L0040",
+    "L0099",
+    "L0048"
+  ],
+  "S06531": [
+    "L0056",
+    "L0028",
+    "L0040"
+  ],
+  "S06532": [
+    "L0059",
+    "L0038",
+    "L0027"
+  ],
+  "S06533": [
+    "L0068",
+    "L0074",
+    "L0061"
+  ],
+  "S06534": [
+    "L0090",
+    "L0023",
+    "L0064"
+  ],
+  "S06535": [
+    "L0090",
+    "L0002",
+    "L0027"
+  ],
+  "S06536": [
+    "L0092",
+    "L0001",
+    "L0064"
+  ],
+  "S06537": [
+    "L0029",
+    "L0026",
+    "L0003"
+  ],
+  "S06538": [
+    "L0004",
+    "L0055",
+    "L0082"
+  ],
+  "S06539": [
+    "L0001",
+    "L0005",
+    "L0009"
+  ],
+  "S06540": [
+    "L0019",
+    "L0091",
+    "L0096"
+  ],
+  "S06541": [
+    "L0024",
+    "L0026",
+    "L0063"
+  ],
+  "S06542": [
+    "L0004",
+    "L0068",
+    "L0070"
+  ],
+  "S06543": [
+    "L0090",
+    "L0056",
+    "L0041"
+  ],
+  "S06544": [
+    "L0023",
+    "L0061",
+    "L0082"
+  ],
+  "S06545": [
+    "L0036",
+    "L0085",
+    "L0066"
+  ],
+  "S06546": [
+    "L0012",
+    "L0022",
+    "L0067"
+  ],
+  "S06547": [
+    "L0090",
+    "L0058",
+    "L0015"
+  ],
+  "S06548": [
+    "L0070",
+    "L0041",
+    "L0076"
+  ],
+  "S06549": [
+    "L0063",
+    "L0038",
+    "L0065"
+  ],
+  "S06550": [
+    "L0040",
+    "L0100",
+    "L0077"
+  ],
+  "S06551": [
+    "L0065",
+    "L0092",
+    "L0011"
+  ],
+  "S06552": [
+    "L0042",
+    "L0047",
+    "L0084"
+  ],
+  "S06553": [
+    "L0062",
+    "L0086",
+    "L0003"
+  ],
+  "S06554": [
+    "L0095",
+    "L0096",
+    "L0076"
+  ],
+  "S06555": [
+    "L0040",
+    "L0047",
+    "L0008"
+  ],
+  "S06556": [
+    "L0096",
+    "L0055",
+    "L0065"
+  ],
+  "S06557": [
+    "L0098",
+    "L0017",
+    "L0085"
+  ],
+  "S06558": [
+    "L0009",
+    "L0024",
+    "L0065"
+  ],
+  "S06559": [
+    "L0004",
+    "L0068",
+    "L0065"
+  ],
+  "S06560": [
+    "L0070",
+    "L0017",
+    "L0073"
+  ],
+  "S06561": [
+    "L0095",
+    "L0074",
+    "L0027"
+  ],
+  "S06562": [
+    "L0028",
+    "L0057",
+    "L0076"
+  ],
+  "S06563": [
+    "L0067",
+    "L0027",
+    "L0093"
+  ],
+  "S06564": [
+    "L0048",
+    "L0081",
+    "L0019"
+  ],
+  "S06565": [
+    "L0062",
+    "L0058",
+    "L0024"
+  ],
+  "S06566": [
+    "L0098",
+    "L0059",
+    "L0076"
+  ],
+  "S06567": [
+    "L0098",
+    "L0083",
+    "L0009"
+  ],
+  "S06568": [
+    "L0034",
+    "L0042",
+    "L0029"
+  ],
+  "S06569": [
+    "L0092",
+    "L0055",
+    "L0049"
+  ],
+  "S06570": [
+    "L0063",
+    "L0099",
+    "L0008"
+  ],
+  "S06571": [
+    "L0049",
+    "L0088",
+    "L0070"
+  ],
+  "S06572": [
+    "L0005",
+    "L0067",
+    "L0045"
+  ],
+  "S06573": [
+    "L0063",
+    "L0035",
+    "L0058"
+  ],
+  "S06574": [
+    "L0023",
+    "L0022",
+    "L0019"
+  ],
+  "S06575": [
+    "L0096",
+    "L0059",
+    "L0028"
+  ],
+  "S06576": [
+    "L0004",
+    "L0070",
+    "L0091"
+  ],
+  "S06577": [
+    "L0065",
+    "L0074",
+    "L0012"
+  ],
+  "S06578": [
+    "L0100",
+    "L0012",
+    "L0069"
+  ],
+  "S06579": [
+    "L0086",
+    "L0088",
+    "L0023"
+  ],
+  "S06580": [
+    "L0028",
+    "L0026",
+    "L0035"
+  ],
+  "S06581": [
+    "L0028",
+    "L0039",
+    "L0004"
+  ],
+  "S06582": [
+    "L0084",
+    "L0023",
+    "L0080"
+  ],
+  "S06583": [
+    "L0059",
+    "L0097",
+    "L0048"
+  ],
+  "S06584": [
+    "L0056",
+    "L0021",
+    "L0067"
+  ],
+  "S06585": [
+    "L0044",
+    "L0027",
+    "L0057"
+  ],
+  "S06586": [
+    "L0098",
+    "L0081",
+    "L0056"
+  ],
+  "S06587": [
+    "L0085",
+    "L0024",
+    "L0063"
+  ],
+  "S06588": [
+    "L0089",
+    "L0053",
+    "L0040"
+  ],
+  "S06589": [
+    "L0063",
+    "L0058",
+    "L0064"
+  ],
+  "S06590": [
+    "L0076",
+    "L0082",
+    "L0053"
+  ],
+  "S06591": [
+    "L0067",
+    "L0015",
+    "L0026"
+  ],
+  "S06592": [
+    "L0024",
+    "L0001",
+    "L0092"
+  ],
+  "S06593": [
+    "L0094",
+    "L0099",
+    "L0083"
+  ],
+  "S06594": [
+    "L0017",
+    "L0100",
+    "L0035"
+  ],
+  "S06595": [
+    "L0094",
+    "L0100",
+    "L0095"
+  ],
+  "S06596": [
+    "L0082",
+    "L0019",
+    "L0045"
+  ],
+  "S06597": [
+    "L0096",
+    "L0028",
+    "L0063"
+  ],
+  "S06598": [
+    "L0013",
+    "L0005",
+    "L0002"
+  ],
+  "S06599": [
+    "L0019",
+    "L0061",
+    "L0077"
+  ],
+  "S06600": [
+    "L0054",
+    "L0017",
+    "L0072"
+  ],
+  "S06601": [
+    "L0062",
+    "L0092",
+    "L0042"
+  ],
+  "S06602": [
+    "L0078",
+    "L0039",
+    "L0027"
+  ],
+  "S06603": [
+    "L0089",
+    "L0088",
+    "L0012"
+  ],
+  "S06604": [
+    "L0082",
+    "L0028",
+    "L0004"
+  ],
+  "S06605": [
+    "L0100",
+    "L0028",
+    "L0083"
+  ],
+  "S06606": [
+    "L0067",
+    "L0095",
+    "L0035"
+  ],
+  "S06607": [
+    "L0071",
+    "L0066",
+    "L0044"
+  ],
+  "S06608": [
+    "L0003",
+    "L0093",
+    "L0023"
+  ],
+  "S06609": [
+    "L0064",
+    "L0028",
+    "L0071"
+  ],
+  "S06610": [
+    "L0090",
+    "L0009",
+    "L0063"
+  ],
+  "S06611": [
+    "L0014",
+    "L0100",
+    "L0093"
+  ],
+  "S06612": [
+    "L0066",
+    "L0056",
+    "L0039"
+  ],
+  "S06613": [
+    "L0081",
+    "L0073",
+    "L0008"
+  ],
+  "S06614": [
+    "L0077",
+    "L0097",
+    "L0017"
+  ],
+  "S06615": [
+    "L0045",
+    "L0081",
+    "L0078"
+  ],
+  "S06616": [
+    "L0088",
+    "L0100",
+    "L0065"
+  ],
+  "S06617": [
+    "L0076",
+    "L0044",
+    "L0031"
+  ],
+  "S06618": [
+    "L0039",
+    "L0086",
+    "L0061"
+  ],
+  "S06619": [
+    "L0027",
+    "L0051",
+    "L0095"
+  ],
+  "S06620": [
+    "L0024",
+    "L0073",
+    "L0011"
+  ],
+  "S06621": [
+    "L0011",
+    "L0077",
+    "L0065"
+  ],
+  "S06622": [
+    "L0090",
+    "L0067",
+    "L0089"
+  ],
+  "S06623": [
+    "L0014",
+    "L0044",
+    "L0077"
+  ],
+  "S06624": [
+    "L0039",
+    "L0019",
+    "L0049"
+  ],
+  "S06625": [
+    "L0024",
+    "L0061",
+    "L0015"
+  ],
+  "S06626": [
+    "L0023",
+    "L0010",
+    "L0093"
+  ],
+  "S06627": [
+    "L0089",
+    "L0034",
+    "L0001"
+  ],
+  "S06628": [
+    "L0005",
+    "L0066",
+    "L0089"
+  ],
+  "S06629": [
+    "L0095",
+    "L0078",
+    "L0017"
+  ],
+  "S06630": [
+    "L0076",
+    "L0089",
+    "L0058"
+  ],
+  "S06631": [
+    "L0057",
+    "L0015",
+    "L0001"
+  ],
+  "S06632": [
+    "L0040",
+    "L0039",
+    "L0080"
+  ],
+  "S06633": [
+    "L0053",
+    "L0047",
+    "L0038"
+  ],
+  "S06634": [
+    "L0002",
+    "L0080",
+    "L0059"
+  ],
+  "S06635": [
+    "L0082",
+    "L0057",
+    "L0014"
+  ],
+  "S06636": [
+    "L0012",
+    "L0053",
+    "L0091"
+  ],
+  "S06637": [
+    "L0069",
+    "L0038",
+    "L0062"
+  ],
+  "S06638": [
+    "L0063",
+    "L0024",
+    "L0039"
+  ],
+  "S06639": [
+    "L0048",
+    "L0034",
+    "L0077"
+  ],
+  "S06640": [
+    "L0059",
+    "L0048",
+    "L0064"
+  ],
+  "S06641": [
+    "L0096",
+    "L0022",
+    "L0021"
+  ],
+  "S06642": [
+    "L0066",
+    "L0059",
+    "L0081"
+  ],
+  "S06643": [
+    "L0076",
+    "L0039",
+    "L0062"
+  ],
+  "S06644": [
+    "L0098",
+    "L0059",
+    "L0070"
+  ],
+  "S06645": [
+    "L0047",
+    "L0059",
+    "L0066"
+  ],
+  "S06646": [
+    "L0048",
+    "L0017",
+    "L0077"
+  ],
+  "S06647": [
+    "L0049",
+    "L0021",
+    "L0072"
+  ],
+  "S06648": [
+    "L0026",
+    "L0058",
+    "L0041"
+  ],
+  "S06649": [
+    "L0031",
+    "L0057",
+    "L0080"
+  ],
+  "S06650": [
+    "L0039",
+    "L0019",
+    "L0064"
+  ],
+  "S06651": [
+    "L0064",
+    "L0074",
+    "L0082"
+  ],
+  "S06652": [
+    "L0074",
+    "L0090",
+    "L0097"
+  ],
+  "S06653": [
+    "L0038",
+    "L0066",
+    "L0081"
+  ],
+  "S06654": [
+    "L0053",
+    "L0078",
+    "L0039"
+  ],
+  "S06655": [
+    "L0054",
+    "L0083",
+    "L0001"
+  ],
+  "S06656": [
+    "L0014",
+    "L0076",
+    "L0054"
+  ],
+  "S06657": [
+    "L0065",
+    "L0039",
+    "L0070"
+  ],
+  "S06658": [
+    "L0009",
+    "L0091",
+    "L0008"
+  ],
+  "S06659": [
+    "L0067",
+    "L0014",
+    "L0044"
+  ],
+  "S06660": [
+    "L0034",
+    "L0055",
+    "L0029"
+  ],
+  "S06661": [
+    "L0019",
+    "L0031",
+    "L0061"
+  ],
+  "S06662": [
+    "L0004",
+    "L0039",
+    "L0008"
+  ],
+  "S06663": [
+    "L0002",
+    "L0063",
+    "L0085"
+  ],
+  "S06664": [
+    "L0001",
+    "L0022",
+    "L0019"
+  ],
+  "S06665": [
+    "L0095",
+    "L0034",
+    "L0013"
+  ],
+  "S06666": [
+    "L0074",
+    "L0034",
+    "L0001"
+  ],
+  "S06667": [
+    "L0083",
+    "L0097",
+    "L0068"
+  ],
+  "S06668": [
+    "L0011",
+    "L0085",
+    "L0029"
+  ],
+  "S06669": [
+    "L0039",
+    "L0068",
+    "L0063"
+  ],
+  "S06670": [
+    "L0076",
+    "L0001",
+    "L0070"
+  ],
+  "S06671": [
+    "L0035",
+    "L0063",
+    "L0008"
+  ],
+  "S06672": [
+    "L0096",
+    "L0045",
+    "L0004"
+  ],
+  "S06673": [
+    "L0092",
+    "L0058",
+    "L0062"
+  ],
+  "S06674": [
+    "L0057",
+    "L0073",
+    "L0100"
+  ],
+  "S06675": [
+    "L0023",
+    "L0094",
+    "L0083"
+  ],
+  "S06676": [
+    "L0014",
+    "L0042",
+    "L0017"
+  ],
+  "S06677": [
+    "L0017",
+    "L0045",
+    "L0004"
+  ],
+  "S06678": [
+    "L0024",
+    "L0097",
+    "L0023"
+  ],
+  "S06679": [
+    "L0063",
+    "L0035",
+    "L0091"
+  ],
+  "S06680": [
+    "L0054",
+    "L0034",
+    "L0068"
+  ],
+  "S06681": [
+    "L0082",
+    "L0081",
+    "L0021"
+  ],
+  "S06682": [
+    "L0089",
+    "L0017",
+    "L0076"
+  ],
+  "S06683": [
+    "L0021",
+    "L0082",
+    "L0072"
+  ],
+  "S06684": [
+    "L0076",
+    "L0029",
+    "L0073"
+  ],
+  "S06685": [
+    "L0088",
+    "L0057",
+    "L0022"
+  ],
+  "S06686": [
+    "L0068",
+    "L0042",
+    "L0063"
+  ],
+  "S06687": [
+    "L0013",
+    "L0090",
+    "L0081"
+  ],
+  "S06688": [
+    "L0056",
+    "L0039",
+    "L0073"
+  ],
+  "S06689": [
+    "L0041",
+    "L0058",
+    "L0077"
+  ],
+  "S06690": [
+    "L0067",
+    "L0004",
+    "L0072"
+  ],
+  "S06691": [
+    "L0001",
+    "L0088",
+    "L0066"
+  ],
+  "S06692": [
+    "L0072",
+    "L0038",
+    "L0069"
+  ],
+  "S06693": [
+    "L0040",
+    "L0042",
+    "L0077"
+  ],
+  "S06694": [
+    "L0076",
+    "L0024",
+    "L0039"
+  ],
+  "S06695": [
+    "L0071",
+    "L0048",
+    "L0061"
+  ],
+  "S06696": [
+    "L0078",
+    "L0094",
+    "L0026"
+  ],
+  "S06697": [
+    "L0083",
+    "L0014",
+    "L0032"
+  ],
+  "S06698": [
+    "L0051",
+    "L0083",
+    "L0098"
+  ],
+  "S06699": [
+    "L0021",
+    "L0010",
+    "L0026"
+  ],
+  "S06700": [
+    "L0057",
+    "L0005",
+    "L0056"
+  ],
+  "S06701": [
+    "L0097",
+    "L0027",
+    "L0074"
+  ],
+  "S06702": [
+    "L0064",
+    "L0032",
+    "L0067"
+  ],
+  "S06703": [
+    "L0080",
+    "L0032",
+    "L0028"
+  ],
+  "S06704": [
+    "L0065",
+    "L0009",
+    "L0057"
+  ],
+  "S06705": [
+    "L0083",
+    "L0032",
+    "L0055"
+  ],
+  "S06706": [
+    "L0031",
+    "L0083",
+    "L0086"
+  ],
+  "S06707": [
+    "L0094",
+    "L0092",
+    "L0070"
+  ],
+  "S06708": [
+    "L0026",
+    "L0099",
+    "L0097"
+  ],
+  "S06709": [
+    "L0080",
+    "L0091",
+    "L0036"
+  ],
+  "S06710": [
+    "L0094",
+    "L0071",
+    "L0005"
+  ],
+  "S06711": [
+    "L0041",
+    "L0078",
+    "L0095"
+  ],
+  "S06712": [
+    "L0054",
+    "L0089",
+    "L0034"
+  ],
+  "S06713": [
+    "L0001",
+    "L0008",
+    "L0010"
+  ],
+  "S06714": [
+    "L0023",
+    "L0041",
+    "L0071"
+  ],
+  "S06715": [
+    "L0096",
+    "L0038",
+    "L0017"
+  ],
+  "S06716": [
+    "L0083",
+    "L0069",
+    "L0100"
+  ],
+  "S06717": [
+    "L0099",
+    "L0048",
+    "L0057"
+  ],
+  "S06718": [
+    "L0080",
+    "L0032",
+    "L0027"
+  ],
+  "S06719": [
+    "L0062",
+    "L0089",
+    "L0059"
+  ],
+  "S06720": [
+    "L0071",
+    "L0065",
+    "L0054"
+  ],
+  "S06721": [
+    "L0074",
+    "L0011",
+    "L0024"
+  ],
+  "S06722": [
+    "L0038",
+    "L0019",
+    "L0026"
+  ],
+  "S06723": [
+    "L0065",
+    "L0074",
+    "L0086"
+  ],
+  "S06724": [
+    "L0035",
+    "L0062",
+    "L0008"
+  ],
+  "S06725": [
+    "L0003",
+    "L0066",
+    "L0035"
+  ],
+  "S06726": [
+    "L0014",
+    "L0067",
+    "L0092"
+  ],
+  "S06727": [
+    "L0090",
+    "L0067",
+    "L0086"
+  ],
+  "S06728": [
+    "L0035",
+    "L0099",
+    "L0001"
+  ],
+  "S06729": [
+    "L0023",
+    "L0084",
+    "L0100"
+  ],
+  "S06730": [
+    "L0078",
+    "L0053",
+    "L0063"
+  ],
+  "S06731": [
+    "L0086",
+    "L0085",
+    "L0011"
+  ],
+  "S06732": [
+    "L0013",
+    "L0095",
+    "L0080"
+  ],
+  "S06733": [
+    "L0002",
+    "L0035",
+    "L0068"
+  ],
+  "S06734": [
+    "L0096",
+    "L0061",
+    "L0053"
+  ],
+  "S06735": [
+    "L0013",
+    "L0003",
+    "L0040"
+  ],
+  "S06736": [
+    "L0096",
+    "L0004",
+    "L0093"
+  ],
+  "S06737": [
+    "L0082",
+    "L0062",
+    "L0026"
+  ],
+  "S06738": [
+    "L0074",
+    "L0044",
+    "L0019"
+  ],
+  "S06739": [
+    "L0093",
+    "L0072",
+    "L0047"
+  ],
+  "S06740": [
+    "L0038",
+    "L0063",
+    "L0064"
+  ],
+  "S06741": [
+    "L0081",
+    "L0057",
+    "L0039"
+  ],
+  "S06742": [
+    "L0093",
+    "L0044",
+    "L0014"
+  ],
+  "S06743": [
+    "L0008",
+    "L0026",
+    "L0054"
+  ],
+  "S06744": [
+    "L0098",
+    "L0092",
+    "L0090"
+  ],
+  "S06745": [
+    "L0078",
+    "L0011",
+    "L0084"
+  ],
+  "S06746": [
+    "L0077",
+    "L0070",
+    "L0054"
+  ],
+  "S06747": [
+    "L0064",
+    "L0004",
+    "L0019"
+  ],
+  "S06748": [
+    "L0070",
+    "L0095",
+    "L0023"
+  ],
+  "S06749": [
+    "L0024",
+    "L0004",
+    "L0021"
+  ],
+  "S06750": [
+    "L0070",
+    "L0041",
+    "L0005"
+  ],
+  "S06751": [
+    "L0098",
+    "L0045",
+    "L0044"
+  ],
+  "S06752": [
+    "L0064",
+    "L0019",
+    "L0058"
+  ],
+  "S06753": [
+    "L0049",
+    "L0062",
+    "L0096"
+  ],
+  "S06754": [
+    "L0099",
+    "L0032",
+    "L0086"
+  ],
+  "S06755": [
+    "L0086",
+    "L0010",
+    "L0057"
+  ],
+  "S06756": [
+    "L0082",
+    "L0088",
+    "L0002"
+  ],
+  "S06757": [
+    "L0027",
+    "L0080",
+    "L0003"
+  ],
+  "S06758": [
+    "L0099",
+    "L0044",
+    "L0056"
+  ],
+  "S06759": [
+    "L0023",
+    "L0058",
+    "L0015"
+  ],
+  "S06760": [
+    "L0096",
+    "L0089",
+    "L0068"
+  ],
+  "S06761": [
+    "L0011",
+    "L0042",
+    "L0091"
+  ],
+  "S06762": [
+    "L0017",
+    "L0083",
+    "L0012"
+  ],
+  "S06763": [
+    "L0093",
+    "L0022",
+    "L0078"
+  ],
+  "S06764": [
+    "L0005",
+    "L0083",
+    "L0038"
+  ],
+  "S06765": [
+    "L0058",
+    "L0015",
+    "L0089"
+  ],
+  "S06766": [
+    "L0036",
+    "L0029",
+    "L0039"
+  ],
+  "S06767": [
+    "L0066",
+    "L0034",
+    "L0095"
+  ],
+  "S06768": [
+    "L0071",
+    "L0058",
+    "L0027"
+  ],
+  "S06769": [
+    "L0045",
+    "L0058",
+    "L0088"
+  ],
+  "S06770": [
+    "L0034",
+    "L0036",
+    "L0074"
+  ],
+  "S06771": [
+    "L0054",
+    "L0022",
+    "L0047"
+  ],
+  "S06772": [
+    "L0089",
+    "L0001",
+    "L0013"
+  ],
+  "S06773": [
+    "L0055",
+    "L0053",
+    "L0005"
+  ],
+  "S06774": [
+    "L0013",
+    "L0096",
+    "L0002"
+  ],
+  "S06775": [
+    "L0049",
+    "L0019",
+    "L0028"
+  ],
+  "S06776": [
+    "L0047",
+    "L0034",
+    "L0082"
+  ],
+  "S06777": [
+    "L0088",
+    "L0058",
+    "L0072"
+  ],
+  "S06778": [
+    "L0014",
+    "L0068",
+    "L0081"
+  ],
+  "S06779": [
+    "L0085",
+    "L0067",
+    "L0021"
+  ],
+  "S06780": [
+    "L0013",
+    "L0093",
+    "L0074"
+  ],
+  "S06781": [
+    "L0055",
+    "L0029",
+    "L0049"
+  ],
+  "S06782": [
+    "L0040",
+    "L0098",
+    "L0070"
+  ],
+  "S06783": [
+    "L0048",
+    "L0005",
+    "L0003"
+  ],
+  "S06784": [
+    "L0002",
+    "L0099",
+    "L0045"
+  ],
+  "S06785": [
+    "L0012",
+    "L0054",
+    "L0088"
+  ],
+  "S06786": [
+    "L0048",
+    "L0009",
+    "L0041"
+  ],
+  "S06787": [
+    "L0083",
+    "L0023",
+    "L0044"
+  ],
+  "S06788": [
+    "L0094",
+    "L0010",
+    "L0064"
+  ],
+  "S06789": [
+    "L0068",
+    "L0047",
+    "L0092"
+  ],
+  "S06790": [
+    "L0038",
+    "L0042",
+    "L0054"
+  ],
+  "S06791": [
+    "L0085",
+    "L0078",
+    "L0072"
+  ],
+  "S06792": [
+    "L0021",
+    "L0069",
+    "L0062"
+  ],
+  "S06793": [
+    "L0028",
+    "L0083",
+    "L0009"
+  ],
+  "S06794": [
+    "L0039",
+    "L0077",
+    "L0064"
+  ],
+  "S06795": [
+    "L0004",
+    "L0040",
+    "L0013"
+  ],
+  "S06796": [
+    "L0053",
+    "L0015",
+    "L0031"
+  ],
+  "S06797": [
+    "L0022",
+    "L0071",
+    "L0002"
+  ],
+  "S06798": [
+    "L0061",
+    "L0084",
+    "L0067"
+  ],
+  "S06799": [
+    "L0021",
+    "L0084",
+    "L0041"
+  ],
+  "S06800": [
+    "L0080",
+    "L0048",
+    "L0045"
+  ],
+  "S06801": [
+    "L0066",
+    "L0070",
+    "L0076"
+  ],
+  "S06802": [
+    "L0010",
+    "L0028",
+    "L0084"
+  ],
+  "S06803": [
+    "L0059",
+    "L0034",
+    "L0041"
+  ],
+  "S06804": [
+    "L0026",
+    "L0038",
+    "L0051"
+  ],
+  "S06805": [
+    "L0024",
+    "L0031",
+    "L0088"
+  ],
+  "S06806": [
+    "L0042",
+    "L0086",
+    "L0004"
+  ],
+  "S06807": [
+    "L0031",
+    "L0039",
+    "L0068"
+  ],
+  "S06808": [
+    "L0027",
+    "L0041",
+    "L0089"
+  ],
+  "S06809": [
+    "L0022",
+    "L0092",
+    "L0028"
+  ],
+  "S06810": [
+    "L0041",
+    "L0084",
+    "L0051"
+  ],
+  "S06811": [
+    "L0003",
+    "L0073",
+    "L0034"
+  ],
+  "S06812": [
+    "L0010",
+    "L0067",
+    "L0028"
+  ],
+  "S06813": [
+    "L0063",
+    "L0081",
+    "L0064"
+  ],
+  "S06814": [
+    "L0036",
+    "L0064",
+    "L0085"
+  ],
+  "S06815": [
+    "L0084",
+    "L0080",
+    "L0017"
+  ],
+  "S06816": [
+    "L0022",
+    "L0014",
+    "L0085"
+  ],
+  "S06817": [
+    "L0002",
+    "L0013",
+    "L0041"
+  ],
+  "S06818": [
+    "L0065",
+    "L0072",
+    "L0047"
+  ],
+  "S06819": [
+    "L0067",
+    "L0058",
+    "L0065"
+  ],
+  "S06820": [
+    "L0044",
+    "L0012",
+    "L0027"
+  ],
+  "S06821": [
+    "L0093",
+    "L0041",
+    "L0035"
+  ],
+  "S06822": [
+    "L0008",
+    "L0009",
+    "L0082"
+  ],
+  "S06823": [
+    "L0011",
+    "L0072",
+    "L0041"
+  ],
+  "S06824": [
+    "L0072",
+    "L0023",
+    "L0094"
+  ],
+  "S06825": [
+    "L0098",
+    "L0082",
+    "L0049"
+  ],
+  "S06826": [
+    "L0002",
+    "L0094",
+    "L0024"
+  ],
+  "S06827": [
+    "L0058",
+    "L0059",
+    "L0061"
+  ],
+  "S06828": [
+    "L0051",
+    "L0081",
+    "L0100"
+  ],
+  "S06829": [
+    "L0042",
+    "L0023",
+    "L0003"
+  ],
+  "S06830": [
+    "L0077",
+    "L0034",
+    "L0095"
+  ],
+  "S06831": [
+    "L0065",
+    "L0057",
+    "L0076"
+  ],
+  "S06832": [
+    "L0051",
+    "L0071",
+    "L0023"
+  ],
+  "S06833": [
+    "L0076",
+    "L0049",
+    "L0056"
+  ],
+  "S06834": [
+    "L0058",
+    "L0099",
+    "L0095"
+  ],
+  "S06835": [
+    "L0063",
+    "L0065",
+    "L0092"
+  ],
+  "S06836": [
+    "L0066",
+    "L0081",
+    "L0051"
+  ],
+  "S06837": [
+    "L0090",
+    "L0040",
+    "L0032"
+  ],
+  "S06838": [
+    "L0070",
+    "L0036",
+    "L0044"
+  ],
+  "S06839": [
+    "L0082",
+    "L0028",
+    "L0023"
+  ],
+  "S06840": [
+    "L0094",
+    "L0083",
+    "L0085"
+  ],
+  "S06841": [
+    "L0081",
+    "L0100",
+    "L0076"
+  ],
+  "S06842": [
+    "L0057",
+    "L0044",
+    "L0070"
+  ],
+  "S06843": [
+    "L0051",
+    "L0073",
+    "L0084"
+  ],
+  "S06844": [
+    "L0009",
+    "L0032",
+    "L0042"
+  ],
+  "S06845": [
+    "L0073",
+    "L0011",
+    "L0003"
+  ],
+  "S06846": [
+    "L0034",
+    "L0094",
+    "L0017"
+  ],
+  "S06847": [
+    "L0042",
+    "L0001",
+    "L0036"
+  ],
+  "S06848": [
+    "L0031",
+    "L0097",
+    "L0029"
+  ],
+  "S06849": [
+    "L0061",
+    "L0096",
+    "L0045"
+  ],
+  "S06850": [
+    "L0002",
+    "L0003",
+    "L0095"
+  ],
+  "S06851": [
+    "L0028",
+    "L0053",
+    "L0040"
+  ],
+  "S06852": [
+    "L0065",
+    "L0080",
+    "L0061"
+  ],
+  "S06853": [
+    "L0059",
+    "L0014",
+    "L0092"
+  ],
+  "S06854": [
+    "L0070",
+    "L0019",
+    "L0004"
+  ],
+  "S06855": [
+    "L0029",
+    "L0002",
+    "L0094"
+  ],
+  "S06856": [
+    "L0085",
+    "L0045",
+    "L0059"
+  ],
+  "S06857": [
+    "L0035",
+    "L0064",
+    "L0034"
+  ],
+  "S06858": [
+    "L0054",
+    "L0031",
+    "L0029"
+  ],
+  "S06859": [
+    "L0080",
+    "L0026",
+    "L0096"
+  ],
+  "S06860": [
+    "L0093",
+    "L0081",
+    "L0067"
+  ],
+  "S06861": [
+    "L0093",
+    "L0098",
+    "L0039"
+  ],
+  "S06862": [
+    "L0001",
+    "L0009",
+    "L0070"
+  ],
+  "S06863": [
+    "L0095",
+    "L0005",
+    "L0100"
+  ],
+  "S06864": [
+    "L0100",
+    "L0023",
+    "L0081"
+  ],
+  "S06865": [
+    "L0013",
+    "L0068",
+    "L0053"
+  ],
+  "S06866": [
+    "L0056",
+    "L0099",
+    "L0098"
+  ],
+  "S06867": [
+    "L0097",
+    "L0032",
+    "L0010"
+  ],
+  "S06868": [
+    "L0057",
+    "L0023",
+    "L0054"
+  ],
+  "S06869": [
+    "L0047",
+    "L0078",
+    "L0077"
+  ],
+  "S06870": [
+    "L0095",
+    "L0056",
+    "L0045"
+  ],
+  "S06871": [
+    "L0100",
+    "L0012",
+    "L0073"
+  ],
+  "S06872": [
+    "L0027",
+    "L0017",
+    "L0082"
+  ],
+  "S06873": [
+    "L0044",
+    "L0089",
+    "L0066"
+  ],
+  "S06874": [
+    "L0095",
+    "L0072",
+    "L0068"
+  ],
+  "S06875": [
+    "L0027",
+    "L0095",
+    "L0068"
+  ],
+  "S06876": [
+    "L0022",
+    "L0019",
+    "L0092"
+  ],
+  "S06877": [
+    "L0019",
+    "L0031",
+    "L0077"
+  ],
+  "S06878": [
+    "L0049",
+    "L0015",
+    "L0069"
+  ],
+  "S06879": [
+    "L0044",
+    "L0047",
+    "L0019"
+  ],
+  "S06880": [
+    "L0099",
+    "L0059",
+    "L0082"
+  ],
+  "S06881": [
+    "L0085",
+    "L0012",
+    "L0002"
+  ],
+  "S06882": [
+    "L0008",
+    "L0095",
+    "L0002"
+  ],
+  "S06883": [
+    "L0023",
+    "L0021",
+    "L0067"
+  ],
+  "S06884": [
+    "L0064",
+    "L0077",
+    "L0004"
+  ],
+  "S06885": [
+    "L0054",
+    "L0098",
+    "L0023"
+  ],
+  "S06886": [
+    "L0013",
+    "L0065",
+    "L0100"
+  ],
+  "S06887": [
+    "L0092",
+    "L0038",
+    "L0009"
+  ],
+  "S06888": [
+    "L0035",
+    "L0067",
+    "L0004"
+  ],
+  "S06889": [
+    "L0009",
+    "L0094",
+    "L0066"
+  ],
+  "S06890": [
+    "L0022",
+    "L0089",
+    "L0051"
+  ],
+  "S06891": [
+    "L0067",
+    "L0066",
+    "L0086"
+  ],
+  "S06892": [
+    "L0010",
+    "L0072",
+    "L0086"
+  ],
+  "S06893": [
+    "L0024",
+    "L0089",
+    "L0022"
+  ],
+  "S06894": [
+    "L0100",
+    "L0035",
+    "L0093"
+  ],
+  "S06895": [
+    "L0028",
+    "L0014",
+    "L0091"
+  ],
+  "S06896": [
+    "L0076",
+    "L0048",
+    "L0045"
+  ],
+  "S06897": [
+    "L0042",
+    "L0036",
+    "L0066"
+  ],
+  "S06898": [
+    "L0002",
+    "L0099",
+    "L0009"
+  ],
+  "S06899": [
+    "L0084",
+    "L0011",
+    "L0002"
+  ],
+  "S06900": [
+    "L0099",
+    "L0048",
+    "L0026"
+  ],
+  "S06901": [
+    "L0024",
+    "L0081",
+    "L0023"
+  ],
+  "S06902": [
+    "L0019",
+    "L0056",
+    "L0001"
+  ],
+  "S06903": [
+    "L0055",
+    "L0024",
+    "L0056"
+  ],
+  "S06904": [
+    "L0092",
+    "L0011",
+    "L0014"
+  ],
+  "S06905": [
+    "L0062",
+    "L0035",
+    "L0042"
+  ],
+  "S06906": [
+    "L0072",
+    "L0056",
+    "L0078"
+  ],
+  "S06907": [
+    "L0076",
+    "L0085",
+    "L0084"
+  ],
+  "S06908": [
+    "L0013",
+    "L0054",
+    "L0071"
+  ],
+  "S06909": [
+    "L0064",
+    "L0066",
+    "L0086"
+  ],
+  "S06910": [
+    "L0077",
+    "L0088",
+    "L0069"
+  ],
+  "S06911": [
+    "L0083",
+    "L0012",
+    "L0038"
+  ],
+  "S06912": [
+    "L0024",
+    "L0100",
+    "L0066"
+  ],
+  "S06913": [
+    "L0082",
+    "L0054",
+    "L0024"
+  ],
+  "S06914": [
+    "L0012",
+    "L0024",
+    "L0026"
+  ],
+  "S06915": [
+    "L0005",
+    "L0064",
+    "L0100"
+  ],
+  "S06916": [
+    "L0090",
+    "L0019",
+    "L0011"
+  ],
+  "S06917": [
+    "L0084",
+    "L0045",
+    "L0090"
+  ],
+  "S06918": [
+    "L0051",
+    "L0059",
+    "L0077"
+  ],
+  "S06919": [
+    "L0066",
+    "L0093",
+    "L0054"
+  ],
+  "S06920": [
+    "L0097",
+    "L0074",
+    "L0082"
+  ],
+  "S06921": [
+    "L0058",
+    "L0039",
+    "L0081"
+  ],
+  "S06922": [
+    "L0005",
+    "L0064",
+    "L0061"
+  ],
+  "S06923": [
+    "L0057",
+    "L0082",
+    "L0001"
+  ],
+  "S06924": [
+    "L0041",
+    "L0091",
+    "L0012"
+  ],
+  "S06925": [
+    "L0076",
+    "L0019",
+    "L0062"
+  ],
+  "S06926": [
+    "L0070",
+    "L0097",
+    "L0041"
+  ],
+  "S06927": [
+    "L0086",
+    "L0004",
+    "L0083"
+  ],
+  "S06928": [
+    "L0081",
+    "L0019",
+    "L0008"
+  ],
+  "S06929": [
+    "L0090",
+    "L0059",
+    "L0008"
+  ],
+  "S06930": [
+    "L0061",
+    "L0031",
+    "L0057"
+  ],
+  "S06931": [
+    "L0045",
+    "L0078",
+    "L0077"
+  ],
+  "S06932": [
+    "L0068",
+    "L0001",
+    "L0100"
+  ],
+  "S06933": [
+    "L0040",
+    "L0077",
+    "L0058"
+  ],
+  "S06934": [
+    "L0027",
+    "L0008",
+    "L0077"
+  ],
+  "S06935": [
+    "L0084",
+    "L0028",
+    "L0064"
+  ],
+  "S06936": [
+    "L0048",
+    "L0092",
+    "L0077"
+  ],
+  "S06937": [
+    "L0036",
+    "L0004",
+    "L0073"
+  ],
+  "S06938": [
+    "L0097",
+    "L0094",
+    "L0029"
+  ],
+  "S06939": [
+    "L0096",
+    "L0071",
+    "L0054"
+  ],
+  "S06940": [
+    "L0092",
+    "L0055",
+    "L0070"
+  ],
+  "S06941": [
+    "L0090",
+    "L0098",
+    "L0024"
+  ],
+  "S06942": [
+    "L0082",
+    "L0069",
+    "L0065"
+  ],
+  "S06943": [
+    "L0040",
+    "L0062",
+    "L0063"
+  ],
+  "S06944": [
+    "L0049",
+    "L0040",
+    "L0036"
+  ],
+  "S06945": [
+    "L0042",
+    "L0040",
+    "L0085"
+  ],
+  "S06946": [
+    "L0093",
+    "L0062",
+    "L0073"
+  ],
+  "S06947": [
+    "L0040",
+    "L0094",
+    "L0057"
+  ],
+  "S06948": [
+    "L0097",
+    "L0099",
+    "L0024"
+  ],
+  "S06949": [
+    "L0055",
+    "L0041",
+    "L0024"
+  ],
+  "S06950": [
+    "L0042",
+    "L0088",
+    "L0029"
+  ],
+  "S06951": [
+    "L0085",
+    "L0094",
+    "L0019"
+  ],
+  "S06952": [
+    "L0072",
+    "L0077",
+    "L0035"
+  ],
+  "S06953": [
+    "L0031",
+    "L0094",
+    "L0059"
+  ],
+  "S06954": [
+    "L0095",
+    "L0041",
+    "L0014"
+  ],
+  "S06955": [
+    "L0086",
+    "L0080",
+    "L0035"
+  ],
+  "S06956": [
+    "L0049",
+    "L0064",
+    "L0045"
+  ],
+  "S06957": [
+    "L0082",
+    "L0034",
+    "L0059"
+  ],
+  "S06958": [
+    "L0067",
+    "L0054",
+    "L0003"
+  ],
+  "S06959": [
+    "L0008",
+    "L0032",
+    "L0034"
+  ],
+  "S06960": [
+    "L0095",
+    "L0027",
+    "L0089"
+  ],
+  "S06961": [
+    "L0073",
+    "L0013",
+    "L0042"
+  ],
+  "S06962": [
+    "L0081",
+    "L0048",
+    "L0078"
+  ],
+  "S06963": [
+    "L0068",
+    "L0054",
+    "L0064"
+  ],
+  "S06964": [
+    "L0009",
+    "L0019",
+    "L0010"
+  ],
+  "S06965": [
+    "L0056",
+    "L0027",
+    "L0045"
+  ],
+  "S06966": [
+    "L0096",
+    "L0089",
+    "L0071"
+  ],
+  "S06967": [
+    "L0053",
+    "L0088",
+    "L0068"
+  ],
+  "S06968": [
+    "L0077",
+    "L0062",
+    "L0038"
+  ],
+  "S06969": [
+    "L0014",
+    "L0013",
+    "L0098"
+  ],
+  "S06970": [
+    "L0014",
+    "L0081",
+    "L0003"
+  ],
+  "S06971": [
+    "L0092",
+    "L0082",
+    "L0056"
+  ],
+  "S06972": [
+    "L0094",
+    "L0015",
+    "L0090"
+  ],
+  "S06973": [
+    "L0040",
+    "L0003",
+    "L0008"
+  ],
+  "S06974": [
+    "L0015",
+    "L0053",
+    "L0014"
+  ],
+  "S06975": [
+    "L0093",
+    "L0065",
+    "L0022"
+  ],
+  "S06976": [
+    "L0091",
+    "L0096",
+    "L0084"
+  ],
+  "S06977": [
+    "L0034",
+    "L0047",
+    "L0049"
+  ],
+  "S06978": [
+    "L0027",
+    "L0031",
+    "L0093"
+  ],
+  "S06979": [
+    "L0038",
+    "L0023",
+    "L0022"
+  ],
+  "S06980": [
+    "L0039",
+    "L0044",
+    "L0080"
+  ],
+  "S06981": [
+    "L0051",
+    "L0024",
+    "L0096"
+  ],
+  "S06982": [
+    "L0045",
+    "L0035",
+    "L0013"
+  ],
+  "S06983": [
+    "L0023",
+    "L0067",
+    "L0031"
+  ],
+  "S06984": [
+    "L0034",
+    "L0093",
+    "L0003"
+  ],
+  "S06985": [
+    "L0058",
+    "L0085",
+    "L0077"
+  ],
+  "S06986": [
+    "L0022",
+    "L0045",
+    "L0013"
+  ],
+  "S06987": [
+    "L0097",
+    "L0047",
+    "L0094"
+  ],
+  "S06988": [
+    "L0038",
+    "L0001",
+    "L0024"
+  ],
+  "S06989": [
+    "L0035",
+    "L0091",
+    "L0001"
+  ],
+  "S06990": [
+    "L0068",
+    "L0022",
+    "L0024"
+  ],
+  "S06991": [
+    "L0078",
+    "L0085",
+    "L0008"
+  ],
+  "S06992": [
+    "L0081",
+    "L0054",
+    "L0038"
+  ],
+  "S06993": [
+    "L0029",
+    "L0073",
+    "L0054"
+  ],
+  "S06994": [
+    "L0071",
+    "L0039",
+    "L0099"
+  ],
+  "S06995": [
+    "L0047",
+    "L0032",
+    "L0015"
+  ],
+  "S06996": [
+    "L0058",
+    "L0078",
+    "L0045"
+  ],
+  "S06997": [
+    "L0059",
+    "L0085",
+    "L0093"
+  ],
+  "S06998": [
+    "L0048",
+    "L0036",
+    "L0088"
+  ],
+  "S06999": [
+    "L0065",
+    "L0011",
+    "L0029"
+  ],
+  "S07000": [
+    "L0063",
+    "L0019",
+    "L0093"
+  ],
+  "S07001": [
+    "L0015",
+    "L0083",
+    "L0023"
+  ],
+  "S07002": [
+    "L0073",
+    "L0024",
+    "L0069"
+  ],
+  "S07003": [
+    "L0044",
+    "L0085",
+    "L0032"
+  ],
+  "S07004": [
+    "L0029",
+    "L0011",
+    "L0044"
+  ],
+  "S07005": [
+    "L0071",
+    "L0055",
+    "L0063"
+  ],
+  "S07006": [
+    "L0082",
+    "L0009",
+    "L0058"
+  ],
+  "S07007": [
+    "L0064",
+    "L0088",
+    "L0022"
+  ],
+  "S07008": [
+    "L0086",
+    "L0090",
+    "L0026"
+  ],
+  "S07009": [
+    "L0005",
+    "L0053",
+    "L0096"
+  ],
+  "S07010": [
+    "L0071",
+    "L0083",
+    "L0091"
+  ],
+  "S07011": [
+    "L0068",
+    "L0035",
+    "L0074"
+  ],
+  "S07012": [
+    "L0035",
+    "L0065",
+    "L0014"
+  ],
+  "S07013": [
+    "L0015",
+    "L0085",
+    "L0066"
+  ],
+  "S07014": [
+    "L0021",
+    "L0081",
+    "L0074"
+  ],
+  "S07015": [
+    "L0028",
+    "L0005",
+    "L0034"
+  ],
+  "S07016": [
+    "L0039",
+    "L0040",
+    "L0015"
+  ],
+  "S07017": [
+    "L0094",
+    "L0063",
+    "L0067"
+  ],
+  "S07018": [
+    "L0011",
+    "L0088",
+    "L0036"
+  ],
+  "S07019": [
+    "L0084",
+    "L0034",
+    "L0036"
+  ],
+  "S07020": [
+    "L0078",
+    "L0014",
+    "L0032"
+  ],
+  "S07021": [
+    "L0015",
+    "L0082",
+    "L0022"
+  ],
+  "S07022": [
+    "L0095",
+    "L0032",
+    "L0088"
+  ],
+  "S07023": [
+    "L0091",
+    "L0083",
+    "L0099"
+  ],
+  "S07024": [
+    "L0097",
+    "L0070",
+    "L0094"
+  ],
+  "S07025": [
+    "L0065",
+    "L0100",
+    "L0044"
+  ],
+  "S07026": [
+    "L0076",
+    "L0099",
+    "L0098"
+  ],
+  "S07027": [
+    "L0095",
+    "L0004",
+    "L0058"
+  ],
+  "S07028": [
+    "L0058",
+    "L0035",
+    "L0100"
+  ],
+  "S07029": [
+    "L0005",
+    "L0034",
+    "L0071"
+  ],
+  "S07030": [
+    "L0036",
+    "L0083",
+    "L0001"
+  ],
+  "S07031": [
+    "L0024",
+    "L0040",
+    "L0073"
+  ],
+  "S07032": [
+    "L0076",
+    "L0014",
+    "L0095"
+  ],
+  "S07033": [
+    "L0047",
+    "L0049",
+    "L0065"
+  ],
+  "S07034": [
+    "L0056",
+    "L0051",
+    "L0014"
+  ],
+  "S07035": [
+    "L0096",
+    "L0021",
+    "L0080"
+  ],
+  "S07036": [
+    "L0062",
+    "L0096",
+    "L0097"
+  ],
+  "S07037": [
+    "L0014",
+    "L0039",
+    "L0023"
+  ],
+  "S07038": [
+    "L0067",
+    "L0040",
+    "L0003"
+  ],
+  "S07039": [
+    "L0078",
+    "L0048",
+    "L0024"
+  ],
+  "S07040": [
+    "L0083",
+    "L0099",
+    "L0062"
+  ],
+  "S07041": [
+    "L0024",
+    "L0019",
+    "L0082"
+  ],
+  "S07042": [
+    "L0055",
+    "L0054",
+    "L0012"
+  ],
+  "S07043": [
+    "L0061",
+    "L0032",
+    "L0034"
+  ],
+  "S07044": [
+    "L0049",
+    "L0083",
+    "L0069"
+  ],
+  "S07045": [
+    "L0063",
+    "L0065",
+    "L0005"
+  ],
+  "S07046": [
+    "L0024",
+    "L0071",
+    "L0012"
+  ],
+  "S07047": [
+    "L0048",
+    "L0098",
+    "L0026"
+  ],
+  "S07048": [
+    "L0084",
+    "L0032",
+    "L0095"
+  ],
+  "S07049": [
+    "L0078",
+    "L0058",
+    "L0026"
+  ],
+  "S07050": [
+    "L0092",
+    "L0026",
+    "L0091"
+  ],
+  "S07051": [
+    "L0069",
+    "L0044",
+    "L0036"
+  ],
+  "S07052": [
+    "L0019",
+    "L0027",
+    "L0023"
+  ],
+  "S07053": [
+    "L0071",
+    "L0085",
+    "L0069"
+  ],
+  "S07054": [
+    "L0029",
+    "L0005",
+    "L0051"
+  ],
+  "S07055": [
+    "L0076",
+    "L0091",
+    "L0013"
+  ],
+  "S07056": [
+    "L0061",
+    "L0100",
+    "L0015"
+  ],
+  "S07057": [
+    "L0015",
+    "L0080",
+    "L0041"
+  ],
+  "S07058": [
+    "L0083",
+    "L0008",
+    "L0004"
+  ],
+  "S07059": [
+    "L0093",
+    "L0014",
+    "L0074"
+  ],
+  "S07060": [
+    "L0044",
+    "L0092",
+    "L0042"
+  ],
+  "S07061": [
+    "L0089",
+    "L0063",
+    "L0027"
+  ],
+  "S07062": [
+    "L0040",
+    "L0098",
+    "L0021"
+  ],
+  "S07063": [
+    "L0092",
+    "L0083",
+    "L0027"
+  ],
+  "S07064": [
+    "L0080",
+    "L0098",
+    "L0041"
+  ],
+  "S07065": [
+    "L0002",
+    "L0038",
+    "L0024"
+  ],
+  "S07066": [
+    "L0094",
+    "L0024",
+    "L0099"
+  ],
+  "S07067": [
+    "L0026",
+    "L0093",
+    "L0097"
+  ],
+  "S07068": [
+    "L0029",
+    "L0011",
+    "L0017"
+  ],
+  "S07069": [
+    "L0047",
+    "L0015",
+    "L0045"
+  ],
+  "S07070": [
+    "L0097",
+    "L0074",
+    "L0091"
+  ],
+  "S07071": [
+    "L0044",
+    "L0092",
+    "L0068"
+  ],
+  "S07072": [
+    "L0008",
+    "L0012",
+    "L0024"
+  ],
+  "S07073": [
+    "L0072",
+    "L0010",
+    "L0058"
+  ],
+  "S07074": [
+    "L0056",
+    "L0042",
+    "L0099"
+  ],
+  "S07075": [
+    "L0067",
+    "L0064",
+    "L0003"
+  ],
+  "S07076": [
+    "L0049",
+    "L0040",
+    "L0036"
+  ],
+  "S07077": [
+    "L0014",
+    "L0093",
+    "L0024"
+  ],
+  "S07078": [
+    "L0041",
+    "L0083",
+    "L0036"
+  ],
+  "S07079": [
+    "L0072",
+    "L0054",
+    "L0002"
+  ],
+  "S07080": [
+    "L0042",
+    "L0068",
+    "L0092"
+  ],
+  "S07081": [
+    "L0083",
+    "L0088",
+    "L0022"
+  ],
+  "S07082": [
+    "L0056",
+    "L0090",
+    "L0085"
+  ],
+  "S07083": [
+    "L0064",
+    "L0034",
+    "L0051"
+  ],
+  "S07084": [
+    "L0015",
+    "L0071",
+    "L0099"
+  ],
+  "S07085": [
+    "L0045",
+    "L0040",
+    "L0100"
+  ],
+  "S07086": [
+    "L0044",
+    "L0053",
+    "L0013"
+  ],
+  "S07087": [
+    "L0062",
+    "L0024",
+    "L0072"
+  ],
+  "S07088": [
+    "L0004",
+    "L0064",
+    "L0100"
+  ],
+  "S07089": [
+    "L0072",
+    "L0009",
+    "L0098"
+  ],
+  "S07090": [
+    "L0048",
+    "L0082",
+    "L0097"
+  ],
+  "S07091": [
+    "L0069",
+    "L0074",
+    "L0096"
+  ],
+  "S07092": [
+    "L0090",
+    "L0083",
+    "L0032"
+  ],
+  "S07093": [
+    "L0027",
+    "L0001",
+    "L0045"
+  ],
+  "S07094": [
+    "L0017",
+    "L0064",
+    "L0042"
+  ],
+  "S07095": [
+    "L0034",
+    "L0078",
+    "L0076"
+  ],
+  "S07096": [
+    "L0044",
+    "L0082",
+    "L0066"
+  ],
+  "S07097": [
+    "L0022",
+    "L0095",
+    "L0080"
+  ],
+  "S07098": [
+    "L0045",
+    "L0029",
+    "L0002"
+  ],
+  "S07099": [
+    "L0035",
+    "L0057",
+    "L0044"
+  ],
+  "S07100": [
+    "L0017",
+    "L0004",
+    "L0070"
+  ],
+  "S07101": [
+    "L0053",
+    "L0055",
+    "L0097"
+  ],
+  "S07102": [
+    "L0032",
+    "L0056",
+    "L0067"
+  ],
+  "S07103": [
+    "L0022",
+    "L0100",
+    "L0021"
+  ],
+  "S07104": [
+    "L0041",
+    "L0059",
+    "L0076"
+  ],
+  "S07105": [
+    "L0071",
+    "L0029",
+    "L0059"
+  ],
+  "S07106": [
+    "L0069",
+    "L0070",
+    "L0067"
+  ],
+  "S07107": [
+    "L0061",
+    "L0092",
+    "L0017"
+  ],
+  "S07108": [
+    "L0014",
+    "L0089",
+    "L0072"
+  ],
+  "S07109": [
+    "L0022",
+    "L0015",
+    "L0002"
+  ],
+  "S07110": [
+    "L0084",
+    "L0064",
+    "L0077"
+  ],
+  "S07111": [
+    "L0040",
+    "L0065",
+    "L0099"
+  ],
+  "S07112": [
+    "L0015",
+    "L0068",
+    "L0010"
+  ],
+  "S07113": [
+    "L0049",
+    "L0094",
+    "L0028"
+  ],
+  "S07114": [
+    "L0051",
+    "L0047",
+    "L0084"
+  ],
+  "S07115": [
+    "L0021",
+    "L0089",
+    "L0057"
+  ],
+  "S07116": [
+    "L0001",
+    "L0024",
+    "L0014"
+  ],
+  "S07117": [
+    "L0057",
+    "L0072",
+    "L0034"
+  ],
+  "S07118": [
+    "L0041",
+    "L0062",
+    "L0091"
+  ],
+  "S07119": [
+    "L0074",
+    "L0044",
+    "L0086"
+  ],
+  "S07120": [
+    "L0028",
+    "L0072",
+    "L0066"
+  ],
+  "S07121": [
+    "L0002",
+    "L0017",
+    "L0001"
+  ],
+  "S07122": [
+    "L0017",
+    "L0056",
+    "L0035"
+  ],
+  "S07123": [
+    "L0053",
+    "L0086",
+    "L0019"
+  ],
+  "S07124": [
+    "L0081",
+    "L0051",
+    "L0014"
+  ],
+  "S07125": [
+    "L0017",
+    "L0086",
+    "L0096"
+  ],
+  "S07126": [
+    "L0048",
+    "L0010",
+    "L0041"
+  ],
+  "S07127": [
+    "L0019",
+    "L0028",
+    "L0071"
+  ],
+  "S07128": [
+    "L0028",
+    "L0074",
+    "L0044"
+  ],
+  "S07129": [
+    "L0028",
+    "L0071",
+    "L0091"
+  ],
+  "S07130": [
+    "L0004",
+    "L0089",
+    "L0063"
+  ],
+  "S07131": [
+    "L0003",
+    "L0021",
+    "L0015"
+  ],
+  "S07132": [
+    "L0053",
+    "L0013",
+    "L0098"
+  ],
+  "S07133": [
+    "L0063",
+    "L0035",
+    "L0042"
+  ],
+  "S07134": [
+    "L0064",
+    "L0039",
+    "L0074"
+  ],
+  "S07135": [
+    "L0100",
+    "L0094",
+    "L0081"
+  ],
+  "S07136": [
+    "L0089",
+    "L0062",
+    "L0031"
+  ],
+  "S07137": [
+    "L0069",
+    "L0099",
+    "L0002"
+  ],
+  "S07138": [
+    "L0093",
+    "L0068",
+    "L0095"
+  ],
+  "S07139": [
+    "L0039",
+    "L0048",
+    "L0058"
+  ],
+  "S07140": [
+    "L0082",
+    "L0054",
+    "L0076"
+  ],
+  "S07141": [
+    "L0098",
+    "L0074",
+    "L0042"
+  ],
+  "S07142": [
+    "L0058",
+    "L0045",
+    "L0027"
+  ],
+  "S07143": [
+    "L0031",
+    "L0038",
+    "L0074"
+  ],
+  "S07144": [
+    "L0055",
+    "L0100",
+    "L0003"
+  ],
+  "S07145": [
+    "L0062",
+    "L0076",
+    "L0097"
+  ],
+  "S07146": [
+    "L0048",
+    "L0041",
+    "L0003"
+  ],
+  "S07147": [
+    "L0017",
+    "L0073",
+    "L0083"
+  ],
+  "S07148": [
+    "L0031",
+    "L0034",
+    "L0064"
+  ],
+  "S07149": [
+    "L0095",
+    "L0056",
+    "L0088"
+  ],
+  "S07150": [
+    "L0023",
+    "L0005",
+    "L0078"
+  ],
+  "S07151": [
+    "L0067",
+    "L0074",
+    "L0071"
+  ],
+  "S07152": [
+    "L0062",
+    "L0002",
+    "L0034"
+  ],
+  "S07153": [
+    "L0090",
+    "L0035",
+    "L0011"
+  ],
+  "S07154": [
+    "L0078",
+    "L0022",
+    "L0014"
+  ],
+  "S07155": [
+    "L0083",
+    "L0088",
+    "L0066"
+  ],
+  "S07156": [
+    "L0096",
+    "L0047",
+    "L0035"
+  ],
+  "S07157": [
+    "L0013",
+    "L0069",
+    "L0003"
+  ],
+  "S07158": [
+    "L0086",
+    "L0077",
+    "L0057"
+  ],
+  "S07159": [
+    "L0001",
+    "L0034",
+    "L0096"
+  ],
+  "S07160": [
+    "L0049",
+    "L0068",
+    "L0072"
+  ],
+  "S07161": [
+    "L0082",
+    "L0048",
+    "L0011"
+  ],
+  "S07162": [
+    "L0005",
+    "L0014",
+    "L0058"
+  ],
+  "S07163": [
+    "L0063",
+    "L0100",
+    "L0067"
+  ],
+  "S07164": [
+    "L0063",
+    "L0100",
+    "L0099"
+  ],
+  "S07165": [
+    "L0039",
+    "L0048",
+    "L0078"
+  ],
+  "S07166": [
+    "L0066",
+    "L0088",
+    "L0001"
+  ],
+  "S07167": [
+    "L0098",
+    "L0070",
+    "L0099"
+  ],
+  "S07168": [
+    "L0048",
+    "L0078",
+    "L0026"
+  ],
+  "S07169": [
+    "L0066",
+    "L0070",
+    "L0065"
+  ],
+  "S07170": [
+    "L0093",
+    "L0094",
+    "L0051"
+  ],
+  "S07171": [
+    "L0076",
+    "L0088",
+    "L0062"
+  ],
+  "S07172": [
+    "L0051",
+    "L0068",
+    "L0092"
+  ],
+  "S07173": [
+    "L0100",
+    "L0028",
+    "L0058"
+  ],
+  "S07174": [
+    "L0005",
+    "L0069",
+    "L0071"
+  ],
+  "S07175": [
+    "L0071",
+    "L0053",
+    "L0011"
+  ],
+  "S07176": [
+    "L0039",
+    "L0056",
+    "L0063"
+  ],
+  "S07177": [
+    "L0004",
+    "L0097",
+    "L0057"
+  ],
+  "S07178": [
+    "L0026",
+    "L0031",
+    "L0080"
+  ],
+  "S07179": [
+    "L0011",
+    "L0015",
+    "L0029"
+  ],
+  "S07180": [
+    "L0095",
+    "L0005",
+    "L0039"
+  ],
+  "S07181": [
+    "L0029",
+    "L0002",
+    "L0083"
+  ],
+  "S07182": [
+    "L0070",
+    "L0029",
+    "L0049"
+  ],
+  "S07183": [
+    "L0065",
+    "L0071",
+    "L0053"
+  ],
+  "S07184": [
+    "L0085",
+    "L0005",
+    "L0027"
+  ],
+  "S07185": [
+    "L0077",
+    "L0027",
+    "L0017"
+  ],
+  "S07186": [
+    "L0019",
+    "L0076",
+    "L0048"
+  ],
+  "S07187": [
+    "L0053",
+    "L0051",
+    "L0065"
+  ],
+  "S07188": [
+    "L0005",
+    "L0093",
+    "L0045"
+  ],
+  "S07189": [
+    "L0056",
+    "L0074",
+    "L0011"
+  ],
+  "S07190": [
+    "L0010",
+    "L0049",
+    "L0038"
+  ],
+  "S07191": [
+    "L0073",
+    "L0099",
+    "L0053"
+  ],
+  "S07192": [
+    "L0088",
+    "L0035",
+    "L0063"
+  ],
+  "S07193": [
+    "L0011",
+    "L0069",
+    "L0008"
+  ],
+  "S07194": [
+    "L0008",
+    "L0014",
+    "L0062"
+  ],
+  "S07195": [
+    "L0001",
+    "L0049",
+    "L0053"
+  ],
+  "S07196": [
+    "L0010",
+    "L0001",
+    "L0005"
+  ],
+  "S07197": [
+    "L0097",
+    "L0008",
+    "L0026"
+  ],
+  "S07198": [
+    "L0094",
+    "L0028",
+    "L0076"
+  ],
+  "S07199": [
+    "L0013",
+    "L0092",
+    "L0023"
+  ],
+  "S07200": [
+    "L0003",
+    "L0089",
+    "L0023"
+  ],
+  "S07201": [
+    "L0017",
+    "L0012",
+    "L0011"
+  ],
+  "S07202": [
+    "L0095",
+    "L0019",
+    "L0034"
+  ],
+  "S07203": [
+    "L0015",
+    "L0078",
+    "L0070"
+  ],
+  "S07204": [
+    "L0013",
+    "L0019",
+    "L0076"
+  ],
+  "S07205": [
+    "L0072",
+    "L0081",
+    "L0028"
+  ],
+  "S07206": [
+    "L0086",
+    "L0017",
+    "L0023"
+  ],
+  "S07207": [
+    "L0062",
+    "L0069",
+    "L0082"
+  ],
+  "S07208": [
+    "L0022",
+    "L0013",
+    "L0098"
+  ],
+  "S07209": [
+    "L0081",
+    "L0005",
+    "L0088"
+  ],
+  "S07210": [
+    "L0041",
+    "L0015",
+    "L0063"
+  ],
+  "S07211": [
+    "L0062",
+    "L0084",
+    "L0055"
+  ],
+  "S07212": [
+    "L0089",
+    "L0091",
+    "L0086"
+  ],
+  "S07213": [
+    "L0065",
+    "L0053",
+    "L0040"
+  ],
+  "S07214": [
+    "L0090",
+    "L0014",
+    "L0026"
+  ],
+  "S07215": [
+    "L0095",
+    "L0066",
+    "L0061"
+  ],
+  "S07216": [
+    "L0048",
+    "L0059",
+    "L0081"
+  ],
+  "S07217": [
+    "L0062",
+    "L0003",
+    "L0002"
+  ],
+  "S07218": [
+    "L0001",
+    "L0024",
+    "L0042"
+  ],
+  "S07219": [
+    "L0035",
+    "L0023",
+    "L0031"
+  ],
+  "S07220": [
+    "L0019",
+    "L0078",
+    "L0077"
+  ],
+  "S07221": [
+    "L0022",
+    "L0047",
+    "L0044"
+  ],
+  "S07222": [
+    "L0023",
+    "L0008",
+    "L0029"
+  ],
+  "S07223": [
+    "L0058",
+    "L0055",
+    "L0034"
+  ],
+  "S07224": [
+    "L0098",
+    "L0015",
+    "L0081"
+  ],
+  "S07225": [
+    "L0080",
+    "L0024",
+    "L0098"
+  ],
+  "S07226": [
+    "L0042",
+    "L0055",
+    "L0032"
+  ],
+  "S07227": [
+    "L0099",
+    "L0019",
+    "L0097"
+  ],
+  "S07228": [
+    "L0041",
+    "L0059",
+    "L0066"
+  ],
+  "S07229": [
+    "L0017",
+    "L0047",
+    "L0064"
+  ],
+  "S07230": [
+    "L0089",
+    "L0059",
+    "L0005"
+  ],
+  "S07231": [
+    "L0099",
+    "L0056",
+    "L0039"
+  ],
+  "S07232": [
+    "L0065",
+    "L0005",
+    "L0068"
+  ],
+  "S07233": [
+    "L0085",
+    "L0045",
+    "L0027"
+  ],
+  "S07234": [
+    "L0044",
+    "L0008",
+    "L0045"
+  ],
+  "S07235": [
+    "L0013",
+    "L0056",
+    "L0068"
+  ],
+  "S07236": [
+    "L0001",
+    "L0045",
+    "L0039"
+  ],
+  "S07237": [
+    "L0029",
+    "L0042",
+    "L0062"
+  ],
+  "S07238": [
+    "L0084",
+    "L0099",
+    "L0019"
+  ],
+  "S07239": [
+    "L0028",
+    "L0080",
+    "L0034"
+  ],
+  "S07240": [
+    "L0090",
+    "L0096",
+    "L0093"
+  ],
+  "S07241": [
+    "L0012",
+    "L0067",
+    "L0048"
+  ],
+  "S07242": [
+    "L0008",
+    "L0044",
+    "L0001"
+  ],
+  "S07243": [
+    "L0004",
+    "L0095",
+    "L0027"
+  ],
+  "S07244": [
+    "L0056",
+    "L0029",
+    "L0066"
+  ],
+  "S07245": [
+    "L0039",
+    "L0092",
+    "L0088"
+  ],
+  "S07246": [
+    "L0034",
+    "L0005",
+    "L0100"
+  ],
+  "S07247": [
+    "L0086",
+    "L0032",
+    "L0073"
+  ],
+  "S07248": [
+    "L0086",
+    "L0072",
+    "L0093"
+  ],
+  "S07249": [
+    "L0097",
+    "L0056",
+    "L0058"
+  ],
+  "S07250": [
+    "L0061",
+    "L0019",
+    "L0003"
+  ],
+  "S07251": [
+    "L0068",
+    "L0061",
+    "L0031"
+  ],
+  "S07252": [
+    "L0077",
+    "L0039",
+    "L0099"
+  ],
+  "S07253": [
+    "L0098",
+    "L0064",
+    "L0094"
+  ],
+  "S07254": [
+    "L0002",
+    "L0032",
+    "L0096"
+  ],
+  "S07255": [
+    "L0080",
+    "L0067",
+    "L0065"
+  ],
+  "S07256": [
+    "L0027",
+    "L0026",
+    "L0069"
+  ],
+  "S07257": [
+    "L0063",
+    "L0071",
+    "L0100"
+  ],
+  "S07258": [
+    "L0036",
+    "L0042",
+    "L0011"
+  ],
+  "S07259": [
+    "L0027",
+    "L0090",
+    "L0001"
+  ],
+  "S07260": [
+    "L0051",
+    "L0031",
+    "L0015"
+  ],
+  "S07261": [
+    "L0026",
+    "L0042",
+    "L0029"
+  ],
+  "S07262": [
+    "L0065",
+    "L0042",
+    "L0083"
+  ],
+  "S07263": [
+    "L0100",
+    "L0068",
+    "L0055"
+  ],
+  "S07264": [
+    "L0085",
+    "L0069",
+    "L0078"
+  ],
+  "S07265": [
+    "L0074",
+    "L0021",
+    "L0042"
+  ],
+  "S07266": [
+    "L0095",
+    "L0054",
+    "L0042"
+  ],
+  "S07267": [
+    "L0042",
+    "L0048",
+    "L0063"
+  ],
+  "S07268": [
+    "L0095",
+    "L0082",
+    "L0003"
+  ],
+  "S07269": [
+    "L0080",
+    "L0100",
+    "L0082"
+  ],
+  "S07270": [
+    "L0081",
+    "L0034",
+    "L0069"
+  ],
+  "S07271": [
+    "L0045",
+    "L0067",
+    "L0005"
+  ],
+  "S07272": [
+    "L0003",
+    "L0068",
+    "L0089"
+  ],
+  "S07273": [
+    "L0013",
+    "L0047",
+    "L0004"
+  ],
+  "S07274": [
+    "L0004",
+    "L0080",
+    "L0064"
+  ],
+  "S07275": [
+    "L0085",
+    "L0058",
+    "L0088"
+  ],
+  "S07276": [
+    "L0076",
+    "L0084",
+    "L0071"
+  ],
+  "S07277": [
+    "L0089",
+    "L0076",
+    "L0092"
+  ],
+  "S07278": [
+    "L0031",
+    "L0093",
+    "L0004"
+  ],
+  "S07279": [
+    "L0095",
+    "L0059",
+    "L0035"
+  ],
+  "S07280": [
+    "L0053",
+    "L0070",
+    "L0011"
+  ],
+  "S07281": [
+    "L0038",
+    "L0015",
+    "L0028"
+  ],
+  "S07282": [
+    "L0095",
+    "L0073",
+    "L0098"
+  ],
+  "S07283": [
+    "L0022",
+    "L0080",
+    "L0054"
+  ],
+  "S07284": [
+    "L0071",
+    "L0026",
+    "L0078"
+  ],
+  "S07285": [
+    "L0042",
+    "L0078",
+    "L0057"
+  ],
+  "S07286": [
+    "L0084",
+    "L0038",
+    "L0008"
+  ],
+  "S07287": [
+    "L0061",
+    "L0082",
+    "L0044"
+  ],
+  "S07288": [
+    "L0065",
+    "L0085",
+    "L0094"
+  ],
+  "S07289": [
+    "L0015",
+    "L0053",
+    "L0022"
+  ],
+  "S07290": [
+    "L0081",
+    "L0023",
+    "L0024"
+  ],
+  "S07291": [
+    "L0011",
+    "L0057",
+    "L0032"
+  ],
+  "S07292": [
+    "L0008",
+    "L0004",
+    "L0078"
+  ],
+  "S07293": [
+    "L0076",
+    "L0012",
+    "L0091"
+  ],
+  "S07294": [
+    "L0084",
+    "L0009",
+    "L0023"
+  ],
+  "S07295": [
+    "L0098",
+    "L0074",
+    "L0090"
+  ],
+  "S07296": [
+    "L0023",
+    "L0090",
+    "L0044"
+  ],
+  "S07297": [
+    "L0013",
+    "L0051",
+    "L0059"
+  ],
+  "S07298": [
+    "L0022",
+    "L0074",
+    "L0062"
+  ],
+  "S07299": [
+    "L0008",
+    "L0056",
+    "L0017"
+  ],
+  "S07300": [
+    "L0015",
+    "L0097",
+    "L0019"
+  ],
+  "S07301": [
+    "L0053",
+    "L0092",
+    "L0061"
+  ],
+  "S07302": [
+    "L0031",
+    "L0001",
+    "L0076"
+  ],
+  "S07303": [
+    "L0066",
+    "L0099",
+    "L0036"
+  ],
+  "S07304": [
+    "L0014",
+    "L0068",
+    "L0045"
+  ],
+  "S07305": [
+    "L0078",
+    "L0070",
+    "L0080"
+  ],
+  "S07306": [
+    "L0063",
+    "L0024",
+    "L0069"
+  ],
+  "S07307": [
+    "L0035",
+    "L0069",
+    "L0098"
+  ],
+  "S07308": [
+    "L0032",
+    "L0045",
+    "L0012"
+  ],
+  "S07309": [
+    "L0023",
+    "L0074",
+    "L0055"
+  ],
+  "S07310": [
+    "L0061",
+    "L0049",
+    "L0072"
+  ],
+  "S07311": [
+    "L0057",
+    "L0041",
+    "L0027"
+  ],
+  "S07312": [
+    "L0074",
+    "L0022",
+    "L0057"
+  ],
+  "S07313": [
+    "L0038",
+    "L0080",
+    "L0026"
+  ],
+  "S07314": [
+    "L0015",
+    "L0085",
+    "L0093"
+  ],
+  "S07315": [
+    "L0095",
+    "L0071",
+    "L0054"
+  ],
+  "S07316": [
+    "L0029",
+    "L0014",
+    "L0054"
+  ],
+  "S07317": [
+    "L0027",
+    "L0045",
+    "L0059"
+  ],
+  "S07318": [
+    "L0019",
+    "L0063",
+    "L0055"
+  ],
+  "S07319": [
+    "L0055",
+    "L0053",
+    "L0056"
+  ],
+  "S07320": [
+    "L0001",
+    "L0032",
+    "L0051"
+  ],
+  "S07321": [
+    "L0099",
+    "L0031",
+    "L0028"
+  ],
+  "S07322": [
+    "L0089",
+    "L0027",
+    "L0076"
+  ],
+  "S07323": [
+    "L0040",
+    "L0013",
+    "L0084"
+  ],
+  "S07324": [
+    "L0044",
+    "L0017",
+    "L0009"
+  ],
+  "S07325": [
+    "L0063",
+    "L0014",
+    "L0065"
+  ],
+  "S07326": [
+    "L0074",
+    "L0078",
+    "L0024"
+  ],
+  "S07327": [
+    "L0024",
+    "L0010",
+    "L0019"
+  ],
+  "S07328": [
+    "L0026",
+    "L0098",
+    "L0021"
+  ],
+  "S07329": [
+    "L0066",
+    "L0095",
+    "L0015"
+  ],
+  "S07330": [
+    "L0048",
+    "L0013",
+    "L0091"
+  ],
+  "S07331": [
+    "L0092",
+    "L0015",
+    "L0036"
+  ],
+  "S07332": [
+    "L0051",
+    "L0066",
+    "L0029"
+  ],
+  "S07333": [
+    "L0084",
+    "L0072",
+    "L0045"
+  ],
+  "S07334": [
+    "L0057",
+    "L0098",
+    "L0029"
+  ],
+  "S07335": [
+    "L0100",
+    "L0066",
+    "L0044"
+  ],
+  "S07336": [
+    "L0029",
+    "L0027",
+    "L0013"
+  ],
+  "S07337": [
+    "L0036",
+    "L0099",
+    "L0083"
+  ],
+  "S07338": [
+    "L0059",
+    "L0073",
+    "L0014"
+  ],
+  "S07339": [
+    "L0056",
+    "L0083",
+    "L0069"
+  ],
+  "S07340": [
+    "L0051",
+    "L0073",
+    "L0010"
+  ],
+  "S07341": [
+    "L0023",
+    "L0058",
+    "L0029"
+  ],
+  "S07342": [
+    "L0080",
+    "L0038",
+    "L0039"
+  ],
+  "S07343": [
+    "L0011",
+    "L0022",
+    "L0071"
+  ],
+  "S07344": [
+    "L0070",
+    "L0015",
+    "L0061"
+  ],
+  "S07345": [
+    "L0038",
+    "L0021",
+    "L0055"
+  ],
+  "S07346": [
+    "L0023",
+    "L0034",
+    "L0040"
+  ],
+  "S07347": [
+    "L0096",
+    "L0088",
+    "L0054"
+  ],
+  "S07348": [
+    "L0080",
+    "L0057",
+    "L0093"
+  ],
+  "S07349": [
+    "L0099",
+    "L0077",
+    "L0081"
+  ],
+  "S07350": [
+    "L0045",
+    "L0049",
+    "L0003"
+  ],
+  "S07351": [
+    "L0097",
+    "L0031",
+    "L0045"
+  ],
+  "S07352": [
+    "L0034",
+    "L0081",
+    "L0088"
+  ],
+  "S07353": [
+    "L0019",
+    "L0053",
+    "L0071"
+  ],
+  "S07354": [
+    "L0029",
+    "L0019",
+    "L0009"
+  ],
+  "S07355": [
+    "L0073",
+    "L0084",
+    "L0089"
+  ],
+  "S07356": [
+    "L0096",
+    "L0090",
+    "L0086"
+  ],
+  "S07357": [
+    "L0063",
+    "L0068",
+    "L0054"
+  ],
+  "S07358": [
+    "L0095",
+    "L0057",
+    "L0039"
+  ],
+  "S07359": [
+    "L0056",
+    "L0080",
+    "L0024"
+  ],
+  "S07360": [
+    "L0083",
+    "L0004",
+    "L0077"
+  ],
+  "S07361": [
+    "L0023",
+    "L0001",
+    "L0013"
+  ],
+  "S07362": [
+    "L0089",
+    "L0003",
+    "L0023"
+  ],
+  "S07363": [
+    "L0019",
+    "L0010",
+    "L0055"
+  ],
+  "S07364": [
+    "L0053",
+    "L0032",
+    "L0011"
+  ],
+  "S07365": [
+    "L0009",
+    "L0039",
+    "L0029"
+  ],
+  "S07366": [
+    "L0061",
+    "L0064",
+    "L0084"
+  ],
+  "S07367": [
+    "L0097",
+    "L0062",
+    "L0068"
+  ],
+  "S07368": [
+    "L0035",
+    "L0065",
+    "L0008"
+  ],
+  "S07369": [
+    "L0094",
+    "L0038",
+    "L0090"
+  ],
+  "S07370": [
+    "L0001",
+    "L0072",
+    "L0002"
+  ],
+  "S07371": [
+    "L0068",
+    "L0026",
+    "L0034"
+  ],
+  "S07372": [
+    "L0011",
+    "L0092",
+    "L0099"
+  ],
+  "S07373": [
+    "L0022",
+    "L0054",
+    "L0047"
+  ],
+  "S07374": [
+    "L0049",
+    "L0072",
+    "L0057"
+  ],
+  "S07375": [
+    "L0084",
+    "L0067",
+    "L0078"
+  ],
+  "S07376": [
+    "L0056",
+    "L0045",
+    "L0083"
+  ],
+  "S07377": [
+    "L0051",
+    "L0071",
+    "L0085"
+  ],
+  "S07378": [
+    "L0056",
+    "L0066",
+    "L0047"
+  ],
+  "S07379": [
+    "L0002",
+    "L0036",
+    "L0074"
+  ],
+  "S07380": [
+    "L0051",
+    "L0066",
+    "L0069"
+  ],
+  "S07381": [
+    "L0022",
+    "L0029",
+    "L0077"
+  ],
+  "S07382": [
+    "L0032",
+    "L0028",
+    "L0097"
+  ],
+  "S07383": [
+    "L0032",
+    "L0012",
+    "L0045"
+  ],
+  "S07384": [
+    "L0081",
+    "L0027",
+    "L0093"
+  ],
+  "S07385": [
+    "L0031",
+    "L0078",
+    "L0021"
+  ],
+  "S07386": [
+    "L0077",
+    "L0041",
+    "L0070"
+  ],
+  "S07387": [
+    "L0031",
+    "L0019",
+    "L0009"
+  ],
+  "S07388": [
+    "L0083",
+    "L0005",
+    "L0014"
+  ],
+  "S07389": [
+    "L0015",
+    "L0093",
+    "L0023"
+  ],
+  "S07390": [
+    "L0024",
+    "L0090",
+    "L0035"
+  ],
+  "S07391": [
+    "L0100",
+    "L0059",
+    "L0061"
+  ],
+  "S07392": [
+    "L0015",
+    "L0063",
+    "L0078"
+  ],
+  "S07393": [
+    "L0022",
+    "L0056",
+    "L0091"
+  ],
+  "S07394": [
+    "L0083",
+    "L0035",
+    "L0095"
+  ],
+  "S07395": [
+    "L0038",
+    "L0094",
+    "L0090"
+  ],
+  "S07396": [
+    "L0071",
+    "L0095",
+    "L0048"
+  ],
+  "S07397": [
+    "L0015",
+    "L0023",
+    "L0068"
+  ],
+  "S07398": [
+    "L0015",
+    "L0032",
+    "L0022"
+  ],
+  "S07399": [
+    "L0029",
+    "L0045",
+    "L0047"
+  ],
+  "S07400": [
+    "L0055",
+    "L0028",
+    "L0072"
+  ],
+  "S07401": [
+    "L0057",
+    "L0086",
+    "L0015"
+  ],
+  "S07402": [
+    "L0014",
+    "L0065",
+    "L0002"
+  ],
+  "S07403": [
+    "L0010",
+    "L0032",
+    "L0057"
+  ],
+  "S07404": [
+    "L0070",
+    "L0041",
+    "L0056"
+  ],
+  "S07405": [
+    "L0069",
+    "L0093",
+    "L0021"
+  ],
+  "S07406": [
+    "L0056",
+    "L0011",
+    "L0077"
+  ],
+  "S07407": [
+    "L0095",
+    "L0080",
+    "L0051"
+  ],
+  "S07408": [
+    "L0041",
+    "L0064",
+    "L0010"
+  ],
+  "S07409": [
+    "L0058",
+    "L0056",
+    "L0028"
+  ],
+  "S07410": [
+    "L0014",
+    "L0089",
+    "L0047"
+  ],
+  "S07411": [
+    "L0073",
+    "L0001",
+    "L0097"
+  ],
+  "S07412": [
+    "L0098",
+    "L0027",
+    "L0024"
+  ],
+  "S07413": [
+    "L0089",
+    "L0090",
+    "L0057"
+  ],
+  "S07414": [
+    "L0073",
+    "L0011",
+    "L0064"
+  ],
+  "S07415": [
+    "L0045",
+    "L0074",
+    "L0048"
+  ],
+  "S07416": [
+    "L0004",
+    "L0066",
+    "L0073"
+  ],
+  "S07417": [
+    "L0019",
+    "L0022",
+    "L0051"
+  ],
+  "S07418": [
+    "L0056",
+    "L0051",
+    "L0095"
+  ],
+  "S07419": [
+    "L0026",
+    "L0078",
+    "L0071"
+  ],
+  "S07420": [
+    "L0001",
+    "L0095",
+    "L0055"
+  ],
+  "S07421": [
+    "L0026",
+    "L0068",
+    "L0004"
+  ],
+  "S07422": [
+    "L0051",
+    "L0029",
+    "L0091"
+  ],
+  "S07423": [
+    "L0027",
+    "L0013",
+    "L0068"
+  ],
+  "S07424": [
+    "L0082",
+    "L0072",
+    "L0085"
+  ],
+  "S07425": [
+    "L0100",
+    "L0023",
+    "L0068"
+  ],
+  "S07426": [
+    "L0057",
+    "L0022",
+    "L0089"
+  ],
+  "S07427": [
+    "L0061",
+    "L0093",
+    "L0028"
+  ],
+  "S07428": [
+    "L0013",
+    "L0014",
+    "L0041"
+  ],
+  "S07429": [
+    "L0019",
+    "L0034",
+    "L0077"
+  ],
+  "S07430": [
+    "L0032",
+    "L0004",
+    "L0063"
+  ],
+  "S07431": [
+    "L0056",
+    "L0044",
+    "L0059"
+  ],
+  "S07432": [
+    "L0093",
+    "L0042",
+    "L0071"
+  ],
+  "S07433": [
+    "L0083",
+    "L0005",
+    "L0053"
+  ],
+  "S07434": [
+    "L0072",
+    "L0070",
+    "L0038"
+  ],
+  "S07435": [
+    "L0076",
+    "L0002",
+    "L0083"
+  ],
+  "S07436": [
+    "L0094",
+    "L0065",
+    "L0057"
+  ],
+  "S07437": [
+    "L0036",
+    "L0090",
+    "L0058"
+  ],
+  "S07438": [
+    "L0049",
+    "L0027",
+    "L0029"
+  ],
+  "S07439": [
+    "L0047",
+    "L0034",
+    "L0021"
+  ],
+  "S07440": [
+    "L0059",
+    "L0063",
+    "L0026"
+  ],
+  "S07441": [
+    "L0051",
+    "L0042",
+    "L0097"
+  ],
+  "S07442": [
+    "L0028",
+    "L0066",
+    "L0004"
+  ],
+  "S07443": [
+    "L0012",
+    "L0031",
+    "L0064"
+  ],
+  "S07444": [
+    "L0067",
+    "L0013",
+    "L0012"
+  ],
+  "S07445": [
+    "L0090",
+    "L0041",
+    "L0085"
+  ],
+  "S07446": [
+    "L0011",
+    "L0036",
+    "L0055"
+  ],
+  "S07447": [
+    "L0072",
+    "L0089",
+    "L0095"
+  ],
+  "S07448": [
+    "L0015",
+    "L0028",
+    "L0027"
+  ],
+  "S07449": [
+    "L0095",
+    "L0093",
+    "L0009"
+  ],
+  "S07450": [
+    "L0071",
+    "L0044",
+    "L0036"
+  ],
+  "S07451": [
+    "L0085",
+    "L0010",
+    "L0080"
+  ],
+  "S07452": [
+    "L0012",
+    "L0003",
+    "L0009"
+  ],
+  "S07453": [
+    "L0094",
+    "L0032",
+    "L0028"
+  ],
+  "S07454": [
+    "L0080",
+    "L0034",
+    "L0083"
+  ],
+  "S07455": [
+    "L0049",
+    "L0091",
+    "L0090"
+  ],
+  "S07456": [
+    "L0014",
+    "L0026",
+    "L0062"
+  ],
+  "S07457": [
+    "L0086",
+    "L0001",
+    "L0097"
+  ],
+  "S07458": [
+    "L0056",
+    "L0053",
+    "L0086"
+  ],
+  "S07459": [
+    "L0038",
+    "L0092",
+    "L0051"
+  ],
+  "S07460": [
+    "L0002",
+    "L0091",
+    "L0067"
+  ],
+  "S07461": [
+    "L0059",
+    "L0012",
+    "L0056"
+  ],
+  "S07462": [
+    "L0047",
+    "L0058",
+    "L0015"
+  ],
+  "S07463": [
+    "L0051",
+    "L0090",
+    "L0026"
+  ],
+  "S07464": [
+    "L0059",
+    "L0005",
+    "L0002"
+  ],
+  "S07465": [
+    "L0100",
+    "L0094",
+    "L0066"
+  ],
+  "S07466": [
+    "L0002",
+    "L0070",
+    "L0039"
+  ],
+  "S07467": [
+    "L0070",
+    "L0090",
+    "L0074"
+  ],
+  "S07468": [
+    "L0049",
+    "L0001",
+    "L0029"
+  ],
+  "S07469": [
+    "L0091",
+    "L0073",
+    "L0085"
+  ],
+  "S07470": [
+    "L0011",
+    "L0100",
+    "L0002"
+  ],
+  "S07471": [
+    "L0008",
+    "L0014",
+    "L0022"
+  ],
+  "S07472": [
+    "L0065",
+    "L0064",
+    "L0094"
+  ],
+  "S07473": [
+    "L0029",
+    "L0038",
+    "L0088"
+  ],
+  "S07474": [
+    "L0017",
+    "L0004",
+    "L0008"
+  ],
+  "S07475": [
+    "L0065",
+    "L0066",
+    "L0048"
+  ],
+  "S07476": [
+    "L0028",
+    "L0063",
+    "L0004"
+  ],
+  "S07477": [
+    "L0054",
+    "L0098",
+    "L0068"
+  ],
+  "S07478": [
+    "L0083",
+    "L0034",
+    "L0082"
+  ],
+  "S07479": [
+    "L0059",
+    "L0094",
+    "L0041"
+  ],
+  "S07480": [
+    "L0005",
+    "L0068",
+    "L0080"
+  ],
+  "S07481": [
+    "L0082",
+    "L0098",
+    "L0009"
+  ],
+  "S07482": [
+    "L0034",
+    "L0057",
+    "L0073"
+  ],
+  "S07483": [
+    "L0031",
+    "L0090",
+    "L0034"
+  ],
+  "S07484": [
+    "L0036",
+    "L0005",
+    "L0034"
+  ],
+  "S07485": [
+    "L0021",
+    "L0049",
+    "L0055"
+  ],
+  "S07486": [
+    "L0056",
+    "L0053",
+    "L0024"
+  ],
+  "S07487": [
+    "L0031",
+    "L0091",
+    "L0068"
+  ],
+  "S07488": [
+    "L0047",
+    "L0010",
+    "L0063"
+  ],
+  "S07489": [
+    "L0019",
+    "L0090",
+    "L0080"
+  ],
+  "S07490": [
+    "L0027",
+    "L0063",
+    "L0038"
+  ],
+  "S07491": [
+    "L0067",
+    "L0064",
+    "L0022"
+  ],
+  "S07492": [
+    "L0089",
+    "L0098",
+    "L0071"
+  ],
+  "S07493": [
+    "L0097",
+    "L0061",
+    "L0008"
+  ],
+  "S07494": [
+    "L0100",
+    "L0096",
+    "L0084"
+  ],
+  "S07495": [
+    "L0039",
+    "L0036",
+    "L0082"
+  ],
+  "S07496": [
+    "L0066",
+    "L0078",
+    "L0038"
+  ],
+  "S07497": [
+    "L0091",
+    "L0013",
+    "L0086"
+  ],
+  "S07498": [
+    "L0019",
+    "L0026",
+    "L0028"
+  ],
+  "S07499": [
+    "L0051",
+    "L0004",
+    "L0054"
+  ],
+  "S07500": [
+    "L0019",
+    "L0022",
+    "L0097"
+  ],
+  "S07501": [
+    "L0099",
+    "L0084",
+    "L0097"
+  ],
+  "S07502": [
+    "L0031",
+    "L0086",
+    "L0068"
+  ],
+  "S07503": [
+    "L0042",
+    "L0002",
+    "L0061"
+  ],
+  "S07504": [
+    "L0023",
+    "L0008",
+    "L0082"
+  ],
+  "S07505": [
+    "L0036",
+    "L0071",
+    "L0096"
+  ],
+  "S07506": [
+    "L0045",
+    "L0068",
+    "L0010"
+  ],
+  "S07507": [
+    "L0041",
+    "L0093",
+    "L0045"
+  ],
+  "S07508": [
+    "L0032",
+    "L0057",
+    "L0017"
+  ],
+  "S07509": [
+    "L0045",
+    "L0078",
+    "L0062"
+  ],
+  "S07510": [
+    "L0049",
+    "L0010",
+    "L0044"
+  ],
+  "S07511": [
+    "L0017",
+    "L0059",
+    "L0048"
+  ],
+  "S07512": [
+    "L0032",
+    "L0057",
+    "L0039"
+  ],
+  "S07513": [
+    "L0040",
+    "L0034",
+    "L0032"
+  ],
+  "S07514": [
+    "L0063",
+    "L0021",
+    "L0085"
+  ],
+  "S07515": [
+    "L0042",
+    "L0028",
+    "L0058"
+  ],
+  "S07516": [
+    "L0065",
+    "L0004",
+    "L0085"
+  ],
+  "S07517": [
+    "L0008",
+    "L0085",
+    "L0070"
+  ],
+  "S07518": [
+    "L0019",
+    "L0042",
+    "L0034"
+  ],
+  "S07519": [
+    "L0082",
+    "L0051",
+    "L0013"
+  ],
+  "S07520": [
+    "L0017",
+    "L0081",
+    "L0069"
+  ],
+  "S07521": [
+    "L0088",
+    "L0059",
+    "L0029"
+  ],
+  "S07522": [
+    "L0024",
+    "L0021",
+    "L0048"
+  ],
+  "S07523": [
+    "L0049",
+    "L0029",
+    "L0078"
+  ],
+  "S07524": [
+    "L0049",
+    "L0041",
+    "L0085"
+  ],
+  "S07525": [
+    "L0092",
+    "L0040",
+    "L0012"
+  ],
+  "S07526": [
+    "L0077",
+    "L0032",
+    "L0059"
+  ],
+  "S07527": [
+    "L0069",
+    "L0045",
+    "L0055"
+  ],
+  "S07528": [
+    "L0017",
+    "L0023",
+    "L0074"
+  ],
+  "S07529": [
+    "L0098",
+    "L0058",
+    "L0081"
+  ],
+  "S07530": [
+    "L0022",
+    "L0011",
+    "L0073"
+  ],
+  "S07531": [
+    "L0066",
+    "L0077",
+    "L0054"
+  ],
+  "S07532": [
+    "L0096",
+    "L0053",
+    "L0077"
+  ],
+  "S07533": [
+    "L0024",
+    "L0048",
+    "L0008"
+  ],
+  "S07534": [
+    "L0067",
+    "L0011",
+    "L0074"
+  ],
+  "S07535": [
+    "L0093",
+    "L0029",
+    "L0011"
+  ],
+  "S07536": [
+    "L0019",
+    "L0065",
+    "L0039"
+  ],
+  "S07537": [
+    "L0049",
+    "L0098",
+    "L0017"
+  ],
+  "S07538": [
+    "L0069",
+    "L0098",
+    "L0092"
+  ],
+  "S07539": [
+    "L0049",
+    "L0086",
+    "L0004"
+  ],
+  "S07540": [
+    "L0090",
+    "L0009",
+    "L0066"
+  ],
+  "S07541": [
+    "L0067",
+    "L0084",
+    "L0062"
+  ],
+  "S07542": [
+    "L0039",
+    "L0041",
+    "L0027"
+  ],
+  "S07543": [
+    "L0017",
+    "L0019",
+    "L0085"
+  ],
+  "S07544": [
+    "L0095",
+    "L0024",
+    "L0049"
+  ],
+  "S07545": [
+    "L0059",
+    "L0078",
+    "L0082"
+  ],
+  "S07546": [
+    "L0041",
+    "L0070",
+    "L0026"
+  ],
+  "S07547": [
+    "L0094",
+    "L0031",
+    "L0057"
+  ],
+  "S07548": [
+    "L0031",
+    "L0003",
+    "L0056"
+  ],
+  "S07549": [
+    "L0026",
+    "L0017",
+    "L0082"
+  ],
+  "S07550": [
+    "L0054",
+    "L0095",
+    "L0041"
+  ],
+  "S07551": [
+    "L0017",
+    "L0089",
+    "L0077"
+  ],
+  "S07552": [
+    "L0083",
+    "L0096",
+    "L0080"
+  ],
+  "S07553": [
+    "L0048",
+    "L0056",
+    "L0096"
+  ],
+  "S07554": [
+    "L0014",
+    "L0035",
+    "L0008"
+  ],
+  "S07555": [
+    "L0099",
+    "L0066",
+    "L0044"
+  ],
+  "S07556": [
+    "L0082",
+    "L0057",
+    "L0038"
+  ],
+  "S07557": [
+    "L0093",
+    "L0057",
+    "L0044"
+  ],
+  "S07558": [
+    "L0011",
+    "L0072",
+    "L0022"
+  ],
+  "S07559": [
+    "L0005",
+    "L0015",
+    "L0071"
+  ],
+  "S07560": [
+    "L0047",
+    "L0056",
+    "L0042"
+  ],
+  "S07561": [
+    "L0071",
+    "L0003",
+    "L0057"
+  ],
+  "S07562": [
+    "L0055",
+    "L0099",
+    "L0041"
+  ],
+  "S07563": [
+    "L0059",
+    "L0061",
+    "L0063"
+  ],
+  "S07564": [
+    "L0034",
+    "L0003",
+    "L0065"
+  ],
+  "S07565": [
+    "L0098",
+    "L0092",
+    "L0085"
+  ],
+  "S07566": [
+    "L0053",
+    "L0066",
+    "L0095"
+  ],
+  "S07567": [
+    "L0003",
+    "L0086",
+    "L0021"
+  ],
+  "S07568": [
+    "L0054",
+    "L0004",
+    "L0070"
+  ],
+  "S07569": [
+    "L0024",
+    "L0014",
+    "L0022"
+  ],
+  "S07570": [
+    "L0009",
+    "L0089",
+    "L0049"
+  ],
+  "S07571": [
+    "L0034",
+    "L0061",
+    "L0041"
+  ],
+  "S07572": [
+    "L0090",
+    "L0013",
+    "L0038"
+  ],
+  "S07573": [
+    "L0070",
+    "L0054",
+    "L0100"
+  ],
+  "S07574": [
+    "L0099",
+    "L0098",
+    "L0048"
+  ],
+  "S07575": [
+    "L0003",
+    "L0011",
+    "L0073"
+  ],
+  "S07576": [
+    "L0047",
+    "L0098",
+    "L0063"
+  ],
+  "S07577": [
+    "L0036",
+    "L0027",
+    "L0072"
+  ],
+  "S07578": [
+    "L0002",
+    "L0027",
+    "L0001"
+  ],
+  "S07579": [
+    "L0028",
+    "L0091",
+    "L0009"
+  ],
+  "S07580": [
+    "L0014",
+    "L0062",
+    "L0009"
+  ],
+  "S07581": [
+    "L0038",
+    "L0080",
+    "L0042"
+  ],
+  "S07582": [
+    "L0053",
+    "L0090",
+    "L0062"
+  ],
+  "S07583": [
+    "L0085",
+    "L0054",
+    "L0080"
+  ],
+  "S07584": [
+    "L0096",
+    "L0081",
+    "L0009"
+  ],
+  "S07585": [
+    "L0041",
+    "L0022",
+    "L0036"
+  ],
+  "S07586": [
+    "L0039",
+    "L0015",
+    "L0023"
+  ],
+  "S07587": [
+    "L0017",
+    "L0008",
+    "L0094"
+  ],
+  "S07588": [
+    "L0089",
+    "L0014",
+    "L0093"
+  ],
+  "S07589": [
+    "L0096",
+    "L0070",
+    "L0073"
+  ],
+  "S07590": [
+    "L0072",
+    "L0065",
+    "L0002"
+  ],
+  "S07591": [
+    "L0096",
+    "L0099",
+    "L0084"
+  ],
+  "S07592": [
+    "L0098",
+    "L0054",
+    "L0083"
+  ],
+  "S07593": [
+    "L0035",
+    "L0022",
+    "L0096"
+  ],
+  "S07594": [
+    "L0051",
+    "L0088",
+    "L0049"
+  ],
+  "S07595": [
+    "L0066",
+    "L0094",
+    "L0083"
+  ],
+  "S07596": [
+    "L0009",
+    "L0073",
+    "L0091"
+  ],
+  "S07597": [
+    "L0090",
+    "L0041",
+    "L0065"
+  ],
+  "S07598": [
+    "L0044",
+    "L0089",
+    "L0053"
+  ],
+  "S07599": [
+    "L0021",
+    "L0054",
+    "L0091"
+  ],
+  "S07600": [
+    "L0042",
+    "L0082",
+    "L0045"
+  ],
+  "S07601": [
+    "L0072",
+    "L0017",
+    "L0093"
+  ],
+  "S07602": [
+    "L0053",
+    "L0055",
+    "L0012"
+  ],
+  "S07603": [
+    "L0070",
+    "L0057",
+    "L0001"
+  ],
+  "S07604": [
+    "L0017",
+    "L0056",
+    "L0093"
+  ],
+  "S07605": [
+    "L0017",
+    "L0089",
+    "L0034"
+  ],
+  "S07606": [
+    "L0091",
+    "L0001",
+    "L0003"
+  ],
+  "S07607": [
+    "L0003",
+    "L0053",
+    "L0074"
+  ],
+  "S07608": [
+    "L0019",
+    "L0083",
+    "L0003"
+  ],
+  "S07609": [
+    "L0080",
+    "L0040",
+    "L0047"
+  ],
+  "S07610": [
+    "L0082",
+    "L0051",
+    "L0044"
+  ],
+  "S07611": [
+    "L0034",
+    "L0066",
+    "L0095"
+  ],
+  "S07612": [
+    "L0072",
+    "L0077",
+    "L0053"
+  ],
+  "S07613": [
+    "L0056",
+    "L0002",
+    "L0091"
+  ],
+  "S07614": [
+    "L0095",
+    "L0094",
+    "L0049"
+  ],
+  "S07615": [
+    "L0017",
+    "L0057",
+    "L0014"
+  ],
+  "S07616": [
+    "L0026",
+    "L0064",
+    "L0073"
+  ],
+  "S07617": [
+    "L0044",
+    "L0058",
+    "L0047"
+  ],
+  "S07618": [
+    "L0097",
+    "L0038",
+    "L0031"
+  ],
+  "S07619": [
+    "L0088",
+    "L0073",
+    "L0074"
+  ],
+  "S07620": [
+    "L0044",
+    "L0076",
+    "L0015"
+  ],
+  "S07621": [
+    "L0013",
+    "L0029",
+    "L0088"
+  ],
+  "S07622": [
+    "L0009",
+    "L0042",
+    "L0061"
+  ],
+  "S07623": [
+    "L0056",
+    "L0061",
+    "L0010"
+  ],
+  "S07624": [
+    "L0064",
+    "L0057",
+    "L0029"
+  ],
+  "S07625": [
+    "L0048",
+    "L0076",
+    "L0008"
+  ],
+  "S07626": [
+    "L0086",
+    "L0081",
+    "L0051"
+  ],
+  "S07627": [
+    "L0054",
+    "L0045",
+    "L0097"
+  ],
+  "S07628": [
+    "L0098",
+    "L0054",
+    "L0012"
+  ],
+  "S07629": [
+    "L0058",
+    "L0003",
+    "L0072"
+  ],
+  "S07630": [
+    "L0097",
+    "L0029",
+    "L0059"
+  ],
+  "S07631": [
+    "L0096",
+    "L0049",
+    "L0044"
+  ],
+  "S07632": [
+    "L0078",
+    "L0001",
+    "L0072"
+  ],
+  "S07633": [
+    "L0027",
+    "L0041",
+    "L0058"
+  ],
+  "S07634": [
+    "L0039",
+    "L0019",
+    "L0100"
+  ],
+  "S07635": [
+    "L0009",
+    "L0063",
+    "L0071"
+  ],
+  "S07636": [
+    "L0063",
+    "L0100",
+    "L0094"
+  ],
+  "S07637": [
+    "L0005",
+    "L0055",
+    "L0004"
+  ],
+  "S07638": [
+    "L0002",
+    "L0073",
+    "L0042"
+  ],
+  "S07639": [
+    "L0036",
+    "L0029",
+    "L0074"
+  ],
+  "S07640": [
+    "L0017",
+    "L0066",
+    "L0089"
+  ],
+  "S07641": [
+    "L0010",
+    "L0044",
+    "L0017"
+  ],
+  "S07642": [
+    "L0023",
+    "L0010",
+    "L0002"
+  ],
+  "S07643": [
+    "L0042",
+    "L0069",
+    "L0084"
+  ],
+  "S07644": [
+    "L0092",
+    "L0048",
+    "L0011"
+  ],
+  "S07645": [
+    "L0056",
+    "L0077",
+    "L0092"
+  ],
+  "S07646": [
+    "L0057",
+    "L0044",
+    "L0056"
+  ],
+  "S07647": [
+    "L0039",
+    "L0009",
+    "L0083"
+  ],
+  "S07648": [
+    "L0040",
+    "L0071",
+    "L0083"
+  ],
+  "S07649": [
+    "L0003",
+    "L0063",
+    "L0054"
+  ],
+  "S07650": [
+    "L0008",
+    "L0084",
+    "L0034"
+  ],
+  "S07651": [
+    "L0019",
+    "L0089",
+    "L0041"
+  ],
+  "S07652": [
+    "L0004",
+    "L0085",
+    "L0054"
+  ],
+  "S07653": [
+    "L0026",
+    "L0040",
+    "L0091"
+  ],
+  "S07654": [
+    "L0080",
+    "L0086",
+    "L0070"
+  ],
+  "S07655": [
+    "L0031",
+    "L0072",
+    "L0044"
+  ],
+  "S07656": [
+    "L0029",
+    "L0005",
+    "L0061"
+  ],
+  "S07657": [
+    "L0049",
+    "L0057",
+    "L0098"
+  ],
+  "S07658": [
+    "L0047",
+    "L0039",
+    "L0065"
+  ],
+  "S07659": [
+    "L0001",
+    "L0010",
+    "L0015"
+  ],
+  "S07660": [
+    "L0023",
+    "L0094",
+    "L0056"
+  ],
+  "S07661": [
+    "L0090",
+    "L0028",
+    "L0003"
+  ],
+  "S07662": [
+    "L0008",
+    "L0085",
+    "L0027"
+  ],
+  "S07663": [
+    "L0092",
+    "L0026",
+    "L0013"
+  ],
+  "S07664": [
+    "L0023",
+    "L0026",
+    "L0088"
+  ],
+  "S07665": [
+    "L0031",
+    "L0067",
+    "L0064"
+  ],
+  "S07666": [
+    "L0003",
+    "L0062",
+    "L0048"
+  ],
+  "S07667": [
+    "L0058",
+    "L0090",
+    "L0003"
+  ],
+  "S07668": [
+    "L0040",
+    "L0093",
+    "L0002"
+  ],
+  "S07669": [
+    "L0062",
+    "L0057",
+    "L0014"
+  ],
+  "S07670": [
+    "L0091",
+    "L0062",
+    "L0061"
+  ],
+  "S07671": [
+    "L0011",
+    "L0067",
+    "L0032"
+  ],
+  "S07672": [
+    "L0061",
+    "L0091",
+    "L0042"
+  ],
+  "S07673": [
+    "L0026",
+    "L0036",
+    "L0084"
+  ],
+  "S07674": [
+    "L0031",
+    "L0094",
+    "L0023"
+  ],
+  "S07675": [
+    "L0081",
+    "L0019",
+    "L0054"
+  ],
+  "S07676": [
+    "L0092",
+    "L0089",
+    "L0098"
+  ],
+  "S07677": [
+    "L0097",
+    "L0015",
+    "L0096"
+  ],
+  "S07678": [
+    "L0028",
+    "L0059",
+    "L0042"
+  ],
+  "S07679": [
+    "L0074",
+    "L0044",
+    "L0072"
+  ],
+  "S07680": [
+    "L0031",
+    "L0065",
+    "L0068"
+  ],
+  "S07681": [
+    "L0061",
+    "L0015",
+    "L0054"
+  ],
+  "S07682": [
+    "L0026",
+    "L0044",
+    "L0029"
+  ],
+  "S07683": [
+    "L0057",
+    "L0072",
+    "L0013"
+  ],
+  "S07684": [
+    "L0062",
+    "L0045",
+    "L0059"
+  ],
+  "S07685": [
+    "L0026",
+    "L0067",
+    "L0035"
+  ],
+  "S07686": [
+    "L0034",
+    "L0027",
+    "L0092"
+  ],
+  "S07687": [
+    "L0073",
+    "L0094",
+    "L0069"
+  ],
+  "S07688": [
+    "L0093",
+    "L0041",
+    "L0001"
+  ],
+  "S07689": [
+    "L0061",
+    "L0023",
+    "L0004"
+  ],
+  "S07690": [
+    "L0071",
+    "L0067",
+    "L0090"
+  ],
+  "S07691": [
+    "L0015",
+    "L0009",
+    "L0064"
+  ],
+  "S07692": [
+    "L0049",
+    "L0097",
+    "L0034"
+  ],
+  "S07693": [
+    "L0070",
+    "L0001",
+    "L0096"
+  ],
+  "S07694": [
+    "L0039",
+    "L0066",
+    "L0096"
+  ],
+  "S07695": [
+    "L0078",
+    "L0080",
+    "L0094"
+  ],
+  "S07696": [
+    "L0069",
+    "L0066",
+    "L0010"
+  ],
+  "S07697": [
+    "L0053",
+    "L0029",
+    "L0028"
+  ],
+  "S07698": [
+    "L0055",
+    "L0021",
+    "L0081"
+  ],
+  "S07699": [
+    "L0097",
+    "L0072",
+    "L0027"
+  ],
+  "S07700": [
+    "L0091",
+    "L0064",
+    "L0039"
+  ],
+  "S07701": [
+    "L0022",
+    "L0042",
+    "L0003"
+  ],
+  "S07702": [
+    "L0073",
+    "L0054",
+    "L0077"
+  ],
+  "S07703": [
+    "L0058",
+    "L0082",
+    "L0038"
+  ],
+  "S07704": [
+    "L0053",
+    "L0090",
+    "L0004"
+  ],
+  "S07705": [
+    "L0078",
+    "L0023",
+    "L0045"
+  ],
+  "S07706": [
+    "L0035",
+    "L0062",
+    "L0002"
+  ],
+  "S07707": [
+    "L0048",
+    "L0097",
+    "L0070"
+  ],
+  "S07708": [
+    "L0039",
+    "L0001",
+    "L0038"
+  ],
+  "S07709": [
+    "L0095",
+    "L0064",
+    "L0023"
+  ],
+  "S07710": [
+    "L0042",
+    "L0099",
+    "L0091"
+  ],
+  "S07711": [
+    "L0088",
+    "L0034",
+    "L0022"
+  ],
+  "S07712": [
+    "L0064",
+    "L0090",
+    "L0077"
+  ],
+  "S07713": [
+    "L0061",
+    "L0076",
+    "L0096"
+  ],
+  "S07714": [
+    "L0023",
+    "L0004",
+    "L0094"
+  ],
+  "S07715": [
+    "L0065",
+    "L0069",
+    "L0058"
+  ],
+  "S07716": [
+    "L0053",
+    "L0024",
+    "L0049"
+  ],
+  "S07717": [
+    "L0080",
+    "L0044",
+    "L0065"
+  ],
+  "S07718": [
+    "L0094",
+    "L0040",
+    "L0074"
+  ],
+  "S07719": [
+    "L0034",
+    "L0031",
+    "L0080"
+  ],
+  "S07720": [
+    "L0073",
+    "L0005",
+    "L0067"
+  ],
+  "S07721": [
+    "L0034",
+    "L0084",
+    "L0049"
+  ],
+  "S07722": [
+    "L0069",
+    "L0017",
+    "L0053"
+  ],
+  "S07723": [
+    "L0045",
+    "L0027",
+    "L0026"
+  ],
+  "S07724": [
+    "L0035",
+    "L0053",
+    "L0022"
+  ],
+  "S07725": [
+    "L0027",
+    "L0058",
+    "L0035"
+  ],
+  "S07726": [
+    "L0091",
+    "L0093",
+    "L0027"
+  ],
+  "S07727": [
+    "L0010",
+    "L0017",
+    "L0022"
+  ],
+  "S07728": [
+    "L0042",
+    "L0091",
+    "L0048"
+  ],
+  "S07729": [
+    "L0048",
+    "L0031",
+    "L0010"
+  ],
+  "S07730": [
+    "L0047",
+    "L0091",
+    "L0062"
+  ],
+  "S07731": [
+    "L0017",
+    "L0067",
+    "L0044"
+  ],
+  "S07732": [
+    "L0056",
+    "L0094",
+    "L0089"
+  ],
+  "S07733": [
+    "L0084",
+    "L0098",
+    "L0044"
+  ],
+  "S07734": [
+    "L0017",
+    "L0089",
+    "L0010"
+  ],
+  "S07735": [
+    "L0004",
+    "L0057",
+    "L0069"
+  ],
+  "S07736": [
+    "L0095",
+    "L0077",
+    "L0054"
+  ],
+  "S07737": [
+    "L0093",
+    "L0039",
+    "L0021"
+  ],
+  "S07738": [
+    "L0069",
+    "L0068",
+    "L0013"
+  ],
+  "S07739": [
+    "L0093",
+    "L0042",
+    "L0086"
+  ],
+  "S07740": [
+    "L0058",
+    "L0026",
+    "L0008"
+  ],
+  "S07741": [
+    "L0002",
+    "L0022",
+    "L0064"
+  ],
+  "S07742": [
+    "L0061",
+    "L0004",
+    "L0062"
+  ],
+  "S07743": [
+    "L0056",
+    "L0083",
+    "L0093"
+  ],
+  "S07744": [
+    "L0093",
+    "L0066",
+    "L0086"
+  ],
+  "S07745": [
+    "L0019",
+    "L0017",
+    "L0097"
+  ],
+  "S07746": [
+    "L0088",
+    "L0032",
+    "L0036"
+  ],
+  "S07747": [
+    "L0055",
+    "L0100",
+    "L0089"
+  ],
+  "S07748": [
+    "L0066",
+    "L0024",
+    "L0008"
+  ],
+  "S07749": [
+    "L0013",
+    "L0005",
+    "L0099"
+  ],
+  "S07750": [
+    "L0059",
+    "L0035",
+    "L0067"
+  ],
+  "S07751": [
+    "L0090",
+    "L0100",
+    "L0019"
+  ],
+  "S07752": [
+    "L0067",
+    "L0035",
+    "L0057"
+  ],
+  "S07753": [
+    "L0014",
+    "L0017",
+    "L0023"
+  ],
+  "S07754": [
+    "L0045",
+    "L0040",
+    "L0028"
+  ],
+  "S07755": [
+    "L0036",
+    "L0064",
+    "L0070"
+  ],
+  "S07756": [
+    "L0034",
+    "L0035",
+    "L0002"
+  ],
+  "S07757": [
+    "L0083",
+    "L0047",
+    "L0068"
+  ],
+  "S07758": [
+    "L0036",
+    "L0082",
+    "L0017"
+  ],
+  "S07759": [
+    "L0096",
+    "L0061",
+    "L0099"
+  ],
+  "S07760": [
+    "L0056",
+    "L0042",
+    "L0082"
+  ],
+  "S07761": [
+    "L0039",
+    "L0080",
+    "L0092"
+  ],
+  "S07762": [
+    "L0036",
+    "L0090",
+    "L0009"
+  ],
+  "S07763": [
+    "L0090",
+    "L0017",
+    "L0044"
+  ],
+  "S07764": [
+    "L0070",
+    "L0100",
+    "L0015"
+  ],
+  "S07765": [
+    "L0005",
+    "L0015",
+    "L0055"
+  ],
+  "S07766": [
+    "L0056",
+    "L0019",
+    "L0097"
+  ],
+  "S07767": [
+    "L0048",
+    "L0015",
+    "L0040"
+  ],
+  "S07768": [
+    "L0051",
+    "L0091",
+    "L0011"
+  ],
+  "S07769": [
+    "L0015",
+    "L0065",
+    "L0077"
+  ],
+  "S07770": [
+    "L0026",
+    "L0055",
+    "L0038"
+  ],
+  "S07771": [
+    "L0022",
+    "L0040",
+    "L0023"
+  ],
+  "S07772": [
+    "L0008",
+    "L0090",
+    "L0009"
+  ],
+  "S07773": [
+    "L0074",
+    "L0077",
+    "L0088"
+  ],
+  "S07774": [
+    "L0088",
+    "L0040",
+    "L0069"
+  ],
+  "S07775": [
+    "L0041",
+    "L0036",
+    "L0097"
+  ],
+  "S07776": [
+    "L0015",
+    "L0056",
+    "L0029"
+  ],
+  "S07777": [
+    "L0049",
+    "L0017",
+    "L0072"
+  ],
+  "S07778": [
+    "L0072",
+    "L0034",
+    "L0076"
+  ],
+  "S07779": [
+    "L0044",
+    "L0077",
+    "L0032"
+  ],
+  "S07780": [
+    "L0072",
+    "L0027",
+    "L0095"
+  ],
+  "S07781": [
+    "L0036",
+    "L0090",
+    "L0066"
+  ],
+  "S07782": [
+    "L0058",
+    "L0070",
+    "L0044"
+  ],
+  "S07783": [
+    "L0064",
+    "L0028",
+    "L0022"
+  ],
+  "S07784": [
+    "L0094",
+    "L0086",
+    "L0078"
+  ],
+  "S07785": [
+    "L0019",
+    "L0040",
+    "L0095"
+  ],
+  "S07786": [
+    "L0058",
+    "L0090",
+    "L0047"
+  ],
+  "S07787": [
+    "L0001",
+    "L0053",
+    "L0072"
+  ],
+  "S07788": [
+    "L0036",
+    "L0065",
+    "L0038"
+  ],
+  "S07789": [
+    "L0049",
+    "L0092",
+    "L0054"
+  ],
+  "S07790": [
+    "L0004",
+    "L0061",
+    "L0005"
+  ],
+  "S07791": [
+    "L0069",
+    "L0004",
+    "L0091"
+  ],
+  "S07792": [
+    "L0098",
+    "L0088",
+    "L0003"
+  ],
+  "S07793": [
+    "L0009",
+    "L0067",
+    "L0097"
+  ],
+  "S07794": [
+    "L0051",
+    "L0072",
+    "L0056"
+  ],
+  "S07795": [
+    "L0100",
+    "L0004",
+    "L0089"
+  ],
+  "S07796": [
+    "L0063",
+    "L0017",
+    "L0068"
+  ],
+  "S07797": [
+    "L0047",
+    "L0008",
+    "L0057"
+  ],
+  "S07798": [
+    "L0008",
+    "L0010",
+    "L0058"
+  ],
+  "S07799": [
+    "L0021",
+    "L0097",
+    "L0002"
+  ],
+  "S07800": [
+    "L0098",
+    "L0084",
+    "L0015"
+  ],
+  "S07801": [
+    "L0091",
+    "L0086",
+    "L0005"
+  ],
+  "S07802": [
+    "L0036",
+    "L0093",
+    "L0092"
+  ],
+  "S07803": [
+    "L0067",
+    "L0047",
+    "L0015"
+  ],
+  "S07804": [
+    "L0017",
+    "L0031",
+    "L0021"
+  ],
+  "S07805": [
+    "L0026",
+    "L0088",
+    "L0040"
+  ],
+  "S07806": [
+    "L0039",
+    "L0077",
+    "L0095"
+  ],
+  "S07807": [
+    "L0044",
+    "L0066",
+    "L0035"
+  ],
+  "S07808": [
+    "L0009",
+    "L0083",
+    "L0084"
+  ],
+  "S07809": [
+    "L0078",
+    "L0012",
+    "L0039"
+  ],
+  "S07810": [
+    "L0022",
+    "L0065",
+    "L0073"
+  ],
+  "S07811": [
+    "L0011",
+    "L0041",
+    "L0039"
+  ],
+  "S07812": [
+    "L0021",
+    "L0026",
+    "L0070"
+  ],
+  "S07813": [
+    "L0078",
+    "L0068",
+    "L0042"
+  ],
+  "S07814": [
+    "L0095",
+    "L0032",
+    "L0088"
+  ],
+  "S07815": [
+    "L0005",
+    "L0088",
+    "L0064"
+  ],
+  "S07816": [
+    "L0026",
+    "L0080",
+    "L0091"
+  ],
+  "S07817": [
+    "L0023",
+    "L0009",
+    "L0053"
+  ],
+  "S07818": [
+    "L0064",
+    "L0092",
+    "L0077"
+  ],
+  "S07819": [
+    "L0073",
+    "L0094",
+    "L0068"
+  ],
+  "S07820": [
+    "L0056",
+    "L0099",
+    "L0085"
+  ],
+  "S07821": [
+    "L0039",
+    "L0011",
+    "L0051"
+  ],
+  "S07822": [
+    "L0085",
+    "L0081",
+    "L0040"
+  ],
+  "S07823": [
+    "L0057",
+    "L0051",
+    "L0040"
+  ],
+  "S07824": [
+    "L0082",
+    "L0070",
+    "L0045"
+  ],
+  "S07825": [
+    "L0049",
+    "L0063",
+    "L0055"
+  ],
+  "S07826": [
+    "L0054",
+    "L0035",
+    "L0015"
+  ],
+  "S07827": [
+    "L0051",
+    "L0032",
+    "L0017"
+  ],
+  "S07828": [
+    "L0041",
+    "L0067",
+    "L0085"
+  ],
+  "S07829": [
+    "L0027",
+    "L0054",
+    "L0036"
+  ],
+  "S07830": [
+    "L0068",
+    "L0074",
+    "L0041"
+  ],
+  "S07831": [
+    "L0047",
+    "L0083",
+    "L0061"
+  ],
+  "S07832": [
+    "L0065",
+    "L0011",
+    "L0092"
+  ],
+  "S07833": [
+    "L0076",
+    "L0071",
+    "L0015"
+  ],
+  "S07834": [
+    "L0028",
+    "L0099",
+    "L0021"
+  ],
+  "S07835": [
+    "L0084",
+    "L0045",
+    "L0044"
+  ],
+  "S07836": [
+    "L0002",
+    "L0064",
+    "L0065"
+  ],
+  "S07837": [
+    "L0034",
+    "L0004",
+    "L0095"
+  ],
+  "S07838": [
+    "L0027",
+    "L0010",
+    "L0068"
+  ],
+  "S07839": [
+    "L0069",
+    "L0056",
+    "L0063"
+  ],
+  "S07840": [
+    "L0008",
+    "L0045",
+    "L0076"
+  ],
+  "S07841": [
+    "L0091",
+    "L0093",
+    "L0002"
+  ],
+  "S07842": [
+    "L0014",
+    "L0005",
+    "L0026"
+  ],
+  "S07843": [
+    "L0096",
+    "L0089",
+    "L0040"
+  ],
+  "S07844": [
+    "L0028",
+    "L0056",
+    "L0069"
+  ],
+  "S07845": [
+    "L0023",
+    "L0081",
+    "L0049"
+  ],
+  "S07846": [
+    "L0078",
+    "L0041",
+    "L0099"
+  ],
+  "S07847": [
+    "L0012",
+    "L0045",
+    "L0024"
+  ],
+  "S07848": [
+    "L0097",
+    "L0032",
+    "L0041"
+  ],
+  "S07849": [
+    "L0023",
+    "L0002",
+    "L0004"
+  ],
+  "S07850": [
+    "L0071",
+    "L0047",
+    "L0051"
+  ],
+  "S07851": [
+    "L0084",
+    "L0003",
+    "L0063"
+  ],
+  "S07852": [
+    "L0074",
+    "L0096",
+    "L0028"
+  ],
+  "S07853": [
+    "L0005",
+    "L0028",
+    "L0002"
+  ],
+  "S07854": [
+    "L0083",
+    "L0066",
+    "L0059"
+  ],
+  "S07855": [
+    "L0014",
+    "L0054",
+    "L0004"
+  ],
+  "S07856": [
+    "L0074",
+    "L0082",
+    "L0039"
+  ],
+  "S07857": [
+    "L0044",
+    "L0063",
+    "L0010"
+  ],
+  "S07858": [
+    "L0070",
+    "L0072",
+    "L0078"
+  ],
+  "S07859": [
+    "L0028",
+    "L0036",
+    "L0098"
+  ],
+  "S07860": [
+    "L0019",
+    "L0086",
+    "L0083"
+  ],
+  "S07861": [
+    "L0015",
+    "L0084",
+    "L0036"
+  ],
+  "S07862": [
+    "L0098",
+    "L0089",
+    "L0066"
+  ],
+  "S07863": [
+    "L0055",
+    "L0047",
+    "L0039"
+  ],
+  "S07864": [
+    "L0094",
+    "L0010",
+    "L0054"
+  ],
+  "S07865": [
+    "L0047",
+    "L0014",
+    "L0094"
+  ],
+  "S07866": [
+    "L0092",
+    "L0031",
+    "L0017"
+  ],
+  "S07867": [
+    "L0073",
+    "L0003",
+    "L0077"
+  ],
+  "S07868": [
+    "L0059",
+    "L0042",
+    "L0070"
+  ],
+  "S07869": [
+    "L0029",
+    "L0005",
+    "L0084"
+  ],
+  "S07870": [
+    "L0029",
+    "L0027",
+    "L0070"
+  ],
+  "S07871": [
+    "L0034",
+    "L0051",
+    "L0095"
+  ],
+  "S07872": [
+    "L0085",
+    "L0092",
+    "L0009"
+  ],
+  "S07873": [
+    "L0009",
+    "L0039",
+    "L0004"
+  ],
+  "S07874": [
+    "L0091",
+    "L0062",
+    "L0042"
+  ],
+  "S07875": [
+    "L0073",
+    "L0096",
+    "L0048"
+  ],
+  "S07876": [
+    "L0047",
+    "L0084",
+    "L0056"
+  ],
+  "S07877": [
+    "L0062",
+    "L0022",
+    "L0011"
+  ],
+  "S07878": [
+    "L0100",
+    "L0071",
+    "L0085"
+  ],
+  "S07879": [
+    "L0019",
+    "L0015",
+    "L0026"
+  ],
+  "S07880": [
+    "L0028",
+    "L0057",
+    "L0068"
+  ],
+  "S07881": [
+    "L0036",
+    "L0085",
+    "L0042"
+  ],
+  "S07882": [
+    "L0059",
+    "L0098",
+    "L0042"
+  ],
+  "S07883": [
+    "L0081",
+    "L0002",
+    "L0083"
+  ],
+  "S07884": [
+    "L0011",
+    "L0068",
+    "L0019"
+  ],
+  "S07885": [
+    "L0091",
+    "L0068",
+    "L0073"
+  ],
+  "S07886": [
+    "L0012",
+    "L0015",
+    "L0073"
+  ],
+  "S07887": [
+    "L0098",
+    "L0024",
+    "L0063"
+  ],
+  "S07888": [
+    "L0031",
+    "L0067",
+    "L0089"
+  ],
+  "S07889": [
+    "L0005",
+    "L0058",
+    "L0069"
+  ],
+  "S07890": [
+    "L0047",
+    "L0048",
+    "L0024"
+  ],
+  "S07891": [
+    "L0013",
+    "L0099",
+    "L0090"
+  ],
+  "S07892": [
+    "L0071",
+    "L0086",
+    "L0054"
+  ],
+  "S07893": [
+    "L0094",
+    "L0032",
+    "L0089"
+  ],
+  "S07894": [
+    "L0008",
+    "L0038",
+    "L0071"
+  ],
+  "S07895": [
+    "L0098",
+    "L0081",
+    "L0067"
+  ],
+  "S07896": [
+    "L0023",
+    "L0088",
+    "L0086"
+  ],
+  "S07897": [
+    "L0005",
+    "L0034",
+    "L0048"
+  ],
+  "S07898": [
+    "L0089",
+    "L0035",
+    "L0044"
+  ],
+  "S07899": [
+    "L0010",
+    "L0082",
+    "L0061"
+  ],
+  "S07900": [
+    "L0048",
+    "L0064",
+    "L0022"
+  ],
+  "S07901": [
+    "L0005",
+    "L0032",
+    "L0097"
+  ],
+  "S07902": [
+    "L0051",
+    "L0035",
+    "L0072"
+  ],
+  "S07903": [
+    "L0049",
+    "L0001",
+    "L0008"
+  ],
+  "S07904": [
+    "L0069",
+    "L0070",
+    "L0088"
+  ],
+  "S07905": [
+    "L0002",
+    "L0028",
+    "L0017"
+  ],
+  "S07906": [
+    "L0061",
+    "L0068",
+    "L0039"
+  ],
+  "S07907": [
+    "L0045",
+    "L0066",
+    "L0081"
+  ],
+  "S07908": [
+    "L0059",
+    "L0090",
+    "L0026"
+  ],
+  "S07909": [
+    "L0014",
+    "L0055",
+    "L0036"
+  ],
+  "S07910": [
+    "L0008",
+    "L0065",
+    "L0063"
+  ],
+  "S07911": [
+    "L0047",
+    "L0056",
+    "L0032"
+  ],
+  "S07912": [
+    "L0081",
+    "L0040",
+    "L0090"
+  ],
+  "S07913": [
+    "L0093",
+    "L0090",
+    "L0005"
+  ],
+  "S07914": [
+    "L0078",
+    "L0041",
+    "L0035"
+  ],
+  "S07915": [
+    "L0047",
+    "L0027",
+    "L0031"
+  ],
+  "S07916": [
+    "L0072",
+    "L0039",
+    "L0008"
+  ],
+  "S07917": [
+    "L0013",
+    "L0039",
+    "L0065"
+  ],
+  "S07918": [
+    "L0065",
+    "L0069",
+    "L0098"
+  ],
+  "S07919": [
+    "L0004",
+    "L0024",
+    "L0096"
+  ],
+  "S07920": [
+    "L0048",
+    "L0053",
+    "L0008"
+  ],
+  "S07921": [
+    "L0090",
+    "L0035",
+    "L0051"
+  ],
+  "S07922": [
+    "L0078",
+    "L0063",
+    "L0019"
+  ],
+  "S07923": [
+    "L0096",
+    "L0058",
+    "L0014"
+  ],
+  "S07924": [
+    "L0073",
+    "L0061",
+    "L0038"
+  ],
+  "S07925": [
+    "L0097",
+    "L0092",
+    "L0008"
+  ],
+  "S07926": [
+    "L0015",
+    "L0059",
+    "L0074"
+  ],
+  "S07927": [
+    "L0032",
+    "L0053",
+    "L0049"
+  ],
+  "S07928": [
+    "L0015",
+    "L0001",
+    "L0011"
+  ],
+  "S07929": [
+    "L0095",
+    "L0070",
+    "L0034"
+  ],
+  "S07930": [
+    "L0080",
+    "L0035",
+    "L0078"
+  ],
+  "S07931": [
+    "L0089",
+    "L0066",
+    "L0083"
+  ],
+  "S07932": [
+    "L0076",
+    "L0027",
+    "L0026"
+  ],
+  "S07933": [
+    "L0001",
+    "L0084",
+    "L0073"
+  ],
+  "S07934": [
+    "L0012",
+    "L0067",
+    "L0098"
+  ],
+  "S07935": [
+    "L0054",
+    "L0029",
+    "L0013"
+  ],
+  "S07936": [
+    "L0090",
+    "L0096",
+    "L0057"
+  ],
+  "S07937": [
+    "L0073",
+    "L0097",
+    "L0032"
+  ],
+  "S07938": [
+    "L0078",
+    "L0068",
+    "L0009"
+  ],
+  "S07939": [
+    "L0027",
+    "L0042",
+    "L0049"
+  ],
+  "S07940": [
+    "L0085",
+    "L0049",
+    "L0070"
+  ],
+  "S07941": [
+    "L0093",
+    "L0001",
+    "L0080"
+  ],
+  "S07942": [
+    "L0011",
+    "L0076",
+    "L0049"
+  ],
+  "S07943": [
+    "L0074",
+    "L0088",
+    "L0061"
+  ],
+  "S07944": [
+    "L0077",
+    "L0097",
+    "L0011"
+  ],
+  "S07945": [
+    "L0053",
+    "L0035",
+    "L0068"
+  ],
+  "S07946": [
+    "L0074",
+    "L0059",
+    "L0071"
+  ],
+  "S07947": [
+    "L0100",
+    "L0024",
+    "L0077"
+  ],
+  "S07948": [
+    "L0061",
+    "L0011",
+    "L0042"
+  ],
+  "S07949": [
+    "L0100",
+    "L0090",
+    "L0035"
+  ],
+  "S07950": [
+    "L0093",
+    "L0023",
+    "L0084"
+  ],
+  "S07951": [
+    "L0048",
+    "L0013",
+    "L0029"
+  ],
+  "S07952": [
+    "L0001",
+    "L0089",
+    "L0092"
+  ],
+  "S07953": [
+    "L0085",
+    "L0073",
+    "L0089"
+  ],
+  "S07954": [
+    "L0077",
+    "L0047",
+    "L0031"
+  ],
+  "S07955": [
+    "L0001",
+    "L0100",
+    "L0070"
+  ],
+  "S07956": [
+    "L0059",
+    "L0051",
+    "L0070"
+  ],
+  "S07957": [
+    "L0009",
+    "L0005",
+    "L0008"
+  ],
+  "S07958": [
+    "L0041",
+    "L0069",
+    "L0014"
+  ],
+  "S07959": [
+    "L0008",
+    "L0063",
+    "L0076"
+  ],
+  "S07960": [
+    "L0094",
+    "L0035",
+    "L0019"
+  ],
+  "S07961": [
+    "L0045",
+    "L0003",
+    "L0029"
+  ],
+  "S07962": [
+    "L0076",
+    "L0095",
+    "L0009"
+  ],
+  "S07963": [
+    "L0011",
+    "L0003",
+    "L0042"
+  ],
+  "S07964": [
+    "L0024",
+    "L0071",
+    "L0027"
+  ],
+  "S07965": [
+    "L0036",
+    "L0040",
+    "L0100"
+  ],
+  "S07966": [
+    "L0038",
+    "L0086",
+    "L0003"
+  ],
+  "S07967": [
+    "L0010",
+    "L0072",
+    "L0078"
+  ],
+  "S07968": [
+    "L0056",
+    "L0026",
+    "L0100"
+  ],
+  "S07969": [
+    "L0012",
+    "L0010",
+    "L0094"
+  ],
+  "S07970": [
+    "L0009",
+    "L0010",
+    "L0099"
+  ],
+  "S07971": [
+    "L0039",
+    "L0066",
+    "L0044"
+  ],
+  "S07972": [
+    "L0002",
+    "L0080",
+    "L0044"
+  ],
+  "S07973": [
+    "L0015",
+    "L0089",
+    "L0026"
+  ],
+  "S07974": [
+    "L0013",
+    "L0062",
+    "L0054"
+  ],
+  "S07975": [
+    "L0098",
+    "L0083",
+    "L0034"
+  ],
+  "S07976": [
+    "L0085",
+    "L0096",
+    "L0097"
+  ],
+  "S07977": [
+    "L0036",
+    "L0089",
+    "L0082"
+  ],
+  "S07978": [
+    "L0051",
+    "L0084",
+    "L0041"
+  ],
+  "S07979": [
+    "L0027",
+    "L0031",
+    "L0059"
+  ],
+  "S07980": [
+    "L0011",
+    "L0015",
+    "L0048"
+  ],
+  "S07981": [
+    "L0068",
+    "L0069",
+    "L0082"
+  ],
+  "S07982": [
+    "L0042",
+    "L0084",
+    "L0026"
+  ],
+  "S07983": [
+    "L0019",
+    "L0062",
+    "L0065"
+  ],
+  "S07984": [
+    "L0021",
+    "L0031",
+    "L0009"
+  ],
+  "S07985": [
+    "L0067",
+    "L0089",
+    "L0004"
+  ],
+  "S07986": [
+    "L0090",
+    "L0045",
+    "L0091"
+  ],
+  "S07987": [
+    "L0054",
+    "L0040",
+    "L0003"
+  ],
+  "S07988": [
+    "L0010",
+    "L0005",
+    "L0003"
+  ],
+  "S07989": [
+    "L0039",
+    "L0055",
+    "L0019"
+  ],
+  "S07990": [
+    "L0098",
+    "L0014",
+    "L0048"
+  ],
+  "S07991": [
+    "L0042",
+    "L0074",
+    "L0010"
+  ],
+  "S07992": [
+    "L0017",
+    "L0069",
+    "L0039"
+  ],
+  "S07993": [
+    "L0044",
+    "L0045",
+    "L0093"
+  ],
+  "S07994": [
+    "L0094",
+    "L0019",
+    "L0023"
+  ],
+  "S07995": [
+    "L0086",
+    "L0021",
+    "L0062"
+  ],
+  "S07996": [
+    "L0061",
+    "L0045",
+    "L0009"
+  ],
+  "S07997": [
+    "L0011",
+    "L0067",
+    "L0049"
+  ],
+  "S07998": [
+    "L0061",
+    "L0047",
+    "L0001"
+  ],
+  "S07999": [
+    "L0023",
+    "L0078",
+    "L0056"
+  ],
+  "S08000": [
+    "L0038",
+    "L0035",
+    "L0012"
+  ],
+  "S08001": [
+    "L0069",
+    "L0058",
+    "L0085"
+  ],
+  "S08002": [
+    "L0012",
+    "L0027",
+    "L0029"
+  ],
+  "S08003": [
+    "L0099",
+    "L0097",
+    "L0039"
+  ],
+  "S08004": [
+    "L0088",
+    "L0014",
+    "L0048"
+  ],
+  "S08005": [
+    "L0081",
+    "L0063",
+    "L0010"
+  ],
+  "S08006": [
+    "L0098",
+    "L0059",
+    "L0036"
+  ],
+  "S08007": [
+    "L0074",
+    "L0093",
+    "L0090"
+  ],
+  "S08008": [
+    "L0034",
+    "L0074",
+    "L0081"
+  ],
+  "S08009": [
+    "L0017",
+    "L0071",
+    "L0034"
+  ],
+  "S08010": [
+    "L0058",
+    "L0095",
+    "L0054"
+  ],
+  "S08011": [
+    "L0057",
+    "L0095",
+    "L0097"
+  ],
+  "S08012": [
+    "L0004",
+    "L0069",
+    "L0100"
+  ],
+  "S08013": [
+    "L0017",
+    "L0054",
+    "L0064"
+  ],
+  "S08014": [
+    "L0069",
+    "L0062",
+    "L0040"
+  ],
+  "S08015": [
+    "L0022",
+    "L0062",
+    "L0063"
+  ],
+  "S08016": [
+    "L0064",
+    "L0089",
+    "L0048"
+  ],
+  "S08017": [
+    "L0032",
+    "L0035",
+    "L0011"
+  ],
+  "S08018": [
+    "L0063",
+    "L0035",
+    "L0031"
+  ],
+  "S08019": [
+    "L0032",
+    "L0009",
+    "L0057"
+  ],
+  "S08020": [
+    "L0063",
+    "L0011",
+    "L0017"
+  ],
+  "S08021": [
+    "L0095",
+    "L0088",
+    "L0097"
+  ],
+  "S08022": [
+    "L0008",
+    "L0061",
+    "L0026"
+  ],
+  "S08023": [
+    "L0028",
+    "L0059",
+    "L0074"
+  ],
+  "S08024": [
+    "L0068",
+    "L0057",
+    "L0051"
+  ],
+  "S08025": [
+    "L0049",
+    "L0055",
+    "L0069"
+  ],
+  "S08026": [
+    "L0028",
+    "L0072",
+    "L0023"
+  ],
+  "S08027": [
+    "L0074",
+    "L0023",
+    "L0067"
+  ],
+  "S08028": [
+    "L0086",
+    "L0098",
+    "L0059"
+  ],
+  "S08029": [
+    "L0054",
+    "L0021",
+    "L0004"
+  ],
+  "S08030": [
+    "L0024",
+    "L0059",
+    "L0055"
+  ],
+  "S08031": [
+    "L0035",
+    "L0021",
+    "L0049"
+  ],
+  "S08032": [
+    "L0061",
+    "L0096",
+    "L0009"
+  ],
+  "S08033": [
+    "L0015",
+    "L0071",
+    "L0099"
+  ],
+  "S08034": [
+    "L0088",
+    "L0099",
+    "L0096"
+  ],
+  "S08035": [
+    "L0039",
+    "L0003",
+    "L0073"
+  ],
+  "S08036": [
+    "L0076",
+    "L0011",
+    "L0040"
+  ],
+  "S08037": [
+    "L0012",
+    "L0035",
+    "L0100"
+  ],
+  "S08038": [
+    "L0094",
+    "L0034",
+    "L0059"
+  ],
+  "S08039": [
+    "L0062",
+    "L0001",
+    "L0051"
+  ],
+  "S08040": [
+    "L0047",
+    "L0002",
+    "L0057"
+  ],
+  "S08041": [
+    "L0097",
+    "L0010",
+    "L0058"
+  ],
+  "S08042": [
+    "L0028",
+    "L0067",
+    "L0013"
+  ],
+  "S08043": [
+    "L0070",
+    "L0088",
+    "L0024"
+  ],
+  "S08044": [
+    "L0073",
+    "L0076",
+    "L0085"
+  ],
+  "S08045": [
+    "L0100",
+    "L0054",
+    "L0002"
+  ],
+  "S08046": [
+    "L0062",
+    "L0003",
+    "L0013"
+  ],
+  "S08047": [
+    "L0074",
+    "L0078",
+    "L0001"
+  ],
+  "S08048": [
+    "L0041",
+    "L0084",
+    "L0010"
+  ],
+  "S08049": [
+    "L0017",
+    "L0063",
+    "L0015"
+  ],
+  "S08050": [
+    "L0067",
+    "L0022",
+    "L0077"
+  ],
+  "S08051": [
+    "L0091",
+    "L0090",
+    "L0051"
+  ],
+  "S08052": [
+    "L0091",
+    "L0064",
+    "L0001"
+  ],
+  "S08053": [
+    "L0085",
+    "L0005",
+    "L0091"
+  ],
+  "S08054": [
+    "L0036",
+    "L0028",
+    "L0094"
+  ],
+  "S08055": [
+    "L0029",
+    "L0074",
+    "L0072"
+  ],
+  "S08056": [
+    "L0032",
+    "L0002",
+    "L0081"
+  ],
+  "S08057": [
+    "L0008",
+    "L0082",
+    "L0076"
+  ],
+  "S08058": [
+    "L0078",
+    "L0064",
+    "L0045"
+  ],
+  "S08059": [
+    "L0073",
+    "L0057",
+    "L0096"
+  ],
+  "S08060": [
+    "L0096",
+    "L0086",
+    "L0099"
+  ],
+  "S08061": [
+    "L0015",
+    "L0028",
+    "L0091"
+  ],
+  "S08062": [
+    "L0008",
+    "L0072",
+    "L0078"
+  ],
+  "S08063": [
+    "L0077",
+    "L0045",
+    "L0069"
+  ],
+  "S08064": [
+    "L0038",
+    "L0008",
+    "L0005"
+  ],
+  "S08065": [
+    "L0055",
+    "L0063",
+    "L0078"
+  ],
+  "S08066": [
+    "L0040",
+    "L0095",
+    "L0093"
+  ],
+  "S08067": [
+    "L0003",
+    "L0085",
+    "L0098"
+  ],
+  "S08068": [
+    "L0034",
+    "L0090",
+    "L0056"
+  ],
+  "S08069": [
+    "L0032",
+    "L0026",
+    "L0049"
+  ],
+  "S08070": [
+    "L0085",
+    "L0031",
+    "L0070"
+  ],
+  "S08071": [
+    "L0097",
+    "L0017",
+    "L0042"
+  ],
+  "S08072": [
+    "L0064",
+    "L0036",
+    "L0011"
+  ],
+  "S08073": [
+    "L0096",
+    "L0062",
+    "L0065"
+  ],
+  "S08074": [
+    "L0026",
+    "L0067",
+    "L0085"
+  ],
+  "S08075": [
+    "L0078",
+    "L0017",
+    "L0044"
+  ],
+  "S08076": [
+    "L0069",
+    "L0059",
+    "L0061"
+  ],
+  "S08077": [
+    "L0066",
+    "L0059",
+    "L0067"
+  ],
+  "S08078": [
+    "L0044",
+    "L0001",
+    "L0035"
+  ],
+  "S08079": [
+    "L0073",
+    "L0061",
+    "L0036"
+  ],
+  "S08080": [
+    "L0014",
+    "L0054",
+    "L0002"
+  ],
+  "S08081": [
+    "L0063",
+    "L0068",
+    "L0035"
+  ],
+  "S08082": [
+    "L0093",
+    "L0069",
+    "L0041"
+  ],
+  "S08083": [
+    "L0098",
+    "L0100",
+    "L0068"
+  ],
+  "S08084": [
+    "L0054",
+    "L0019",
+    "L0003"
+  ],
+  "S08085": [
+    "L0035",
+    "L0099",
+    "L0051"
+  ],
+  "S08086": [
+    "L0012",
+    "L0036",
+    "L0051"
+  ],
+  "S08087": [
+    "L0013",
+    "L0035",
+    "L0027"
+  ],
+  "S08088": [
+    "L0040",
+    "L0091",
+    "L0070"
+  ],
+  "S08089": [
+    "L0099",
+    "L0055",
+    "L0049"
+  ],
+  "S08090": [
+    "L0027",
+    "L0040",
+    "L0083"
+  ],
+  "S08091": [
+    "L0080",
+    "L0001",
+    "L0022"
+  ],
+  "S08092": [
+    "L0078",
+    "L0100",
+    "L0097"
+  ],
+  "S08093": [
+    "L0011",
+    "L0001",
+    "L0053"
+  ],
+  "S08094": [
+    "L0071",
+    "L0045",
+    "L0034"
+  ],
+  "S08095": [
+    "L0082",
+    "L0086",
+    "L0023"
+  ],
+  "S08096": [
+    "L0098",
+    "L0057",
+    "L0053"
+  ],
+  "S08097": [
+    "L0023",
+    "L0031",
+    "L0055"
+  ],
+  "S08098": [
+    "L0066",
+    "L0049",
+    "L0058"
+  ],
+  "S08099": [
+    "L0072",
+    "L0077",
+    "L0068"
+  ],
+  "S08100": [
+    "L0029",
+    "L0094",
+    "L0073"
+  ],
+  "S08101": [
+    "L0035",
+    "L0044",
+    "L0068"
+  ],
+  "S08102": [
+    "L0070",
+    "L0078",
+    "L0010"
+  ],
+  "S08103": [
+    "L0057",
+    "L0078",
+    "L0098"
+  ],
+  "S08104": [
+    "L0009",
+    "L0055",
+    "L0080"
+  ],
+  "S08105": [
+    "L0061",
+    "L0100",
+    "L0098"
+  ],
+  "S08106": [
+    "L0071",
+    "L0011",
+    "L0014"
+  ],
+  "S08107": [
+    "L0085",
+    "L0048",
+    "L0049"
+  ],
+  "S08108": [
+    "L0097",
+    "L0070",
+    "L0057"
+  ],
+  "S08109": [
+    "L0100",
+    "L0073",
+    "L0019"
+  ],
+  "S08110": [
+    "L0058",
+    "L0072",
+    "L0100"
+  ],
+  "S08111": [
+    "L0067",
+    "L0086",
+    "L0005"
+  ],
+  "S08112": [
+    "L0065",
+    "L0086",
+    "L0058"
+  ],
+  "S08113": [
+    "L0099",
+    "L0001",
+    "L0059"
+  ],
+  "S08114": [
+    "L0003",
+    "L0093",
+    "L0076"
+  ],
+  "S08115": [
+    "L0081",
+    "L0096",
+    "L0069"
+  ],
+  "S08116": [
+    "L0038",
+    "L0010",
+    "L0053"
+  ],
+  "S08117": [
+    "L0082",
+    "L0085",
+    "L0032"
+  ],
+  "S08118": [
+    "L0095",
+    "L0085",
+    "L0036"
+  ],
+  "S08119": [
+    "L0019",
+    "L0081",
+    "L0066"
+  ],
+  "S08120": [
+    "L0021",
+    "L0088",
+    "L0009"
+  ],
+  "S08121": [
+    "L0044",
+    "L0054",
+    "L0057"
+  ],
+  "S08122": [
+    "L0009",
+    "L0072",
+    "L0026"
+  ],
+  "S08123": [
+    "L0082",
+    "L0093",
+    "L0003"
+  ],
+  "S08124": [
+    "L0094",
+    "L0095",
+    "L0096"
+  ],
+  "S08125": [
+    "L0067",
+    "L0042",
+    "L0077"
+  ],
+  "S08126": [
+    "L0045",
+    "L0096",
+    "L0085"
+  ],
+  "S08127": [
+    "L0038",
+    "L0049",
+    "L0027"
+  ],
+  "S08128": [
+    "L0041",
+    "L0034",
+    "L0078"
+  ],
+  "S08129": [
+    "L0041",
+    "L0045",
+    "L0058"
+  ],
+  "S08130": [
+    "L0032",
+    "L0091",
+    "L0055"
+  ],
+  "S08131": [
+    "L0026",
+    "L0011",
+    "L0064"
+  ],
+  "S08132": [
+    "L0032",
+    "L0035",
+    "L0096"
+  ],
+  "S08133": [
+    "L0095",
+    "L0035",
+    "L0063"
+  ],
+  "S08134": [
+    "L0027",
+    "L0078",
+    "L0051"
+  ],
+  "S08135": [
+    "L0096",
+    "L0013",
+    "L0015"
+  ],
+  "S08136": [
+    "L0053",
+    "L0036",
+    "L0004"
+  ],
+  "S08137": [
+    "L0009",
+    "L0058",
+    "L0014"
+  ],
+  "S08138": [
+    "L0072",
+    "L0049",
+    "L0053"
+  ],
+  "S08139": [
+    "L0080",
+    "L0063",
+    "L0047"
+  ],
+  "S08140": [
+    "L0038",
+    "L0089",
+    "L0062"
+  ],
+  "S08141": [
+    "L0084",
+    "L0095",
+    "L0017"
+  ],
+  "S08142": [
+    "L0098",
+    "L0055",
+    "L0065"
+  ],
+  "S08143": [
+    "L0062",
+    "L0021",
+    "L0085"
+  ],
+  "S08144": [
+    "L0024",
+    "L0097",
+    "L0076"
+  ],
+  "S08145": [
+    "L0096",
+    "L0093",
+    "L0064"
+  ],
+  "S08146": [
+    "L0084",
+    "L0058",
+    "L0045"
+  ],
+  "S08147": [
+    "L0085",
+    "L0026",
+    "L0023"
+  ],
+  "S08148": [
+    "L0012",
+    "L0026",
+    "L0014"
+  ],
+  "S08149": [
+    "L0042",
+    "L0008",
+    "L0100"
+  ],
+  "S08150": [
+    "L0038",
+    "L0081",
+    "L0059"
+  ],
+  "S08151": [
+    "L0064",
+    "L0089",
+    "L0058"
+  ],
+  "S08152": [
+    "L0017",
+    "L0081",
+    "L0092"
+  ],
+  "S08153": [
+    "L0076",
+    "L0004",
+    "L0034"
+  ],
+  "S08154": [
+    "L0086",
+    "L0067",
+    "L0003"
+  ],
+  "S08155": [
+    "L0067",
+    "L0069",
+    "L0093"
+  ],
+  "S08156": [
+    "L0088",
+    "L0089",
+    "L0041"
+  ],
+  "S08157": [
+    "L0017",
+    "L0013",
+    "L0057"
+  ],
+  "S08158": [
+    "L0068",
+    "L0085",
+    "L0053"
+  ],
+  "S08159": [
+    "L0036",
+    "L0080",
+    "L0074"
+  ],
+  "S08160": [
+    "L0029",
+    "L0098",
+    "L0100"
+  ],
+  "S08161": [
+    "L0092",
+    "L0093",
+    "L0048"
+  ],
+  "S08162": [
+    "L0083",
+    "L0086",
+    "L0076"
+  ],
+  "S08163": [
+    "L0061",
+    "L0015",
+    "L0001"
+  ],
+  "S08164": [
+    "L0057",
+    "L0058",
+    "L0073"
+  ],
+  "S08165": [
+    "L0026",
+    "L0085",
+    "L0047"
+  ],
+  "S08166": [
+    "L0009",
+    "L0011",
+    "L0072"
+  ],
+  "S08167": [
+    "L0031",
+    "L0080",
+    "L0051"
+  ],
+  "S08168": [
+    "L0099",
+    "L0082",
+    "L0026"
+  ],
+  "S08169": [
+    "L0027",
+    "L0093",
+    "L0012"
+  ],
+  "S08170": [
+    "L0040",
+    "L0081",
+    "L0027"
+  ],
+  "S08171": [
+    "L0073",
+    "L0005",
+    "L0021"
+  ],
+  "S08172": [
+    "L0083",
+    "L0059",
+    "L0056"
+  ],
+  "S08173": [
+    "L0069",
+    "L0058",
+    "L0039"
+  ],
+  "S08174": [
+    "L0019",
+    "L0067",
+    "L0078"
+  ],
+  "S08175": [
+    "L0095",
+    "L0092",
+    "L0082"
+  ],
+  "S08176": [
+    "L0014",
+    "L0091",
+    "L0095"
+  ],
+  "S08177": [
+    "L0093",
+    "L0074",
+    "L0051"
+  ],
+  "S08178": [
+    "L0004",
+    "L0057",
+    "L0085"
+  ],
+  "S08179": [
+    "L0077",
+    "L0021",
+    "L0089"
+  ],
+  "S08180": [
+    "L0051",
+    "L0017",
+    "L0096"
+  ],
+  "S08181": [
+    "L0062",
+    "L0008",
+    "L0092"
+  ],
+  "S08182": [
+    "L0031",
+    "L0053",
+    "L0057"
+  ],
+  "S08183": [
+    "L0077",
+    "L0038",
+    "L0063"
+  ],
+  "S08184": [
+    "L0057",
+    "L0098",
+    "L0085"
+  ],
+  "S08185": [
+    "L0002",
+    "L0062",
+    "L0057"
+  ],
+  "S08186": [
+    "L0090",
+    "L0072",
+    "L0035"
+  ],
+  "S08187": [
+    "L0073",
+    "L0068",
+    "L0090"
+  ],
+  "S08188": [
+    "L0091",
+    "L0054",
+    "L0070"
+  ],
+  "S08189": [
+    "L0069",
+    "L0077",
+    "L0032"
+  ],
+  "S08190": [
+    "L0027",
+    "L0077",
+    "L0009"
+  ],
+  "S08191": [
+    "L0032",
+    "L0008",
+    "L0080"
+  ],
+  "S08192": [
+    "L0001",
+    "L0027",
+    "L0017"
+  ],
+  "S08193": [
+    "L0027",
+    "L0083",
+    "L0036"
+  ],
+  "S08194": [
+    "L0019",
+    "L0021",
+    "L0069"
+  ],
+  "S08195": [
+    "L0032",
+    "L0084",
+    "L0003"
+  ],
+  "S08196": [
+    "L0027",
+    "L0063",
+    "L0021"
+  ],
+  "S08197": [
+    "L0068",
+    "L0056",
+    "L0082"
+  ],
+  "S08198": [
+    "L0038",
+    "L0073",
+    "L0010"
+  ],
+  "S08199": [
+    "L0019",
+    "L0034",
+    "L0084"
+  ],
+  "S08200": [
+    "L0017",
+    "L0089",
+    "L0013"
+  ],
+  "S08201": [
+    "L0097",
+    "L0013",
+    "L0002"
+  ],
+  "S08202": [
+    "L0031",
+    "L0042",
+    "L0073"
+  ],
+  "S08203": [
+    "L0092",
+    "L0084",
+    "L0024"
+  ],
+  "S08204": [
+    "L0053",
+    "L0049",
+    "L0091"
+  ],
+  "S08205": [
+    "L0090",
+    "L0096",
+    "L0038"
+  ],
+  "S08206": [
+    "L0055",
+    "L0047",
+    "L0022"
+  ],
+  "S08207": [
+    "L0099",
+    "L0080",
+    "L0028"
+  ],
+  "S08208": [
+    "L0056",
+    "L0034",
+    "L0040"
+  ],
+  "S08209": [
+    "L0022",
+    "L0097",
+    "L0065"
+  ],
+  "S08210": [
+    "L0076",
+    "L0063",
+    "L0010"
+  ],
+  "S08211": [
+    "L0093",
+    "L0031",
+    "L0095"
+  ],
+  "S08212": [
+    "L0003",
+    "L0048",
+    "L0015"
+  ],
+  "S08213": [
+    "L0009",
+    "L0069",
+    "L0005"
+  ],
+  "S08214": [
+    "L0026",
+    "L0036",
+    "L0053"
+  ],
+  "S08215": [
+    "L0012",
+    "L0032",
+    "L0003"
+  ],
+  "S08216": [
+    "L0091",
+    "L0072",
+    "L0063"
+  ],
+  "S08217": [
+    "L0070",
+    "L0076",
+    "L0035"
+  ],
+  "S08218": [
+    "L0047",
+    "L0012",
+    "L0059"
+  ],
+  "S08219": [
+    "L0078",
+    "L0069",
+    "L0056"
+  ],
+  "S08220": [
+    "L0096",
+    "L0003",
+    "L0005"
+  ],
+  "S08221": [
+    "L0019",
+    "L0093",
+    "L0094"
+  ],
+  "S08222": [
+    "L0076",
+    "L0071",
+    "L0034"
+  ],
+  "S08223": [
+    "L0072",
+    "L0081",
+    "L0001"
+  ],
+  "S08224": [
+    "L0042",
+    "L0041",
+    "L0008"
+  ],
+  "S08225": [
+    "L0039",
+    "L0054",
+    "L0081"
+  ],
+  "S08226": [
+    "L0047",
+    "L0005",
+    "L0065"
+  ],
+  "S08227": [
+    "L0061",
+    "L0035",
+    "L0041"
+  ],
+  "S08228": [
+    "L0032",
+    "L0054",
+    "L0003"
+  ],
+  "S08229": [
+    "L0097",
+    "L0017",
+    "L0009"
+  ],
+  "S08230": [
+    "L0014",
+    "L0038",
+    "L0059"
+  ],
+  "S08231": [
+    "L0094",
+    "L0017",
+    "L0085"
+  ],
+  "S08232": [
+    "L0065",
+    "L0045",
+    "L0098"
+  ],
+  "S08233": [
+    "L0034",
+    "L0031",
+    "L0071"
+  ],
+  "S08234": [
+    "L0072",
+    "L0073",
+    "L0038"
+  ],
+  "S08235": [
+    "L0093",
+    "L0014",
+    "L0081"
+  ],
+  "S08236": [
+    "L0088",
+    "L0031",
+    "L0021"
+  ],
+  "S08237": [
+    "L0057",
+    "L0092",
+    "L0031"
+  ],
+  "S08238": [
+    "L0012",
+    "L0044",
+    "L0070"
+  ],
+  "S08239": [
+    "L0051",
+    "L0035",
+    "L0023"
+  ],
+  "S08240": [
+    "L0017",
+    "L0041",
+    "L0099"
+  ],
+  "S08241": [
+    "L0035",
+    "L0053",
+    "L0042"
+  ],
+  "S08242": [
+    "L0009",
+    "L0017",
+    "L0024"
+  ],
+  "S08243": [
+    "L0086",
+    "L0080",
+    "L0044"
+  ],
+  "S08244": [
+    "L0023",
+    "L0013",
+    "L0019"
+  ],
+  "S08245": [
+    "L0034",
+    "L0097",
+    "L0081"
+  ],
+  "S08246": [
+    "L0041",
+    "L0038",
+    "L0022"
+  ],
+  "S08247": [
+    "L0072",
+    "L0034",
+    "L0080"
+  ],
+  "S08248": [
+    "L0097",
+    "L0080",
+    "L0017"
+  ],
+  "S08249": [
+    "L0061",
+    "L0069",
+    "L0086"
+  ],
+  "S08250": [
+    "L0029",
+    "L0001",
+    "L0067"
+  ],
+  "S08251": [
+    "L0100",
+    "L0091",
+    "L0096"
+  ],
+  "S08252": [
+    "L0022",
+    "L0093",
+    "L0064"
+  ],
+  "S08253": [
+    "L0062",
+    "L0084",
+    "L0086"
+  ],
+  "S08254": [
+    "L0034",
+    "L0035",
+    "L0059"
+  ],
+  "S08255": [
+    "L0038",
+    "L0097",
+    "L0080"
+  ],
+  "S08256": [
+    "L0099",
+    "L0009",
+    "L0067"
+  ],
+  "S08257": [
+    "L0095",
+    "L0074",
+    "L0008"
+  ],
+  "S08258": [
+    "L0086",
+    "L0055",
+    "L0034"
+  ],
+  "S08259": [
+    "L0054",
+    "L0027",
+    "L0004"
+  ],
+  "S08260": [
+    "L0055",
+    "L0078",
+    "L0012"
+  ],
+  "S08261": [
+    "L0089",
+    "L0096",
+    "L0066"
+  ],
+  "S08262": [
+    "L0053",
+    "L0091",
+    "L0085"
+  ],
+  "S08263": [
+    "L0029",
+    "L0038",
+    "L0003"
+  ],
+  "S08264": [
+    "L0076",
+    "L0019",
+    "L0035"
+  ],
+  "S08265": [
+    "L0072",
+    "L0049",
+    "L0093"
+  ],
+  "S08266": [
+    "L0051",
+    "L0049",
+    "L0001"
+  ],
+  "S08267": [
+    "L0096",
+    "L0058",
+    "L0045"
+  ],
+  "S08268": [
+    "L0014",
+    "L0002",
+    "L0094"
+  ],
+  "S08269": [
+    "L0004",
+    "L0074",
+    "L0009"
+  ],
+  "S08270": [
+    "L0026",
+    "L0013",
+    "L0010"
+  ],
+  "S08271": [
+    "L0042",
+    "L0053",
+    "L0012"
+  ],
+  "S08272": [
+    "L0011",
+    "L0013",
+    "L0038"
+  ],
+  "S08273": [
+    "L0093",
+    "L0096",
+    "L0005"
+  ],
+  "S08274": [
+    "L0098",
+    "L0054",
+    "L0056"
+  ],
+  "S08275": [
+    "L0095",
+    "L0074",
+    "L0004"
+  ],
+  "S08276": [
+    "L0085",
+    "L0095",
+    "L0078"
+  ],
+  "S08277": [
+    "L0066",
+    "L0049",
+    "L0096"
+  ],
+  "S08278": [
+    "L0004",
+    "L0040",
+    "L0059"
+  ],
+  "S08279": [
+    "L0058",
+    "L0055",
+    "L0028"
+  ],
+  "S08280": [
+    "L0068",
+    "L0032",
+    "L0065"
+  ],
+  "S08281": [
+    "L0009",
+    "L0004",
+    "L0045"
+  ],
+  "S08282": [
+    "L0095",
+    "L0086",
+    "L0036"
+  ],
+  "S08283": [
+    "L0051",
+    "L0026",
+    "L0094"
+  ],
+  "S08284": [
+    "L0002",
+    "L0066",
+    "L0042"
+  ],
+  "S08285": [
+    "L0041",
+    "L0003",
+    "L0008"
+  ],
+  "S08286": [
+    "L0096",
+    "L0029",
+    "L0072"
+  ],
+  "S08287": [
+    "L0094",
+    "L0026",
+    "L0038"
+  ],
+  "S08288": [
+    "L0096",
+    "L0056",
+    "L0051"
+  ],
+  "S08289": [
+    "L0065",
+    "L0081",
+    "L0012"
+  ],
+  "S08290": [
+    "L0082",
+    "L0076",
+    "L0038"
+  ],
+  "S08291": [
+    "L0045",
+    "L0044",
+    "L0005"
+  ],
+  "S08292": [
+    "L0061",
+    "L0091",
+    "L0051"
+  ],
+  "S08293": [
+    "L0090",
+    "L0042",
+    "L0039"
+  ],
+  "S08294": [
+    "L0053",
+    "L0056",
+    "L0084"
+  ],
+  "S08295": [
+    "L0049",
+    "L0047",
+    "L0063"
+  ],
+  "S08296": [
+    "L0078",
+    "L0019",
+    "L0012"
+  ],
+  "S08297": [
+    "L0068",
+    "L0034",
+    "L0029"
+  ],
+  "S08298": [
+    "L0035",
+    "L0047",
+    "L0062"
+  ],
+  "S08299": [
+    "L0084",
+    "L0071",
+    "L0100"
+  ],
+  "S08300": [
+    "L0071",
+    "L0097",
+    "L0067"
+  ],
+  "S08301": [
+    "L0035",
+    "L0086",
+    "L0071"
+  ],
+  "S08302": [
+    "L0057",
+    "L0015",
+    "L0036"
+  ],
+  "S08303": [
+    "L0096",
+    "L0077",
+    "L0053"
+  ],
+  "S08304": [
+    "L0093",
+    "L0017",
+    "L0003"
+  ],
+  "S08305": [
+    "L0005",
+    "L0012",
+    "L0039"
+  ],
+  "S08306": [
+    "L0088",
+    "L0069",
+    "L0055"
+  ],
+  "S08307": [
+    "L0081",
+    "L0015",
+    "L0014"
+  ],
+  "S08308": [
+    "L0077",
+    "L0049",
+    "L0080"
+  ],
+  "S08309": [
+    "L0074",
+    "L0010",
+    "L0053"
+  ],
+  "S08310": [
+    "L0086",
+    "L0088",
+    "L0076"
+  ],
+  "S08311": [
+    "L0062",
+    "L0097",
+    "L0076"
+  ],
+  "S08312": [
+    "L0022",
+    "L0086",
+    "L0038"
+  ],
+  "S08313": [
+    "L0099",
+    "L0009",
+    "L0072"
+  ],
+  "S08314": [
+    "L0090",
+    "L0040",
+    "L0041"
+  ],
+  "S08315": [
+    "L0093",
+    "L0039",
+    "L0005"
+  ],
+  "S08316": [
+    "L0048",
+    "L0019",
+    "L0064"
+  ],
+  "S08317": [
+    "L0057",
+    "L0068",
+    "L0058"
+  ],
+  "S08318": [
+    "L0024",
+    "L0093",
+    "L0064"
+  ],
+  "S08319": [
+    "L0073",
+    "L0022",
+    "L0068"
+  ],
+  "S08320": [
+    "L0027",
+    "L0039",
+    "L0005"
+  ],
+  "S08321": [
+    "L0062",
+    "L0074",
+    "L0073"
+  ],
+  "S08322": [
+    "L0019",
+    "L0056",
+    "L0044"
+  ],
+  "S08323": [
+    "L0094",
+    "L0022",
+    "L0051"
+  ],
+  "S08324": [
+    "L0005",
+    "L0034",
+    "L0084"
+  ],
+  "S08325": [
+    "L0049",
+    "L0044",
+    "L0040"
+  ],
+  "S08326": [
+    "L0013",
+    "L0073",
+    "L0019"
+  ],
+  "S08327": [
+    "L0085",
+    "L0078",
+    "L0055"
+  ],
+  "S08328": [
+    "L0031",
+    "L0053",
+    "L0081"
+  ],
+  "S08329": [
+    "L0017",
+    "L0001",
+    "L0035"
+  ],
+  "S08330": [
+    "L0038",
+    "L0061",
+    "L0085"
+  ],
+  "S08331": [
+    "L0029",
+    "L0062",
+    "L0056"
+  ],
+  "S08332": [
+    "L0039",
+    "L0053",
+    "L0032"
+  ],
+  "S08333": [
+    "L0099",
+    "L0082",
+    "L0010"
+  ],
+  "S08334": [
+    "L0063",
+    "L0042",
+    "L0049"
+  ],
+  "S08335": [
+    "L0064",
+    "L0045",
+    "L0013"
+  ],
+  "S08336": [
+    "L0098",
+    "L0010",
+    "L0001"
+  ],
+  "S08337": [
+    "L0092",
+    "L0022",
+    "L0039"
+  ],
+  "S08338": [
+    "L0089",
+    "L0001",
+    "L0086"
+  ],
+  "S08339": [
+    "L0022",
+    "L0093",
+    "L0097"
+  ],
+  "S08340": [
+    "L0048",
+    "L0029",
+    "L0027"
+  ],
+  "S08341": [
+    "L0092",
+    "L0078",
+    "L0005"
+  ],
+  "S08342": [
+    "L0080",
+    "L0094",
+    "L0053"
+  ],
+  "S08343": [
+    "L0088",
+    "L0040",
+    "L0059"
+  ],
+  "S08344": [
+    "L0021",
+    "L0035",
+    "L0038"
+  ],
+  "S08345": [
+    "L0026",
+    "L0047",
+    "L0083"
+  ],
+  "S08346": [
+    "L0077",
+    "L0053",
+    "L0072"
+  ],
+  "S08347": [
+    "L0049",
+    "L0032",
+    "L0057"
+  ],
+  "S08348": [
+    "L0035",
+    "L0023",
+    "L0074"
+  ],
+  "S08349": [
+    "L0077",
+    "L0027",
+    "L0082"
+  ],
+  "S08350": [
+    "L0038",
+    "L0070",
+    "L0064"
+  ],
+  "S08351": [
+    "L0047",
+    "L0036",
+    "L0058"
+  ],
+  "S08352": [
+    "L0053",
+    "L0074",
+    "L0022"
+  ],
+  "S08353": [
+    "L0070",
+    "L0063",
+    "L0072"
+  ],
+  "S08354": [
+    "L0067",
+    "L0036",
+    "L0096"
+  ],
+  "S08355": [
+    "L0009",
+    "L0042",
+    "L0090"
+  ],
+  "S08356": [
+    "L0083",
+    "L0009",
+    "L0077"
+  ],
+  "S08357": [
+    "L0091",
+    "L0009",
+    "L0067"
+  ],
+  "S08358": [
+    "L0097",
+    "L0094",
+    "L0029"
+  ],
+  "S08359": [
+    "L0004",
+    "L0002",
+    "L0094"
+  ],
+  "S08360": [
+    "L0042",
+    "L0029",
+    "L0011"
+  ],
+  "S08361": [
+    "L0005",
+    "L0045",
+    "L0056"
+  ],
+  "S08362": [
+    "L0003",
+    "L0051",
+    "L0065"
+  ],
+  "S08363": [
+    "L0017",
+    "L0063",
+    "L0067"
+  ],
+  "S08364": [
+    "L0056",
+    "L0035",
+    "L0041"
+  ],
+  "S08365": [
+    "L0028",
+    "L0095",
+    "L0071"
+  ],
+  "S08366": [
+    "L0064",
+    "L0054",
+    "L0072"
+  ],
+  "S08367": [
+    "L0085",
+    "L0024",
+    "L0090"
+  ],
+  "S08368": [
+    "L0015",
+    "L0048",
+    "L0072"
+  ],
+  "S08369": [
+    "L0097",
+    "L0019",
+    "L0023"
+  ],
+  "S08370": [
+    "L0051",
+    "L0085",
+    "L0041"
+  ],
+  "S08371": [
+    "L0081",
+    "L0057",
+    "L0067"
+  ],
+  "S08372": [
+    "L0091",
+    "L0056",
+    "L0011"
+  ],
+  "S08373": [
+    "L0061",
+    "L0080",
+    "L0002"
+  ],
+  "S08374": [
+    "L0019",
+    "L0024",
+    "L0023"
+  ],
+  "S08375": [
+    "L0042",
+    "L0047",
+    "L0022"
+  ],
+  "S08376": [
+    "L0040",
+    "L0027",
+    "L0058"
+  ],
+  "S08377": [
+    "L0057",
+    "L0081",
+    "L0038"
+  ],
+  "S08378": [
+    "L0040",
+    "L0093",
+    "L0008"
+  ],
+  "S08379": [
+    "L0082",
+    "L0032",
+    "L0086"
+  ],
+  "S08380": [
+    "L0078",
+    "L0062",
+    "L0029"
+  ],
+  "S08381": [
+    "L0065",
+    "L0076",
+    "L0080"
+  ],
+  "S08382": [
+    "L0035",
+    "L0072",
+    "L0086"
+  ],
+  "S08383": [
+    "L0064",
+    "L0051",
+    "L0039"
+  ],
+  "S08384": [
+    "L0021",
+    "L0083",
+    "L0074"
+  ],
+  "S08385": [
+    "L0068",
+    "L0097",
+    "L0045"
+  ],
+  "S08386": [
+    "L0054",
+    "L0014",
+    "L0015"
+  ],
+  "S08387": [
+    "L0026",
+    "L0100",
+    "L0038"
+  ],
+  "S08388": [
+    "L0080",
+    "L0085",
+    "L0031"
+  ],
+  "S08389": [
+    "L0010",
+    "L0073",
+    "L0031"
+  ],
+  "S08390": [
+    "L0084",
+    "L0077",
+    "L0022"
+  ],
+  "S08391": [
+    "L0004",
+    "L0040",
+    "L0031"
+  ],
+  "S08392": [
+    "L0034",
+    "L0094",
+    "L0005"
+  ],
+  "S08393": [
+    "L0057",
+    "L0058",
+    "L0077"
+  ],
+  "S08394": [
+    "L0053",
+    "L0056",
+    "L0090"
+  ],
+  "S08395": [
+    "L0056",
+    "L0055",
+    "L0013"
+  ],
+  "S08396": [
+    "L0051",
+    "L0099",
+    "L0066"
+  ],
+  "S08397": [
+    "L0012",
+    "L0078",
+    "L0097"
+  ],
+  "S08398": [
+    "L0099",
+    "L0054",
+    "L0093"
+  ],
+  "S08399": [
+    "L0058",
+    "L0070",
+    "L0015"
+  ],
+  "S08400": [
+    "L0021",
+    "L0003",
+    "L0026"
+  ],
+  "S08401": [
+    "L0085",
+    "L0090",
+    "L0061"
+  ],
+  "S08402": [
+    "L0040",
+    "L0004",
+    "L0013"
+  ],
+  "S08403": [
+    "L0089",
+    "L0017",
+    "L0053"
+  ],
+  "S08404": [
+    "L0069",
+    "L0064",
+    "L0049"
+  ],
+  "S08405": [
+    "L0055",
+    "L0077",
+    "L0010"
+  ],
+  "S08406": [
+    "L0040",
+    "L0045",
+    "L0056"
+  ],
+  "S08407": [
+    "L0067",
+    "L0055",
+    "L0010"
+  ],
+  "S08408": [
+    "L0013",
+    "L0012",
+    "L0008"
+  ],
+  "S08409": [
+    "L0054",
+    "L0090",
+    "L0023"
+  ],
+  "S08410": [
+    "L0009",
+    "L0051",
+    "L0093"
+  ],
+  "S08411": [
+    "L0044",
+    "L0094",
+    "L0038"
+  ],
+  "S08412": [
+    "L0083",
+    "L0055",
+    "L0088"
+  ],
+  "S08413": [
+    "L0036",
+    "L0035",
+    "L0023"
+  ],
+  "S08414": [
+    "L0096",
+    "L0072",
+    "L0063"
+  ],
+  "S08415": [
+    "L0026",
+    "L0013",
+    "L0044"
+  ],
+  "S08416": [
+    "L0063",
+    "L0055",
+    "L0056"
+  ],
+  "S08417": [
+    "L0049",
+    "L0099",
+    "L0070"
+  ],
+  "S08418": [
+    "L0056",
+    "L0100",
+    "L0032"
+  ],
+  "S08419": [
+    "L0098",
+    "L0003",
+    "L0100"
+  ],
+  "S08420": [
+    "L0069",
+    "L0024",
+    "L0054"
+  ],
+  "S08421": [
+    "L0012",
+    "L0022",
+    "L0039"
+  ],
+  "S08422": [
+    "L0084",
+    "L0022",
+    "L0077"
+  ],
+  "S08423": [
+    "L0053",
+    "L0092",
+    "L0008"
+  ],
+  "S08424": [
+    "L0071",
+    "L0086",
+    "L0024"
+  ],
+  "S08425": [
+    "L0081",
+    "L0064",
+    "L0013"
+  ],
+  "S08426": [
+    "L0095",
+    "L0040",
+    "L0073"
+  ],
+  "S08427": [
+    "L0099",
+    "L0068",
+    "L0088"
+  ],
+  "S08428": [
+    "L0055",
+    "L0089",
+    "L0038"
+  ],
+  "S08429": [
+    "L0008",
+    "L0003",
+    "L0047"
+  ],
+  "S08430": [
+    "L0096",
+    "L0066",
+    "L0024"
+  ],
+  "S08431": [
+    "L0038",
+    "L0039",
+    "L0100"
+  ],
+  "S08432": [
+    "L0097",
+    "L0068",
+    "L0094"
+  ],
+  "S08433": [
+    "L0081",
+    "L0029",
+    "L0024"
+  ],
+  "S08434": [
+    "L0009",
+    "L0040",
+    "L0015"
+  ],
+  "S08435": [
+    "L0093",
+    "L0001",
+    "L0040"
+  ],
+  "S08436": [
+    "L0092",
+    "L0019",
+    "L0011"
+  ],
+  "S08437": [
+    "L0008",
+    "L0032",
+    "L0041"
+  ],
+  "S08438": [
+    "L0026",
+    "L0036",
+    "L0057"
+  ],
+  "S08439": [
+    "L0067",
+    "L0084",
+    "L0013"
+  ],
+  "S08440": [
+    "L0062",
+    "L0093",
+    "L0014"
+  ],
+  "S08441": [
+    "L0054",
+    "L0100",
+    "L0064"
+  ],
+  "S08442": [
+    "L0021",
+    "L0082",
+    "L0055"
+  ],
+  "S08443": [
+    "L0009",
+    "L0012",
+    "L0049"
+  ],
+  "S08444": [
+    "L0051",
+    "L0005",
+    "L0028"
+  ],
+  "S08445": [
+    "L0017",
+    "L0062",
+    "L0059"
+  ],
+  "S08446": [
+    "L0048",
+    "L0028",
+    "L0073"
+  ],
+  "S08447": [
+    "L0069",
+    "L0032",
+    "L0041"
+  ],
+  "S08448": [
+    "L0014",
+    "L0021",
+    "L0068"
+  ],
+  "S08449": [
+    "L0027",
+    "L0080",
+    "L0093"
+  ],
+  "S08450": [
+    "L0083",
+    "L0073",
+    "L0086"
+  ],
+  "S08451": [
+    "L0084",
+    "L0029",
+    "L0001"
+  ],
+  "S08452": [
+    "L0015",
+    "L0003",
+    "L0077"
+  ],
+  "S08453": [
+    "L0026",
+    "L0035",
+    "L0056"
+  ],
+  "S08454": [
+    "L0091",
+    "L0009",
+    "L0013"
+  ],
+  "S08455": [
+    "L0081",
+    "L0083",
+    "L0042"
+  ],
+  "S08456": [
+    "L0022",
+    "L0044",
+    "L0056"
+  ],
+  "S08457": [
+    "L0069",
+    "L0021",
+    "L0065"
+  ],
+  "S08458": [
+    "L0001",
+    "L0048",
+    "L0088"
+  ],
+  "S08459": [
+    "L0051",
+    "L0068",
+    "L0095"
+  ],
+  "S08460": [
+    "L0054",
+    "L0080",
+    "L0053"
+  ],
+  "S08461": [
+    "L0009",
+    "L0003",
+    "L0080"
+  ],
+  "S08462": [
+    "L0022",
+    "L0021",
+    "L0005"
+  ],
+  "S08463": [
+    "L0035",
+    "L0042",
+    "L0039"
+  ],
+  "S08464": [
+    "L0021",
+    "L0098",
+    "L0083"
+  ],
+  "S08465": [
+    "L0038",
+    "L0032",
+    "L0081"
+  ],
+  "S08466": [
+    "L0049",
+    "L0070",
+    "L0074"
+  ],
+  "S08467": [
+    "L0077",
+    "L0097",
+    "L0091"
+  ],
+  "S08468": [
+    "L0068",
+    "L0036",
+    "L0035"
+  ],
+  "S08469": [
+    "L0001",
+    "L0036",
+    "L0061"
+  ],
+  "S08470": [
+    "L0028",
+    "L0053",
+    "L0036"
+  ],
+  "S08471": [
+    "L0005",
+    "L0089",
+    "L0070"
+  ],
+  "S08472": [
+    "L0067",
+    "L0086",
+    "L0057"
+  ],
+  "S08473": [
+    "L0036",
+    "L0022",
+    "L0049"
+  ],
+  "S08474": [
+    "L0014",
+    "L0022",
+    "L0010"
+  ],
+  "S08475": [
+    "L0056",
+    "L0009",
+    "L0022"
+  ],
+  "S08476": [
+    "L0011",
+    "L0084",
+    "L0019"
+  ],
+  "S08477": [
+    "L0019",
+    "L0009",
+    "L0021"
+  ],
+  "S08478": [
+    "L0024",
+    "L0063",
+    "L0096"
+  ],
+  "S08479": [
+    "L0053",
+    "L0004",
+    "L0071"
+  ],
+  "S08480": [
+    "L0017",
+    "L0032",
+    "L0095"
+  ],
+  "S08481": [
+    "L0095",
+    "L0082",
+    "L0089"
+  ],
+  "S08482": [
+    "L0002",
+    "L0039",
+    "L0028"
+  ],
+  "S08483": [
+    "L0002",
+    "L0091",
+    "L0071"
+  ],
+  "S08484": [
+    "L0044",
+    "L0049",
+    "L0094"
+  ],
+  "S08485": [
+    "L0095",
+    "L0031",
+    "L0082"
+  ],
+  "S08486": [
+    "L0094",
+    "L0065",
+    "L0054"
+  ],
+  "S08487": [
+    "L0017",
+    "L0028",
+    "L0021"
+  ],
+  "S08488": [
+    "L0088",
+    "L0024",
+    "L0076"
+  ],
+  "S08489": [
+    "L0026",
+    "L0002",
+    "L0095"
+  ],
+  "S08490": [
+    "L0005",
+    "L0051",
+    "L0036"
+  ],
+  "S08491": [
+    "L0021",
+    "L0044",
+    "L0072"
+  ],
+  "S08492": [
+    "L0078",
+    "L0038",
+    "L0045"
+  ],
+  "S08493": [
+    "L0095",
+    "L0089",
+    "L0070"
+  ],
+  "S08494": [
+    "L0073",
+    "L0051",
+    "L0071"
+  ],
+  "S08495": [
+    "L0038",
+    "L0094",
+    "L0086"
+  ],
+  "S08496": [
+    "L0068",
+    "L0017",
+    "L0065"
+  ],
+  "S08497": [
+    "L0034",
+    "L0021",
+    "L0061"
+  ],
+  "S08498": [
+    "L0098",
+    "L0090",
+    "L0041"
+  ],
+  "S08499": [
+    "L0003",
+    "L0081",
+    "L0011"
+  ],
+  "S08500": [
+    "L0003",
+    "L0067",
+    "L0059"
+  ]
+}
\ No newline at end of file
diff --git a/tests/test_data/openMHA/prerelease_combination3_smooth_template.cfg b/tests/test_data/openMHA/prerelease_combination3_smooth_template.cfg
new file mode 100644
index 000000000..7a3e5e8d7
--- /dev/null
+++ b/tests/test_data/openMHA/prerelease_combination3_smooth_template.cfg
@@ -0,0 +1,986 @@
+# This file is part of the HörTech Open Master Hearing Aid (openMHA)
+# Copyright © 2013 2017 2018 HörTech gGmbH
+#
+# openMHA is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, version 3 of the License.
+#
+# openMHA 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 Affero General Public License, version 3 for more details.
+#
+# You should have received a copy of the GNU Affero General Public License,
+# version 3 along with openMHA.  If not, see <http://www.gnu.org/licenses/>.
+
+
+# openMHA is a software platform to process audio signals with hearing
+# aid signal processing algorithms.  Signal processing algorithms are
+# implemented as plug-ins that are loaded into the MHA process at
+# runtime.
+#
+# The openMHA framework itself and also the MHA plugins support
+# configuration of their settings through a text-based configuration
+# language.  This file is an example configuration that can be used to
+# configure an MHA to perform signal processing with a non-adaptive
+# differential microphone, followed by dynamic compression to compensate
+# for sensorineural hearing loss.
+
+# Besides configuring the MHA, this file also has comments explaining
+# every setting. We have left out some of the more advanced settings
+# which have been left to their default value, because explaining all
+# the possible options that are not actually used here might only
+# distract from understanding this configuration.
+
+# We have to tell the MHA how many audio channels to process.  Think
+# of the number of audio channels as the number of microphones that
+# your hearing support system uses to pick up sound.  If you wore a
+# hearing aid device on each ear, and each hearing aid device had a
+# signal microphone to pick up sound, then your number of audio input
+# channels would be two.  If each of the hearing aid devices had not
+# only one, but two microphones at slightly different positions, then
+# you would configure the number of input audio channels to be
+# four. This is what we do here with the "nchannels_in" setting.
+#
+# This "nchannels_in" variable accepts values of type integer in the
+# range 1 to INT_MAX.  This is sometimes denoted like this in MHA:
+#
+# int:[1,[
+nchannels_in = 4
+
+# Note that the corresponding "nchannels_out" variable is not
+# writable, but is read-only.  We call read-only variable a "monitor
+# variable", or shorter, a "monitor".  The number of output channels
+# is auto-deduced by the MHA and can be read from the "nchannels_out"
+# monitor.
+
+# When we perform real-time signal processing, we process the signal
+# in small chunks of data: Take a chunk from the sound card capture
+# channels, process it, and output the result to the sound card output
+# channels.
+#
+# MHA always operates like this, processing data in small chunks, even
+# when the processed sound data comes from sound files.  The setting
+# "fragsize" tells the MHA how many audio sample per channel are to be
+# processed in each chunk.
+#
+# int:[1,[
+fragsize = 64
+
+# MHA processes discrete-time digital audio signals with a fixed
+# sampling rate.  The sampling rate tells MHA how many samples per
+# second have been digitized in each audio channel. Note that we use a
+# floating point data type here, so you can use a non-integer sampling
+# rate if you have to and your sound card supports it. The sampling
+# rate 44100 that we use here is the standard sampling rate used on
+# audio CDs and is supported by most sound cards.
+#
+# sampling rate in Hz
+# float:]0,[
+srate = 44100
+
+# The MHA framework can load a single MHA plugin to process the data.
+# We tell the MHA which plugin to load with the "mhalib" variable
+# (historical reasons).  Note that the data type of the "mhalib"
+# variable is string.
+#
+# When the assignment "mhalib = transducers" below is executed by the
+# MHA, then the MHA framework will look for a dynamic library file in
+# the file system with the name "transducers.so" (on linux, on windows
+# the extension would be .dll, on mac it would be .dylib).  The path
+# where MHA searches for this file is either the standard path for
+# shared libraries on the system, or, if the environment variable
+# "MHA_LIBRARY_PATH" is set, then MHA searches the directories listed
+# in this environment variable.
+#
+# Usually MHA configurations consist of more than just one plugin.
+# MHA provides structuring plugins that can themselves load other
+# plugins for this purpose.
+#
+# The transducers plugin that we load here can be used for calibration of
+# input and output sounds, see below.
+#
+# MHA library name
+# string
+mhalib = transducers
+
+# MHA supports different audio back-ends: Sound can come from and go
+# to either
+# - sound cards,
+# - the Jack audio server,
+# - sound files, or
+# - the network.
+#
+# Users select the desired audio backend by loading the respective MHA
+# IO library into the MHA process.  Similar to processing plugins, IO
+# libraries are loaded as dynamic libraries into the process when the
+# assignment to the "iolib" variable below is executed, and the same
+# search path and file name extensions are used, as when processing
+# plugins are loaded.  But because MHA IO libraries are the ultimate
+# sources and sinks of sound in the MHA, they export a different
+# interface to the MHA. Here we load the IO library that reads from
+# and writes to sound files.
+#
+# IO plugin library name
+# string
+iolib = MHAIOFile
+
+# In the future you may have several MHA processes running on the same
+# computer, performing different signal processing tasks.  You can use
+# this MHA variable to describe what the purpose of this instance of
+# the MHA is, so that you can tell to which MHA instance you are
+# currently connected and not get confused.
+#
+# Name of this mha instance
+# string
+instance = allplugins
+
+# parser "mha":
+#
+# Remember that above, we loaded the transducers plugin into the MHA
+# with the assignment "mhalib = transducers".  When the MHA executed
+# this assignment, it loaded the transducers plugin into the MHA
+# process.  For historical reasons, MHA makes the configuration
+# variables of this plugin available to the sub-"parser" "mha".  We
+# call the hierarchy layers in the MHA configuration tree "parsers"
+# because, besides providing hierarchy, they also perform the text
+# parsing of the configuration commands.
+#
+# So in the following, we will see how some variables of the transducers
+# plugin are getting set.
+
+# The transducers plugin is responsible for the correct calibration of
+# the sound in the MHA.  Remember that the MHA is a platform for
+# hearing aid signal processing algorithms, and that hearing aids
+# usually enhance the sound for hearing impaired listeners.  Hearing
+# impairment generally means that people suffering from it have
+# increased hearing thresholds, i.e. soft sounds that are audible for
+# normal hearing listeners may be imperceptible for hearing impaired
+# listeners.
+#
+# To provide accurate signal enhancement for hearing impaired people,
+# algorithms have to be able to determine the absolute physical sound
+# pressure level corresponding to a digital signal given to any MHA
+# plugin for processing.  Inside the MHA, we achieve this with a
+# convention.
+#
+# The convention that we use in the MHA is that the single-precision
+# floating point time-domain sound signal samples, that we process
+# inside the MHA plugins, have the physical unit Pascal (1 Pa = 1 N /
+# m^2).  With this convention in place, all plugins can determine the
+# absolute physical sound pressure level from the sound samples that
+# they process.
+#
+# However, when one just connects a microphone to a sound card and
+# uses that sound card to feed sound samples to the MHA, these sound
+# samples do not automatically follow the MHA level convention. The
+# same is true when using sound files instead of sound cards for input
+# and output.  Different microphones have different sensitivities.
+# Sound cards have adjustable amplification settings.  Sound files may
+# have been "normalized" before they have been saved to disk.  To be
+# able to implement our level convention, we need to be able to adjust
+# for arbitrary physical level to digital level mappings in the MHA.
+# We do this with the transducers plugin, which is the only plugin
+# that may not rely on this convention, because it is the one plugin
+# that has to make sure that all other plugins may rely on this
+# convention.  For this reason, it is usually loaded as the first plugin
+# into the MHA using the "mhalib = transducers" assignment.
+#
+# transducers
+
+# Remember that the configuration settings of the first plugin loaded
+# into the MHA process, which here is the "transducers" plugin, can be
+# accessed under the sub-parser named "mha". "transducers" has a
+# configuration variable "plugin_name".  When a string is written to
+# this configuration variable, then the transducers plugin will itself
+# load another MHA plugin into the MHA process, which receives the
+# calibrated input signal from transducers, and which sends its still
+# calibrated output signal to the transducers plugin to adjust for the
+# physical outputs.
+#
+# Here, transducers loads an mhachain, which is an MHA plugin that
+# itself can load several other signal processing plugins and arrange
+# them in a signal processing chain.
+#
+# Plugin name
+# string
+mha.plugin_name = mhachain
+
+# After the above assignment is executed, the configuration settings
+# of the mhachain plugins are accessible through the hierarchy
+# "mha.mhachain", i.e. here, the individual plugin name gets reused as
+# the hierarchy name.
+
+# parser "mha.calib_in":
+#
+# calibration module
+#
+# The transducers plugin seperates input calibration settings and
+# output calibration settings in two different sub-"parsers", named
+# "calib_in" and "calib_out".
+#
+# To adjust the input signals to influences like microphone
+# sensitivities, analogue amplifiers, and sound card A/D converter
+# sensitivities, we write channel-specific "peak levels" into the
+# transducers plugin's "calib_in.peaklevel" configuration variable,
+# which is a vector of floats.  Each element specifies the "peak
+# level" for the corresponding audio channel.  With peak level, we
+# refer to the physical sound pressure level which would cause the
+# sound card to transmit to the MHA a digitized signal with a digital
+# level of 0 dB re full scale (dB FS).
+#
+# Of course, this is only a theoretical consideration:  A digital
+# signal with 0 dB FS would be some rectangular waveform with maximum
+# possible amplitude, and if you ever saw such a digital signal for real,
+# the obvious suspicion would be that you were seeing was caused by
+# massive clipping.
+#
+# Instead, we suggest that you produce a known sound level of static
+# noise at the place of your microphones with the help of calibrated
+# measurement equipment.  The calibrated measurement equipment should
+# tell you the sound level in dB SPL Freefield with linear or Zero
+# (Z-) frequency weighting. No A-, B-, C- or D- Weighting should be
+# applied.
+#
+# This known sound level should be loud enough clearly to dominate
+# other ambient noises (use a sound-proof booth for low ambient
+# noises!), but still soft enough that no clipping occurs when the
+# sound is digitized. Of course, all your equipment should behave as
+# linear as possible.
+#
+# Then, your peak level for each channel is the physical level that
+# you measured minus the corresponding digital level in dB FS of the
+# signal produced by your sound card.  (The digital level in dB FS is
+# always negative, therefore, the peaklevel is always higher than the
+# physical sound level that you have used for calibration.)
+#
+# Yes, calibration is complicated (and we are not even finished, yet,
+# see next variable "fir").  But for hearing aid applications, it is
+# crucial to get it right.
+#
+# The peaklevels given in the following assignment are just example
+# values.  Note that a vector value is written with square brackets
+# surrounding the element values, which are separated by spaces.
+#
+# Reference peak level in dB (0 dB FS corresponds to this SPL level)
+# vector<float>
+# mha.calib_in.peaklevel = [100 100 100 100]
+mha.calib_in.peaklevel = {{ peaklevel_in }}
+
+# Measuring and computing the correct peak level as above is not
+# enough to calibrate a hearing aid system. Microphones (or any other
+# component in your audio recording path) may have a non-flat
+# frequency response, which has to be compensated for with a filter,
+# before MHA plugins can actually rely on the level convention in the
+# MHA. For this purpose, you can specify a matrix of FIR filter
+# coefficients, with one filter per row. Rows are separated by
+# semicola.
+#
+# If your microphones' frequency responses, you can either leave out
+# the fir coefficients, or, as done here, provide FIR coefficients
+# that do not actually alter the signal. These non-modifying FIR
+# coefficients are included here to demonstrate the matrix data
+# format.
+#
+# FIR filter coefficients, one row for each channel
+# matrix<float>
+mha.calib_in.fir = [[1 0 0];[1 0 0];[1 0 0];[1 0 0]]
+
+# parser "mha.calib_out":
+#
+# Output calibration follows. The peaklevel and fir entries have the
+# same meaning as for input calibration: physical level in dB SPL Free
+# Field corresponding to a digital signal with 0 dB re full scale
+# digital level, and filter to correct the frequency responses of the
+# output amplifiers and transducers. When thinking of hearing aid
+# applications where the output sound is produced not in the free
+# field but in the ear canal of the hearing impaired listener with
+# hearing aid receivers, output calibration becomes more involved than
+# input calibration because effects like lost open ear gain may have
+# to be taken into account and suitable couplers simulating the
+# impedance of actual ears have to be used for physical measurements.
+#
+# Reference peak level in dB (0 dB FS corresponds to this SPL level)
+# vector<float>
+mha.calib_out.peaklevel = {{ peaklevel_out }}
+# FIR filter coefficients, one row for each channel
+# matrix<float>
+mha.calib_out.fir = [[]]
+
+# parser "mha.calib_out.softclip":
+# 'Hardware' softclipper
+#
+# When hearing aid algorithms apply gains to amplify sounds for the
+# hearing impaired, the desired output signal may be louder than is
+# physically possible to produce with the given equipment. If this
+# situation is left unhandled, then the physical signal will be
+# clipped by the sound card, producing very unpleasant sound
+# artifacts.  It is always better to adapt and configure the hearing
+# aid algorithms in such a way that output signal is never in danger
+# of clipping.  Given the realities of such a flexible platform as the
+# master hearing aid, where the hearing support algorithm can be
+# connected to many different sound output transducers, we realize
+# that this is not always possible. In order to lighten the burden of
+# unpleasant clipping sound artifacts on the hearing impaired user
+# testing a configuration, we have introduced a softclipper that will
+# attenuate the overall signal with slower time constants when it is
+# in danger of clipping. Note that this solution is still sub-optimal,
+# because the prescribed output levels are not achieved, and because
+# the softclipper may still produce unpleasant artifacts a little less
+# harsh, but the solution is still better than hard clipping.
+#
+# The attack time constant, given in seconds, determines how quickly
+# the softclipper can react to rising sound levels that are in danger
+# of reaching hard clipping. Note that only a time constant of 0 can
+# guarantee that no hard clipping occurs in the operating range of the
+# softclipper.
+#
+# Note that the transducers plugin expects the values for these time
+# constants to be specified in units of seconds, even though typical
+# values for these settings are in the milliseconds range.  In MHA
+# configuration, we prefer that physical quantities be specified in SI
+# units whenever possible.
+#
+# attack filter time constant / s
+# float:[0,]
+mha.calib_out.softclip.tau_attack = 0.002
+
+# The decay time constant, in seconds, determines how quickly the
+# softclipper can follow falling sound levels to leave its operating
+# range when engaged.
+#
+# decay filter time constant / s
+# float:[0,]
+mha.calib_out.softclip.tau_decay = 0.005
+
+# Lower end of the operating range of the softclipper. This is some
+# value between 0 and one and denotes the amplitude of sound samples
+# with respect to full scale of the sound card at which the
+# softclipper engages and starts attenuating the signal.
+#
+# start point on linear scale (hard clipping at 1.0)
+# float:[0,]
+mha.calib_out.softclip.threshold = 0.6
+
+# The compression rate of the softclipper. This value of 0.5 means,
+# for every full dB that the mha output signal would be above the soft
+# clipper threshold if no clipping would occur, output only this many
+# dBs above that threshold.
+#
+# compression factor
+# float:[0,1]
+mha.calib_out.softclip.slope = 0.5
+
+# The softclipper measures the ratio of the number of samples that
+# were attenuated by it vs the number of unaffected samples, with a
+# time averaging performed by low pass filtering ones and zeros with
+# this time constant.
+#
+# clipping meter time constant / s
+# float:[0,]
+mha.calib_out.softclip.tau_clip = 1
+
+# When configuring an MHA, you can set a limit on the maximum clipped
+# ratio that you are willing to accept.  MHA will stop signal
+# processing with an error if this ratio is ever exceeded, and would
+# need to be restartet manually.  This is intended to be used in
+# scenarios where the hearing aid processing does not take into
+# account limitations of the sound output hardware, and you want to
+# stop measurements when it becomes clear that you cannot perform some
+# measurements either due to the limitations of the output hardware or
+# due to the severity of the hearing loss of the subject.
+#
+# maximum allowed clipped ratio
+# float:[0,1]
+mha.calib_out.softclip.max_clipped = 1
+
+# All the clipping described above is disabled by default and has to
+# be enabled here if desired.
+#
+# Will the soft/ hard clipping be executed
+# bool
+mha.calib_out.do_clipping = no
+
+
+# parser "mha.mhachain":
+#
+# MHA Chain
+#
+# Above, we have loaded an "mhachain" plugin into the transducers
+# plugin to process the calibrated signal.  The configuration settings
+# of this mhachain can be accessed below the hierarchy mha.mhachain.
+# An mhachain plugin can load several plugins in the specified order,
+# where each plugin processes the output signal of the previous
+# plugin.  Child plugins are loaded into an mhachain by assigning to
+# its "algos" variable a vector of strings, where each string is the
+# name of one child plugin.  Here, we load two plugins, an adaptive
+# differential microphone (adm), which is set to be non-adaptive,
+# and an overlapadd plugin.
+#
+# list of plugins
+# vector<string>
+mha.mhachain.algos = [adm overlapadd]
+
+# parser "mha.mhachain.adm":
+#
+# Adaptive differential microphone
+#
+# The adm plugin implements one or more independent adaptive
+# differential microphones by combining the signal from two
+# omnidirectional microphones (cf. Elko 1985).  In hearing aids, the
+# adaptive differential microphone algorithm can be applied to combine
+# the signal of two distinct omnidirectional microphones inside a
+# single hearing aid device, a front microphone and a rear microphone.
+# The adaptive algorithm is then used to steer a spatial zero so that
+# the sound source with the highest intensity in the rear hemisphere
+# of the hearing aid wearer's head is attenuated.
+#
+# The adm plugin needs to know which audio channels should be combined
+# to form each computed adaptive differential microphone, because
+# there is no default ordering of 4 channels.  With the following
+# assignments, we specify that the ordering (i.e. which microphone is
+# connected to which sound card channel) is in this case:
+# - channel index 0 = front microphone on the left hearing aid device
+# - channel index 1 = front microphone on the right hearing aid device
+# - channel index 2 = rear microphone on the left hearing aid device
+# - channel index 3 = rear microphone on the right hearing aid device
+# Both left channels will be combined by the ADM to form an adaptive
+# differential microphone. Independently, the same will be done for
+# both right channels.
+#
+# Channel indices for front microphones
+# vector<int>:[0,[
+mha.mhachain.adm.front_channels = [0 1]
+# Channel indices for rear microphones
+# vector<int>:[0,[
+mha.mhachain.adm.rear_channels = [2 3]
+
+# The adaptive differential microphone algorithm needs to know the
+# physical distance between front and rear microphone.  The physical
+# distance is given in meters for each microphone pair in the
+# following vector variable.  The unit here is meters even though
+# typical distances are more in the range of millimeters, because in
+# the MHA configuration we prefer that physical quantities be
+# specified in SI units whenever possible.
+#
+# distance between front and rear microphones
+# front-mid 0.0076m + mid-rear 0.0073m Kayser et al. 2009
+mha.mhachain.adm.distances = [0.0149 0.0149]
+
+# Here we set the plugin to be non-adaptive.
+mha.mhachain.adm.beta = 0.5
+
+# The adaptation process of this adaptive differential microphone
+# algorithm adapts on low-pass filtered signals.  This variable
+# determines the filter order used for the low-pass filter.  Higher
+# filter orders result in better spatial adaptation.
+#
+# Filter order of FIR lowpass filter
+# int:[46,128]
+mha.mhachain.adm.lp_order = 128
+
+# The output signal of the adaptive differential microphone shows a
+# comb filter effect with regular notches in the spectrum.  For
+# typical microphone distances in the order of 1cm, only the lowest
+# notch is relevant for speech spectrum.  To compensate the lowest
+# notch, a filter is applied that amplifies low frequencies.  This
+# variable specifies the filter order of this filter. Higher filter
+# orders result in better output signal quality.
+#
+# Filter order of FIR comb compensation filter
+# int:[46,128]
+mha.mhachain.adm.decomb_order = 128
+
+# Adaptive differential microphones combine the signal from two audio
+# input channels into a single audio output channel.  Even with the
+# adm plugin in the signal path, users may want to switch from active
+# directional filtering to omnidirectional microphone and back,
+# depending on the acoustical environment they find themselves in.  By
+# changing this variable at run time, users can select what the output
+# of the adm plugin should be:
+#
+# - For bypass = 0, the adm will not be bypassed, which means it will
+#   carry out its adaptive directional filtering.
+# - For bypass = 1, adm plugin will output the audio signals from the
+#   front microphones without modification.
+# - For bypass = 2, adm plugin will output the audio signals from the
+#   rear microphones without modification.
+#
+# In all three cases, the number of output channels will be the same,
+# namely, half the number of input channels.
+#
+# if 1, output front microphones directly, if 2, output rear microphones
+# int:[0,2]
+mha.mhachain.adm.bypass = 0
+
+# parser "mha.mhachain.overlapadd":
+#
+# overlapadd is one of the MHA plugins that perform conversion between
+# time domain and spectral domain as a service for algorithms that
+# process a series of short time fourier transform signals.  In this
+# way, not every MHA plugin that processes spectral signal has to
+# perform its own spectral analysis. overlapadd performs both, the
+# forward and the backward transform, and can load another MHA plugin
+# which analyses and modifies the signal while in the spectral domain.
+# The plugin performs the standard process of collecting the input
+# signal, windowing, zero-padding, fast fourier transform, inverse
+# fast fourier transform, additional windowing, and overlap-add time
+# signal output.
+#
+# The hop size, how much the analysis window is advanced from one
+# processing invocation to the next, is not controlled by the
+# overlapadd plugin itself, but is determined by the number of audio
+# samples per channel and processing block.  In this example
+# configuration, the hop size is determined by the "fragsize" setting
+# of the MHA itself.  This setting can be found near the top of this
+# configuration file.
+#
+# All other common overlap-add (OLA) and weighted overlap-add (WOLA)
+# settings can be configured by setting the configuration variables of
+# this overlapadd plugin.
+#
+# Waveform to spectrum overlap add and FFT method.
+# Audio data is collected up to wndlen, than windowed with
+# the given window function, zero padded up to fftlength
+# (symmetric zero padding or asymmetric zero padding possible),
+# and Fast-Fourier-transformed.
+# All parameter changes take effect after the next prepare call.
+
+# The overlapadd plugin again loads one plugin that processes the
+# signal in the spectral domain.  The plugin loaded here will receive
+# the STFT signal and produce a possibly modified version of the STFT
+# signal, which is then subjected to inverse FFT transform by the
+# overlapadd plugin and finally the overlap-add operation is performed
+# to produce the time-domain output signal.
+#
+# In this configuration, we use again an mhachain plugin to process
+# the signal.  Note that mhachain was used before in this
+# configuration file to form a signal processing chain of two
+# algorithms that pass on time-domain signal.  Here, we want it to
+# form a chain of algorithms that pass on spectral STFT signal to each
+# next plugin.  Some plugins in the MHA, like mhachain, can adapt to
+# the domain of the input signal that they receive.  Should you happen
+# to configure a plugin to be loaded at a place where it cannot
+# process the input signal that it receives, that plugin will raise an
+# error, and processing cannot start.
+#
+# Plugin name
+# string
+mha.mhachain.overlapadd.plugin_name = mhachain
+
+# The FFT length, in samples, to use for spectral analysis.  The FFT
+# length must be at least as large as the analysis window length,
+# which is configured later.  Note that for efficient FFT computation
+# the FFT length should be a product of powers of small primes.  The
+# openMHA uses MIT's FFTW library version 2 internally, which supports
+# efficient analysis also for small primes other than 2, therefore,
+# you are not restricted to powers of 2 in the choice of FFT length.
+#
+# FFT length int:[1,]
+mha.mhachain.overlapadd.fftlen = 256
+
+# parser "mha.mhachain.overlapadd.wnd":
+#
+# The window properties are specified in the sub-hierarchy wnd.
+#
+# Window type.
+#
+# The data type of the variable wnd.type is keyword_list.  The
+# variable offers a choice of predefined symbolic names, one of which
+# can be selected.  Most window types offered here should be
+# self-explanatory for users with a signal processing background.
+# Only the "user" window is a special case where the the window shape
+# can be specified sample-by-sample by the user.  For the example
+# configuration here we use the hanning window.
+#
+# keyword_list:[rect hanning hamming blackman bartlett user]
+mha.mhachain.overlapadd.wnd.type = hanning
+
+# If wnd.type above is user, then the window shape would have to be
+# specified here sample-by-sample in the vector wnd.user.  The value
+# of each sample would typically between 0 and 1.
+#
+# User provided window (used if window type==user).
+# vector<float>
+mha.mhachain.overlapadd.wnd.user = []
+
+# The window length, in samples.  The window length should be at least
+# as long as the hop size (determined by the fragsize setting outside
+# of the overlapadd plugin), and must be at most as long as the FFT
+# length.  A typical value would be for the window size to be either
+# exactly two (like here) or four times the hop size, to achieve 50%
+# or 75% overlap, respectively.  If the signal is not only analyzed in
+# the spectral domain, but also modified with frequency-dependent
+# gains, it is recommended to choose the window length shorter than
+# the FFT length to have some zero padding to pick up the time-domain
+# convolution from the corresponding frequency-domain modifications.
+#
+# window length/samples
+# int:[1,]
+mha.mhachain.overlapadd.wnd.len = 128
+
+# If the fft length is greater than the window length, then this
+# variable determines the relative placement of the window inside the
+# fft analysis buffer.
+#
+# window position
+# (0 = beginning, 0.5 = symmetric zero padding, 1 = end)
+# float:[0,1]
+mha.mhachain.overlapadd.wnd.pos = 0.5
+
+# In common overlap-add processing, the window would be applied as an
+# analysis window before transforming to the frequency domain.
+# However, there are other use cases (namely WOLA, weighted
+# overlap-add), where one commonly restricts the resynthesized time
+# signal that is produced by the inverse FFT with a synthesis window
+# to the original extent of the analysis window to restrict filter
+# "ringing".  You would usually split one of the common analysis
+# window used in overlap-add processing, by applying an exponent of
+# 0.5 to all the window samples and apply the analysis window before
+# the FFT and apply the synthesis window after the inverse FFT.  Note
+# that this is not commonly done in hearing aid signal processing, but
+# the MHA supports it should you need it.
+#
+# An exponent of 1 here means that the window is completely applied
+# before the FFT is performed.  Values lesser than one mean that all
+# window weights are exponentiated by this exponent (named wnd.exp
+# here) before the weights are applied to the input signal. Then, the
+# exponent (1-wnd.exp) is applied to the window weights before it is
+# applied as a synthesis window to the time signal that is produced by
+# the inverse FFT.
+#
+# If you perform standard overlap-add processing (OLA), and not
+# weighted overlap-add (WOLA), then leave this at its default value,
+# 1.
+#
+# window exponent to be applied to all elements of window function
+# float
+mha.mhachain.overlapadd.wnd.exp = 1
+
+# parser "mha.mhachain.overlapadd.zerownd":
+#
+# The settings in the sub-parser "zerownd" define a weighting
+# operation performed on the regions of the FFT buffer that are
+# pre-filled with the zero-padding.  If the signal is modified in the
+# spectral domain, then these regions of the FFT buffer usually
+# contain non-zero signal samples after the inverse FFT has been
+# performed.  This is caused by the convolution with the impulse
+# response that corresponds to the spectral changes that the spectral
+# algorithms have performed.
+#
+# If the effective impulse response exceeds the length of the
+# zero-padding regions in the FFT buffer, then this will cause
+# temporal aliasing effects that may be perceptible to the hearing
+# impaired user.  To improve the perceptual consequences, one might
+# apply a post-window to attenuate the signal energy in the
+# zero-padding area.  You can choose the shape of this post-window
+# with the configuration setting zerowind.type. This window will be
+# split in two and each part applied to the respective zero-padding
+# regions at the beginning and at the end of the FFT buffer.  Note
+# that a rectangular window will have a weight of one everywhere and
+# therefore will not affect these regions and will not improve the
+# temporal aliasing artifacts.  The default setting is a rectangular
+# window with no effect.
+#
+# zero padding post window type
+# Window type.
+# keyword_list:[rect hanning hamming blackman bartlett user]
+mha.mhachain.overlapadd.zerownd.type = rect
+
+# If the window type selected in zerownd.type is "user", then the weigths
+# of the desired window have to be specified here.
+#
+# User provided window (used if window type==user).
+# vector<float>
+mha.mhachain.overlapadd.zerownd.user = []
+
+# parser "mha.mhachain.overlapadd.smoothgains_bridge.mhachain":
+#
+# This mhachain plugin instance forms a signal processing chain in the
+# spectral domain: Its input signal is the STFT signal produced by
+# the overlapadd plugin, and its output signal is processed by the
+# same overlapadd instance to resynthesize it to a time domain signal.
+#
+# MHA Chain
+#
+# The plugins used to form a signal processing chain are loaded by the
+# mhachain plugin when the assignment to the configuration parameter
+# algos is executed.  This is a vector of strings, where the vector
+# value is delimited by square brackets, and the vector's elements are
+# separated by spaces.
+
+# Add smoothgains_bridge
+mha.mhachain.overlapadd.plugin_name = smoothgains_bridge
+mha.mhachain.overlapadd.smoothgains_bridge.plugin_name = mhachain
+
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.algos = [fftfilterbank dc combinechannels]
+
+# Use default mode
+mha.mhachain.overlapadd.smoothgains_bridge.mode = linear_phase
+
+# parser "mha.mhachain.overlapadd.smoothgains_bridge.mhachain.fftfilterbank":
+#
+# FFT based filterbank with overlapping filters
+#
+# For the dynamic compression which adapts the signal levels in the
+# different frequency bands for better audibility of the hearing
+# impaired opemMHA users, the signal has to be split into frequency
+# band. We do this here with the help of the MHA plugin fftfilterbank,
+# which separates our (here) 2 broadband audio channels and produces
+# (here) 2*9 narrowband audio channel, with 9 frequency bands
+# produced for each input broadband audio channel.
+#
+# FFT filterbank is not limited to 2 input channels, the above
+# paragraph just uses the current settings used here as an example.
+
+# fftfilterbank groups sets of FFT bins into frequency bands.
+#
+# Further below we will specify the center frequencies of these frequency
+# bands.  Here, we specify in what units we want to give the
+# frequencies below.  The default unit to specify frequencies in the
+# MHA is Hertz [Hz], but at some places, users have the choice of
+# selecting different frequency units.  Here, we choose that we want
+# to specify the frequencies in Hertz.
+#
+# Frequency unit
+# keyword_list:[Hz kHz Oct Oct/3 Bark Erb ERB_Glasberg1990]
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.fftfilterbank.unit = Hz
+
+# The configuration setting f of the fftfilterbank plugin expects a
+# vector with the center frequencies of the individual frequency
+# bands. The unit for the frequencies is Hertz.
+#
+# Frequencies
+# vector<float>
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.fftfilterbank.f = [177 297 500 841 1414 2378 4000 6727 11314]
+
+# The frequency bands that the fftfilterbank plugin produces can have
+# different shapes along the frequency axis.  The shapes and also the
+# cross-over frequencies between adjacent frequency bands can be
+# computed on different frequency scales, e.g. linear or logarithmic
+# scales.  Here we choose the logarithmic frequency scale.
+#
+# frequency scale of filter bank
+# keyword_list:[linear bark log erb ERB_Glasberg1990]
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.fftfilterbank.fscale = log
+
+# Frequency bands in the fftfilterbank can have different shapes
+# along the frequency axis.  Here we select a rectangular shape, which
+# also has the effect that frequency bands will not overlap,
+# i.e. every frequency bin is part of only exactly one frequency band.
+#
+# filter overlap type
+# keyword_list:[rect linear hanning exp gauss]
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.fftfilterbank.ovltype = rect
+
+# Above, when setting the configuration variable f, we used center
+# frequencies.  We could also have specified the edge frequencies if
+# we did the respective setting here.  When we specify center
+# frequencies, then the cross-over frequencies between adjacent
+# frequency bands are computed as the mean between the adjacent center
+# frequencies on the frequency scale specified by the variable fscale.
+# Also, in center frequency mode, the lowest frequency band always
+# extends to frequency 0Hz, while the highest frequency band always
+# extends to the Nyquist frequency.
+#
+# keyword_list:[center edge]
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.fftfilterbank.ftype = center
+
+# parser "mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc":
+#
+# dynamic compression
+#
+# Our standard dynamic compression algorithm measures the input sound
+# level in each frequency band and looks up the gain to be applied in
+# a gain table, and applies the gain to the signal in each respective
+# band.
+
+# Dynamic compression works by amplifying the signal with gains that
+# depend on the level of the input signal itself.  Multi-band dynamic
+# compression performs input signal level measurement in each
+# frequency band to deduce the gain applicable to the respective
+# frequency band.  Applicable gains would usually be higher for low
+# input levels, and lower for high input levels, to compress the
+# dynamimc range of the input signal into a smaller dynamic range at
+# the output of the compressor.
+#
+# Because the applicable gain depends on the frequency band as well as
+# on the input level, we use a 2-dimensional matrix to specify
+# applicable gains. The gaintable matrix has one row of gains for each
+# frequency band from the left audio channel, followed by one row of
+# gains for each frequency band from the right audio channel.  The
+# gains given are in dB.  Rows are enclosed by square brackets and
+# separated by semicola.  The entire matrix is enclosed in an
+# additional pair of square brackets.
+#
+# The first element in each row (i.e., taken together, the first
+# column) specifies the gain in dB to be applied if the input level in
+# the respective frequency band is equal to the value of the gtmin
+# element given for that respective band (see gtmin description
+# further below).
+#
+# The following elements in each row specify the gains in dB to be
+# applied for other input values, where the input level difference
+# between the individual elements in each row of the matrix is
+# determined by the value of gtstep for the respective band (see
+# gtstep description further below).
+#
+# This way, each row specifies the gains to be applied to the
+# respective frequency bands for certain discrete input levels.  The
+# actual input levels of the signal will regularly be different from
+# any of these discrete input levels.  Therefore, the gain values in
+# the rows are interpolated as well as extrapolated.
+#
+# The gain values that we use here in this example corrects the sound
+# perception for a hearing impaired listener with a very uncommon
+# mid-frequenc hearing loss.  Users of the openMHA may change the
+# values given here using their own rationale to help hearing-impaired
+# users.
+#
+# Note that we do not apply gains to the highest frequency bands here
+# on both sides (9th and 18th row).  Having the highest frequency band
+# here at all is just a trick to limit the extent of the
+# second-highest frequency band, so that it does not extend up to the
+# Nyquist frequency.
+#
+# gaintable data in dB gains
+# matrix<float>
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.gtdata = {{ gtdata }}
+
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.log_interp = yes
+
+# Vector of input sound pressure levels for which the gains in the
+# leftmost column of the matrix "gtdata" above should be applied.
+# Each input sound level given here belongs to a different frequency
+# band. If only one value is given here, then this only value will
+# apply to all matrix rows / frequency bands.
+#
+# input level for first gain entry in dB SPL
+# vector<float>
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.gtmin = [-10]
+
+# Vector of step sizes in dB between discrete sound pressure levels
+# that determine the supporting points in the mapping from input sound
+# levels to applicable gains in matrix "gtdata" above.  Each entry in
+# this vector specifies the step size for a different row of gtdata.
+# If only one value is given here, then this only value will apply to
+# all rows / frequency bands.
+#
+# Each input sound level given here belongs to a different frequency
+# band. If only one value is given here, then this only value will
+# apply to all frequency bands.
+#
+# level step size in dB
+# vector<float>
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.gtstep = [1]
+
+# The dynamic compressor employs a common attack/decay low-pass filter
+# to determine the input level.  This vector describes the attack time
+# constants.  Each element corresponds to one frequency band. If only
+# one value is given here, then this only value will apply to all
+# frequency bands.
+#
+# attack time constant in s
+# vector<float>
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.tau_attack = [0.02]
+
+# The dynamic compressor employs a common attack/decay low-pass filter
+# to determine the input level.  This vector describes the decay or
+# release time constants.  Each element corresponds to one frequency
+# band. If only one value is given here, then this only value will
+# apply to all frequency bands.
+#
+# decay time constant in s
+# vector<float>
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.tau_decay = [0.1]
+
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.tau_rmslev = [0.1]
+
+# Name of fftfilterbank plugin.  Used to extract frequency information.
+# string
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.fb = fftfilterbank
+
+# The fftfilterbank that splits the broadband channels into frequency
+# bands for this compressor outputs the frequency bands as separate
+# audio channels. Without additional knowledge, the dynamic compressor
+# cannot determine whether an 18 channel input signal that it receives
+# has been generated from 2 broadband channels that have been split
+# into 9 bands each (like we do in this example), or maybe from 3
+# broadband channels that have been split into 6 bands each.  The
+# following setting tells the compressor the name of an algorithm
+# communication variable where the fftfilterbank has stored
+# information about the original number of broadband channels.
+#
+# name of audio channel number variable (empty: broadband)
+# string
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.chname = fftfilterbank_nchannels
+
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.bypass = no
+
+# parser "mha.mhachain.overlapadd.smoothgains_bridge.mhachain.combinechannels":
+#
+# Channel combiner
+#
+# The fftfilterbank has split the signal into frequency bands.  To be
+# able to combine the frequency bands back into broadband channels,
+# the combinechannels plugin needs to know how many broadband channels
+# have been split into bands.  The fftfilterbank that splits the
+# broadband channels into frequency bands for this compressor outputs
+# the frequency bands as separate audio channels. Without additional
+# knowledge, the combinechannels plugin cannot determine whether an 18
+# channel input signal that it receives has been generated from 2
+# broadband channels that have been split into 9 bands each (as it is
+# the case in this example), or maybe from 3 broadband channels that
+# have been split into 6 bands each.  The following setting tells the
+# combinechannels plugin how many broadband output channels it should
+# regenerate.
+#
+# Number of output channels
+# int:[1,]
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.combinechannels.outchannels = 2
+
+# parser "io":
+#
+# Sound file IO client.
+#
+# MHA supports different audio back-ends: Sound can come from and go
+# to either
+# - sound cards,
+# - the Jack audio server,
+# - sound files, or
+# - the network.
+#
+# Users select the desired audio backend by loading the respective MHA
+# IO library into the MHA process. In this example, we we have loaded
+# the IO library that reads from and writes to sound files, see the
+# assignment to "iolib" above.
+
+# This variable is used to select the input sound file.  The file name
+# of the sound file to use as the input sound signal to the MHA is
+# written to this variable.  The file name can contain either the
+# absolute path to the sound file, or the relative path (relative to
+# the current working directory of the MHA process).
+#
+# Read from input files and write to files of same format.
+# Input sound file name
+# string
+io.in = {{ io_in }}
+
+# This variable is used to select the output sound file.  The file
+# name of the sound file to create and hold the output sound signal to
+# the MHA is written to this variable.  The file name can contain
+# either the absolute path to the sound file, or the relative path
+# (relative to the current working directory of the MHA process).
+#
+# Note that to ensure that the sound file was properly closed, the MHA
+# should be told to change to the release start (cmd=release), or it
+# should be told to exit (cmd=quit).
+#
+# Output sound file name
+# string
+io.out = {{ io_out }}
+
+# Local Variables:
+# indent-tabs-mode: nil
+# coding: utf-8-unixs
+# End:
diff --git a/tests/test_data/openMHA/prerelease_combination4_smooth_template.cfg b/tests/test_data/openMHA/prerelease_combination4_smooth_template.cfg
new file mode 100644
index 000000000..0a5b94ace
--- /dev/null
+++ b/tests/test_data/openMHA/prerelease_combination4_smooth_template.cfg
@@ -0,0 +1,989 @@
+# This file is part of the HörTech Open Master Hearing Aid (openMHA)
+# Copyright © 2013 2017 2018 HörTech gGmbH
+#
+# openMHA is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, version 3 of the License.
+#
+# openMHA 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 Affero General Public License, version 3 for more details.
+#
+# You should have received a copy of the GNU Affero General Public License,
+# version 3 along with openMHA.  If not, see <http://www.gnu.org/licenses/>.
+
+
+# openMHA is a software platform to process audio signals with hearing
+# aid signal processing algorithms.  Signal processing algorithms are
+# implemented as plug-ins that are loaded into the MHA process at
+# runtime.
+#
+# The openMHA framework itself and also the MHA plugins support
+# configuration of their settings through a text-based configuration
+# language.  This file is an example configuration that can be used to
+# configure an MHA to perform signal processing with a non-adaptive
+# differential microphone, followed by dynamic compression to compensate
+# for sensorineural hearing loss.
+
+# Besides configuring the MHA, this file also has comments explaining
+# every setting. We have left out some of the more advanced settings
+# which have been left to their default value, because explaining all
+# the possible options that are not actually used here might only
+# distract from understanding this configuration.
+
+# We have to tell the MHA how many audio channels to process.  Think
+# of the number of audio channels as the number of microphones that
+# your hearing support system uses to pick up sound.  If you wore a
+# hearing aid device on each ear, and each hearing aid device had a
+# signal microphone to pick up sound, then your number of audio input
+# channels would be two.  If each of the hearing aid devices had not
+# only one, but two microphones at slightly different positions, then
+# you would configure the number of input audio channels to be
+# four. This is what we do here with the "nchannels_in" setting.
+#
+# This "nchannels_in" variable accepts values of type integer in the
+# range 1 to INT_MAX.  This is sometimes denoted like this in MHA:
+#
+# int:[1,[
+nchannels_in = 4
+
+# Note that the corresponding "nchannels_out" variable is not
+# writable, but is read-only.  We call read-only variable a "monitor
+# variable", or shorter, a "monitor".  The number of output channels
+# is auto-deduced by the MHA and can be read from the "nchannels_out"
+# monitor.
+
+# When we perform real-time signal processing, we process the signal
+# in small chunks of data: Take a chunk from the sound card capture
+# channels, process it, and output the result to the sound card output
+# channels.
+#
+# MHA always operates like this, processing data in small chunks, even
+# when the processed sound data comes from sound files.  The setting
+# "fragsize" tells the MHA how many audio sample per channel are to be
+# processed in each chunk.
+#
+# int:[1,[
+fragsize = 64
+
+# MHA processes discrete-time digital audio signals with a fixed
+# sampling rate.  The sampling rate tells MHA how many samples per
+# second have been digitized in each audio channel. Note that we use a
+# floating point data type here, so you can use a non-integer sampling
+# rate if you have to and your sound card supports it. The sampling
+# rate 44100 that we use here is the standard sampling rate used on
+# audio CDs and is supported by most sound cards.
+#
+# sampling rate in Hz
+# float:]0,[
+srate = 44100
+
+# The MHA framework can load a single MHA plugin to process the data.
+# We tell the MHA which plugin to load with the "mhalib" variable
+# (historical reasons).  Note that the data type of the "mhalib"
+# variable is string.
+#
+# When the assignment "mhalib = transducers" below is executed by the
+# MHA, then the MHA framework will look for a dynamic library file in
+# the file system with the name "transducers.so" (on linux, on windows
+# the extension would be .dll, on mac it would be .dylib).  The path
+# where MHA searches for this file is either the standard path for
+# shared libraries on the system, or, if the environment variable
+# "MHA_LIBRARY_PATH" is set, then MHA searches the directories listed
+# in this environment variable.
+#
+# Usually MHA configurations consist of more than just one plugin.
+# MHA provides structuring plugins that can themselves load other
+# plugins for this purpose.
+#
+# The transducers plugin that we load here can be used for calibration of
+# input and output sounds, see below.
+#
+# MHA library name
+# string
+mhalib = transducers
+
+# MHA supports different audio back-ends: Sound can come from and go
+# to either
+# - sound cards,
+# - the Jack audio server,
+# - sound files, or
+# - the network.
+#
+# Users select the desired audio backend by loading the respective MHA
+# IO library into the MHA process.  Similar to processing plugins, IO
+# libraries are loaded as dynamic libraries into the process when the
+# assignment to the "iolib" variable below is executed, and the same
+# search path and file name extensions are used, as when processing
+# plugins are loaded.  But because MHA IO libraries are the ultimate
+# sources and sinks of sound in the MHA, they export a different
+# interface to the MHA. Here we load the IO library that reads from
+# and writes to sound files.
+#
+# IO plugin library name
+# string
+iolib = MHAIOFile
+
+# In the future you may have several MHA processes running on the same
+# computer, performing different signal processing tasks.  You can use
+# this MHA variable to describe what the purpose of this instance of
+# the MHA is, so that you can tell to which MHA instance you are
+# currently connected and not get confused.
+#
+# Name of this mha instance
+# string
+instance = allplugins
+
+# parser "mha":
+#
+# Remember that above, we loaded the transducers plugin into the MHA
+# with the assignment "mhalib = transducers".  When the MHA executed
+# this assignment, it loaded the transducers plugin into the MHA
+# process.  For historical reasons, MHA makes the configuration
+# variables of this plugin available to the sub-"parser" "mha".  We
+# call the hierarchy layers in the MHA configuration tree "parsers"
+# because, besides providing hierarchy, they also perform the text
+# parsing of the configuration commands.
+#
+# So in the following, we will see how some variables of the transducers
+# plugin are getting set.
+
+# The transducers plugin is responsible for the correct calibration of
+# the sound in the MHA.  Remember that the MHA is a platform for
+# hearing aid signal processing algorithms, and that hearing aids
+# usually enhance the sound for hearing impaired listeners.  Hearing
+# impairment generally means that people suffering from it have
+# increased hearing thresholds, i.e. soft sounds that are audible for
+# normal hearing listeners may be imperceptible for hearing impaired
+# listeners.
+#
+# To provide accurate signal enhancement for hearing impaired people,
+# algorithms have to be able to determine the absolute physical sound
+# pressure level corresponding to a digital signal given to any MHA
+# plugin for processing.  Inside the MHA, we achieve this with a
+# convention.
+#
+# The convention that we use in the MHA is that the single-precision
+# floating point time-domain sound signal samples, that we process
+# inside the MHA plugins, have the physical unit Pascal (1 Pa = 1 N /
+# m^2).  With this convention in place, all plugins can determine the
+# absolute physical sound pressure level from the sound samples that
+# they process.
+#
+# However, when one just connects a microphone to a sound card and
+# uses that sound card to feed sound samples to the MHA, these sound
+# samples do not automatically follow the MHA level convention. The
+# same is true when using sound files instead of sound cards for input
+# and output.  Different microphones have different sensitivities.
+# Sound cards have adjustable amplification settings.  Sound files may
+# have been "normalized" before they have been saved to disk.  To be
+# able to implement our level convention, we need to be able to adjust
+# for arbitrary physical level to digital level mappings in the MHA.
+# We do this with the transducers plugin, which is the only plugin
+# that may not rely on this convention, because it is the one plugin
+# that has to make sure that all other plugins may rely on this
+# convention.  For this reason, it is usually loaded as the first plugin
+# into the MHA using the "mhalib = transducers" assignment.
+#
+# transducers
+
+# Remember that the configuration settings of the first plugin loaded
+# into the MHA process, which here is the "transducers" plugin, can be
+# accessed under the sub-parser named "mha". "transducers" has a
+# configuration variable "plugin_name".  When a string is written to
+# this configuration variable, then the transducers plugin will itself
+# load another MHA plugin into the MHA process, which receives the
+# calibrated input signal from transducers, and which sends its still
+# calibrated output signal to the transducers plugin to adjust for the
+# physical outputs.
+#
+# Here, transducers loads an mhachain, which is an MHA plugin that
+# itself can load several other signal processing plugins and arrange
+# them in a signal processing chain.
+#
+# Plugin name
+# string
+mha.plugin_name = mhachain
+
+# After the above assignment is executed, the configuration settings
+# of the mhachain plugins are accessible through the hierarchy
+# "mha.mhachain", i.e. here, the individual plugin name gets reused as
+# the hierarchy name.
+
+# parser "mha.calib_in":
+#
+# calibration module
+#
+# The transducers plugin seperates input calibration settings and
+# output calibration settings in two different sub-"parsers", named
+# "calib_in" and "calib_out".
+#
+# To adjust the input signals to influences like microphone
+# sensitivities, analogue amplifiers, and sound card A/D converter
+# sensitivities, we write channel-specific "peak levels" into the
+# transducers plugin's "calib_in.peaklevel" configuration variable,
+# which is a vector of floats.  Each element specifies the "peak
+# level" for the corresponding audio channel.  With peak level, we
+# refer to the physical sound pressure level which would cause the
+# sound card to transmit to the MHA a digitized signal with a digital
+# level of 0 dB re full scale (dB FS).
+#
+# Of course, this is only a theoretical consideration:  A digital
+# signal with 0 dB FS would be some rectangular waveform with maximum
+# possible amplitude, and if you ever saw such a digital signal for real,
+# the obvious suspicion would be that you were seeing was caused by
+# massive clipping.
+#
+# Instead, we suggest that you produce a known sound level of static
+# noise at the place of your microphones with the help of calibrated
+# measurement equipment.  The calibrated measurement equipment should
+# tell you the sound level in dB SPL Freefield with linear or Zero
+# (Z-) frequency weighting. No A-, B-, C- or D- Weighting should be
+# applied.
+#
+# This known sound level should be loud enough clearly to dominate
+# other ambient noises (use a sound-proof booth for low ambient
+# noises!), but still soft enough that no clipping occurs when the
+# sound is digitized. Of course, all your equipment should behave as
+# linear as possible.
+#
+# Then, your peak level for each channel is the physical level that
+# you measured minus the corresponding digital level in dB FS of the
+# signal produced by your sound card.  (The digital level in dB FS is
+# always negative, therefore, the peaklevel is always higher than the
+# physical sound level that you have used for calibration.)
+#
+# Yes, calibration is complicated (and we are not even finished, yet,
+# see next variable "fir").  But for hearing aid applications, it is
+# crucial to get it right.
+#
+# The peaklevels given in the following assignment are just example
+# values.  Note that a vector value is written with square brackets
+# surrounding the element values, which are separated by spaces.
+#
+# Reference peak level in dB (0 dB FS corresponds to this SPL level)
+# vector<float>
+# mha.calib_in.peaklevel = [100 100 100 100]
+mha.calib_in.peaklevel = {{ peaklevel_in }}
+
+# Measuring and computing the correct peak level as above is not
+# enough to calibrate a hearing aid system. Microphones (or any other
+# component in your audio recording path) may have a non-flat
+# frequency response, which has to be compensated for with a filter,
+# before MHA plugins can actually rely on the level convention in the
+# MHA. For this purpose, you can specify a matrix of FIR filter
+# coefficients, with one filter per row. Rows are separated by
+# semicola.
+#
+# If your microphones' frequency responses, you can either leave out
+# the fir coefficients, or, as done here, provide FIR coefficients
+# that do not actually alter the signal. These non-modifying FIR
+# coefficients are included here to demonstrate the matrix data
+# format.
+#
+# FIR filter coefficients, one row for each channel
+# matrix<float>
+mha.calib_in.fir = [[1 0 0];[1 0 0];[1 0 0];[1 0 0]]
+
+# parser "mha.calib_out":
+#
+# Output calibration follows. The peaklevel and fir entries have the
+# same meaning as for input calibration: physical level in dB SPL Free
+# Field corresponding to a digital signal with 0 dB re full scale
+# digital level, and filter to correct the frequency responses of the
+# output amplifiers and transducers. When thinking of hearing aid
+# applications where the output sound is produced not in the free
+# field but in the ear canal of the hearing impaired listener with
+# hearing aid receivers, output calibration becomes more involved than
+# input calibration because effects like lost open ear gain may have
+# to be taken into account and suitable couplers simulating the
+# impedance of actual ears have to be used for physical measurements.
+#
+# Reference peak level in dB (0 dB FS corresponds to this SPL level)
+# vector<float>
+mha.calib_out.peaklevel = {{ peaklevel_out }}
+# FIR filter coefficients, one row for each channel
+# matrix<float>
+mha.calib_out.fir = [[]]
+
+# parser "mha.calib_out.softclip":
+# 'Hardware' softclipper
+#
+# When hearing aid algorithms apply gains to amplify sounds for the
+# hearing impaired, the desired output signal may be louder than is
+# physically possible to produce with the given equipment. If this
+# situation is left unhandled, then the physical signal will be
+# clipped by the sound card, producing very unpleasant sound
+# artifacts.  It is always better to adapt and configure the hearing
+# aid algorithms in such a way that output signal is never in danger
+# of clipping.  Given the realities of such a flexible platform as the
+# master hearing aid, where the hearing support algorithm can be
+# connected to many different sound output transducers, we realize
+# that this is not always possible. In order to lighten the burden of
+# unpleasant clipping sound artifacts on the hearing impaired user
+# testing a configuration, we have introduced a softclipper that will
+# attenuate the overall signal with slower time constants when it is
+# in danger of clipping. Note that this solution is still sub-optimal,
+# because the prescribed output levels are not achieved, and because
+# the softclipper may still produce unpleasant artifacts a little less
+# harsh, but the solution is still better than hard clipping.
+#
+# The attack time constant, given in seconds, determines how quickly
+# the softclipper can react to rising sound levels that are in danger
+# of reaching hard clipping. Note that only a time constant of 0 can
+# guarantee that no hard clipping occurs in the operating range of the
+# softclipper.
+#
+# Note that the transducers plugin expects the values for these time
+# constants to be specified in units of seconds, even though typical
+# values for these settings are in the milliseconds range.  In MHA
+# configuration, we prefer that physical quantities be specified in SI
+# units whenever possible.
+#
+# attack filter time constant / s
+# float:[0,]
+mha.calib_out.softclip.tau_attack = 0 #0.002
+
+# The decay time constant, in seconds, determines how quickly the
+# softclipper can follow falling sound levels to leave its operating
+# range when engaged.
+#
+# decay filter time constant / s
+# float:[0,]
+mha.calib_out.softclip.tau_decay = 0.05
+
+# Lower end of the operating range of the softclipper. This is some
+# value between 0 and one and denotes the amplitude of sound samples
+# with respect to full scale of the sound card at which the
+# softclipper engages and starts attenuating the signal.
+#
+# start point on linear scale (hard clipping at 1.0)
+# float:[0,]
+mha.calib_out.softclip.threshold = 0.056 #95 dB where 0 dB FS = 120 dB
+
+# Hard clip at this limit
+mha.calib_out.softclip.hardlimit = 0.1 # hardclip at 100 dB
+
+# The compression rate of the softclipper. This value of 0.5 means,
+# for every full dB that the mha output signal would be above the soft
+# clipper threshold if no clipping would occur, output only this many
+# dBs above that threshold.
+#
+# compression factor
+# float:[0,1]
+mha.calib_out.softclip.slope = 0.2
+
+# The softclipper measures the ratio of the number of samples that
+# were attenuated by it vs the number of unaffected samples, with a
+# time averaging performed by low pass filtering ones and zeros with
+# this time constant.
+#
+# clipping meter time constant / s
+# float:[0,]
+mha.calib_out.softclip.tau_clip = 1
+
+# When configuring an MHA, you can set a limit on the maximum clipped
+# ratio that you are willing to accept.  MHA will stop signal
+# processing with an error if this ratio is ever exceeded, and would
+# need to be restartet manually.  This is intended to be used in
+# scenarios where the hearing aid processing does not take into
+# account limitations of the sound output hardware, and you want to
+# stop measurements when it becomes clear that you cannot perform some
+# measurements either due to the limitations of the output hardware or
+# due to the severity of the hearing loss of the subject.
+#
+# maximum allowed clipped ratio
+# float:[0,1]
+mha.calib_out.softclip.max_clipped = 1
+
+# All the clipping described above is disabled by default and has to
+# be enabled here if desired.
+#
+# Will the soft/ hard clipping be executed
+# bool
+mha.calib_out.do_clipping = yes
+
+
+# parser "mha.mhachain":
+#
+# MHA Chain
+#
+# Above, we have loaded an "mhachain" plugin into the transducers
+# plugin to process the calibrated signal.  The configuration settings
+# of this mhachain can be accessed below the hierarchy mha.mhachain.
+# An mhachain plugin can load several plugins in the specified order,
+# where each plugin processes the output signal of the previous
+# plugin.  Child plugins are loaded into an mhachain by assigning to
+# its "algos" variable a vector of strings, where each string is the
+# name of one child plugin.  Here, we load two plugins, an adaptive
+# differential microphone (adm), which is set to be non-adaptive,
+# and an overlapadd plugin.
+#
+# list of plugins
+# vector<string>
+mha.mhachain.algos = [adm overlapadd]
+
+# parser "mha.mhachain.adm":
+#
+# Adaptive differential microphone
+#
+# The adm plugin implements one or more independent adaptive
+# differential microphones by combining the signal from two
+# omnidirectional microphones (cf. Elko 1985).  In hearing aids, the
+# adaptive differential microphone algorithm can be applied to combine
+# the signal of two distinct omnidirectional microphones inside a
+# single hearing aid device, a front microphone and a rear microphone.
+# The adaptive algorithm is then used to steer a spatial zero so that
+# the sound source with the highest intensity in the rear hemisphere
+# of the hearing aid wearer's head is attenuated.
+#
+# The adm plugin needs to know which audio channels should be combined
+# to form each computed adaptive differential microphone, because
+# there is no default ordering of 4 channels.  With the following
+# assignments, we specify that the ordering (i.e. which microphone is
+# connected to which sound card channel) is in this case:
+# - channel index 0 = front microphone on the left hearing aid device
+# - channel index 1 = front microphone on the right hearing aid device
+# - channel index 2 = rear microphone on the left hearing aid device
+# - channel index 3 = rear microphone on the right hearing aid device
+# Both left channels will be combined by the ADM to form an adaptive
+# differential microphone. Independently, the same will be done for
+# both right channels.
+#
+# Channel indices for front microphones
+# vector<int>:[0,[
+mha.mhachain.adm.front_channels = [0 1]
+# Channel indices for rear microphones
+# vector<int>:[0,[
+mha.mhachain.adm.rear_channels = [2 3]
+
+# The adaptive differential microphone algorithm needs to know the
+# physical distance between front and rear microphone.  The physical
+# distance is given in meters for each microphone pair in the
+# following vector variable.  The unit here is meters even though
+# typical distances are more in the range of millimeters, because in
+# the MHA configuration we prefer that physical quantities be
+# specified in SI units whenever possible.
+#
+# distance between front and rear microphones
+# front-mid 0.0076m + mid-rear 0.0073m Kayser et al. 2009
+mha.mhachain.adm.distances = [0.0149 0.0149]
+
+# Here we set the plugin to be non-adaptive.
+mha.mhachain.adm.beta = 0.5
+
+# The adaptation process of this adaptive differential microphone
+# algorithm adapts on low-pass filtered signals.  This variable
+# determines the filter order used for the low-pass filter.  Higher
+# filter orders result in better spatial adaptation.
+#
+# Filter order of FIR lowpass filter
+# int:[46,128]
+mha.mhachain.adm.lp_order = 128
+
+# The output signal of the adaptive differential microphone shows a
+# comb filter effect with regular notches in the spectrum.  For
+# typical microphone distances in the order of 1cm, only the lowest
+# notch is relevant for speech spectrum.  To compensate the lowest
+# notch, a filter is applied that amplifies low frequencies.  This
+# variable specifies the filter order of this filter. Higher filter
+# orders result in better output signal quality.
+#
+# Filter order of FIR comb compensation filter
+# int:[46,128]
+mha.mhachain.adm.decomb_order = 128
+
+# Adaptive differential microphones combine the signal from two audio
+# input channels into a single audio output channel.  Even with the
+# adm plugin in the signal path, users may want to switch from active
+# directional filtering to omnidirectional microphone and back,
+# depending on the acoustical environment they find themselves in.  By
+# changing this variable at run time, users can select what the output
+# of the adm plugin should be:
+#
+# - For bypass = 0, the adm will not be bypassed, which means it will
+#   carry out its adaptive directional filtering.
+# - For bypass = 1, adm plugin will output the audio signals from the
+#   front microphones without modification.
+# - For bypass = 2, adm plugin will output the audio signals from the
+#   rear microphones without modification.
+#
+# In all three cases, the number of output channels will be the same,
+# namely, half the number of input channels.
+#
+# if 1, output front microphones directly, if 2, output rear microphones
+# int:[0,2]
+mha.mhachain.adm.bypass = 0
+
+# parser "mha.mhachain.overlapadd":
+#
+# overlapadd is one of the MHA plugins that perform conversion between
+# time domain and spectral domain as a service for algorithms that
+# process a series of short time fourier transform signals.  In this
+# way, not every MHA plugin that processes spectral signal has to
+# perform its own spectral analysis. overlapadd performs both, the
+# forward and the backward transform, and can load another MHA plugin
+# which analyses and modifies the signal while in the spectral domain.
+# The plugin performs the standard process of collecting the input
+# signal, windowing, zero-padding, fast fourier transform, inverse
+# fast fourier transform, additional windowing, and overlap-add time
+# signal output.
+#
+# The hop size, how much the analysis window is advanced from one
+# processing invocation to the next, is not controlled by the
+# overlapadd plugin itself, but is determined by the number of audio
+# samples per channel and processing block.  In this example
+# configuration, the hop size is determined by the "fragsize" setting
+# of the MHA itself.  This setting can be found near the top of this
+# configuration file.
+#
+# All other common overlap-add (OLA) and weighted overlap-add (WOLA)
+# settings can be configured by setting the configuration variables of
+# this overlapadd plugin.
+#
+# Waveform to spectrum overlap add and FFT method.
+# Audio data is collected up to wndlen, than windowed with
+# the given window function, zero padded up to fftlength
+# (symmetric zero padding or asymmetric zero padding possible),
+# and Fast-Fourier-transformed.
+# All parameter changes take effect after the next prepare call.
+
+# The overlapadd plugin again loads one plugin that processes the
+# signal in the spectral domain.  The plugin loaded here will receive
+# the STFT signal and produce a possibly modified version of the STFT
+# signal, which is then subjected to inverse FFT transform by the
+# overlapadd plugin and finally the overlap-add operation is performed
+# to produce the time-domain output signal.
+#
+# In this configuration, we use again an mhachain plugin to process
+# the signal.  Note that mhachain was used before in this
+# configuration file to form a signal processing chain of two
+# algorithms that pass on time-domain signal.  Here, we want it to
+# form a chain of algorithms that pass on spectral STFT signal to each
+# next plugin.  Some plugins in the MHA, like mhachain, can adapt to
+# the domain of the input signal that they receive.  Should you happen
+# to configure a plugin to be loaded at a place where it cannot
+# process the input signal that it receives, that plugin will raise an
+# error, and processing cannot start.
+#
+# Plugin name
+# string
+mha.mhachain.overlapadd.plugin_name = mhachain
+
+# The FFT length, in samples, to use for spectral analysis.  The FFT
+# length must be at least as large as the analysis window length,
+# which is configured later.  Note that for efficient FFT computation
+# the FFT length should be a product of powers of small primes.  The
+# openMHA uses MIT's FFTW library version 2 internally, which supports
+# efficient analysis also for small primes other than 2, therefore,
+# you are not restricted to powers of 2 in the choice of FFT length.
+#
+# FFT length int:[1,]
+mha.mhachain.overlapadd.fftlen = 256
+
+# parser "mha.mhachain.overlapadd.wnd":
+#
+# The window properties are specified in the sub-hierarchy wnd.
+#
+# Window type.
+#
+# The data type of the variable wnd.type is keyword_list.  The
+# variable offers a choice of predefined symbolic names, one of which
+# can be selected.  Most window types offered here should be
+# self-explanatory for users with a signal processing background.
+# Only the "user" window is a special case where the the window shape
+# can be specified sample-by-sample by the user.  For the example
+# configuration here we use the hanning window.
+#
+# keyword_list:[rect hanning hamming blackman bartlett user]
+mha.mhachain.overlapadd.wnd.type = hanning
+
+# If wnd.type above is user, then the window shape would have to be
+# specified here sample-by-sample in the vector wnd.user.  The value
+# of each sample would typically between 0 and 1.
+#
+# User provided window (used if window type==user).
+# vector<float>
+mha.mhachain.overlapadd.wnd.user = []
+
+# The window length, in samples.  The window length should be at least
+# as long as the hop size (determined by the fragsize setting outside
+# of the overlapadd plugin), and must be at most as long as the FFT
+# length.  A typical value would be for the window size to be either
+# exactly two (like here) or four times the hop size, to achieve 50%
+# or 75% overlap, respectively.  If the signal is not only analyzed in
+# the spectral domain, but also modified with frequency-dependent
+# gains, it is recommended to choose the window length shorter than
+# the FFT length to have some zero padding to pick up the time-domain
+# convolution from the corresponding frequency-domain modifications.
+#
+# window length/samples
+# int:[1,]
+mha.mhachain.overlapadd.wnd.len = 128
+
+# If the fft length is greater than the window length, then this
+# variable determines the relative placement of the window inside the
+# fft analysis buffer.
+#
+# window position
+# (0 = beginning, 0.5 = symmetric zero padding, 1 = end)
+# float:[0,1]
+mha.mhachain.overlapadd.wnd.pos = 0.5
+
+# In common overlap-add processing, the window would be applied as an
+# analysis window before transforming to the frequency domain.
+# However, there are other use cases (namely WOLA, weighted
+# overlap-add), where one commonly restricts the resynthesized time
+# signal that is produced by the inverse FFT with a synthesis window
+# to the original extent of the analysis window to restrict filter
+# "ringing".  You would usually split one of the common analysis
+# window used in overlap-add processing, by applying an exponent of
+# 0.5 to all the window samples and apply the analysis window before
+# the FFT and apply the synthesis window after the inverse FFT.  Note
+# that this is not commonly done in hearing aid signal processing, but
+# the MHA supports it should you need it.
+#
+# An exponent of 1 here means that the window is completely applied
+# before the FFT is performed.  Values lesser than one mean that all
+# window weights are exponentiated by this exponent (named wnd.exp
+# here) before the weights are applied to the input signal. Then, the
+# exponent (1-wnd.exp) is applied to the window weights before it is
+# applied as a synthesis window to the time signal that is produced by
+# the inverse FFT.
+#
+# If you perform standard overlap-add processing (OLA), and not
+# weighted overlap-add (WOLA), then leave this at its default value,
+# 1.
+#
+# window exponent to be applied to all elements of window function
+# float
+mha.mhachain.overlapadd.wnd.exp = 1
+
+# parser "mha.mhachain.overlapadd.zerownd":
+#
+# The settings in the sub-parser "zerownd" define a weighting
+# operation performed on the regions of the FFT buffer that are
+# pre-filled with the zero-padding.  If the signal is modified in the
+# spectral domain, then these regions of the FFT buffer usually
+# contain non-zero signal samples after the inverse FFT has been
+# performed.  This is caused by the convolution with the impulse
+# response that corresponds to the spectral changes that the spectral
+# algorithms have performed.
+#
+# If the effective impulse response exceeds the length of the
+# zero-padding regions in the FFT buffer, then this will cause
+# temporal aliasing effects that may be perceptible to the hearing
+# impaired user.  To improve the perceptual consequences, one might
+# apply a post-window to attenuate the signal energy in the
+# zero-padding area.  You can choose the shape of this post-window
+# with the configuration setting zerowind.type. This window will be
+# split in two and each part applied to the respective zero-padding
+# regions at the beginning and at the end of the FFT buffer.  Note
+# that a rectangular window will have a weight of one everywhere and
+# therefore will not affect these regions and will not improve the
+# temporal aliasing artifacts.  The default setting is a rectangular
+# window with no effect.
+#
+# zero padding post window type
+# Window type.
+# keyword_list:[rect hanning hamming blackman bartlett user]
+mha.mhachain.overlapadd.zerownd.type = rect
+
+# If the window type selected in zerownd.type is "user", then the weigths
+# of the desired window have to be specified here.
+#
+# User provided window (used if window type==user).
+# vector<float>
+mha.mhachain.overlapadd.zerownd.user = []
+
+# parser "mha.mhachain.overlapadd.smoothgains_bridge.mhachain":
+#
+# This mhachain plugin instance forms a signal processing chain in the
+# spectral domain: Its input signal is the STFT signal produced by
+# the overlapadd plugin, and its output signal is processed by the
+# same overlapadd instance to resynthesize it to a time domain signal.
+#
+# MHA Chain
+#
+# The plugins used to form a signal processing chain are loaded by the
+# mhachain plugin when the assignment to the configuration parameter
+# algos is executed.  This is a vector of strings, where the vector
+# value is delimited by square brackets, and the vector's elements are
+# separated by spaces.
+
+# Add smoothgains_bridge
+mha.mhachain.overlapadd.plugin_name = smoothgains_bridge
+mha.mhachain.overlapadd.smoothgains_bridge.plugin_name = mhachain
+
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.algos = [fftfilterbank dc combinechannels]
+
+# Use default mode
+mha.mhachain.overlapadd.smoothgains_bridge.mode = linear_phase
+
+# parser "mha.mhachain.overlapadd.smoothgains_bridge.mhachain.fftfilterbank":
+#
+# FFT based filterbank with overlapping filters
+#
+# For the dynamic compression which adapts the signal levels in the
+# different frequency bands for better audibility of the hearing
+# impaired opemMHA users, the signal has to be split into frequency
+# band. We do this here with the help of the MHA plugin fftfilterbank,
+# which separates our (here) 2 broadband audio channels and produces
+# (here) 2*9 narrowband audio channel, with 9 frequency bands
+# produced for each input broadband audio channel.
+#
+# FFT filterbank is not limited to 2 input channels, the above
+# paragraph just uses the current settings used here as an example.
+
+# fftfilterbank groups sets of FFT bins into frequency bands.
+#
+# Further below we will specify the center frequencies of these frequency
+# bands.  Here, we specify in what units we want to give the
+# frequencies below.  The default unit to specify frequencies in the
+# MHA is Hertz [Hz], but at some places, users have the choice of
+# selecting different frequency units.  Here, we choose that we want
+# to specify the frequencies in Hertz.
+#
+# Frequency unit
+# keyword_list:[Hz kHz Oct Oct/3 Bark Erb ERB_Glasberg1990]
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.fftfilterbank.unit = Hz
+
+# The configuration setting f of the fftfilterbank plugin expects a
+# vector with the center frequencies of the individual frequency
+# bands. The unit for the frequencies is Hertz.
+#
+# Frequencies
+# vector<float>
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.fftfilterbank.f = [177 297 500 841 1414 2378 4000 6727 11314]
+
+# The frequency bands that the fftfilterbank plugin produces can have
+# different shapes along the frequency axis.  The shapes and also the
+# cross-over frequencies between adjacent frequency bands can be
+# computed on different frequency scales, e.g. linear or logarithmic
+# scales.  Here we choose the logarithmic frequency scale.
+#
+# frequency scale of filter bank
+# keyword_list:[linear bark log erb ERB_Glasberg1990]
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.fftfilterbank.fscale = log
+
+# Frequency bands in the fftfilterbank can have different shapes
+# along the frequency axis.  Here we select a rectangular shape, which
+# also has the effect that frequency bands will not overlap,
+# i.e. every frequency bin is part of only exactly one frequency band.
+#
+# filter overlap type
+# keyword_list:[rect linear hanning exp gauss]
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.fftfilterbank.ovltype = rect
+
+# Above, when setting the configuration variable f, we used center
+# frequencies.  We could also have specified the edge frequencies if
+# we did the respective setting here.  When we specify center
+# frequencies, then the cross-over frequencies between adjacent
+# frequency bands are computed as the mean between the adjacent center
+# frequencies on the frequency scale specified by the variable fscale.
+# Also, in center frequency mode, the lowest frequency band always
+# extends to frequency 0Hz, while the highest frequency band always
+# extends to the Nyquist frequency.
+#
+# keyword_list:[center edge]
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.fftfilterbank.ftype = center
+
+# parser "mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc":
+#
+# dynamic compression
+#
+# Our standard dynamic compression algorithm measures the input sound
+# level in each frequency band and looks up the gain to be applied in
+# a gain table, and applies the gain to the signal in each respective
+# band.
+
+# Dynamic compression works by amplifying the signal with gains that
+# depend on the level of the input signal itself.  Multi-band dynamic
+# compression performs input signal level measurement in each
+# frequency band to deduce the gain applicable to the respective
+# frequency band.  Applicable gains would usually be higher for low
+# input levels, and lower for high input levels, to compress the
+# dynamimc range of the input signal into a smaller dynamic range at
+# the output of the compressor.
+#
+# Because the applicable gain depends on the frequency band as well as
+# on the input level, we use a 2-dimensional matrix to specify
+# applicable gains. The gaintable matrix has one row of gains for each
+# frequency band from the left audio channel, followed by one row of
+# gains for each frequency band from the right audio channel.  The
+# gains given are in dB.  Rows are enclosed by square brackets and
+# separated by semicola.  The entire matrix is enclosed in an
+# additional pair of square brackets.
+#
+# The first element in each row (i.e., taken together, the first
+# column) specifies the gain in dB to be applied if the input level in
+# the respective frequency band is equal to the value of the gtmin
+# element given for that respective band (see gtmin description
+# further below).
+#
+# The following elements in each row specify the gains in dB to be
+# applied for other input values, where the input level difference
+# between the individual elements in each row of the matrix is
+# determined by the value of gtstep for the respective band (see
+# gtstep description further below).
+#
+# This way, each row specifies the gains to be applied to the
+# respective frequency bands for certain discrete input levels.  The
+# actual input levels of the signal will regularly be different from
+# any of these discrete input levels.  Therefore, the gain values in
+# the rows are interpolated as well as extrapolated.
+#
+# The gain values that we use here in this example corrects the sound
+# perception for a hearing impaired listener with a very uncommon
+# mid-frequenc hearing loss.  Users of the openMHA may change the
+# values given here using their own rationale to help hearing-impaired
+# users.
+#
+# Note that we do not apply gains to the highest frequency bands here
+# on both sides (9th and 18th row).  Having the highest frequency band
+# here at all is just a trick to limit the extent of the
+# second-highest frequency band, so that it does not extend up to the
+# Nyquist frequency.
+#
+# gaintable data in dB gains
+# matrix<float>
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.gtdata = {{ gtdata }}
+
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.log_interp = yes
+
+# Vector of input sound pressure levels for which the gains in the
+# leftmost column of the matrix "gtdata" above should be applied.
+# Each input sound level given here belongs to a different frequency
+# band. If only one value is given here, then this only value will
+# apply to all matrix rows / frequency bands.
+#
+# input level for first gain entry in dB SPL
+# vector<float>
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.gtmin = [-10]
+
+# Vector of step sizes in dB between discrete sound pressure levels
+# that determine the supporting points in the mapping from input sound
+# levels to applicable gains in matrix "gtdata" above.  Each entry in
+# this vector specifies the step size for a different row of gtdata.
+# If only one value is given here, then this only value will apply to
+# all rows / frequency bands.
+#
+# Each input sound level given here belongs to a different frequency
+# band. If only one value is given here, then this only value will
+# apply to all frequency bands.
+#
+# level step size in dB
+# vector<float>
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.gtstep = [1]
+
+# The dynamic compressor employs a common attack/decay low-pass filter
+# to determine the input level.  This vector describes the attack time
+# constants.  Each element corresponds to one frequency band. If only
+# one value is given here, then this only value will apply to all
+# frequency bands.
+#
+# attack time constant in s
+# vector<float>
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.tau_attack = [0.02]
+
+# The dynamic compressor employs a common attack/decay low-pass filter
+# to determine the input level.  This vector describes the decay or
+# release time constants.  Each element corresponds to one frequency
+# band. If only one value is given here, then this only value will
+# apply to all frequency bands.
+#
+# decay time constant in s
+# vector<float>
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.tau_decay = [0.1]
+
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.tau_rmslev = [0.1]
+
+# Name of fftfilterbank plugin.  Used to extract frequency information.
+# string
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.fb = fftfilterbank
+
+# The fftfilterbank that splits the broadband channels into frequency
+# bands for this compressor outputs the frequency bands as separate
+# audio channels. Without additional knowledge, the dynamic compressor
+# cannot determine whether an 18 channel input signal that it receives
+# has been generated from 2 broadband channels that have been split
+# into 9 bands each (like we do in this example), or maybe from 3
+# broadband channels that have been split into 6 bands each.  The
+# following setting tells the compressor the name of an algorithm
+# communication variable where the fftfilterbank has stored
+# information about the original number of broadband channels.
+#
+# name of audio channel number variable (empty: broadband)
+# string
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.chname = fftfilterbank_nchannels
+
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.dc.bypass = no
+
+# parser "mha.mhachain.overlapadd.smoothgains_bridge.mhachain.combinechannels":
+#
+# Channel combiner
+#
+# The fftfilterbank has split the signal into frequency bands.  To be
+# able to combine the frequency bands back into broadband channels,
+# the combinechannels plugin needs to know how many broadband channels
+# have been split into bands.  The fftfilterbank that splits the
+# broadband channels into frequency bands for this compressor outputs
+# the frequency bands as separate audio channels. Without additional
+# knowledge, the combinechannels plugin cannot determine whether an 18
+# channel input signal that it receives has been generated from 2
+# broadband channels that have been split into 9 bands each (as it is
+# the case in this example), or maybe from 3 broadband channels that
+# have been split into 6 bands each.  The following setting tells the
+# combinechannels plugin how many broadband output channels it should
+# regenerate.
+#
+# Number of output channels
+# int:[1,]
+mha.mhachain.overlapadd.smoothgains_bridge.mhachain.combinechannels.outchannels = 2
+
+# parser "io":
+#
+# Sound file IO client.
+#
+# MHA supports different audio back-ends: Sound can come from and go
+# to either
+# - sound cards,
+# - the Jack audio server,
+# - sound files, or
+# - the network.
+#
+# Users select the desired audio backend by loading the respective MHA
+# IO library into the MHA process. In this example, we we have loaded
+# the IO library that reads from and writes to sound files, see the
+# assignment to "iolib" above.
+
+# This variable is used to select the input sound file.  The file name
+# of the sound file to use as the input sound signal to the MHA is
+# written to this variable.  The file name can contain either the
+# absolute path to the sound file, or the relative path (relative to
+# the current working directory of the MHA process).
+#
+# Read from input files and write to files of same format.
+# Input sound file name
+# string
+io.in = {{ io_in }}
+
+# This variable is used to select the output sound file.  The file
+# name of the sound file to create and hold the output sound signal to
+# the MHA is written to this variable.  The file name can contain
+# either the absolute path to the sound file, or the relative path
+# (relative to the current working directory of the MHA process).
+#
+# Note that to ensure that the sound file was properly closed, the MHA
+# should be told to change to the release start (cmd=release), or it
+# should be told to exit (cmd=quit).
+#
+# Output sound file name
+# string
+io.out = {{ io_out }}
+
+# Local Variables:
+# indent-tabs-mode: nil
+# coding: utf-8-unixs
+# End:
diff --git a/tests/test_data/scenes/S06001_mix_CH0.wav b/tests/test_data/scenes/S06001_mix_CH0.wav
new file mode 100644
index 000000000..f28ddd74c
Binary files /dev/null and b/tests/test_data/scenes/S06001_mix_CH0.wav differ
diff --git a/tests/test_data/scenes/S06001_mix_CH1.wav b/tests/test_data/scenes/S06001_mix_CH1.wav
new file mode 100644
index 000000000..a46505bcd
Binary files /dev/null and b/tests/test_data/scenes/S06001_mix_CH1.wav differ
diff --git a/tests/test_data/scenes/S06001_mix_CH2.wav b/tests/test_data/scenes/S06001_mix_CH2.wav
new file mode 100644
index 000000000..7770daaf4
Binary files /dev/null and b/tests/test_data/scenes/S06001_mix_CH2.wav differ
diff --git a/tests/test_data/scenes/S06001_mix_CH3.wav b/tests/test_data/scenes/S06001_mix_CH3.wav
new file mode 100644
index 000000000..51bd01276
Binary files /dev/null and b/tests/test_data/scenes/S06001_mix_CH3.wav differ
diff --git a/tests/test_data/scenes/S06001_mixed_CH0.wav b/tests/test_data/scenes/S06001_mixed_CH0.wav
new file mode 100644
index 000000000..f28ddd74c
Binary files /dev/null and b/tests/test_data/scenes/S06001_mixed_CH0.wav differ
diff --git a/tests/test_data/scenes/S06001_mixed_CH1.wav b/tests/test_data/scenes/S06001_mixed_CH1.wav
new file mode 100644
index 000000000..a46505bcd
Binary files /dev/null and b/tests/test_data/scenes/S06001_mixed_CH1.wav differ
diff --git a/tests/test_data/scenes/S06001_mixed_CH2.wav b/tests/test_data/scenes/S06001_mixed_CH2.wav
new file mode 100644
index 000000000..7770daaf4
Binary files /dev/null and b/tests/test_data/scenes/S06001_mixed_CH2.wav differ
diff --git a/tests/test_data/scenes/S06001_mixed_CH3.wav b/tests/test_data/scenes/S06001_mixed_CH3.wav
new file mode 100644
index 000000000..51bd01276
Binary files /dev/null and b/tests/test_data/scenes/S06001_mixed_CH3.wav differ
diff --git a/tests/test_data/scenes/S06001_target_CH0.wav b/tests/test_data/scenes/S06001_target_CH0.wav
new file mode 100644
index 000000000..68095fb6a
Binary files /dev/null and b/tests/test_data/scenes/S06001_target_CH0.wav differ
diff --git a/tests/test_data/scenes/S06001_target_CH1.wav b/tests/test_data/scenes/S06001_target_CH1.wav
new file mode 100644
index 000000000..028e7be12
Binary files /dev/null and b/tests/test_data/scenes/S06001_target_CH1.wav differ
diff --git a/tests/test_data/scenes/S06001_target_CH2.wav b/tests/test_data/scenes/S06001_target_CH2.wav
new file mode 100644
index 000000000..e2be85451
Binary files /dev/null and b/tests/test_data/scenes/S06001_target_CH2.wav differ
diff --git a/tests/test_data/scenes/S06001_target_CH3.wav b/tests/test_data/scenes/S06001_target_CH3.wav
new file mode 100644
index 000000000..e1c1c5bf7
Binary files /dev/null and b/tests/test_data/scenes/S06001_target_CH3.wav differ
diff --git a/tests/test_data/scenes/S06001_target_anechoic.wav b/tests/test_data/scenes/S06001_target_anechoic.wav
new file mode 100644
index 000000000..71f6bcfaf
Binary files /dev/null and b/tests/test_data/scenes/S06001_target_anechoic.wav differ