From c140ca25b9792c4a736687dd59bdfde3edb0fc47 Mon Sep 17 00:00:00 2001 From: boblark Date: Fri, 29 Jan 2021 09:16:48 -0800 Subject: [PATCH] Add AudioEffectCompressor2_F32 --- AudioEffectCompressor2_F32.cpp | 148 ++++++++++++ AudioEffectCompressor2_F32.h | 225 +++++++++++++++++++ OpenAudio_ArduinoLibrary.h | 1 + examples/testCompressor2/OutInDefault.gif | Bin 0 -> 26857 bytes examples/testCompressor2/OutInSquelch.gif | Bin 0 -> 26610 bytes examples/testCompressor2/testCompressor2.ino | 173 ++++++++++++++ 6 files changed, 547 insertions(+) create mode 100644 AudioEffectCompressor2_F32.cpp create mode 100644 AudioEffectCompressor2_F32.h create mode 100644 examples/testCompressor2/OutInDefault.gif create mode 100644 examples/testCompressor2/OutInSquelch.gif create mode 100644 examples/testCompressor2/testCompressor2.ino diff --git a/AudioEffectCompressor2_F32.cpp b/AudioEffectCompressor2_F32.cpp new file mode 100644 index 0000000..711dd11 --- /dev/null +++ b/AudioEffectCompressor2_F32.cpp @@ -0,0 +1,148 @@ +/* AudioEffectCompressor2_F32.cpp + * + * Bob Larkin W7PUA 22 January 2021 + * See AudioEffectCompressor2_F32.h for details + * + * MIT License. Use at your own risk. + */ +#include "AudioEffectCompressor2_F32.h" + + /* See https://github.com/Tympan/Tympan_Library/blob/master/src/AudioCalcGainWDRC_F32.h + * Dr Paul Beckmann + * https://community.arm.com/tools/f/discussions/4292/cmsis-dsp-new-functionality-proposal/22621#22621 + * Fast approximation to the log2() function. It uses a two step + * process. First, it decomposes the floating-point number into + * a fractional component F and an exponent E. The fraction component + * is used in a polynomial approximation and then the exponent added + * to the result. A 3rd order polynomial is used and the result + * when computing db20() is accurate to 7.984884e-003 dB. Y is log2(X) + */ + float v2DB_Approx(float volts) { + float Y, F; + int E; + // This is the approximation to log2() + F = frexpf(volts, &E); // first separate power of 2; + // Y = C[0]*F*F*F + C[1]*F*F + C[2]*F + C[3] + E; + Y = 1.23149591; //C[0] + Y *= F; + Y += -4.11852516f; //C[1] + Y *= F; + Y += 6.02197014f; //C[2] + Y *= F; + Y += -3.13396450f; //C[3] + Y += E; + // Convert to dB = 20 Log10(volts) + return 6.020599f * Y; // (20.0f/log2(10.0))*Y; + } + + // Accelerate the powf(10.0,x) function (from Chip's single slope compressor) + float pow10f(float x) { + //return powf(10.0f,x) //standard, but slower + return expf(2.30258509f*x); //faster: exp(log(10.0f)*x) + } + +// begin() +void AudioEffectCompressor2_F32::begin(void) { + for(int kk =0; kk<5; kk++) // Keeps division out of update() + slope[kk] = 1.0f/curve0.compressionRatio[kk]; + + outKneeDB[0] = curve0.marginDB; // Start at top + for(int kk=1; kk<5; kk++) { + outKneeDB[kk] = outKneeDB[kk-1] - (curve0.kneeDB[kk-1] - + curve0.kneeDB[kk])/curve0.compressionRatio[kk-1]; + } + + firstIndex = 4; // Start at bottom + for(int kk=4; kk>0; kk--) { + if(curve0.kneeDB[kk] >= -500.0) { + firstIndex = kk; + break; + } + } + /* for(int kk=0; kk<5; kk++) { + Serial.print(kk); + Serial.print(" <--k outKneeDB[k]--> "); + Serial.println(outKneeDB[kk]); + } + Serial.print("firstIndex--> "); + Serial.println(firstIndex); + */ + } + + // update() + void AudioEffectCompressor2_F32::update(void) { + float vAbs, vPeak; + float vInDB = 0.0f; + float vOutDB = 0.0f; + float targetGain; + + // Receive the input audio data + audio_block_f32_t *block = AudioStream_F32::receiveWritable_f32(); + if (!block) return; + // Allocate memory for the output + audio_block_f32_t *out_block = AudioStream_F32::allocate_f32(); + if (!out_block) { + release(block); + return; + } + + // Find the smoothed envelope, target gain and compressed output + vPeak = vPeakSave; + for (int k=0; klength; k++) { + vAbs = (block->data[k] >= 0.0f) ? block->data[k] : -block->data[k]; + if (vAbs >= vPeak) { // Attack (rising level) + vPeak = alpha * vPeak + (oneMinusAlpha) * vAbs; + } else { // Release (decay for falling level) + vPeak = beta * vPeak; + } + // Convert to dB + // At all levels and quite frequency flat, this under estimates by about 1.05 dB + vInDB = v2DB_Approx(vPeak) + 1.05f; + if(vInDB > vInMaxDB) vInMaxDB = vInDB; // For reporting back + + // Find gain point. Don't look below first segment firstIndex. + for(int kk=firstIndex; kk>=0; kk--) { + if( vInDB<=curve0.kneeDB[kk] || kk==0 ) { + vOutDB = outKneeDB[kk] + slope[kk]*(vInDB - curve0.kneeDB[kk]); + break; + } + } + // Convert the needed gain back to a voltage ratio 10^(db/20) + targetGain = pow10f(0.05f*(vOutDB - vInDB)); + // And apply target gain to signal stream from the delayed data. The + // delay buffer is circular because of delayBufferMask and length 2^m m<=8. + out_block->data[k] = targetGain * delayData[(k + in_index) & delayBufferMask]; + + if(printIO) { + Serial.print(block->data[k],6); + Serial.print("," ); + Serial.print(delayData[(k + in_index) & delayBufferMask],6); + Serial.print("," ); + Serial.println(targetGain); + } + + // Put the new data into the delay line, delaySize positions ahead. + // If delaySize==256, this will be the same location as we just got data from. + delayData[(k + in_index + delaySize) & delayBufferMask] = block->data[k]; + } + vPeakSave = vPeak; // save last vPeak for next time + sampleInputDB = vInDB; // Last values for get...() functions + sampleGainDB = vOutDB - vInDB; + // transmit the block and release memory + AudioStream_F32::release(block); + AudioStream_F32::transmit(out_block); // send the FIR output + AudioStream_F32::release(out_block); + // Update pointer in_index to delay line for next 128 update + in_index = (in_index + block->length) & delayBufferMask; + } // End update() + + // Sets a new compression curve by transferring structure + void AudioEffectCompressor2_F32::setCompressionCurve(struct compressionCurve *_cCurve) { + curve0.marginDB = _cCurve->marginDB; + curve0.offsetDB = _cCurve->offsetDB; + for(int kk=0; kk<5; kk++) { + // Also, adjust the input levels for offsetDB value + curve0.kneeDB[kk] = _cCurve->kneeDB[kk] - curve0.offsetDB; + curve0.compressionRatio[kk] = _cCurve->compressionRatio[kk]; + } + } diff --git a/AudioEffectCompressor2_F32.h b/AudioEffectCompressor2_F32.h new file mode 100644 index 0000000..56dd608 --- /dev/null +++ b/AudioEffectCompressor2_F32.h @@ -0,0 +1,225 @@ +/* + * AudioEffectCompressor2_F32.h + * + * Bob Larkin W7PUA 11 December 2020 + * + * This is a general purpose audio compressor block (C++ class). It works by determining + * the average input of the input signal, and based on a pre-determined curve, + * changes the gain going through the block. + * A good discussion is the Wikipedia page: + * https://en.wikipedia.org/wiki/Dynamic_range_compression + * This compressor includes up to 5 dB/dB line segments allowing for most of the + * features listed. These include + * Multi segment compression curves, up to 5 + * Limiting + * Approximation to "soft knees" + * Expansion for suppressing low-level artifacts + * Anticipation + * Scale offset for use such as hearing-aid audiology + * This is derived from the WDRC compressor. Chip Audette (OpenAudio) Feb 2017 + * Which was derived From: WDRC_circuit from CHAPRO from BTNRC: https://github.com/BTNRH/chapro + * As of Feb 2017, CHAPRO license is listed as "Creative Commons?" + * + * MIT License. Use at your own risk. + */ +/* Compressor #2. Amplifies input signals by varying amoounts depending + * on the signal level. This is controlled by up to 5 line segments specified + * by a point at the highest input level for the line along with a compression ratio + * (1/slope) for the line segment. This can provide limiting at the highest inputs + * by setting compressionRatio[0]=1000.0 (i.e., some big value). Expansion at the + * lw levels provides a squelch action, using a very small compression + * ratio like 0.01. + * + * A special case is the [0] segment, that continues at the same slope for inputs up + * to any level. For this the kneeDB[0] can be the expected 0.0 or other values + * on that line. The output level for kneeDB[0] is the input variable, marginDB. + * This allows gain control near clipping but below. marginDB is typically 1 or 2 dB. + * + Vout dB + | + | + 0.0 + kneeDB[0] + marg + kneeDB[1] @******************** + | @************ 1:compressionRatio[0] + | **** + | *** + | *** + | *** 1:compressionRatio[1] + | kneeDB[2] *** + | @*** + | * + | * + | * + | * + | * 1:compressionRatio[2] + | * + | * === Vout in dB vs. Vin in dB === + |* Three segment example + * Knees (breakpoints) are shown with '@' + *| compressionRatio[] are ratio of: input change (in dB):output change in dB + * | + * |________|___________________|____________________________|________ vIn dB + k1 k2 0.0 + + * The graph shows the changes in gain on a log or dB scale. A compressionRatio + * of 1 represents a constant gain with level. When the compressionRatio is greater + * than 1, say 2.0, the voltage gain is decreasing as the input level increases. + * + * vInDB refers to the time averaged envelope voltage. + * The zero reference is the full ADC range output. This is ±1.0 + * peak or 0.707 RMS in F32 terminology. + * + * The curve is for gainOffsetDB = 0.0. This parameter raises and lowers the + * input scale for the kneeDB[] parameter. + * + * Timing: For 44.1 kHz sample rate and 256 samples per update, the update( ) time + * runs 240 to 270 icroseconds using Teensy 3.6. + */ + +#ifndef _AUDIO_EFFECT_COMPRESSOR2_F32_H +#define _AUDIO_EFFECT_COMPRESSOR2_F32_H + +#include +#include + +// The following 3 defines are simplified implementations for common uses. +// They replace the begin() function that is otherwise required. +// See testCompressor2.ino example for how to use these defines. +// None of these support offsetting the input scale as done in Tympan. + +/* limiterBegin(pointerObject, float marDB, float linearInDB) has 2 segments. + * It is linear up to an input of linearInDB (typically -15.0f) and + * then virtually limits for higher input levels. The output level at + * this point is marDB, the margin to prevent clipping, like -2 dB. + * This is not a clipper with waveform distortion, but rather decreases + * the gain, dB for dB, as the input increases in the limiter region. + * pobject is a pointer to the INO AudioEffectCompressor2_F32 object. + * This function replaces begin() for the AudioEffectCompressor2_F32 object. + */ +#define limiterBegin(pobject, marDB, linearInDB) struct compressionCurve _curv={marDB,0.0f,{0.0,linearInDB,-1000.0f,-1000.0f,-1000.0f},{100.0,1.0f,1.0f,1.0f,1.0f}}; pobject->setCompressionCurve(&_curv); pobject->begin(); + +/* basicCompressorBegin has a 3 segments. It is linear up to an input linearInDB + * and then decreases gain according to compressionRatioDB up to an input -10 dB where it + * is almost limited, with an increase of output level of 1 dB for a 10 dB increase + * in input level. The output level at full input is 1 dB below full output. + * This function replaces begin() for the AudioEffectCompressor2_F32 object. + */ +#define basicCompressorBegin(pobject, linearInDB, compressionRatio) struct compressionCurve _curv={-1.0,0.0f,{0.0,-10.0f,linearInDB,-1000.0f,-1000.0f},{10.0f,compressionRatio,1.0f,1.0f,1.0f}}; pobject->setCompressionCurve(&_curv); pobject->begin(); + +/* squelchCompressorBegin is similar to basicCompression above, except that there is + * an expansion region for low levels. So, the call defines the four regions in + * terms of the input levels. squelchInDB sets the lowest input level + * before the squelching effect starts. */ +#define squelchCompressorBegin(pobject, squelchInDB, linearInDB, compressionInDB, compressionRatio) struct compressionCurve _curv={-1.0,0.0f,{0.0,compressionInDB,linearInDB,squelchInDB,-1000.0f},{10.0,compressionRatio,1.0f,0.1f,1.0f}}; pobject->setCompressionCurve(&_curv); pobject->begin(); + +// Basic definition of compression curve: +struct compressionCurve { + float marginDB; + float offsetDB; + float kneeDB[5]; + float compressionRatio[5]; +}; + +// --------------------------------------------------------------------------- + +class AudioEffectCompressor2_F32 : public AudioStream_F32 +{ +//GUI: inputs:1, outputs:1 //this line used for automatic generation of GUI node +//GUI: shortName: Compressor2 + public: + AudioEffectCompressor2_F32(void): AudioStream_F32(1, inputQueueArray) { + setAttackReleaseSec(0.005f, 0.100f); + } + + AudioEffectCompressor2_F32(const AudioSettings_F32 &settings): AudioStream_F32(1, inputQueueArray) { + //setSampleRate_Hz(settings.sample_rate_Hz); + setAttackReleaseSec(0.005f, 0.100f); + } + + virtual void update(void); + void begin(void); + void setCompressionCurve(struct compressionCurve*); + // A delay of 256 samples is 256/44100 = 0.0058 sec = 5.8 mSec + void setDelayBufferSize(int16_t _delaySize) { // Any power of 2, i.e., 256, 128, 64, etc. + delaySize = _delaySize; + delayBufferMask = _delaySize - 1; + in_index = 0; + } + void printOn(bool _printIO) { printIO = _printIO; } // Diagnostics ONLY. Not for general INO + float getCurrentInputDB(void) { return sampleInputDB; } + float getCurrentGainDB(void) { return sampleGainDB; } + float getvInMaxDB(void) { + float vRet = vInMaxDB; + vInMaxDB = -1000.0f; // Reset for next max measure + return vRet; + } + //convert time constants from seconds to unitless parameters, from CHAPRO, agc_prepare.c + void setAttackReleaseSec(const float atk_sec, const float rel_sec) { + // convert ANSI attack & release times to filter time constants + float ansi_atk = atk_sec * sample_rate_Hz / 2.425f; + float ansi_rel = rel_sec * sample_rate_Hz / 1.782f; + alpha = (float) (ansi_atk / (1.0f + ansi_atk)); + oneMinusAlpha = 1.0f - alpha; + beta = (float) (ansi_rel / (1.0f + ansi_rel)); + } + + private: + audio_block_f32_t *inputQueueArray[1]; + float delayData[256]; // The circular delay line for the signal + uint16_t in_index = 0; // Pointer to next block update entry + // And a mask to make the circular buffer limit to a power of 2 + uint16_t delayBufferMask = 0X00FF; + uint16_t delaySize = 256; + + float sample_rate_Hz = 44100; + float attackSec = 0.005f; // Q: Can this be reduced with the delay line added to the signal path?? + float releaseSec = 0.100f; + // This alpha, beta for 5 ms attack, 100ms release, about 0.07 dB max ripple at 1000 Hz + float alpha = 0.98912216f; + float oneMinusAlpha = 0.01087784f; + float beta = 0.9995961f; + + /* Definition of the compression curve. + * Input and output are normally referenced to the full scale range (-1.0 to 1.0 in float). + * The full scale point is called 0 dB. + * There are 5 slopes, specified by the top input level for each line segment (kneeDB[]) + * and the Compression Ratio (1/slope) of the segment (compressionRatio[]). + * These are numbered from the highest to the lowest allowing + * the number of segments to be adjusted, i.e., there is always a segment 0 + * but there may not be a segment 3 and 4, for instance. This becomes very flexible, + * as there can be, say, compression for top levels and expansion for very low levels. + * + * A special case is segment 0. On a plot of output dB vs input db, an input + * level of kneeDB[0] produces an output of marginDB. A typical marginDB might + * be -1.0 or -2.0. This margin allows controlling the gain without clipping in the DAC. + * + * This structure can have multiple curve structures like cCurve that can be used by + * cmpr1.setCompressionCurve(&cCurve); + * cmpr1.begin(); + * + * Unused segments can have knees like kneeDB[4] at, say -1000.0f. + * Values below -500 will slightly speed up the update() function. if the bottom + * two segments are not used, kneeDB[3] would also be set to -1000.0f amd so forth. + * + * Finally, there is a variable offsetDB that allows for a shift in the input scale. + * It simply shifts the definition input levels, in dB. + * This allows converting from DSP scales that have 0dB at full DSP scale + * to auditory scales such as are used in the Tympan library. An offsetDB=119.0 + * would allow all inputs to be in "SPL" units with a maximum input value of 119. + */ + struct compressionCurve curve0 = { -2.0f, 0.0f, // margin, offset + {0.0f, -10.0f, -20.0f, -30.0f, -1000.0f}, // kneeDB[] + { 100.0f, 2.0f, 1.5f, 1.0f, 1.0f} }; // compressionRatio + // VoutDB at each knee, needed to find gain; determined at begin(): + float outKneeDB[5]={-2.0f, -3.0f, -8.0f -978.0f, -978.0f}; + // slopes are 1/compressionRatio determined at begin() to save update{} time + float slope[5] = {0.01f, 0.5f, 0.666667f, 1.0f, 1.0f}; + + // Save time in update() by ignoring unused (low level) segments: + uint16_t firstIndex = 3; + float vPeakSave = 0.0f; + float vInMaxDB = -1000.0f; // Only for reporting + bool printIO = false; // Diagnostics Only + float sampleInputDB, sampleGainDB; +}; +#endif diff --git a/OpenAudio_ArduinoLibrary.h b/OpenAudio_ArduinoLibrary.h index 6c066d0..bfa29a5 100644 --- a/OpenAudio_ArduinoLibrary.h +++ b/OpenAudio_ArduinoLibrary.h @@ -8,6 +8,7 @@ #include "AudioControlTester.h" #include "AudioConvert_F32.h" #include "AudioEffectCompressor_F32.h" +#include "AudioEffectCompressor2_F32.h" #include "AudioEffectCompWDRC_F32.h" #include "AudioEffectEmpty_F32.h" #include "AudioEffectGain_F32.h" diff --git a/examples/testCompressor2/OutInDefault.gif b/examples/testCompressor2/OutInDefault.gif new file mode 100644 index 0000000000000000000000000000000000000000..584b552cabd34de5cf5fd59ab782b4b48b92ef84 GIT binary patch literal 26857 zcmV(`K-0fRNk%w1VXOkr0rvm^0RaJlfq_9mLBYYn0Re15L6IXNU!kF)Z*PSi9bt`) zqv7Gdb ziAhOG!otg`sj2Dd=_x5G85tRwnVI?d`MJ5dXJ=<&VWrvG*>!cTQBh~5rNCELS9NuD zot?caE0GNig#`tIRaK#tmAQq5vu$mv5fO)eez7$*m94GAjg7ZGJ(o>Qo@HgHEiIBq zMMonedwY9(B_)r^$lqIwY6ho zVAeH9fIH8nMrm6i4N^;1(*b8~Zhd$Fsl!wU<9US6bCRcjv~ci-RN zU0q!-FLO&vgnkfO8yg#&o16Rl`@6flX=!O=W2f8O+jn=ar>DVLSy^{? zcb}iV4-bY12ZC2uqL-JuhljLpZ>tj%hc`EskB_%MKbcQYpJ!*OFE5fuM@M~qeJ3Z6 z%gfKVx5pbBio3hXA0LZ9KR*Wt2Zx7;$H&K~r>E!V=eM`FWo2b2Cnwj}*B2KTH#awz zmzVeV_f=I@A^8LV00000EC2ui0IUMf0S5^G03it+NU)&6g9s1OOUSUH!-ohLLYzpk zqQr_AGb+@`vE#*#ASZqdNs{5nk|+zFOv!R3OO!5Ol3bVwfX$mYbL!m5v!~CWK!XY$ zO0=laqezn~UCOkn)2C3QN}Wozs@1Dlg(g}EK&IEPV8eXJUHb|iOt`S&!-x|r2KzVg;>VC9OP)-*vSo*jFKgb+xwGfb zpfzR=O}ez{)2LI+9j&^x>({Vj$7U_Nw(Z-va}S0~&#~^`z=I1PUXnKPwwrW4Q>JVP zl4G#%$!SEZN4^noKsvFh50VZ~o@x>Q+zz1oLv1%lad@`M4aG&aY63{rk$m^>;T<8HqDWb5cO3UApjFH zWFUh7RY+iB1Fl$>8>84Hf-1EvvdRx``O}sjkcdEt4fad}jZK|&q=PD|-~!2rB?<)K zc{UNE$}KuKM1MOkc0RJch4G54tl8-XTKYf7m2>_si5^5--iY^L3qmM>9sZEt$n(3yUej2K(rlN{5t55oi z=c@`I;Y1?Oy6YxdZJz8^2r-t2kSc8C#0CQa+ce}&0^6)6c|CBzflZB=N!}eDLUK>c z0N@EgA`%G1icLf)W0QDK0}%Dp0>LaZ%|jPm&^$JcVGtuWaRSL8HgO=(5CE{EFulnx z`|C})A~Y>QH!FLzO-eKW-D9|X05Hnc063r|B$97ZGEchitmO*qw1OAUZ{Pg;Hx=Hw~E2GVt_Y*xy?vqXnY z@$Qyhck-1IJbfCyhBearl913G1jWoH~6pg|}Oyf)~()xi8i51ABi0o!fiO;9T_RCJ zh6jM+9WQyyYo5UWqBlL8RPTBi)E@V|2fk?tfqX+Uq51&8zWUuSe^!j&{O0vSAo_0~ z0JI4|7~zb4*rbEO8w>E#SP~w}10fx-NjwIUuZ0M#8IX|R(wtX>3sOoTHo%p_z9*14 zTCEg_l-el#p@*0`0w0Q)hVvQ;fJa8sd5|#V90gKG@({8hboiA#rh$+r5NlX|>c_4C zP>%{Si9!H4g+QtV0Q7m#Ce#Aq`wU40M3zF4I#PuS2f_e8WMdC&u!%Nk*tmDqkc+QG zh#TQ3M>^Vs9(T;+wfK0!Wn}`8Hp#{y2T}{D`4X6vw4@{10cYduHNrD59RuX>tc4=|E1(fP_L~p`&Z)Lop~(iYjcS zkPzrjHX2eQe3YY|`zU~rT2ii(rxg|KCu8EGSFhyj9|fsZJUMyI=eZ25wh+i8#=5LU z2!sLQ%qt|y2>`$%L=Tzh$0{Pr&dhH1rkSiJVdoiCNGyUwj=*a|a1k>|XOpy6r1V_$l9vfC&II>cAozfFo%X z6#)I?oAI>!RhuNXP>dx{Bj`Yf*#dx&9orup?qv@}XyS$Qu%$Cw|!h%Gw8wMj~)aWH(4ev0dV08u5tuugl}mFav>?@A%r$rMi&7vVS&Iw5hF+; z09KfZ2`UV#_^`2WdmTCd z$U|Pv5#Dy6F@PiM?4yu8?761-Zc9(QWM#+Vs&3_&=Na!nXidbU=L+F7r@__`jb|4pb7zHgvaFJ{S z;J}N8^s?MQh(svEVUiVy1hRo{T0CO}?vaKr_<<*7e1K5W7y&;5?r}m5XPOlk7oqohIzet&J%L)eDAy8CkME|30||qYCGZFCJ)0M4smd2is(j1`U^!)@{iAb zY$AVQ z5r8&8fCeZKIuQ?HP=OYBff$&98n}TR*nt&T3Sp2AAQ%Q9D1sjtf*=?VJ79t&h=M1` zf+OgGGB|@Yh=HYm2Q`?3I=F)zh=V-%gFr}wwh)9wScDmf2Qg@bK?s8`*n&*RgvdaF zO2~sxID#c;g-v*c6&Mf5FojLhjy5Uc({jp*oS)<1oOa$g6M~YIEZ&B0f?B0inxf3*ocn*C;>Wv4|6z)ZfJ;w zc!`#niG3&snAnM$_=%nvig?J0pje8Y_=u>OiiwC1wLpok_=>M+iiS83K>&-kc#Cu> zik;XD^Pr2e=!?K;h&pgxX~=+J5rB}Oevr@!NRWojpo-8KjlU?1LEr$r~m*ooD+kC<4G?-+>^T_>ewOizaE3AlVFU0FoVvjcWjq|ECvfD3bL57?X7vkuW)kD+!C-h?9w^ zlfd|qMA?&isFOUYlT-ag%Xrk7)^rZCQtS zIf+3@m3(Q5Z`qg<`Is=7m~r@&gISN|IFFZ^lj*pZhuN6^2#~!&duvFUlUSI6NS2%F zh-cZ9pLvdu`I>IYmaEB#b7`8mn2srlo4HwzE-9P9$%ZremjO8!f?1o6*pXw2mAnau zi&>Vjxrx#FnUWcg&FO}giJa0%jwz{~-sqdX7@V*F>6c4$6j0$)NY>p@;~dbV;EWN}+10 zni_hWDLRMYxSKhuqu}_PBFd4+Fr4LSqIZFy9-5JcDWp02oDnLYGpdhAxe9HWqZ#U= zjd+dSiKX8-jUh^-`$(V%0hlj=qCMJ^OWKoM3Zr-lrLn1?9Z97fiKRH&qj5Nm{b{Fn zdW~Nir2I&tMcS2hfut_Fk1U#wcIu>?37JvWu& zI-WHgx%AAv`1DX1vy11p$>Z-oTi-@?ZAStE>L8kMCo_Y$B z#OjODnyQp3o61^>U7C?{s-|38r?-lcrI@GjDzCcel8>sb;K;27;jOy&jMaLNX=l2>tlCMG4SR`U*^})m zr4I|OJ!`R@NUcpPv7(5v8LO|LXovi|kfGWZqZ+d0IIf=Lg4sHw6WsI=R(w%fPGI$J*yrySd@Tgw(*Td%*kxo6w7)_a|!o4q)RzbzWErW?1K zn7ZW4y8ns3$+^CHYm)%mxWLH3gd4Z>o1hd7v@Cg#+iQe>G_Zi%b5K5!m`-27mUH;OTOx9iE~Sdue+fj+_9E>o;FO4 zscDMfo5C6zj|m%}WK6L7%d}k#xwA;IYb>>c7{KcardC|Q{p!PN0mLs`iqp%vMJ$Ok ztC8h6m}lI*75l_cJct_qEXA2v#T`te_L#*6?6HG7!Zs|5LoCH&oTTBXtg0%=Ioq}} z?7oWZ#&6unIE=Q@8H+p&7IK*9S#17iYry8N*Yl^JexQLv{eh9Zxyo=^* zi}V?d!nv~|e9E&7znwVDn=GtF3Bzq#wH`^$Gds$p9L%Q7%yFE`-x-|7Y{yzl$-s)a z(d&r}{KmGNqBYvY$V#`J*r+!A%fO6>i#*JR=*Y%Qo7*YLcWlm=d&-~K#|{h421~-c zjJxNWyt){rQmoC}jL+Td&3-7y$o!eP*~iF?fb?d?aV$Y)6rb153P$3oTb-%wZkmY6AjY@?a+9L z(W>0L*$9c0%f2Ek)AGENKJAADUDBiqn_(Nc=L^<$yT&g4()ldYf>_hNskZP4(B-_v zqH4(&&4=TP)elP0E3Jw8DXoqvxk;_YOwVm z#oWTJI>Dy@-NORS#mf!Hc4(@{eGEZeu}OK`{+ZF!&EB{z*yByn^PRDX&6x}>+@Cth za?Q1mt=4^bsN+r9nfu-ioTU3{;9Nc4)}6?o?c6lI-75*tRr%en9Nu$X-*&y#=MCHA zt>8>~rcs@TM%m$PnA-}?+k;Khza5oCjh4d=-u;ch{|(@G$e{I2;PJ|bA1Tx}J&FrH z-wh7M*bUltDB2|%)-G=09bFuBz1(_uyC#m_3H{+f9^#cPx+H$WQ;y;!T-Z=90rxGE z&m5nOjp6=1<&QeD8m{9(T!-iwt-ibEM6BUMj=>Lp-1sQrW_;j`$>gYw65H2(3hBI0 zZsqL%spjeZzi^(1JC5JusOD|x<&CT2P(J3s&E;lZ)ghb~%E*4sDCsb}oEpyDq7Jj9 z7_oUdo29OZcOJJz?%YU@mLsjpInCc{VTSFaf8BcMA3m0%zUY_CiF>TQ#D40>KeT2Pibzlk93PL}Nw^k|+!EQRX(_<>DDAob zet)|j>L8h^#}JXK8l4+I^5*FAkc^YZ&hjU3i1?rbKF^_3S?f1%)GbPgKq{Lmy{(+C z(`xbQ?Kh^+sMr_Z;z|seJzw33^m3p0$!_vVU#o5p^9>y2cc05p zAD&V_)-hl8xPH|v9IhCTtic)flkba*&zDVk_Gq8_cv$j~Z;HG5_K)xAuD!5+TZlmF z&&k=nSey584ZVX;_}2Kje2MzA?}@Abnq}$uS)KZ_5Bo7|hrjQ~>Fd{Az1buGeGI>u ztz>D%yFa-Pf1-jv{-p2q8K0HPPyLzL{6tBYu5bC$FZs)#!AtM?KOMf}?~{C;uK;mO zLbG|t3`#&KP@#l{4H-UksPG^{iWL(=#2E3RMIG@VeFPa25&(Mi0Ek4HQsqjPEk6Qi zmQkigffjAv#FP*JGLY_(&b{t zjYGl=+z{|&%9SMqnYUH5*2q_x^6ea2YE{vpE1x!4RcC3?XUVdL4O*f9k03w?7bZNI z;ovR781}}ETSBPYe*A%i(LaEP3jkN}h^53%ax6gwQG$%G%^rkMFP~7O zkf_$6`YbjL`6BH?up-o~E5JP5P^s5QMA0mSteZyx`2Z9!zyY^-01Y+ZSs@r0cf^rK z8Gnp1M&o#laRnOPaR;7Y{2+2h7~OFtMibzGLIN=-~e4&B|ar*S77;#V#6onf90KtNr61d^Uiv$p( zN3q2gP+~z#L4rxP3OA+fvdlmPHN}iF6tzUFIy99gPAOAOu2e-m@zqx!8jQ&s4DrR# zSQuSYQAW)b(MF}nif7b90TLFask6 zU8H>$fn*Q>rupcIeOOP>^$%%hpP>n{x6IU9kXZVlr5W1&{rn3nS( z?+V<21sRec42sakLHs)!_09r8_8r4>+e4X106>TTkFY@>AE86{(B~4Hg#~`G^ArU& zBR~2T%`UvlAMZ{$6yOC?C_33*IWA0ix~fnpLE73OSbOZ=aPZdW3q!0?7$>>p}$7#IQG@GI8Yf*Meu1~iz1 z3pt_9&Cm#{B(86dpt2woQv!foG@t>a5P=~@fW<6Eu^CDPBZX4mClHm2PdB4ZTyifZi9l*1*Z_c0EOiu#@TeAPS<=Z&QmB?} zimA4es+E#RqW#<|OlKlf7czu7Jj}uwV9||gKtZ9KdgWB9>J@WhWv-ODWfYCNk|6NI z4bp&wK15K2sN(XGA-(EqNLo^Rwvdef(p2fJMC#I){?kM`Tv~N}6b=N!g90qjDbB=+ z*u>(bu1+Z}XD(RO45GvVItYnB=1^EiUgfSMnrC8Tb5E8IHL|6mDp@9#d~=wi zC2x^!a$1duIiCf-@qtmoh+5Qw5kh9rc#}e7*?lUttWk1l_Q&B1Ia#iA74CzkJYvjF z5I+P(2fo5liFii$DRdr6b!P(Up=8&haJJMtjb>(^9C@y-$@2qY*XP)jH_B2LFVVDN&qF7T}mb+L7g4HPnGWZXirF|gGvY!VW?%)OS-c`MA9W%tx~ zpm}zfO)WhUOMt`;F^-S_Two4x)!-Yo_9>V*4ex=-c;O6Z$gedRY<4$B(-ArMQIP%L z&eU7F6KOVD@?Go-OMBW=rY}W~ms~7_s~Y6^_FWyVs*K|$z%;M9rCFQfiq}>t5KoAw zr+XHU3)n9Fj?Bp4J>XMIa?q+a>tFzs1r%eU7~tUat(VU5UHb*-5!dcwiogMCYy#84 zGWBZc+VHlhIxD(>l^1i_)#6#NdcmL;WfP;->JPa6%hDgR|o_53Eoce0l zxq*2O2}T^i6CcrmJ=lG5uLJ$^K!<5?-2_2vXTR;##Xn^sfyy8 zb0Zp2gBoBLZ`cLssf+$&3mgPMhr2cb1iMR931u)l1la_6aKOT2K?%&YsHnhBK_jeC zx|-v_4t$#b-jD?pfCVtX0c?0QwVOT*thrrdL7>RKG~+oUFa=3D02>rG@}olck++O< z3iVqdFnWrS1G*t3!lCJnQ{sj{C;=`w2B@1ti1WWa13F17#DpNgmoUJP=mb1y1psh{ zQ{aFZ9K;9A!-HTucvFhsW3NAgihN7FG*rV4(GhnT2MgeaDtL%0%R>}oh*-o6DNIIX z%$@?-IhK%yPUrz2(}jvdyHGs8#6t?r6SPiBif5ZWNMte%IS+848gJMJCaf|6e7#U? zxc?JCqS8K>&;to@gEzxQIdjIfv$NULh_{oZVWJ5?%R^pFr`CX@SBnC7s0M6^2u*Cp z#H&O9XRNM%+(Te93EZhP(1B1Gt7>aP zpz}X?1S)tG#jpd3W$?+L1j=Q&!RT{FFf>1m@Hi$Tr-<+{Wkkq?3=HdN0&#$aD98fe z=!=HXL}f(5eypp0R6J;`N0caqvNX%HEQO);M1a)6-CKxy1EhG;9VmQ6a1;yX7!P=0 zlyPtY3)4!P+{D>aIGr>no!m()&KY`ONau?W5`Ix+rGqn36L^OkW|LUbgc3tNr!@nX41)&^ckqoEHxk&Z-cD= zOax5Byfwq@Bf~t*Xj}J008m(2nlEeM+gIFaHO@I z$F}@JC2KY$JBAoCPTb5*j0gsJfQKZAfhjnLGRVz&-~j$~1e#gVkJyBL0IUU|h1#l717*Q`s-U~tof>sepV2%2R1yaj zFoEkKo*Lz;56z1jrAIzwiAFdANQj3q(1T`R1uNyx0kDOSkOlzIgO`ArMCAlsVAMu+ z)JKKXNR`w{rPNB5)NJ?xOV!j(<YOF;r? z001ILhmSah|11RoZCHmDn%PmNTAEl445goy+RlL6*1#q|;DK&XgDY48FO(jUHQCaL z)4xRvl&u}0U0G6u!F(VekT?Qljn0xx+sx3}ot+_zjayQyFY9;!6i9|BNP(Y&Af;W} z*2q_H1R!Y*9OqRCm{il?@9TWh-5%hgW*JzJ3nxB<0_0V{wz z?D1Q{?TnHwE!H4hKvG$;w9}P<25J3>MIeG3G^VGiUH2jDA;|J%%4%)6rm~u zF2mx1VexIshyc%I=ms=6hbFMCC8FR8HVfswGrnlv5F@Vt4$h^;(1T1^fPG{vQ)%K- zV_}|kVKWk61+EK&IFC~j2Q_$rR{$rOB(g3N-5&;A_`NRqMctkar6E=~p38=4fCN1l z0(oGAt$jtIf@6r)khy~5J<^{kj$6t+3Lnt`Kyb+{fTSb(VlbYH3m)UhDC3a(Cp0ca zkhlX5It5nHgGcxP?3JieQQ-%gV-$WGQN~!?tcYOX0=<+185joj&0#{`;Y99XM7HL$ zm|sSoCPzk1mXHTHfP`$&21rPS9suAa){tRdWr_M^Ts-Ck4vpe_3~tjMW>9GXV0q% z-0%Z5hyigxC~5w)PWoqnP6}8aXp}B!{^@4uedLyKhE@QH4yY7~eq#^G=?zP)7RKnG zncJU^imJe}S9<_=xPn>`WMY1%ktXRdHtCbLij;1@8}jBSRn6SPVAiPUkK5_&Bx{Z4 z5Feoemt2BQj;Ez&YK;(RjsuHXuGsrQ=+snA$S~v!32dV)EwLW!5<%uc>kT=WN>~5} zEARtMq9?hY>sPL8yT%HHF>Lv;AxT(CF;qy{&hCCayAT0n-sRC!^<6SGnwz2+9iw=JvJ<{vPD=0&Ut9?ct`0fa4Z)D8U3L&|zY44X25wrL?P%@9(AX z+a}_WK+79X=UCouPHrd|`)>g6FcFstza8Ul43de34 zowv~7ZlwLM51;5J6LN=$&=`0C@j!C_4=Jq`XK|VEVMx2{MFw$Esc*!+Z;s6GCl8A( zS8yNa>6?ZP6we*&AO{qPg+kL&0-mcSXL6@_@FM$)>4xVGvE_|Ki3<uz`4&_js@M=-zN1pD{?=b#)dwvpx?J=!O^o zX?E4==|c8oSMz0OcBgQ3Aa4!-Xio`ckoe|gDrK;A7`tbZpL@+x<8KL%AtKd4xDV-^i}zvYxj1t+M7dbfA1$nuQacf$Vo%VpqhSO*UP!hSw> z24}b?SNMgeiG~kgzJPdpoGq@VF|goni0gQjH~F~r5eh&7bBM{Je=;#kd2>hiRY!`K z2k*d;`IZ$4J&5SZqs0xE+&MhAp4Vic?zdk*r9W^7E;b7R&-DsBcpZoArDuAXaQdEx zdh6!vm1u^@kNkev0SKEsMEr_smrahxc8u@zenTrBkO2$@3&FScGp}aMZ|e6>_nA=p zH)nequj-Xxh1zF@IoN^!P6#rap8KfiZMDODJ{NmhDiul;2V%U43~Xn@NBYE%2qzCi z*N<}HH;br`_SJODr|9gj%X-fre#D9m>mUwzc!5ZmNcS5jPAhv(mw>ZxdBtya@2`H@ zziyFGhBxDczOM7$Pl~_}(>(_W2?7TaENJi`!h{MX9AoIPA;gDrB2s+#@EFF58ZB-N z_5fZI6j=~%)HsnNN{AU(vTW({CCr#D@#$D-^CnK5B_+%Y(l95`pg=b^n(VZK0 z#DnDYDO5-R=t+(0R9UL3R=0BP>eVWMW-`Z;Eh{sn#UMU*B5mtdf(|5R=h7vMmf}gJ z4h!ln32_S-c-_|jwTpRIV&A=Q7cWFot1jfoF7NsX!ca11$tjz)$?Vy1;)XgveVwW` zDyAX-061yw+R4}0vZ01$YJAV&Ru?me~^zT3hN_RV{Ea%hVJJ@Sy^EtJjTp?yZMR}%RL~4IKo6`=3!yBH6fX0YE&79b$Z4Thk8O* z;ArNZmL;LFsVJwEDSb(ipP$KyXj>%>c@bzI9*B)QT~y+hq)Ig^*^!VYN)dOWa{3UI zrs{MUm0e9m4~d1!>gtxC)`ixhim58pn6|!Y(tv1wxWxn9aMR$P!0xwePIUVEr;?UE zt64;SPHWdrfmS)_tld6!D6=_Zk{5MPex(qqZGE=@(h&OW^RS(BNb&N7s z3V{hU&@`ZjQxY`dNIK3OOmyP}QMBmgFEJhaK!KO*pha7}`@kPCXt1L0N!Omy*Re&LHjG?UE>?#$ zqLGe#BqSp#$w^YOl9rq#Cw_3rO>(l6o_yp8@bJk|lCqS#5Tz*_c?ef*z!(|-NF^*! z8OvGH5)UJwB`!_*gKXrom!ITBI(#Y2O^#p)bo2@>qQZz|Vu=%ScuEK5#!RpfEjhuG z(=l9Bog7*7I64SUH^a%zaYkenbm;1*m5X$kIINi8CyH7F;qH#LYQn8Os2GPklNMOyJ>49RL6k zN(UQA9AkB1a9s#HYN~9m#Xd7lPA%ke)va1{QcBr^A7mkgDS%^~--&1cvbai4m#Q^Q zi@DHCMP*Zrs%oIe+zK*~@w2=lLjbGLhuuU}&5h#Jq8Du|TCy6~#gfyjXz>UPlJO&J zW+V+d$pw0+D*AjV_j^%g`&mo<%xuy&}vI2(#Bdo}F)_LQ79`!DVeXgB6E6JXmpN*tGx>uwqM$S;roOSmNLY z1?*?m1#3vg5TS8;vvb`2no7qC&Tw<@+7(7T!V^x>LC}KyEwOwU#D>)xcav=8wt5w; z3Zg-ST+AgH3un$PU9Xk@BU6|@>%!s0S5C#em0HjO4H8zI`B zThmv~%e#Vs0$5N0$1h$uy`7z17!6v_)0Qv7d0bxy^7JX4z(Xql;EV&%q7Av$lBmPg z-#Q_-;ppDzNj%~XGN8jvs}7UAt4!Q_&vZqqj=8=;F78(=+A7lMgglJM23<(w<>BTm zqJ52V#@gKB9A&~5BoGW9z#<7!mbRYw{Oh4>yscb{c6rUU@4l?8$4%dg9wgufM!a0t zL*{qCEzKphcKzn!48{a*AdGT6fCSK~aFc?5WXux(9rEJAw_BMt_c;B_-?8>e5USXB zzlS{Gh~j#%y^dV5Phg~9Xgk{dq;_Ug9`;wQQ^%_n9mw8_xi+SF@C70q6R>6TpG~ftT zH+bAL7UI)i)%mJF`~xCuiA{ahRkAeM`1ET^tZXB6tw| zW!}EbT%&AN;oaY`Y{3dl+!8Pu_(k3YZWj0TR+wPk`0Wb<_S3+WAIZtuR_K5>IKsC{ zntpxA%*-GCbyNmE-%jWpJg9)1fS>_3%KvTu-Bp#~Ni|CD;b6wJny2L8$d%UlIYlds z0V|9`7(9X=85{*xpx`kd52l_E7Dzf77%ZGa@mQXmWFL%hl@dY-qI{nms-XDgQw4?@ z@NGpt06;wS161|h)!l{C=%7HYR1a#PMi7fT00SA2z~Z#ov>YMvB%uI$925FP{6)+P z?#|2D-5y$nBBa^zX$j!9U>H&qMkQhy{zNb&11xxh4m{rf{M@d%VY$6j9C99{pdcP< zo^qui%D5mE!eA*YlAMVHBvqM=A#py4zv=<4xWoq5)JvDhIRp zA`1=-Op*;TVp|o~BM z%~LX9$>r5v<&|FnmKVBYRbr;7XeJqABv)+#8o+`VltE*a9=@37Msia@&dga_rZ_TY zSyrVvTIXA$R!!buMNlU_>LgZ;XI3V0q_vDqIET$Zxj9fj$5lxPuG;f%AlhgT`dWxaSUjNE~*}YED#ZzGl~e zqC;|p9*n^dD1$r<>0}1~S!F6ufPz?JY$kEwlkcp+frSIjd}SS4OoV>Qgr4GaYNBrb z%jRt;taT_?j6f3sz!5BiBjf>HqGgEMWr64=;LOvytpgYcL)lO%RpO0|W~O?rqS5XS_3)-5txEjv;s1$X@vqPZ+@a)IOCm;Q!x0!7Lc9UoduqDX}Vmgt}h!R zDQVg$mjG|06R!b zuqI^DfNFIq1<~>UjZ!wwzBP}kO2wfzeuWX}Ll<`EwsLEv?&wBjAg~q~rn&W zY+a=UmZ{Hb9uKu05RV2CI!1*%cCEIiP`65|MRc9I9L83vK{u39gKf>DHqOin=!4l_ z^PnK^cv%YZY%y*{MeeOdiY$y$4#A>LMc5p=rUY0WLke)iIUE+-BCMYJ5Jf=P0fD3X z7@7%jEM)rsEHYLMl9nvwjO}>VkAXbE4FE$Fc!1EYA?Ld7fm_%R`JSEXv~AscsFa5bZvMX4Oyu#*dC+(E_gOTj~HU*utYl z+Le@oBS1qsWCbLsjw3wP>#T0{gssU+K&C~?KnN!; z7S-;(u0gGl$gN??0yu>_WW)HB&-p}D@&+yr$r)xa#DSRS6r6#2R^kl(?eReEi2j)d zUo4=S&|Eceq1r2}avO`$_EG8l(Njpn6T}B0RWTwd(jpC$ zAyZN|Xwo4sGAQu_EFHojjDRF;fF#@!BTo`4T{0uvf+k-wKUi`n8}crN@*x8gDI0Pz z-5pdsUDN>p8;pRg=mRuxkOVFO2vJk9c2ut5qj>U@&P9O=6vq9%C@-5#Pa3640$@im z51;ZA^pq_=!m;gIg+BxUF67#t z=Gi$Mau)MW#B)0D1Wg?4ym6EPwd+Q~kGu7&pLLgd^ z2+b%!QH(ruQ%8EtN5aD&Bm)JO)FN3()^nhB^)JQ-UOo0?MK`VNdO_O9$C&xX5=;UD(T+ysV`LlxnbX)c;SBya-tim$f zf>qzbMN%wAQM5>Z$VL0)N0uS79(F5i<%2MJ3*Yuqt7O!4z}>i}Es154ABfc0G0DK$^50%``qSb>ZIsTtMHe zhk^@AhZ9#jc1nEpM}CAiKv_kfbznzgg@U#Rw>9kn)Jey6IL)=_VzymF%XQ#GyWo6n7 zuODQA6qp@ab4-h>HEMIW1T6Q+mb5s*wN^*Bh@OhDwe;3%E=2bxJ^8kJM?~-rFFee` z18e~;o;I6uw{f%f)D|W^?X!}mv>W?|>Q#4cUw1^uw`cE0e}}erw~z#+04#7r;smyN zpLcP$wPVwmM3Yl&V>ma_Hv7(5OIvq;?lwP*6Mz49Lj8bXhiwT3K*5+H!g2EIc>L>AA?4TIohf~B&fMa3r?lV zv#O)IJP+5Lv$!U9@QcrPj0G2-b2>5tdN&FBZ+{d1oWpqQYB8S}v8S`K!-QJ1H{5oU zliP1{V0r{=`cvOE*LH0?X0@j$2dHoOF=Q3U!~hw%Q@DaOfkj7GpL@9%|MPNZ*g47h zRYtq5_ZfHP`a|+kpA9M3QIHf#WK z0-EXjz9&YvgZ6=#z!VsREKIk7-{-M=w8BF=NV9d$7s#_O{Z34LTEUjZ$Kds5ueQ^= z&TssNdjvP2KngIy!xp>wu6j?})=J}JQ4ei$z`M&ANS((#W6eBX1+Y^LuosGLX!JWq zt6n-C0~g2(6m(I+oBWb1I^hd_$^%;6J$&I$`dvUhaK(MKPn#;b^Rf_Ud}y>h=O4%0W0zXVy;UqRi5x(|*`SR> zdx7XZhRzwLZUNd71{Zblt%$wwnswtFeox+W4z4}K1OL-UIL%4EDw`b2soW{h0v`K* z(Qtd0ucVUg$Q5t{An3pe1;?nAeT>8Z`5Qn-*|Lx&F`G6c}b;5{`is8Iq*PAoE71ELl=Q%a$uu#)LUD zW~g9Ww!oXEW`#?aI*@qmD3d5nqeY9#5y}ziQKwClF5L+A|7lgKAd%FPx|QqFtH*o< z0oj#o*^gD5wK2Q)>{p~ZKt)stfF2|Oauw>4;D!-izkeN0^f{PtVZ(;b%AJc^YWd$AV2#EK(_cD(8{V#%jPlP+x-b?dMAbgY&=d$r@RA!+B1}a^2`J)n)vNgXR zCVKMO;ir_4b$b1wR_BSezh5KNwEW9rPb9dEt1CH(?oh@F2K;%>L5KtcPD0tLvW}|$ z;-jghn?k`xjV^!~DWlFN%#gi`R0GaL_)siSKo*aI|82q3! zB(6ZaT z;OPd8G_oAgvl&;6?4lGU?DVuxX%zLVi)38%$Et2qRZ*vUbd|RFg!I!uz;w{Y5qS=M z5K2AeJjzikuj~}0oOqC;hACMpY`i;7C3a0{BR$WjGslb;slng`He00ftJ7Qcj>>af zq1Nj&qCXFWNP;m~VI!SK`s($$2xZk#*v7P*|Ekkqf{|dGKc?V9rj1C{ zMnl7%-H+n-2*Z|5h?^Zu=x>QOtlO8(YKl&#(VWR#sF`w2T?kEvND(+%?iJsVJzh!X znb3{zSa_sJW}BioN?6~Y#g+JNqBn9lW4blE80_DiYIW~WWdiwcnk6F{Yd|AnXL zqtLE?h+VmKpv9Kt_-Fv~$P*nLaF~Xz|Jb9eh@y-eZpd-UBez$rwj;YswVosF?{2dr zy^Wuhs2juQ`(q!=FZL?KbDh&cvXQI+D&}VY|3>_Po zozhJ3i&cwB?D`19lGHAcg^LRn|J&t|PT-*x0C2`BXc0dyu1keboJ|;CNFA%R#AdG$ z2L@J96{+xWQ5lj75GMwsA?C}JOF5z?4?`33!BS*{L?0~~1r_#zu!;^52tf>jkV#Uq zkb5eL<-}JNKL89Ke?UVMHn|!&#%VpW!DAiEW6g0@b2WS{CS+!E!EgGJB!n!cE)Q9< zUOq%Gd>LjJad}CTpkyUofr?EkV}fLy;d75#3Mo}39Il{pZl2l-K~rf^sk}0tyitkY z8fu!6JTaoWoT54t`A(OO6NdZK%~Jrz9VuX;3fGa%G$H7w*<3SNYFg>bLPHyGa+Fyq z0VGX3C;@YR^DXH-Tt*?W{|uoHm8i?mXkaQ?QHhQ%e@EF87vM3DNSul*0Cm-oTHZ#TPL-k|V4(@cEMET%aLpaxaCAF-DIYyNz7n7T`0}N3x zLvZ@l6{`|4wO#!iSIMH)>gkXyVHN92Alg}n9^R&ta4@)g*#i4%LZ4y3!z0r81d%^@!=7WfU*s2 zp%7^RfH_DV@XBR3$_8q8PRyK90LxH<47Y==a@!6wrh|h`{;`p8OX<2 z!;pZA;fBEB|AY}~1T=7sYfM0*17T3ep%V>>MK`)2#RdQ;bdhXjFPquTcJ{NO9c^hp zn-f2n_OuV-iVYY85!d$ix0O8tJb;_r_YbmR zZ+(-S6Y1FZzpp)lA;20ULInU(=Ya`4JZKq2aDW2<;D}a8Ss@D$w4>pcw2*l8G|M!@ zI?&OM@FdebI`E7g^BN!0p!}l(TDgE!Bp}$ZJbdJ%`QLhU^VhnX;O|2Q0FV)MWC&mt z`mh(2KOEvtAfdz>&$t9Ew@J$Qf*Y@>r#<6Si=e!ST^ zPcAKM|L5+WF}!4jaDt0SKSq4RKwqRjUE@*jaY=&V2PpiZ8wM*H$z7v$og-c}W9Mef z;p2Ec9?v{yHyaXT2lMo`{qpIn$g2@47aNS8^rIi{TqweKxN-bo5@;if#Ze5Mt+}Zs zKlzEGR-TuuGVJTwy?KyUo|)qwf2|_B>vB$f*-0SDc9FZGl@Wb{j6xZwhmO;e#(JP> zX$xMafnR0ZMB$iR^I;3k@5|IZ*PuV9>JQEECy)6hcD{VckH6=69(ur}!U=D%K9p1s zV*KvvxB~{z-~}{*!Ct346i@lOPBwOR9zX@40KszaG{~<5x6m!v@2gH{{Xp;m-%kg; zP#zuR;2%&h3Mq#5L?jq^02ZpjfN1b5x)2Gs3Jf1F zp->|X2`dpL1OD0%ifj%MSI7-jDhcxsqvV1WJdqXV02w+V1okih`%sJ?LjnLM5{Q8e zNPumysRp-Bpt7qqbkKilkpk233mqc}6>0!}=UVF!(T9|By)) zAAq@>tBq!m5wF4qCvmoP(Gnq%DsC}`)T}jp(WESi2($4LiSZm)ND1{XA~r!AL?9Qm zVGxuN3Qf^eI1XTBK?#|o8k~HFw`1R7#B+si!m1?5e?t)i`H-;F$fc>ii6^C z2_K>v@g%wBnVIe9&SJd)?pX+@-L}kCGV28B%?H|Q97@JI(w{RR+AwY^Co$ciDVNc8FLfo zFe3QjJkc{f`9V03k~m+)IFkVuY9KaR^E2~u7Gd)=0aG-$vMRE&!0eMM2vaLv6D;#n zEPs(Uk1@lPk+@RNJ@x1q04M@lKn;e0B?;_4{SssLvpF-=8#nYr|Epp^wF{RHvoK*v zF;Ntj8nZkblz1%Dlt_{rDxeJbQ#GG6G@r7%rZYi-#U<?NwYJaS~R`V zvX@e!*4R@@T_Y#l0Uj`o1r@Nyq7px6v(rG7NQE>|gOo=Fv?~ksD}6LJ$MPTh$Sf_A zAq)=T6z(nQ6e?VBGs6KS^fdfJMnkcbOZ~GuKb25d6l{7CQBTz{4Rj{cv{4C>mf938 zAtLC2PUwiv=uR&}F10G`Gz!4r8>VCm_Y_c7Qb!3Croc2&{|)siu=6pv%PPn;NsH+< zll4e2SRZ%q{k+nnzXIWRZU7a;lOZ6$H zbxkAcOv^M)vz1*fX;v|d1R(RdE3~p=! zfZ{V2&~Q)mbZ%*adC$oxveJg77iIBBc9GV9X^Ld`7k9VUV~>n?Nl*>|U=A<=6XpN_ zo(?Cs?eo*VB|LcO~p{JK6rp_8Ct7YI7~BCC_$fe$m8WJxf@$|`V?rhkd6B^ue`A7ePpp5Dn4^$% zyaf1r9byRj!6EYC8G@Ib+JrmQ00Xcf1^8wPE9#Kn)s1DGmgD?Wg&tM=)fUbK~6iDg?B4W|5Q;8Xg~`hK|Kc0ykH`ArP+*qICfX!7OQzB z26V`XnD%fgcTWsbZIdBrL4_G26FB#%ipyWf1bvTT3AmvbO2qFTOeB2vo=HLn^%*4i z8Ld=;Fy#z;CCq8DOpZq|*8YJRnq(n@% zI-85weMh1K&w3=rQPsZr(N6Z!|Hzq1AHo^vfgbb@r>i(LZo&`H02VT1Rh|*4B|tCl z3$4TWg8f;?0GcFx(at2`M4`G-?QE*Mm4GRU@qCqG%>fI3L3KC|lSu+PNn0e)@3cKy zh__h+SX0&LEUo{Sa$$R=F;}zwqMiF%G5~oBh#^Eu$)gT>qjhw+S9_NqJERwzO+`Wy zC3~_X*UsEfvN8Mla2q0nLkG*Ysjx%?7@_`6&Efd}g z@Ag_E3|NzTEGPZ|9=Ko&v@>}e{16>{#1kCEi+uPJ9J-Oavy$(~fBCjGD<9~QAwW#T zNUXlh2k>$z1zB#gAd^%pA>Y`xq?m#M_(1Rh$@4ysk%Bqo|xAHenws zZk24$-6B#fK{&JP`?S0TKov z*oIBZRRnzjnFh+?b1*i)PP_}+#JQ-oYhW^TdmtcZY|fKVb`Jz5<(yw zNDR>wjnU@9*p7|e{|;dSCg2i`K@tG&+Oomgo_*SzP28yc+Lz7Uu>IP#ecPvf-n^aK z@h#k^z2C_F*#$0A=gJfsA#Ai)UaKzJbG13q%;;vF@%gE3GA+PS` zaDeX~<3I{0++hlM!PH|>G|c|Q(LUDI-t*a>HnRif<6bo8UdQ>+?jv9FXJ$*N01KQF zFCzo+pIh*kobYeo@DG3L#iEQ`W8qWI6t#Z!_s*$q!X1nO7@iqNU1RgvyYt=r^P@lX zMPD@FUVh8t^o>dQRaVN0KU|%vGR{E?lHf~2gZ3rc_7fcU*I)N{KQa>Ec~JxSvEJ#1 z|NFtec`9Wcj=ouEei3L|tyofR5F^d{IdPIn? z*2j?q|0NtViSne%lq}~3AxVj+J9Kuim$K z_xk<&6^RbOgvtK&>9R0kvy7X~Qw)~zVaYUg#Dj{I9)PHvJ9{oVmFE_Cf7D>h330N| zAoEbWmgw-cY=#_X+csGHw(esgcT-f&)5lBS5rNmddD}SU!$C18-TXPa^rfLwTFo*= zN)yO#m(xVcJ$&1^;>)Y;Yd*bK^y<|MZeQ1XO5yP5%3tYN{e9&uEjw2_U4YU}WgR@+ z|L~ASFvJzapGvGPXj^O$&X(JRs8whoOuc2OP=gY<#9=}n9)p~2Bl6eWQ%C_QV2hlE zwnZ=!4AadYP}C>Ze#d}^V|nEDSRQ*oLMG&pg}rCwTKgrIz17|FR3HPV0sm!h{Ac5a{M={4@Ve7P5 z-bO9K)KPo<@nPhO3^d6`n%p1C)HRHB(#_;+9LzZrH1pa6*-SIsG4ISXV+6arT+j%E zebT}ylU??7N-wQi(^Pu}_2KI&E;Zv}VV!kZAxo^$RGoHBPRy+MW$B;)})7F$X=Cz_=XKwW7 zw%_jg=ZA&vHtBAoo-g+Hs=j(~t-CIn-W($9_t>>R|6;@#OSZe>y)z!X#_?l3Jn=J4 zp1V($D}N&M3~PqI0Yy)GWue~MthYAp`AUJj;$HV!@;&hVM0_FY-|YT&z5uF7ee3&4 z`wsU$#m%o`Bm7qV?1vKL<&P)(bCi_)he79QFiSL>UTZ{G5CrCofw|(LtsMA3mE4VA zhoNBX_ESEisBDJmi<((JNVO0iu7up8Vzy3*!eijCVrFS!q>v~!|0M#BiG3O%5es-j z91cW>H}heg+!!Yy2Ju4?B%n-;SSA!*(0no^W6C(Fu>w}hab1xj)vRbOL{1BfC{!UA zcj84#$p?mf^kY<7R>PhcFlTIxn;I+fNrK2Rh(r9B{$Ter$s`dpW3;3a0U5}eKrw2D zjG7`nbxTb#(tca)AWb59DN_BXkFF#NCNn9MP2Q}NF@vLded>?9HcoVDnD~BPN-bLXx7-dQ4%GO zV<#J?PXCC*hn`f8Db3zLarV!b)@`8oyk;snWmsmDEtl|#) zAjMFQ(FkaS!5Qo-t3%O>G0J`mvq@sEku)nVx!Sd({~ZLWLTyJ4Lihs`))*3gQTo`E`s1NiU^0UQGoHu%6$qyYduK((LeCj8jiG@FNYnxV2Y^Hn9Kc~)d^p5X0f3Q@jN~LMdC5#}vXh?-XO4Plwu=X)c>Sb}$E9Bn1*W2yPhmo3c@ZTGphdwNz|+uQDT^OXJT8T;DXw7&LJ&8<^( zr<>cfQ+K%E4exl%d*1Y}_kgBt?|kcf-~8^kzmbjae+zuz1TVP35B_b0D}3P$Z@9z5 z9c-PZ;>L-11|%flYT{m6x4iW&aD}V!O6P+JHqOLQFb?ufj{pGn_-%005%NKY!4c3% z#{y3Naz<2I2$-;O14ImokHb9Ens5Zm|6QK)LVtX?pDy~*k3j^rC|}QdrA_eexi`|JAo6as+60E7$)5CeVC z5^w~DHQeDLFMrVaZ~!Z)5dz~QU-^~h!y_Oe_~<8}$dwj=GM>@$0eDy{(;u`E8UbGM zb3fDJU;q65EPwKMI`R2$f5Zb=|6@0nV?|L4-)95cr++#XfHpROJJw^(-~b0GeRZ~g zI5rfU013F@1mh)vend=O+4m{%(JVgH~DL(zfv zr+_!cfJR}0Fo=IA7;5|ngua2 z3`F1v4gdg-&F9 zq_7G^@pY4SY4M;6j8=w$cxfS!3XtFrav*zsCuwh}c!D@+&Y%QCp$+Mvcy1SHt3U{3 z7ipAuX^Dr3g%^r=2#BZ1|A%_U3N}C#ttMQTS7@h}YDoc$uXbq*@C+oE4H|cgvRG+} z2V9O2b#G@2Tqpu?H;lMgXdM6mBnJ&nFch~Kb5jQm&q#v5SZUhWY4~uBL_mV9=4!y$ zSmO3@=ZKE!sE+H1D*wlh?+B0aD39>yj`L`b_lS@AsBiVCkNxP6{|J!A7H|PckOgUw z2k9>Sh>#1(kPYdO3HOi@DUlP&kP1nW7m1M>iH;VjksaxgAK7ml36dj8k|kMg18I^e zsgf&cZ79i-@mLDW04OneB{bO?Hpw}9kPC^R3{PQ`IEf`dIUR{G4KFEd^w4-lxo;xy zh*yFPGPx8&DIiiQ{~c6G6i-PMK5!2$f|Z?71o^N4I_DHW36(QhmH|SPkRSp_Mg($@ zeM+f8A_D%h??06>2L=Q0A7&53e7+i%3uSWaAa9%lhV)$M4$|7 zpaYPg2tz;=(r^bskbJQ@o3#lEf5{JHzzoU|0KF-jv^f+uc>o`v4A7tpBF36VHfJ<> zo4L80$oZQ_F`WP~XSg5-9H0y$u!u#mmPW=2Lvfm^>57PH6wNRM@^A;zC=Kf12=b5* z3@{YU`JBo5=~BO%Vcn&;z8&m`$k*J8+rLW0?)wX_?6n9N>zNkOJ$y|3>{Dlc)$ilnVEy|3@!+v zmFbd$nrRYhcFHgSnwg$M5eC{|ny3k)fH{~x3JH4914{}Cw(x!NFa|>*2hxbCn#!q` z>JKEp?ayAx~kt-6kQntqp+2eHwvpp6kA#pUaFd= zDwK3E3L&QlY*3m_;i_}0s@|omOTh@E;EIso1_0ov03Z)+008l@U51J@4@$0uCZUQz z6r`z{K0p*tAOexfp0FB~GIaX}}6kWMvZwU#|&|^hGtX(RpUy7`IDGdpm4X5A_IsgDsN)!mIumHfYG)b^W z#&=7xW8-=hekuZwc?7o5sOOrHh03#mCZV@L6pnzJ{NP(dF#@>&33Je~JrJUmN|UAl z{{Ynp31g}Qs*nh6Cbd*6oI*PkTU)P?U<7wC1}%34@?fN8X_HoqwOTv1PtlboYq5@y zvBS!xL&3B};j|yi6gKb#tdI`_aI!`*wq?ttXltop8x=eDgiz?GO_>P*0Czvzjy_Ad zdKR?nTC~hS6#M|G$WR1BkqQ9diUKeXOhJ>^dJ0St22Vf;kEps~d#YXw39*ZpGN}*b zrwE8^y0J4a_2tVKt{*Vi!V6*z557S@^`LMo$Vy;`9SD8B$4p6kDfC=&- z#=@Hmw7?2)aIAD-3-aKa07?oDzy{F332-31aNM}bH^+5+$EKhK$hUyFuW87C9LUzX2Z_K6dBB)Qb_co8U0!@8T`bInM#y<32b0N=$z04# zM9j_XXUF_hLx6!2NzKq4mzImod?wA??9B|N&EG7}XOwQ+w&ID)9>CDdUY;WuA z&haeIx)#p!Y|r=HX_?_}_{`7!e3X!|vS%jH15MBcZO{je&SGF o=rhrNR?&QR(R!BAc(&1X*3qQ((RmfpPc_myRnpx=4*>xHJDZ>$ga7~l literal 0 HcmV?d00001 diff --git a/examples/testCompressor2/OutInSquelch.gif b/examples/testCompressor2/OutInSquelch.gif new file mode 100644 index 0000000000000000000000000000000000000000..79739b71f2df05d602d88bbc6517e3df8e363f6e GIT binary patch literal 26610 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