From 2923eb62653d483c9a4d892743d27b780637fbe3 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 25 Dec 2022 05:04:32 -0500 Subject: [PATCH 01/30] SegaPCM: fix per-chan osc when muted --- src/engine/platform/segapcm.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/engine/platform/segapcm.cpp b/src/engine/platform/segapcm.cpp index 30d3b804..ccc9f48b 100644 --- a/src/engine/platform/segapcm.cpp +++ b/src/engine/platform/segapcm.cpp @@ -45,6 +45,8 @@ void DivPlatformSegaPCM::acquire(short* bufL, short* bufR, size_t start, size_t oscBuf[i]->data[oscBuf[i]->needle++]=s->data8[chan[i].pcm.pos>>8]*(chan[i].chVolL+chan[i].chVolR)>>1; pcmL+=(s->data8[chan[i].pcm.pos>>8]*chan[i].chVolL); pcmR+=(s->data8[chan[i].pcm.pos>>8]*chan[i].chVolR); + } else { + oscBuf[i]->data[oscBuf[i]->needle++]=0; } chan[i].pcm.pos+=chan[i].pcm.freq; if (s->isLoopable() && chan[i].pcm.pos>=((unsigned int)s->loopEnd<<8)) { From 513ab09e7cc85da9ea8a4ff746c11610641643e5 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 25 Dec 2022 14:45:07 -0500 Subject: [PATCH 02/30] OPLL: what why 2047 --- src/engine/platform/opll.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/platform/opll.cpp b/src/engine/platform/opll.cpp index 0136123e..bd45a6b2 100644 --- a/src/engine/platform/opll.cpp +++ b/src/engine/platform/opll.cpp @@ -248,7 +248,7 @@ void DivPlatformOPLL::tick(bool sysTick) { if (chan[i].freq<0) chan[i].freq=0; if (chan[i].freq>65535) chan[i].freq=65535; int freqt=toFreq(chan[i].freq); - if (freqt>2047) freqt=2047; + if (freqt>4095) freqt=4095; chan[i].freqL=freqt&0xff; if (i>=6 && properDrums && (i<9 || !noTopHatFreq)) { immWrite(0x10+drumSlot[i],freqt&0xff); From 1fae16514c7e31d7c4e3bcb40f32a684e56bbdb3 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 25 Dec 2022 15:54:40 -0500 Subject: [PATCH 03/30] OPLL: freqChanged during note off? --- src/engine/platform/opll.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/engine/platform/opll.cpp b/src/engine/platform/opll.cpp index bd45a6b2..8ffd6501 100644 --- a/src/engine/platform/opll.cpp +++ b/src/engine/platform/opll.cpp @@ -456,12 +456,14 @@ int DivPlatformOPLL::dispatch(DivCommand c) { if (c.chan>=9 && !properDrums) return 0; chan[c.chan].keyOff=true; chan[c.chan].keyOn=false; + chan[c.chan].freqChanged=true; chan[c.chan].active=false; break; case DIV_CMD_NOTE_OFF_ENV: if (c.chan>=9 && !properDrums) return 0; chan[c.chan].keyOff=true; chan[c.chan].keyOn=false; + chan[c.chan].freqChanged=true; chan[c.chan].active=false; chan[c.chan].std.release(); break; From 344fbc06e29a677ddcd33e7880e53e1f579eb039 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 25 Dec 2022 18:20:04 -0500 Subject: [PATCH 04/30] update instrument guidelines --- instruments/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/instruments/README.md b/instruments/README.md index 949aab10..6a558cf4 100644 --- a/instruments/README.md +++ b/instruments/README.md @@ -46,5 +46,7 @@ you may submit your own instruments by creating a pull request or contacting me! - any format Furnace is able to load is accepted. - I (strongly) prefer original instruments. +- your instruments have to be free of restrictions (these may be used in any project). + - be careful if your instrument contains samples. thanks for your contribution! From 9e47468b533dc78ac96380b38752608983d5bade Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 26 Dec 2022 13:49:59 -0500 Subject: [PATCH 05/30] YM2612: workaround --- src/engine/platform/genesis.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/engine/platform/genesis.cpp b/src/engine/platform/genesis.cpp index 2fb6e53b..59b34052 100644 --- a/src/engine/platform/genesis.cpp +++ b/src/engine/platform/genesis.cpp @@ -575,6 +575,8 @@ int DivPlatformGenesis::dispatch(DivCommand c) { } else if (chan[c.chan].furnaceDac) { chan[c.chan].dacMode=0; rWrite(0x2b,0<<7); + } else if (!chan[c.chan].dacMode) { + rWrite(0x2b,0<<7); } } if (c.chan>=5 && chan[c.chan].dacMode) { From 47be21df4db1a3f0bb42a308a14e655b2d65acdc Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 26 Dec 2022 16:09:38 -0500 Subject: [PATCH 06/30] f-num/block range fix --- src/engine/engine.cpp | 4 ++++ src/engine/platform/ym2203.cpp | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index 6ee8513f..c75d86fa 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -2104,6 +2104,10 @@ double DivEngine::calcBaseFreq(double clock, double divider, int note, bool peri if (tuning>500.0) tuning=500.0; \ int boundaryBottom=tuning*pow(2.0,0.25)*(divider/clock); \ int boundaryTop=2.0*tuning*pow(2.0,0.25)*(divider/clock); \ + while (boundaryTop>((1<>=1; \ + boundaryBottom>>=1; \ + } \ int block=(note)/12; \ if (block<0) block=0; \ if (block>7) block=7; \ diff --git a/src/engine/platform/ym2203.cpp b/src/engine/platform/ym2203.cpp index a968d49d..cd6df57f 100644 --- a/src/engine/platform/ym2203.cpp +++ b/src/engine/platform/ym2203.cpp @@ -449,7 +449,7 @@ void DivPlatformYM2203::tick(bool sysTick) { if (parent->song.linearPitch==2) { chan[i].freq=parent->calcFreq(chan[i].baseFreq,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,false,4,chan[i].pitch2,chipClock,CHIP_FREQBASE,11); } else { - int fNum=parent->calcFreq(chan[i].baseFreq&0x7ff,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,false,4,chan[i].pitch2); + int fNum=parent->calcFreq(chan[i].baseFreq,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,false,4,chan[i].pitch2); int block=(chan[i].baseFreq&0xf800)>>11; if (fNum<0) fNum=0; if (fNum>2047) { From 99f2901ed6a9419e0e16c8f56b0b10422171df22 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 28 Dec 2022 00:35:47 -0500 Subject: [PATCH 07/30] update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 710c2bab..e8970291 100644 --- a/README.md +++ b/README.md @@ -122,7 +122,7 @@ check out the [Releases](https://github.com/tildearrow/furnace/releases) page. a [![Packaging status](https://repology.org/badge/tiny-repos/furnace.svg)](https://repology.org/project/furnace/versions) some people have provided packages for Unix/Unix-like distributions. here's a list. - - **Arch Linux**: [furnace-git is in the AUR.](https://aur.archlinux.org/packages/furnace-git) thank you Essem! + - **Arch Linux**: [furnace](https://archlinux.org/packages/community/x86_64/furnace/) is now in the community repo! - **FreeBSD**: [a package in ports](https://www.freshports.org/audio/furnace/) is available courtesy of ehaupt. - **Nix**: [package](https://search.nixos.org/packages?channel=unstable&show=furnace&from=0&size=50&sort=relevance&type=packages&query=furnace) thanks to OPNA2608. - **openSUSE**: [a package](https://software.opensuse.org/package/furnace) is available, courtesy of fpesari. From 2c182334d78a8d078f7e0a034cdda84091265f18 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 28 Dec 2022 14:47:50 -0500 Subject: [PATCH 08/30] OPN: increase range of pitch2 --- src/engine/platform/genesis.cpp | 2 +- src/engine/platform/genesisext.cpp | 2 +- src/engine/platform/ym2203.cpp | 2 +- src/engine/platform/ym2203ext.cpp | 2 +- src/engine/platform/ym2608.cpp | 2 +- src/engine/platform/ym2608ext.cpp | 2 +- src/engine/platform/ym2610.cpp | 2 +- src/engine/platform/ym2610b.cpp | 2 +- src/engine/platform/ym2610bext.cpp | 2 +- src/engine/platform/ym2610ext.cpp | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/engine/platform/genesis.cpp b/src/engine/platform/genesis.cpp index 59b34052..bbd9c32e 100644 --- a/src/engine/platform/genesis.cpp +++ b/src/engine/platform/genesis.cpp @@ -339,7 +339,7 @@ void DivPlatformGenesis::tick(bool sysTick) { if (chan[i].std.pitch.had) { if (chan[i].std.pitch.mode) { chan[i].pitch2+=chan[i].std.pitch.val; - CLAMP_VAR(chan[i].pitch2,-32768,32767); + CLAMP_VAR(chan[i].pitch2,-1048576,1048575); } else { chan[i].pitch2=chan[i].std.pitch.val; } diff --git a/src/engine/platform/genesisext.cpp b/src/engine/platform/genesisext.cpp index ae6ac70b..f181774a 100644 --- a/src/engine/platform/genesisext.cpp +++ b/src/engine/platform/genesisext.cpp @@ -491,7 +491,7 @@ void DivPlatformGenesisExt::tick(bool sysTick) { if (opChan[i].std.pitch.had) { if (opChan[i].std.pitch.mode) { opChan[i].pitch2+=opChan[i].std.pitch.val; - CLAMP_VAR(opChan[i].pitch2,-32768,32767); + CLAMP_VAR(opChan[i].pitch2,-1048576,1048575); } else { opChan[i].pitch2=opChan[i].std.pitch.val; } diff --git a/src/engine/platform/ym2203.cpp b/src/engine/platform/ym2203.cpp index cd6df57f..00df4edb 100644 --- a/src/engine/platform/ym2203.cpp +++ b/src/engine/platform/ym2203.cpp @@ -316,7 +316,7 @@ void DivPlatformYM2203::tick(bool sysTick) { if (chan[i].std.pitch.had) { if (chan[i].std.pitch.mode) { chan[i].pitch2+=chan[i].std.pitch.val; - CLAMP_VAR(chan[i].pitch2,-32768,32767); + CLAMP_VAR(chan[i].pitch2,-1048576,1048575); } else { chan[i].pitch2=chan[i].std.pitch.val; } diff --git a/src/engine/platform/ym2203ext.cpp b/src/engine/platform/ym2203ext.cpp index 12605a93..d19276be 100644 --- a/src/engine/platform/ym2203ext.cpp +++ b/src/engine/platform/ym2203ext.cpp @@ -412,7 +412,7 @@ void DivPlatformYM2203Ext::tick(bool sysTick) { if (opChan[i].std.pitch.had) { if (opChan[i].std.pitch.mode) { opChan[i].pitch2+=opChan[i].std.pitch.val; - CLAMP_VAR(opChan[i].pitch2,-32768,32767); + CLAMP_VAR(opChan[i].pitch2,-1048576,1048575); } else { opChan[i].pitch2=opChan[i].std.pitch.val; } diff --git a/src/engine/platform/ym2608.cpp b/src/engine/platform/ym2608.cpp index 924b6dbb..cf42741d 100644 --- a/src/engine/platform/ym2608.cpp +++ b/src/engine/platform/ym2608.cpp @@ -503,7 +503,7 @@ void DivPlatformYM2608::tick(bool sysTick) { if (chan[i].std.pitch.had) { if (chan[i].std.pitch.mode) { chan[i].pitch2+=chan[i].std.pitch.val; - CLAMP_VAR(chan[i].pitch2,-32768,32767); + CLAMP_VAR(chan[i].pitch2,-1048576,1048575); } else { chan[i].pitch2=chan[i].std.pitch.val; } diff --git a/src/engine/platform/ym2608ext.cpp b/src/engine/platform/ym2608ext.cpp index 47a01d13..b38e1a26 100644 --- a/src/engine/platform/ym2608ext.cpp +++ b/src/engine/platform/ym2608ext.cpp @@ -435,7 +435,7 @@ void DivPlatformYM2608Ext::tick(bool sysTick) { if (opChan[i].std.pitch.had) { if (opChan[i].std.pitch.mode) { opChan[i].pitch2+=opChan[i].std.pitch.val; - CLAMP_VAR(opChan[i].pitch2,-32768,32767); + CLAMP_VAR(opChan[i].pitch2,-1048576,1048575); } else { opChan[i].pitch2=opChan[i].std.pitch.val; } diff --git a/src/engine/platform/ym2610.cpp b/src/engine/platform/ym2610.cpp index 8b398a3e..50568aa2 100644 --- a/src/engine/platform/ym2610.cpp +++ b/src/engine/platform/ym2610.cpp @@ -436,7 +436,7 @@ void DivPlatformYM2610::tick(bool sysTick) { if (chan[i].std.pitch.had) { if (chan[i].std.pitch.mode) { chan[i].pitch2+=chan[i].std.pitch.val; - CLAMP_VAR(chan[i].pitch2,-32768,32767); + CLAMP_VAR(chan[i].pitch2,-1048576,1048575); } else { chan[i].pitch2=chan[i].std.pitch.val; } diff --git a/src/engine/platform/ym2610b.cpp b/src/engine/platform/ym2610b.cpp index af02fd9a..a9c88764 100644 --- a/src/engine/platform/ym2610b.cpp +++ b/src/engine/platform/ym2610b.cpp @@ -503,7 +503,7 @@ void DivPlatformYM2610B::tick(bool sysTick) { if (chan[i].std.pitch.had) { if (chan[i].std.pitch.mode) { chan[i].pitch2+=chan[i].std.pitch.val; - CLAMP_VAR(chan[i].pitch2,-32768,32767); + CLAMP_VAR(chan[i].pitch2,-1048576,1048575); } else { chan[i].pitch2=chan[i].std.pitch.val; } diff --git a/src/engine/platform/ym2610bext.cpp b/src/engine/platform/ym2610bext.cpp index 207708bd..a5845461 100644 --- a/src/engine/platform/ym2610bext.cpp +++ b/src/engine/platform/ym2610bext.cpp @@ -431,7 +431,7 @@ void DivPlatformYM2610BExt::tick(bool sysTick) { if (opChan[i].std.pitch.had) { if (opChan[i].std.pitch.mode) { opChan[i].pitch2+=opChan[i].std.pitch.val; - CLAMP_VAR(opChan[i].pitch2,-32768,32767); + CLAMP_VAR(opChan[i].pitch2,-1048576,1048575); } else { opChan[i].pitch2=opChan[i].std.pitch.val; } diff --git a/src/engine/platform/ym2610ext.cpp b/src/engine/platform/ym2610ext.cpp index b4da0878..206c904d 100644 --- a/src/engine/platform/ym2610ext.cpp +++ b/src/engine/platform/ym2610ext.cpp @@ -431,7 +431,7 @@ void DivPlatformYM2610Ext::tick(bool sysTick) { if (opChan[i].std.pitch.had) { if (opChan[i].std.pitch.mode) { opChan[i].pitch2+=opChan[i].std.pitch.val; - CLAMP_VAR(opChan[i].pitch2,-32768,32767); + CLAMP_VAR(opChan[i].pitch2,-1048576,1048575); } else { opChan[i].pitch2=opChan[i].std.pitch.val; } From 8e4fda542a20d03e2114721fc49e55ad881cf430 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 28 Dec 2022 14:51:59 -0500 Subject: [PATCH 09/30] OPNA: fix rim muting --- src/engine/platform/ym2608.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/platform/ym2608.cpp b/src/engine/platform/ym2608.cpp index cf42741d..0ec5cb48 100644 --- a/src/engine/platform/ym2608.cpp +++ b/src/engine/platform/ym2608.cpp @@ -328,7 +328,7 @@ void DivPlatformYM2608::acquire_combo(short* bufL, short* bufR, size_t start, si if (--delay<1 && !(fm->read(0)&0x80)) { QueuedWrite& w=writes.front(); - if (w.addr<=0x1c || w.addr==0x2d || w.addr==0x2e || w.addr==0x2f || (w.addr>=0x100 && w.addr<=0x12d)) { + if (w.addr<=0x1d || w.addr==0x2d || w.addr==0x2e || w.addr==0x2f || (w.addr>=0x100 && w.addr<=0x12d)) { // ymfm write fm->write(0x0+((w.addr>>8)<<1),w.addr); fm->write(0x1+((w.addr>>8)<<1),w.val); From 735030b02624f2d9657b146d406f2bc52457c01c Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 28 Dec 2022 15:15:19 -0500 Subject: [PATCH 10/30] GUI: add compat flags button to mobile UI --- src/gui/editControls.cpp | 3 +++ src/gui/gui.cpp | 1 + 2 files changed, 4 insertions(+) diff --git a/src/gui/editControls.cpp b/src/gui/editControls.cpp index f019f766..912665f6 100644 --- a/src/gui/editControls.cpp +++ b/src/gui/editControls.cpp @@ -537,6 +537,9 @@ void FurnaceGUI::drawMobileControls() { if (ImGui::Button("Stats")) { statsOpen=!statsOpen; } + if (ImGui::Button("Compat Flags")) { + compatFlagsOpen=!compatFlagsOpen; + } ImGui::Separator(); diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 0149cc65..655e9ec0 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -3879,6 +3879,7 @@ bool FurnaceGUI::loop() { drawSettings(); drawDebug(); drawLog(); + drawCompatFlags(); drawStats(); } else { globalWinFlags=0; From 0fe8554a5d2582150d35372fc3adcff10ebd7c4b Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 28 Dec 2022 15:27:38 -0500 Subject: [PATCH 11/30] MSM5232: fix arp macro --- src/engine/platform/msm5232.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/engine/platform/msm5232.cpp b/src/engine/platform/msm5232.cpp index e602aab3..4781945f 100644 --- a/src/engine/platform/msm5232.cpp +++ b/src/engine/platform/msm5232.cpp @@ -141,6 +141,13 @@ void DivPlatformMSM5232::tick(bool sysTick) { if (chan[i].freqChanged || chan[i].keyOn || chan[i].keyOff) { //DivInstrument* ins=parent->getIns(chan[i].ins,DIV_INS_PCE); chan[i].freq=chan[i].baseFreq+chan[i].pitch+chan[i].pitch2-(12<<7); + if (!parent->song.oldArpStrategy) { + if (chan[i].fixedArp) { + chan[i].freq=(chan[i].baseNoteOverride<<7)+(chan[i].pitch)-(12<<7); + } else { + chan[i].freq+=chan[i].arpOff<<7; + } + } if (chan[i].freq<0) chan[i].freq=0; if (chan[i].freq>0x2aff) chan[i].freq=0x2aff; if (chan[i].keyOn) { From 6811413afc7aa5eaa24a698649b6b4f274cbce31 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 28 Dec 2022 15:31:26 -0500 Subject: [PATCH 12/30] GUI: fix MSM5232 part labels --- src/gui/insEdit.cpp | 2 +- src/gui/sysConf.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/insEdit.cpp b/src/gui/insEdit.cpp index e359fc2e..c0add60c 100644 --- a/src/gui/insEdit.cpp +++ b/src/gui/insEdit.cpp @@ -264,7 +264,7 @@ const char* mikeyFeedbackBits[11] = { }; const char* msm5232ControlBits[7]={ - "2'", "4'", "8'", "16'", "sustain", NULL + "16'", "8'", "4'", "2'", "sustain", NULL }; const char* x1_010EnvBits[8]={ diff --git a/src/gui/sysConf.cpp b/src/gui/sysConf.cpp index 2fab65c5..9ebe7ec0 100644 --- a/src/gui/sysConf.cpp +++ b/src/gui/sysConf.cpp @@ -1474,7 +1474,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo ImGui::Text("Initial part volume (channel 1-4):"); for (int i=0; i<4; i++) { - snprintf(temp,63,"%d'##GRPV%d",16>>i,i); + snprintf(temp,63,"%d'##GRPV%d",2<255) groupVol[i]=255; @@ -1484,7 +1484,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo ImGui::Text("Initial part volume (channel 5-8):"); for (int i=4; i<8; i++) { - snprintf(temp,63,"%d'##GRPV%d",16>>(i-4),i); + snprintf(temp,63,"%d'##GRPV%d",2<<(i-4),i); if (CWSliderInt(temp,&groupVol[i],0,255)) { if (groupVol[i]<0) groupVol[i]=0; if (groupVol[i]>255) groupVol[i]=255; From 56be377cc28452686ac1ee7a75a1c9697fa8efa7 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 28 Dec 2022 15:40:27 -0500 Subject: [PATCH 13/30] attempt to support Windows XP issue #685 --- CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index b705db85..c563a6cd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -708,6 +708,10 @@ if (WIN32) if (NOT MSVC) list(APPEND DEPENDENCIES_LIBRARIES -static) endif() + # support Windows XP + if (CMAKE_SIZEOF_VOID_P EQUAL 4) + list(APPEND DEPENDENCIES_DEFINES "_WIN32_WINNT=0x0501") + endif() elseif (APPLE) find_library(COCOA Cocoa REQUIRED) list(APPEND DEPENDENCIES_LIBRARIES ${COCOA}) From cb70759a682b36da9dbd2dc8e6a37976690b7ea3 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 28 Dec 2022 15:50:10 -0500 Subject: [PATCH 14/30] part 2 issue #685 --- extern/nfd-modified/src/nfd_win.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/extern/nfd-modified/src/nfd_win.cpp b/extern/nfd-modified/src/nfd_win.cpp index b4fa5a5f..0541cca8 100644 --- a/extern/nfd-modified/src/nfd_win.cpp +++ b/extern/nfd-modified/src/nfd_win.cpp @@ -5,11 +5,11 @@ */ -#ifdef __MINGW32__ +//#ifdef __MINGW32__ // Explicitly setting NTDDI version, this is necessary for the MinGW compiler -#define NTDDI_VERSION NTDDI_VISTA -#define _WIN32_WINNT _WIN32_WINNT_VISTA -#endif +//#define NTDDI_VERSION NTDDI_VISTA +//#define _WIN32_WINNT _WIN32_WINNT_VISTA +//#endif #define _CRTDBG_MAP_ALLOC #include From fbb712ddc90b1abd3f360b236b03280dc386c191 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 28 Dec 2022 16:07:01 -0500 Subject: [PATCH 15/30] part 3 issue #685 --- CMakeLists.txt | 6 ++---- extern/nfd-modified/src/nfd_win.cpp | 8 ++++---- src/gui/fileDialog.h | 2 +- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c563a6cd..9f1c4c4b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -622,15 +622,13 @@ src/gui/volMeter.cpp src/gui/gui.cpp ) -if (WIN32 OR APPLE) +if (WIN32 AND CMAKE_SIZEOF_VOID_P EQUAL 8) list(APPEND GUI_SOURCES extern/nfd-modified/src/nfd_common.cpp) -endif() - -if (WIN32) list(APPEND GUI_SOURCES extern/nfd-modified/src/nfd_win.cpp) endif() if (APPLE) + list(APPEND GUI_SOURCES extern/nfd-modified/src/nfd_common.cpp) list(APPEND GUI_SOURCES src/gui/macstuff.m) list(APPEND GUI_SOURCES extern/nfd-modified/src/nfd_cocoa.mm) endif() diff --git a/extern/nfd-modified/src/nfd_win.cpp b/extern/nfd-modified/src/nfd_win.cpp index 0541cca8..b4fa5a5f 100644 --- a/extern/nfd-modified/src/nfd_win.cpp +++ b/extern/nfd-modified/src/nfd_win.cpp @@ -5,11 +5,11 @@ */ -//#ifdef __MINGW32__ +#ifdef __MINGW32__ // Explicitly setting NTDDI version, this is necessary for the MinGW compiler -//#define NTDDI_VERSION NTDDI_VISTA -//#define _WIN32_WINNT _WIN32_WINNT_VISTA -//#endif +#define NTDDI_VERSION NTDDI_VISTA +#define _WIN32_WINNT _WIN32_WINNT_VISTA +#endif #define _CRTDBG_MAP_ALLOC #include diff --git a/src/gui/fileDialog.h b/src/gui/fileDialog.h index 6e91eddf..b4a6d46e 100644 --- a/src/gui/fileDialog.h +++ b/src/gui/fileDialog.h @@ -3,7 +3,7 @@ #include #include -#if defined(_WIN32) || defined(__APPLE__) +#if defined(_WIN64) || defined(__APPLE__) #define USE_NFD #endif From dc868539ec98438ca4e8f6fc7bea92b50509bd2d Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 28 Dec 2022 16:08:14 -0500 Subject: [PATCH 16/30] part 4 issue #685 --- src/gui/settings.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index 2abcc67e..2b670184 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -40,8 +40,9 @@ #define POWER_SAVE_DEFAULT 0 #endif -#if defined(__HAIKU__) || defined(IS_MOBILE) +#if defined(__HAIKU__) || defined(IS_MOBILE) || (defined(_WIN32) && !defined(_WIN64)) // NFD doesn't support Haiku +// NFD doesn't support Windows XP either #define SYS_FILE_DIALOG_DEFAULT 0 #else #define SYS_FILE_DIALOG_DEFAULT 1 From 905bb8bf4494317459cc9a30b2fe245aab3f6aba Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 28 Dec 2022 16:23:47 -0500 Subject: [PATCH 17/30] part 5 issue #685 --- .github/workflows/build.yml | 14 +++++++------- CMakeLists.txt | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bcd989c2..03916a31 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -19,14 +19,14 @@ jobs: matrix: config: - { name: 'Windows MSVC x86', os: windows-latest, compiler: msvc, arch: x86 } - - { name: 'Windows MSVC x86_64', os: windows-latest, compiler: msvc, arch: x86_64 } - - { name: 'Windows MinGW x86', os: ubuntu-20.04, compiler: mingw, arch: x86 } - - { name: 'Windows MinGW x86_64', os: ubuntu-20.04, compiler: mingw, arch: x86_64 } - - { name: 'macOS x86_64', os: macos-latest, arch: x86_64 } - - { name: 'macOS ARM', os: macos-latest, arch: arm64 } - - { name: 'Linux x86_64', os: ubuntu-18.04, arch: x86_64 } +# - { name: 'Windows MSVC x86_64', os: windows-latest, compiler: msvc, arch: x86_64 } +# - { name: 'Windows MinGW x86', os: ubuntu-20.04, compiler: mingw, arch: x86 } +# - { name: 'Windows MinGW x86_64', os: ubuntu-20.04, compiler: mingw, arch: x86_64 } +# - { name: 'macOS x86_64', os: macos-latest, arch: x86_64 } +# - { name: 'macOS ARM', os: macos-latest, arch: arm64 } +# - { name: 'Linux x86_64', os: ubuntu-18.04, arch: x86_64 } #- { name: 'Linux ARM', os: ubuntu-18.04, arch: armhf } - fail-fast: false + fail-fast: true name: ${{ matrix.config.name }} runs-on: ${{ matrix.config.os }} diff --git a/CMakeLists.txt b/CMakeLists.txt index 9f1c4c4b..224945fc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -708,7 +708,7 @@ if (WIN32) endif() # support Windows XP if (CMAKE_SIZEOF_VOID_P EQUAL 4) - list(APPEND DEPENDENCIES_DEFINES "_WIN32_WINNT=0x0501") + list(APPEND DEPENDENCIES_DEFINES "_WIN32_WINNT=0x0501" "PSAPI_VERSION=1") endif() elseif (APPLE) find_library(COCOA Cocoa REQUIRED) From dd000d9c04346fa5fbd4a6c21fcd168c430af59d Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 28 Dec 2022 16:40:22 -0500 Subject: [PATCH 18/30] part 6 issue #685 --- .github/workflows/build.yml | 12 ++++++------ CMakeLists.txt | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 03916a31..6c05127c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -19,12 +19,12 @@ jobs: matrix: config: - { name: 'Windows MSVC x86', os: windows-latest, compiler: msvc, arch: x86 } -# - { name: 'Windows MSVC x86_64', os: windows-latest, compiler: msvc, arch: x86_64 } -# - { name: 'Windows MinGW x86', os: ubuntu-20.04, compiler: mingw, arch: x86 } -# - { name: 'Windows MinGW x86_64', os: ubuntu-20.04, compiler: mingw, arch: x86_64 } -# - { name: 'macOS x86_64', os: macos-latest, arch: x86_64 } -# - { name: 'macOS ARM', os: macos-latest, arch: arm64 } -# - { name: 'Linux x86_64', os: ubuntu-18.04, arch: x86_64 } + - { name: 'Windows MSVC x86_64', os: windows-latest, compiler: msvc, arch: x86_64 } + - { name: 'Windows MinGW x86', os: ubuntu-20.04, compiler: mingw, arch: x86 } + - { name: 'Windows MinGW x86_64', os: ubuntu-20.04, compiler: mingw, arch: x86_64 } + - { name: 'macOS x86_64', os: macos-latest, arch: x86_64 } + - { name: 'macOS ARM', os: macos-latest, arch: arm64 } + - { name: 'Linux x86_64', os: ubuntu-18.04, arch: x86_64 } #- { name: 'Linux ARM', os: ubuntu-18.04, arch: armhf } fail-fast: true diff --git a/CMakeLists.txt b/CMakeLists.txt index 224945fc..9e17adaf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -622,7 +622,7 @@ src/gui/volMeter.cpp src/gui/gui.cpp ) -if (WIN32 AND CMAKE_SIZEOF_VOID_P EQUAL 8) +if (WIN32 AND (MSVC OR CMAKE_SIZEOF_VOID_P EQUAL 8)) list(APPEND GUI_SOURCES extern/nfd-modified/src/nfd_common.cpp) list(APPEND GUI_SOURCES extern/nfd-modified/src/nfd_win.cpp) endif() @@ -707,8 +707,8 @@ if (WIN32) list(APPEND DEPENDENCIES_LIBRARIES -static) endif() # support Windows XP - if (CMAKE_SIZEOF_VOID_P EQUAL 4) - list(APPEND DEPENDENCIES_DEFINES "_WIN32_WINNT=0x0501" "PSAPI_VERSION=1") + if (CMAKE_SIZEOF_VOID_P EQUAL 4 AND NOT MSVC) + list(APPEND DEPENDENCIES_DEFINES "_WIN32_WINNT=0x0501") endif() elseif (APPLE) find_library(COCOA Cocoa REQUIRED) From 9a429e3563aea10196aae333caebde3df57fa223 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 28 Dec 2022 17:23:13 -0500 Subject: [PATCH 19/30] PCE: fix arp macro on noise --- src/engine/platform/pce.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/engine/platform/pce.cpp b/src/engine/platform/pce.cpp index c4c9bcb8..ae17d5f9 100644 --- a/src/engine/platform/pce.cpp +++ b/src/engine/platform/pce.cpp @@ -169,6 +169,9 @@ void DivPlatformPCE::tick(bool sysTick) { } if (NEW_ARP_STRAT) { chan[i].handleArp(); + int noiseSeek=chan[i].fixedFreq?chan[i].baseNoteOverride:(chan[i].note+chan[i].arpOff); + if (noiseSeek<0) noiseSeek=0; + chWrite(i,0x07,chan[i].noise?(0x80|(parent->song.properNoiseLayout?(noiseSeek&31):noiseFreq[noiseSeek%12])):0); } else if (chan[i].std.arp.had) { if (!chan[i].inPorta) { int noiseSeek=parent->calcArp(chan[i].note,chan[i].std.arp.val); From ce89080be7bcd469048a4ddb0e4da2490ec840d8 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 28 Dec 2022 17:41:31 -0500 Subject: [PATCH 20/30] Untested Crap --- src/engine/platform/pce.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/platform/pce.cpp b/src/engine/platform/pce.cpp index ae17d5f9..47a8c0c5 100644 --- a/src/engine/platform/pce.cpp +++ b/src/engine/platform/pce.cpp @@ -169,7 +169,7 @@ void DivPlatformPCE::tick(bool sysTick) { } if (NEW_ARP_STRAT) { chan[i].handleArp(); - int noiseSeek=chan[i].fixedFreq?chan[i].baseNoteOverride:(chan[i].note+chan[i].arpOff); + int noiseSeek=chan[i].fixedArp?chan[i].baseNoteOverride:(chan[i].note+chan[i].arpOff); if (noiseSeek<0) noiseSeek=0; chWrite(i,0x07,chan[i].noise?(0x80|(parent->song.properNoiseLayout?(noiseSeek&31):noiseFreq[noiseSeek%12])):0); } else if (chan[i].std.arp.had) { From 2ec2b125af1dbb96fd85664a9e28ebff57e690fe Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 28 Dec 2022 17:43:23 -0500 Subject: [PATCH 21/30] new demo song by Mahbod_Karamoozian --- demos/misc/combat_vehicle_pokey.fur | Bin 0 -> 1785 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 demos/misc/combat_vehicle_pokey.fur diff --git a/demos/misc/combat_vehicle_pokey.fur b/demos/misc/combat_vehicle_pokey.fur new file mode 100644 index 0000000000000000000000000000000000000000..d5ff19e28f22947fa8d7d6bf442c572ebc6ea475 GIT binary patch literal 1785 zcmV?l-*fm(>yGmC&%b^1 zo450_yP0+OoxFWxY3_1;a&dX#_VxO{djK#At?l&8$+PbZ1X1Jxy!%oOc0jPb+W1WA zK7rm_ZH;Y>-8XzYw!An$cWd%O{mRwL*XuAncV&KgVe-t}jk(3;<@c`6EurSuV<3d5 z)ShSd^SrMxYrB1bPq94~0DOS$du;zVYzNr8 z1K@=R0cIWsxb!IIe>d*;IKanG0(|)tz_)tmjeL59|HL2SpfMQz^i z@#j5w0A{ADaC+(HtsA!&>r1yL_rvtmt55;hxw?u0yoqX-r84sKEk70&{O~*QuHkgV z#GQp_4r~s>-uoTt*bh4UJH?ybOUzcQ zsf>Lu-#IhkCQUeRAmO0TaCo#5DS3A$Nk{o`PjnuciDtOYDCLi@DuRxDm$#sbugJpe z)GOzt-}*JQfNeG3z+s2C8g3PYK0^oKLx>-*z#X8%6wk~dbO$i{PCjLLP9F~_PJkmA zgg&$Em(z3px$z1%esTUey|j!U4k(Ub@@cD2Ec@m3oPTb-q##6I5CS5YXb9-pLh}au zOuS@-r~pDu|F2MEL-=6WMlR+D?3F?cYvs8{f7-ZQ~Cchm0S= z@EcX2Lnw$SF9?0f)Viq-8e)2HL9g%1Xz2AC)hj;D^}RGEX8CJat#|&Ne_Q{gAmT;= z2xdT(7tDY-O~RN>$bfojOiW2MMc06x9-M#Y-`0P#Ak4C;TZeFXOXF5Sm~{yCmtp;3 zfLt-Yf0~eJLWWP<;*6hvG3Neh{$(5X7~H=mBYf7z_pecBBZEmn2vQK{I&S<9$T&_Y z!D5fW_fO*!jnD9O^2Tl0V{rePgz!ll-@k_XCk5d*3nGFF{FT2~qE5_d%)*MseiN6` zWQ3=B%9qikj6QAaw>XaT@BEX3(CZMQL_u&GK>`bAK%6FF%u-$w%<*M3g6Yfocm7F1 zn01KpyX0_}OvBUIUNQ~aTl;+gFnDcE%y=dR5xIhJ1<{3V3xXeSnVhVx8OA*dQxI{p zAdaghA18ot(UjRS%`f=6P4_g@g^S*F2E5ZgF|n)uS% zzn$JTzHNcp#vlH~j|(TbWO%{wV}ngWnE&22Z9LP|EmXY6@S~(xheKFS*iq7tT0S>J z{(UHqNkQm!h^%p@=nky-q68@3x76DVsGs=Gzw_U3d{Pj49m3sI4;IIbKWLZ3RTvG= bTN<|tLSHnEdxbmy&OaBw42J&!Uv+L;|4WN! literal 0 HcmV?d00001 From 241289ea31c1b84ba32ac34a5514bfff70ded434 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 28 Dec 2022 18:02:50 -0500 Subject: [PATCH 22/30] move Arcade demo songs --- .../Eternal_Forest_TaitoArcade.fur} | Bin .../Ice_Wind_SegaPCM.fur} | Bin .../Mars_Bar_On_Mars_NamcoWSG.fur} | Bin .../Neo_Seaside_Volley_Court_NeoGeo.fur | Bin .../Phoenix_cover_NamcoWSG.fur} | Bin .../The_Good_Times_SegaPCM.fur} | Bin .../Tubelectric_Fictional_Arcade.fur | Bin .../UT99_Run_TaitoArcade.fur} | Bin .../Utter_Determination_TaitoArcade.fur} | Bin .../ice_cap_NamcoC30.fur} | Bin .../iji_tor.fur => arcade/iji_tor_SegaPCM.fur} | Bin .../the_machines_are_socialising_SegaPCM.fur} | Bin .../OPL3_SegaPCM_Xeno_Crisis_-_Facility_Area_2.fur | Bin 13 files changed, 0 insertions(+), 0 deletions(-) rename demos/{misc/Eternal_Forest_Taito_Arcade.fur => arcade/Eternal_Forest_TaitoArcade.fur} (100%) rename demos/{multichip/Ice_Wind_OPMSPCM.fur => arcade/Ice_Wind_SegaPCM.fur} (100%) rename demos/{namco/Mars_Bar_On_Mars.fur => arcade/Mars_Bar_On_Mars_NamcoWSG.fur} (100%) rename demos/{misc => arcade}/Neo_Seaside_Volley_Court_NeoGeo.fur (100%) rename demos/{namco/Phoenix_cover.fur => arcade/Phoenix_cover_NamcoWSG.fur} (100%) rename demos/{multichip/The_Good_Times_Arcade.fur => arcade/The_Good_Times_SegaPCM.fur} (100%) rename demos/{multichip => arcade}/Tubelectric_Fictional_Arcade.fur (100%) rename demos/{misc/UT99_Run_Taito_Arcade.fur => arcade/UT99_Run_TaitoArcade.fur} (100%) rename demos/{misc/Utter Determination YM2610B.fur => arcade/Utter_Determination_TaitoArcade.fur} (100%) rename demos/{namco/ice-cap-nc30.fur => arcade/ice_cap_NamcoC30.fur} (100%) rename demos/{multichip/iji_tor.fur => arcade/iji_tor_SegaPCM.fur} (100%) rename demos/{multichip/the_machines_are_socialising.fur => arcade/the_machines_are_socialising_SegaPCM.fur} (100%) rename demos/{opl => multichip}/OPL3_SegaPCM_Xeno_Crisis_-_Facility_Area_2.fur (100%) diff --git a/demos/misc/Eternal_Forest_Taito_Arcade.fur b/demos/arcade/Eternal_Forest_TaitoArcade.fur similarity index 100% rename from demos/misc/Eternal_Forest_Taito_Arcade.fur rename to demos/arcade/Eternal_Forest_TaitoArcade.fur diff --git a/demos/multichip/Ice_Wind_OPMSPCM.fur b/demos/arcade/Ice_Wind_SegaPCM.fur similarity index 100% rename from demos/multichip/Ice_Wind_OPMSPCM.fur rename to demos/arcade/Ice_Wind_SegaPCM.fur diff --git a/demos/namco/Mars_Bar_On_Mars.fur b/demos/arcade/Mars_Bar_On_Mars_NamcoWSG.fur similarity index 100% rename from demos/namco/Mars_Bar_On_Mars.fur rename to demos/arcade/Mars_Bar_On_Mars_NamcoWSG.fur diff --git a/demos/misc/Neo_Seaside_Volley_Court_NeoGeo.fur b/demos/arcade/Neo_Seaside_Volley_Court_NeoGeo.fur similarity index 100% rename from demos/misc/Neo_Seaside_Volley_Court_NeoGeo.fur rename to demos/arcade/Neo_Seaside_Volley_Court_NeoGeo.fur diff --git a/demos/namco/Phoenix_cover.fur b/demos/arcade/Phoenix_cover_NamcoWSG.fur similarity index 100% rename from demos/namco/Phoenix_cover.fur rename to demos/arcade/Phoenix_cover_NamcoWSG.fur diff --git a/demos/multichip/The_Good_Times_Arcade.fur b/demos/arcade/The_Good_Times_SegaPCM.fur similarity index 100% rename from demos/multichip/The_Good_Times_Arcade.fur rename to demos/arcade/The_Good_Times_SegaPCM.fur diff --git a/demos/multichip/Tubelectric_Fictional_Arcade.fur b/demos/arcade/Tubelectric_Fictional_Arcade.fur similarity index 100% rename from demos/multichip/Tubelectric_Fictional_Arcade.fur rename to demos/arcade/Tubelectric_Fictional_Arcade.fur diff --git a/demos/misc/UT99_Run_Taito_Arcade.fur b/demos/arcade/UT99_Run_TaitoArcade.fur similarity index 100% rename from demos/misc/UT99_Run_Taito_Arcade.fur rename to demos/arcade/UT99_Run_TaitoArcade.fur diff --git a/demos/misc/Utter Determination YM2610B.fur b/demos/arcade/Utter_Determination_TaitoArcade.fur similarity index 100% rename from demos/misc/Utter Determination YM2610B.fur rename to demos/arcade/Utter_Determination_TaitoArcade.fur diff --git a/demos/namco/ice-cap-nc30.fur b/demos/arcade/ice_cap_NamcoC30.fur similarity index 100% rename from demos/namco/ice-cap-nc30.fur rename to demos/arcade/ice_cap_NamcoC30.fur diff --git a/demos/multichip/iji_tor.fur b/demos/arcade/iji_tor_SegaPCM.fur similarity index 100% rename from demos/multichip/iji_tor.fur rename to demos/arcade/iji_tor_SegaPCM.fur diff --git a/demos/multichip/the_machines_are_socialising.fur b/demos/arcade/the_machines_are_socialising_SegaPCM.fur similarity index 100% rename from demos/multichip/the_machines_are_socialising.fur rename to demos/arcade/the_machines_are_socialising_SegaPCM.fur diff --git a/demos/opl/OPL3_SegaPCM_Xeno_Crisis_-_Facility_Area_2.fur b/demos/multichip/OPL3_SegaPCM_Xeno_Crisis_-_Facility_Area_2.fur similarity index 100% rename from demos/opl/OPL3_SegaPCM_Xeno_Crisis_-_Facility_Area_2.fur rename to demos/multichip/OPL3_SegaPCM_Xeno_Crisis_-_Facility_Area_2.fur From 72ff7ad11aa1f9699444d4b81c4959011e873fb3 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 28 Dec 2022 18:10:16 -0500 Subject: [PATCH 23/30] MegadriveOverdrive by Crisps --- demos/genesis/MegadriveOverdrive.fur | Bin 0 -> 127852 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 demos/genesis/MegadriveOverdrive.fur diff --git a/demos/genesis/MegadriveOverdrive.fur b/demos/genesis/MegadriveOverdrive.fur new file mode 100644 index 0000000000000000000000000000000000000000..cc895f8d6bd87a52ec016b747debaa1c888f8811 GIT binary patch literal 127852 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 z z-}U#J3IhJ4SD~$lo_Zy&>upTJIcbNY`~cYtb#%jJr-YoHNKO-jIeN3)B|Aek36AXT zn#|gz*|)*pIoUh4t#H# zVydwc7}_fHj`7jUH>>H=7)bNwCS8xkiVqv*l+*1xgTHjXS165%iJz=7*NH=C$)rL* z)9f23UWE{pOxjV%VYKB1h@;d!n|9>PLHzBc_*ZvztbxjJs$ZvG9wmBdM}KimNfAN$L24~omrqD_h~g!~3T z6x4Wi7Z%3IxR+&f$H(%PeWpeM<|-9DeoOb{uj_NoorMjs@!Rsh+uK_+-);DNwVmlA z`z?h8^?>;7$Z|hsK;w^=t zAxcf{{Tk_{ODPPI_7tn%_r;4(-~Aqwf3PjBkwDg^0@1A>(V3C`bZPU{J!7 ziTLru?jC)^*(a(@vl+or&m)<-(0L2%qYDr>J4Jo{m~mc<`g>$x}>D3VKUg&qS8;P02Q+NgKHvK ze&&Z91#bLFdNX}4DnRD2PSYTCRNa~WCD5Ny()yq=EcCm~gMbA4m+7nPg12q)J;qCv}n+{z>#>w*c#NJ(T zxa9NpKnOY~@d~k_Y@6)O=!|%5i6D%W&^&>$rBPW^Ncmz}*Bhj7K{jiTwzgKIdh}tZ zaava040f0N6$4=Zkm|Gp6Gf`A_4}lHrGmtue}OMJ|07xqkbJMH{1+TMgKL-=ZMfD$ z((%iQ)jjvs{!Stt&$D5>x9+20g`jqgKw=>8I|g+vb=%d0J!X1kYW)?H6Sum^hdT0E ztX{V{H&%JjxV))k-kq&JMY&Oy%6d>n$NXZ9 zL7pq;JTi#TTsHRzv*X7pntnr1L@cjH9Q0o^P2Zio!QPVNEho7+5;=Kwk% zXA*@!hS6$yc*;GlU3WzEcDn&9dbal>V4~VoPMlH;$`2Am<12Z78{SOMnJ*CsG>wWi zW7_T=Dtw`iUfMIZ+SHf_4tLXqwI98-aetzE2Hr5@PZQetO=Uutb@w&iQLf+(k?Lqz zng#RE`#`2lCJDa;$|nsP2=A0?WMk-L82pi^A$dw-(AiFN$?f1oPKQG93%-gjI+d+G zXBK_Oqm#osMt)BCVu#?E$ggkp_c+gbM#!9{Uru7D-3Lj2WJi?8g*1p zP4(3JSDPfBPFj&^G+IU%?c>1_SlIoi5p7A0(s2u>KTI&i47%2ygw zdz>Vdv&Y#0;R*=4 zI}H`J5`u=*{Q*xtKt^lF>Hr06m+$-BtvYD)6vr7@wLw?MF`#JTu@kg#`Y`DJ_m`7i zXngABHFJ>E={>L$;)ic`^kxbMdX#k{MxVD|tjW0h#>sNF*EN{jI!c;Vz9A<>#5{3V zCpr>s996e<8LrphLuzDtn7pDGW#lof;)m13w(~{guj_-hvJauTbAJvWqZ%z8p%-#I zZOmieLTyT)TlRN>|Y^_c@#etFYTmUxwpUx^sySFTPZ1 zzMtw;rbs`y3E(3}*JQ&Wc}A%fB3CzJZckp@w~vis)7c+L?|Ei8XnG4i5cbr6Xt0PW{f>GIc%k&bNR zjN%$=V+>u&Bi@)0s;4*%z#VbQxL2-E?f!7dk2&2N`q=$l;6GLlC_xTSjng=p9Z9~} zgL8MB_1XZI`q>TYJIL0E5g~R{cZ4w&VK!vL-J+A}c#IYFLNNP!7UQ*F6R*W2W^}Yl zP(5u^hl48dz|*ldADPCRmlL(>JLwy$N7xj?>U6=#dF$;eBDI&&qsvp2Vc4ezn#ZoJ zA}CTER3I&e_<^)3G&z6K4yR2BQHWmx_{)Wk=$?CfW2g&cFnrj!5P-y;{?-V4w5brP}fQ9 zm!)uSW_RuF*WqQv@8pNuwZHD22xA{(?+62?#s)zDVz2nJ31ZbMf&<{A#B~Ne|M}on zGj}e`Tg{C2iNWxE6XMmMSh>GZ37XR9*HV;*sh>;f+h9S&H7v@G6qiz&yGnH>Dd5zj zwW`1Y>?oEMaCGNCQUD%iqY*4q&&W=dcaHmr1h{(qYmHHh>HY)KfuK|%fE!5L;p|4} zaqrq~W4;~IB+1U7JOx5vmvm~Z-60blx4($*oLKeNow>ao@=V5r@ej`516vlkWd0@p z#zum@r6r1>*nWZtbn@*wMg#tk2BK#atUG`90q96-AbV(Q_lM6k0jYn$AyY-7e6Z?{ ziO-s_bY{*-9F$3k`rvgf-49zivnX8+wQ)`v_yI-=H+pzC#$ ziTU-ly=pG~`sd>Wu=q2+iZ7eL_EpcX3T^Zd{}Q59_s`P_v^YWBcSJuF2LaTTYifTZ z3EdfS=XLTT>q!317v@k#G9>#=I>e{mT*5p?OQf>zNnT;htm1TlXIXNzsldtFroY`W z4|8c7mqo71vlj7(g_3-EOfy^e%fGGva$bR8PU5Rn*wxp~&!Pe3tXKiUm~zFjEB3W& zx6fmywpy^ts56v5IZZKj*j2x;>Rn(s=^t=}0@;N= zhv<;ntVX3N4%~d;egBd^E)^fVTd=D<0WJ7L_>$0xzm&FrHd&R`juyqCt|3bB1JW_O5mRVn%cN)l~e5gRWFus ze1|Td>{x>5z~xA?R^id*mCNB96s##9^EP&L620E4>Zm(I4S=9bkf3-a7?ffyH#mTz zc?0l(LiSE86L#4X!)AgBBLy5zyzseE&Qx@3oG5RsNlXuCYl81!bwr<2vtS)>oDYmi+gJ5sJ3T?Xn4+J<^-Y z-iWgCXpff}CjeRDWoK*6xz$&ell?yIq27tE?RrPN+Ep;pqBJq&5EeP#`xs7_- zNb)+Pa5Sm(;wJ;g!(SRxFGssR)s{C5&v%)_S#!n{M3GQ4*Vh#}C5mt+*|@jvKd;H; zP=N@7mEM0?#8<|~PY;mLw8gew3-<4os)yk3=~6KbC+q{R*_CZMNjsz&`$G;oeRm$e?lkrzKp9^6a{u)UQesFPVL(W8xA52B zV+6FR@p7hm7~xg>{ILc6%bL00o4WsR9+8_q~uTdIwCSV12!Hw<`Zh`6WYeSbVXqb5PDs8 zoYjcdHl{b9Z*AErLJX20GJ<%bHXh?W`k2DzIm4GyRks(xY(|*`S|t*Z_m(eI+E;d0 zW*XMSlA4!##zbI40bR3$?g$CY-k290uvD=g4{a(kLDkh z&Y+SG#SelGC>}hR@JK6Torv4v^D({E38l^=MDIZRC$0Ai@X8W|SQyvmzg-PVAf1{~ z+M`-Qz~*o3wm-6{K09H6`OUfTNKhL-8rxXMCnS;Ktt%P3lW!K*=onJBNzvkscoLQy zvTNiu8*BIRckOM?@}i7LS$G(t2Z|r)Upd~xV z5?I?V_2oGoGJD~64)!CKL}x*HU1G2aISvuqIW`G8F!TfanYcMH?uuBd|NIW&p0o+o zMA4Hq!uN7bHc|b11|f|pZofJGCgHzNFK=W*`o$^IX*&(BF7VRMhxC7yho>G^@-Bq3 zwvlApgR?*M!{1#Fk81FVkmfdPcZ%7{8#U1Xk*Ik%grG$dV_3E|jRkuo?$_Bd9(B|O zL5inXO+zYS%lX%s1<;L43~y(rr5v^j)0l0>sjo}j_FGBRPz9Z+q~Q?ck1pR22J-l| zx8>ft+Yu~FuL|=0`y8)x|QXQ9z3f1{i^hDQf!G+I)&?I7@m=M{ccIh#=!V7?-#{3OiF2=CZ|ItZPBEp z%dMFM^xTBq`E#Z~1xxMx*S0%<=?qOG>5E?Wqg8)d`N6EM7LySmWhlu~>Lp;wdHc97 zJ&yt-ywfsU`^a^qraPd6_ByW%rj$J5-kN3~-Bm~0UORuTNlZp8xTY+tc&6h5h)*;+Mb@cmJEKg)I;VHSFyQx)?HDw;2!bsWX!|voVUrx zNYxU@Lz+Ye-N@|0-Pu#sLtN)F&S;?!D~paZfo7S_12qZh^JN<^CdCKl;V;!eL$|ga z2d!U>OH<(G2!I8DQ<{A6EVzo8Mj`N^9%dF*#atuzqa)<-2U`B=h!S zqLN&^s(ulh(ID+8X>cDqKI#aq#9Bg zRW~?#7Hj}z4SpZo3wb5vjje|wV2tUdu}(OuW3~IjthXj`{^QkkP3>+T8Xz~pwj4aJ z{dcqs#dc+FT=x#p1eo7-^(T4sKXC~R#R;T?)(|@t=!@i*+n(5wBRCQb_ogb716oFD z4=x6XonY#YDFk-Ws(T3jcYgKrGak%{8lhFvu^Bq6r8AnpjC%lBXkF8ot{80xbRKPW zltp@=?MM_b#3C4}10|B=FlB5;@c%BO!RS}5+O{~DgiJLhnS(YLOw{9o0`X5=h1FfT ziZ0(s2)aI$1-#Q;F>(!nhD(lTKS9nnHi3Us0xe~d6?SZufsbFk3d1EIr$L-JF(l#P z`0YJQ&3piq@bAB4qFIzIqFXU|)9#~87Rg>_Z9@Xn`<>x3oK+FGlq|vW2{J&8(CIkV z+KBELvv6hJ(NhKlGc@{p)-1Ar1rpdeaIg*t8t!h4J7TP@Qo3MYxofdyD0Mu8RQJ3kV~$u;_Q8U&ZcK`&i~_@c5uc}?16qYtLGBH@`hU564=r}2 zWzYc^m4CK>nr9WOMZMqDC;FDU(W}9UdI`+I7ZXY!{OtUZ;<2x%L5jcsRQbBE4W0L(8p5p1%^~Wu!clAZz>esFS+Oao9h+N5D4-Ll&O6OkKM8@zPB1vq_@l zC-It>UoPoV>6@UX!(D}vgej}DQ??QS(x|Dj~;{|TN-u#2TX3TE5kA4#* z_07!nR72+yMrl_GQk&$rQeIj$lJ0Et*6wM50&dd>e>sy;N>$-6r8bJi}KAeIhT41|H_k=kJQXs<* z^3t)S5l#*Bua2S1lPbXZJlcQSe_&$Z18*WK4TEDd+h0?~UeGT-{c4nY;2@n^ zOctip_5~O=9|{U1K7hjcp%|hqq4e4=XAEpq8L#y$Zt+Qum-v{D^pC*o$Q}4n#dRj) z{X4DvS)cEVs(Q#cB=-0wpIujiey57Qsnzbcgm0GL$a>55ea*P7 zl@BL&$!GvJ0O8xS^YO+29loXL6F{C|a)`$H_%AaH_lbThWfs2M!l7p#R1Nes{X9w;ezEn$Tmj198|dR?1J1MXn72VH75*C8QPLDp)Br9TwChGej~P zDkMnhS`!A<9!z>W^f!Pg+NNJyu45p9wSn z{i)*a7{ofsQAe>+z|q~Hqy0??d0mHGSS>}w_dEn#P?OdVU=H z|3_VftRLs@=H|xLk4QoR)Dv7`0s!GZ+l%W`CIauA`MM#OirwDZ$!|>9Y%Nao^(SAty;Obc{;B%k0PtcUvj{1R z?PoW9@SgWFJeb{usxblylnRzvbwlD1kss)XD~Uv2F=E$lL0#7}j@P4Bj<#Zt{V4e| zqB+93df>D+_knW4Xzn*Um0~yftuKZ|ZV{-AYCklJRD~Mm3!}z%gPUOK=p#R>bq40t zA1m}L&|e4NqH(;9>EYH)Efv9X=u+*6?l~+?y~0vN%tFiWNX+oGgB3NRrHAc52~s&@YngpbqWm z$s_p_r%V9nu#wsoZVUIE9f%PlOtSm4?P|1|w;|^zDjSE@X^=*6fVehp;Py6uk1G9L z>?1s`y3c!5vZ9o^Jh*~<2LQ+`kTZmZK#Yr*!mRhoSG9uNSfk5UMi8yUv<)ka(dEl) z`U3iknC|a@?vje}1E|iml|&iO`1`KSGroRoVl{%83QgssKV7`Glk6*Dw|Q|?Yy`{> zY?_!~$11OV}$;n-_)()GdEVaBErGk*LvOlh>*K=4Tv%W>S;ciNktK{pShVu{o zM%zl!r*sRK)fQB&_u9P2&E3fky|?-dCE6!u6ZmMQHdo;%)zK7KoWcP<>ke!Pvcg*Y z%9+Vmk#6c4#&s`i)QkmWaTC5?3KW(9hY zt)GV>!o+7wVF ze%^jxxzT(|aHyY9Z?Brkz&ODvUP zMffE7Z9gi8k>zCTcslzjvdDOO{mBal!ytC>Flhxxm~ZVl1o*nHCpcUR>}TB(${ciP z>R?XDSbGC)JG2Gpv)AXoQT;ehJxcYQPKSphbC;XgRxjPzZwiLu%}n|Y>X1wzJERiZI^vF=ng{qbWuv)a%~z(uyobQZ+~d~Ph5Wg?d7cAc zxo|7xQX(a>W7u3!=x#*jCF!(gim&cMgQ!X>1Id*UrYk($8_=LN#eZM~SKrOW( zpCy*vPO$ZQ%lg-d4p>8HXC z?se4QbDkJd9@p>>hE|(Hw|nbjmF}VF{@F*RujQ9#Y+9PWdaPsnB2|ZPr{4VaJi}M* zF6jX&+W(i?^xxM2*`+hLRdGN7sEKc(ZU4ic+djG-4BY&3=SpX}^O5;P93o=4lH^7p zAUh@<>(mF=+f&!vgtvKF+QJhAzjAXXT`DfH|F#UgA&tT*oc#v^GnCIm1W7H117PRt zqYinAknaD*FaF+=c_1%P2Q$-&(J^PX+ht=+)%%bT zVXPKt@FVHKfy!=ig5`Y7CTO1)Tn&$6$5vMtz90I~MGBf6zoDXS5K zbLhabwEG&c7-9;{9+GB-m0ab{CT=7A1jOov$ETJ=9dRE;z9gT{sgBeVjPAUq{HZ^D z(8@86^++L2ypTd2SQ^Vnbs*p~`&JsgsN%*lZkd>l)N2z@J>`*uX4^XkbSUE}EYn6V z%-;WTi7!N|>@}M6D{u_g^UG;viic-SGx6fc`@Cy)Fx_b-86KbNVP$l-nM&b8qCiA% zaeqC(?sVdxVyU!2uTHCc30CK0xyPnzd1hlh)bf6SXJ_Ap*AsD1>&XZ+aOU{doDEm7?7&hZXn;_Z`W$6nt{dS8BwsyZ%M|Wa!cx zD~?P(*#kZCBb608Qt1ajbs$IbO_Vqc#n4ZCIG>;QHYTFuvUvYwcUV zM4KeB9_{z(Z$+3ft?v$w(J2~mbMk&Y)dJzw`AuvD@i9&cRyAA8jg9P}Q!JZBY+5dN zL%w{&FJvd$k0&GhS~bm5&?#f*--6$8_(HmqPbR)vou5dRDVWhml>68z%s$R>36``-f>CmtgL%YyOk3m+>x!p(`Dl zA42a+r9;vmc8r~rZ;l{9-&aBZ?)=u9!1)4tmLCiQ&~XO47Uw7MS11J37s?0>1Em0S z@u!l#XLe;US17;LSTGAF=fakxOP^=Nh#_!fG{)dPLu12 z&PZ>o9DZNhx9r^Tsbm6vDT}RkqqN)ApSj^viV*lCgGyI)>c}W46$amC+f!L!mc>^|4FN3z(MXf4 z-YFOCFA&?gSHOWBX8MUnP2Q^4om(s18L|P6?}*<&E8Gq~0E-i3_b=0oA|!O7cQL4* zMyq@-aM5wS+{|uCXRzJ;zvw%BD(9PpMhra4O_v^o4Cac6WH-eYWB`I0qm!lb6nlOl zJ4MLA?R7)d^J+sLY;LAQEurUo?pn1#l14t5erj4aU{Bo4J#kD?05(G|$=2RFJo}2B zHBpkw#78$3c3YTb#k}rCui|Ytkt>VBkXKx6;>NBa_1^}+uzfat=>CuPCX~U%;-e$c z4Kub)dJ5aatn9g@xSMvrz`!N}0^oW4Dhl`w0mtj#UehmsQ@<=|lu09Mh2DVi%9{vO zPv&8PT+PlZ#s76{?4kD+9x9`Eb%$u`1-KbFmuv0M!wU@B6OZu@Lvt<4W{WPK#UsK0 z%#MtzgM%kb7|d&~UR;wh-S7C@_QxJ%qj<+Jk`@o9nvFCq@8M>zm;?1Tw7M^cGGXwQ zkk1wsnG9kIQs9|rh6#DX!f&Ia&cA~MSWsN&>GT-R5{BPB_h;9J;d=Y|s&jCoj!{|K zIGe@FwWD2Om3GYUEMHiVqM2~DRubTz-}&zmy}j2K_~X$oaMpxD>p0Jegk!p(5&!#l}iL_k}ApUbvy~2R=j*Xy8k)$UZGS>GL*sEn{nSwbaD^7v2_e>0Ta=8TB<$uS%3mjV3 zgLrzk9~_2QPj1aWbw(J0mO{a=2EfUO-16PwmKjD%5?x*bK8!wV^|sFyg2l$f=E}7% z>m6DSOKq}$e%Ur)dzN3|*4O8i`G5Ej@uV)U{}nep>gqJLGaCIiKKSU=9xhOPoq(9V@^i zWBrdT#j~q3owh%HK51KhtjwZ-_SUo}ZhG~%Z`~pHq*0Ed5ne8BQyc5|xxVa(k`(Td z8QJwSlBp)>drNq4nrB`V_N*oS9$GP}phkdwu4XvszpJ&*v)Y1uK=^ks(f2sBCVq0y zGcS1ZVSYp7i1M?~lb>fCK7QY-k|=8uOBdng_eqwED^AOaCGyWx9caC9?}WT@5!;)b zxX3E`ZBk3~&ALn_O=rfi@-=d0&1;6gtTxj`-PwHP5=J)=r@|BTkv%Nf5e;4)Cp^t? zJKRuUf-_z0T2JdEjfWN`VO?*DU$H0pFVM4VYxs=KK4in;6l^ayW@YI)YtVJl5Z?~u zQvt1M(z?j9#c$5RVD+CbIA8fk=Y&yY3xDN%>|-^q7iZ~a<*9d(U)l-hrf50?%F>Ks zw{&$XR}B=`{8WMpFgA-jyi;W=RHQ5n-u65BXP~U|tkTSySN>a`d%CP<=_cQDskjdJ zyJu63DpCQWU7~31Hz~;(@!{3U(otx}lIPAUYIjU;nYGzN;~MWP^F05p{9)B>!({e1 za!ZfGh)2!WEztPw%R;a2->s-$|3OT=+ZxPOI6-(UZ)U(zqWQg7$2#MGwg#NiMeNj7 z_lK*?!LxXhKpX21FP9xZudiyw!+fF?Gc^z}_=_gF`%&qLs(6&lf<^kHG%)tI$E-x1sv;aVMk(D9>AOC-YOkg zkBOn4r;`=?V-dcaPsQivGH6(R>@x(_)x$A7zdkR;=0K)d^-5EgY);=3f^BnGs)X4K zbd!@`F?_xV@}Fthk+Z~nA3g$04!YVMX?3KNgmfo`_&>n}9J)Q%VmsT*S-T9B zqwUg6$~ZFOshY3VkP{?HxfSmlBSeqrIZk<16iej}R2rYbehoCUHOH=e9xD2y`L$|b zW7~J`9-X1s+C3koMEqW4)!^`t4|d8d{Fz5{ZB3&-FiuM;XBn_Nr|nbE&b9X5*QeVJ zpEsPr!PL z5Wj9{ zXU|HdQK#MF*CoXeiyW1J+S*IMh)>Ziq0-?OEM;_(FHRfZ)J3LfH{x&ZylU1m-D>yx z;{02{fii1*DBE>oIcVwMa~4G=2+HroEB#kY@Grur=i38|2V}Y#@AdD z$`$f<_;ZiKDp{cEweAktbzt$*EB{mT-N9R&&YolsOg9YBg0Gp&GrrKg_!GX=Rh?!~ z_$rGt{;c!CQTJ*-uG;oLde~6apeVWKH`;-2WgK3n>R5kDBafwZJBo6mRnp4VsuX$} zP>*qG!Ice>8b#XOr1609vNDrBtjp6D4h9$JHcjhqOrjwPTP11GC%RN!>k z{1SjJ?20TlC?>fX#tw$xSOnv^h+qLYwH}oa)$mQF&go6Sp2n8rzS%*<`M*n*Ad4xj z-gJ!VENkD`i|k>EhXvW5nEkoGr}H&E=+eZ5`IJ{N2XTyL-4!jJ*t8jjUsM(3($a-g z8!VG1S!Q$^PJdY70|r-n@9dU3Px7BO3)U>J#Lf!*BDAb)owNXkxqiC{iK=8iWIYG& zT!lP98JHrevwj@3O4sUk(FGIF4h{u6oZ@hgE@%49`rxo>dg)G1lKWIXX|?xm!mp<+ zGr%&bW52d#<)C34eBUVfxZqy0b&$%H&DGA3JSOO|>S3fKnqYEGGqd0X5NXL?X0W+6CKn^8DgtMCKW|Gj5vR_SW#dgqN*4;;Gj z)85(?sqMax$&TsyMQ}H%Kv$Ru#v2XO573;V7B3&4D{S!`z506qx)`$m5#94jz&{_g zA_1RNOJe8wd7_)|*YH%q+6Fi`x-v7nSzuB((j_2FKX{?x%lqk(v-!KO+9!|QALa_Y z5|DjZ_4Rad^Lg&i zA98;F#}s1J>PKyBX49zs5_B?Knba^lNQ2R{LU|9%>d$28HKZ4GHpT&nn*VOPCm^<( z_L1dDF*{QAiuJ7?L;(B-af0_M7EVyWfiUB&vaZ@?v$7y~ZrSF>v-O?=_paiu)|P)CA_`W{ z*99#lJtAol-3i`!MTY532%PWGeNz_!_?r#)AJP5eJ}$R$nSgi;yAR{E0s!1dOyFeh z0Wx=rEAlPk$+%bOMNerD3&+@w>Z&S6b*85v^gOhTjF;>+**&r?ITcu&-^&Xswt}fy z$SQb5lDQycRHs7BLV!EbqSYqZ3X9b!4`iSRvA zfNnqE(hHOr!?eu4*EncQxZ{l;^h+%}(H&Xh*V$cNYsgYm2@o4WuDlnH|A?Y&q|pzY z)fZCxjYuBgHsF%r8s;!QqCOPdH$3uj*>fs!0nP4z5Pr94)bTy&rJy+`T`!kEZ1e5) z3kdcyX`q#nmr0mG>y4y+W-{CSxyfadT9m^-(RcLX{KbcGFY-0KMJFJD*YmL_z2};J zwjFMqe>iVI{y%VjQa+mMX%>?I72ERrnYWt(MaD1Qhiiwt@4VsjNRPYhUVI0v*`;x| zk+m(hb-E?1lj|2#$8m>`^LzKOAeEpjm))a`k%ztNQ%lj)I03`{fR_gp1%x2rldb^e zK#Qb&7>L(J*Qsme1)=!IqtfX@wa)HFxL>s|{q=@iCGJr{f#3@75ueoe*8g>@ZCut0 zdzY#3jf_mD4JY8wr9aCUi0lmFMjsvwO!^CNxD7&sfzmoS)@7|#cHoq&%}Rm1(grv{ zas}C|Ggmgedf6m^Mi6fWvj<%yZG0|GIm>mAxDEm4+?%q#`+>_xG(bWgUwT+QZx;I? ztCigy&{53soGVE3c+(=&!!^KBeWI&qIHUY4Zi7Lrc#xM#l(9cIp3LfOdr%BWt^TvAVXjrX%e*Vud4glO71)7x*FY{DrH!SH?NzGL08?TzZD) z2cNmIIprsxo9um9&taT#oK{k=WN?k=^Gb)GX9nI{W2R-=M(?3h z-(eyvOUoYylx8=Frp3ncY~LFuCj**mTAZIx`!viyJNhtrVB8UaYjw2Yc`>=+@x*V% zQ`D>5UuVRAZLq(2*5EW`8$(37y0N(t-D=lVZm3Y$e4Oh0Zzge|dKbTp3a%-v$*6fN z!6X5j%E@!_d*-X-x#BtJ9pdXZ)cfb(NX~;`nqaGrx!L$K7Ts6N5(Pdg7*ym+EJrS* zi<(RAR*4~<;hmuw@x`R;@J(xLTj@`{u1W5^F2CK-GZ}MF)+ouu)X9_{-qMbgX{Rx_ zb2)tr(S~Wct1lW~rr+tB6#v|W<`K897WvQXKkmd27s}1dpC~^`SI$%_i+YNF673q5 z9(_K#s#&6Gt$9atMUzRBPO~xYBF>#Pf_3Wpyq;){NR!BudqpfMH;0YBzJF(U{NeoF zHv=Z4mUj;Ch;)mZBK7#&RDwS@Df1vV==y?lZQ3`1`v{ivvY#U5F=g`K@78*}4$~`q zv!MohKWUQmM#9qYz2ASk@#D&zoH-wyKONkt@O*1F!b$_6F{hC{6O^W|4|;F%QS(vi zLu>JWEDsn9sl!*vb;uL(Nc`K7pCRml)Pb&nm2IznF}J<>wI+{K5K}l@npnDq6ZI7h z|LVK!Gws(MVja&u7TO*-fcjm>#wR)lGKTGX)W@Fmd>se~ONDqwK1k~Q5*BM+(EUv% zT_tiOydbeV0?wAtv@U-lZtAu&_2l)F&vPwvnIBp{h-VBvihp$LQBoRp%6zI!T7jVR zeZ%|RZ|B|&YX&6!6)0t}q9d^uJh2pj8<^i)yWyj#d7CxfyjOatLgN;HQQg224o8l2 z4*n86+fmTrqNt|mr6{OD>p7zE*G?DRRggcGSfAkHLWr= zu>5SL(Dh5&dkEd1J*&gSv%&jMI-V&!`SPr3&OKxi z3pZzfkE#@IO z&0$%-p?#zB2CB&H)zepNnZ-cc; z;|h6`W#dOi7j2&!G>frnzQGqSE=+y-z8}loJ8mYmuNy00a4%FUxQKmnTV$EnUPzhO zTwGbi&b_{2wlJ@=P;@wa_|CVh*`!(8!@Sk-2b+PJ5voLJ_pVfD|4G%;GO|6FB5U`C zFU1R-HA3aI6~zSNnW8_T1gmjDycoT(h4puPgKB@GzVO24k&C5s`}0o>I}D~iSX6NR zJg>Z0TNkzTIIaks)Ph;d-GcO|q^APqa9%AIEe0(nE!HifJ$KP?hef-sJ>%_+-F=`0E@XQw zS<=xv)&A>4i2RGT z#Mj?htU%hW9IcpUf0DY-p-IKz)t$Gi4<*5fuajs^ChUj8xD(V#4P2!XYOQiG9Na*uUV zMTe~BevOI*2u{0(_;u8_*A^RK93UTH2a4+9Q;i*p8_E{Wcg%{8UW}5A<*p*1&>{yM7h6nYfifAFZ#ua`rO^iuwI0b2&!Lq>B}j=Nu3jBjZ7Erj+|-YB>q z@jd)IV-Mp>7qct-!@HYzXBfS{@NPzaifW0xipr0qh)R!q9O)RDqpq#a8|xDn6I&YB z5VOw0eOH#fmT56nBvmToUUtZRLH;hP3-zpHWd$0HW*|+}!<&YK#;>SKI0PAY^z5Hz z`jtz*`_%jC=o9)d^Y9Lr3zy^*`sU$gv*v!^555{c0_WxDumdwLF|M^|c27s;(iHT3 zw`0yq&nTGnX7A3@=nFSm$|}4|eSz}zCZi3G4`$0`qh%A*z>v*oJOxGcPe*G!POjl8 zY5sBZqCzPMvH$eX{lsFi(3@?)7sCgO{@^1Ok^&n|5|-aLiqHD!Kba zDAahTflnAt*rZpWkEcJT2OaWFLuO{@gUeTo1%7y2bi9s#ag^ck?RR^70al>d@=vim zs}d{24wWEp2`*0dcEfGC9q{m@2#N1@$)jtjHJPTFcIk7ew^-d-T^KFc-?IgZtqDZl zwPBuP_1Iz9qTTv$&-vfR-=eLVy^zVXOv0mFzAAxul|~Wfrvmg8++9!dMXT>6K57;= zVB5JBb>kE*k|Ss$Tk+hPZ^R_+tqp?>>tH3A!bRw0OF3Zdu)7di2o;zS@p$8Lr>atLkAf24((_Qo0tsH$jazUd zb2)Q5x7#aJ|0TlJN{aAm)LE(SDM@db>}YguCCN`xZp!j=SVw->xPO;<$;(yfKHs0D z>zyz8MgGaly|`CMC$95gl3$5YlCdO)^Ynd<{D{2qJ=$&Hw&S+E-mRU4pc@1*)%o{@ z_X+#OPX6cO=l!q;_kf(g3qyroWfv*Eqbp~4V_>J8#H#bSkF`Du7-vuMpXr8Thf$Xn zG}uAdyCcvg81-!b-N^4pf9_vg;9S8BM^VbE{<-}M(^Ht%Zq!k1xj{J6Y@#!8f z9bLFI`i5O+VIU4(-P0k7NMJ@YTMBatO$aILuz{@z8>juZR`Kasoi|td;E~yWq2;ruLcb=F9ZJ_YDn;TK^SAK(NL5Y%~ zQM#Te{cG?s@j?7U?Sj<&0r0Yx!R?LPu`|~vUW_!%tMKGg2W;vpNjLwcg`M*4EPQiWm##IH;59q*UkUjvf@M*_D3TQMn^$m?Yf87M_UC8ADHFHtV21lms81lpG< z|GmJyqra8Em*X4N8#!eQWY1;kXLo0-^}Y0+(?g_^zcKS{>1?^!ZrE~^b0)s-(9lWN zrt6@eqRZ!6;R}%wd1ef_tMpwd^xm8Q0Zl-%zwJNU&)MJAm(usRF9>k&5YPG&`o8r2 z=o{7(iA=ojx-@3-s^?yv6`A9y`LI~X)LKBzU6H^e@CV|aP^`Uu|WyHS?0j4{#i z590(ACnjblTqZG7pQj9_`=^6v6lZ_V9-o_=3z=tM__AIwY z3)CJ~yo7wMe6IWx{2rhJA%gTmnL=lT$weweu8C5JC5icovr4=KRv(u1l3JI#E6piW zEOT1+r|cEEKDlG^Kjcp;bSY?pJC0U5uFR-XsA2=gXF-)uO<(P*TB_Qjnt-~ydYpQ{ zI#Pp6!%8Dgqg8_(JUm)+OruyMLF0u+ltz$-gNBBNmoPOZME zR;cE!CI!6uP*qX2UFCs_h|0Y317#8APvFz@6pt&8DZBuV?UMJB=ae6pyC-KU$0YYt z_MPliS#?=j*#(&&GAT0AGQKiSGDl=YWjJLRWq5xDl?*9hO*&Wly0kGk^*O0>sc!RP+=$ z`aRIXk0ODfiku?z!bQRn!e@l}g{Op4Ks}9x=!MonPn!X~f|G*lpsWN!lY+IN$`=H6 z1^Gdb7X(TLUJ2ZSNL8m- ziK~UvjYH|S>#yWFcULJF>Nr~Fs3ljF!<1y(NWXcf$wLd zxdyJEo63i>fkKI*kX(d3l}v=}6{$370tp{UG_fG@Vj0A zyihzvyk6YvxV*Rv=oDb&b<``A9I6Is1?*pg6N)2`(}{=zX2(O6W23OAun6qk# z`%m_L_igvJ;c8sq^5s43uOQn0Jy@XsTl@L@ZScCdkKKE^$F;oE%Mbz9C`WLtHcft&oB6B`dUj5fBR8j)LXShHT6San?;SUI*bxE!=B4Vv(1 zNn@#Q@$}-tf*mNsmHA!Zqo;rez)e(huV$%c-DX;+EvLt({HHL$GD?$06S|-l*5kWl zabv<`<)a>>e52zd_eUg08iy|r^A6_>84b-2#t#Yr*SHRF4fF$lp!$pY?D}?l6MF4> zIeKY&$$BvWnnR#^7Z3hwzo)L}Q%`u0Pmg_%QIC3$bdN%hWzX?Li1e&>f9<~7t=LV~ zz0=j+mC$9>#n{!=`MA@%Q?Qe&bF*W%qr0QABfsNGhkwVpj$;6W4!I7Y4z>>R4hHzi z*1-iw96Rnpi_g$@vqP@atMgOmSSMqbPFFxzM%PdmW4Bp%ba!3%YBwK@AfTtHXBGI} zySK1+w^z9DXy2W__`bTnjXrT;#7q5={Ym{r{r&w&ctTBh&d`DEf&KxCLBm1+!LVQ9 z54bpZ65w+9ZZ;?nQDGUR7@UT-odZ7xss@S&>S1dIFbdm`20RCB2lW01CIeOgTR7(n z2!?xw4%~xlSKxjEgWAyd{lU_~*+I%735dPNP}orVQ2Wr<5a}>G%*O$QhvkP2hpmQB z9pduv-QoMgPlr>68;2)`8DQoNN1R4tMruZuNBBn7N38+wqYI@z{9a1 z*h(4e8KWIngxL=qj~IVA{%rgOyhp&E&$#ip^f)uDijJ`YX!mgJ@|f|M)EFNqQS)dF zXc5V1BizFZ?#45M531BQ`~}8vFpk(?kuqE}JU1*ka($#=gl#l%baK>gY-H@%c*Xd! ziJueplhc!rr!=RDK|?>y+RtI#eN zR=NPTu1M=hlS&VP5` zu8Qc3Fp12-h%N~03X2Le3nRhNKZVL^9xAC`82t)=EWaV}co?4$u(&DjAUvl4Pad}g z_X5{ruA^LxTxFcToG8wh9DE#i*{RuIvPm9(&Qs0e$bx2h&MeD3#uUiJ$@G;`m$8q* zn}Ls^g5HrHhyFgDI^76uI4w7AI*lU@9!)Z}HuVIRD-{t{C?!8Iyc5MVxjXqT*#j~T zvNBRPQby8pk}D*vBwfT$iOq?rh|7p>5NQ+f5TS|232O*rp*~QB3ZaW2hu{UlRf2O+ zBbX9s63G4vAp$l6LV`W;9GjSNOgH8`<|`%%^8yovxru=a7;_Qedx$%jhk%dJ0!_e4 zaE#y*fgkjkLr_G}MKDKzB_Jc@hC7`lyhZo~?wU+kK-fq)NVrBwMjigol>8ZaCpim+FU1JOSy-ugREDrpg=n;BF^n0TD{Y$|t>YcgVjX5s^QTjR0JQMOTkP#f`K|DlFK+Ci&dF$u5pV*%&pen5$Y@LpsA3End#k<^o)eGzHyWNeT z7b2ik0X^?}%6k@jXnGZToqJ#R{^&*aY4lwN&FJbQ10Q`B6eA1t0^6?)YVjJlp9S>b z$za3a{-DH=>rlwh5RZ^dnV&XxfPef5fUXaZyz%R*!`h-}5)<@8ihz~y4Ivvm>k;B%VmpX~1;jN3n5LH8iDCoPP=Kn0 z%9MJLI*bNbnpT>wfKHMAE4>xN8bcH#Fglaj;pc&@tT$OH*&eVFv0r7+V3*)X<-l+r zp+??FB z+$7wD+#7JkGcG$&mQm=%ms6jUnzNR}odcia6+16`9-AE-G216rBi1e!Tb6!i7v?>t zC?;~IK*kXUCx&Ty3;F^&Ub+-oN?L!KabUn$DlDZ5oF}dZ zzP?WQkzf;JfO&>LjHinigFB6uMEj$fk#xv(s0#8B%1{v)V5`CHFT;#%?fUJG?YQks zZ`*J0ZKZB`Z<%lDZt-oQwuUz=Ha~2>f))P(khS?4_M10*H#auPwnU-T)vecC6Lqi8m>FuG*r?1_%|`+Fq1@tcR_X+Kg2~Ud8$#$P*9fdi;;ikOu+A5^lDP?E5YK!u3JjXX@4z<_Qxx%^0IqG@IdFT1(^BMEy z^F8y6^P~&%3r-8q7K#?e!1IbO>MuGk1}{c0zFtf{M9$*##Yi~f1Af?f(Gs3Ye^Gf+ z8d@^^4xDi02()<)?OVV%uP-8(xS$R+Te4kpS-JuUT6(>dx74|WUKU$+SiZJ=cR6{v zXn7DgTVlm@#ee0+O4dsI%FGIOg%R{yd(~{!4(iIws}2A=*wcoif&lJSidEdzv6Y6E z_?4S0t}7?uYAt{Yy!8JHrf}{8^c)5)(+~UJSiyy>S)mtg=rwrt&1&B2#46RA1XQtJ zYcXs2YlEO2((4xM{_CICd)HUj@iwS8=r=^5-gVlzyx|9x@7rHd2z5a1#t(Rvz;+>Q zEr8+(gAX~md3p0T8OYa&t*2W_TVDYchiKmFfvnuyV%pZ* zc85wkZ95l`3GbOuU(`dEE^n`I?{1UtQ19^WXzbYR_(RTi?CgP_=>s!gg4_*-dOZ=U z_7ceAv0W^%vMlhj-(D=J-8j@Hbo<)C^lAIU`)pW8>`QDl@G~BQ5dTwEx@dxC24u4IIQgxZ9*;FJ%%YYw>P z7I3b!ge1U(=fSsrCK@ARAl4xc0KeJ*ddmu~@Cx|Rbdn~LzC*N=;W39Ld*jyyG=AmR7Ugx?rcpY zPeeyF3r;$g(2wvqj1vnZj)$?UfCv2nPW>uI3qy!$0qt_fSHj2O|HMlK))2*8!%e}x z1`%P$-2q;#L1&_$f(Gk>3QwS#P;WtrPeA;5P$ZzoZOG5a802-NBhnBl3>;5_#Nw>r zU;$geuoDpTdYqcykOQ-j4)x^0c0Kr%9%!?Lg9}$3yeQy$IwU)i>u(?l&<6f;g!|k_ z#=`s!BDaw|C?gn2CiomAS_y534o8=x7toTpZZP@|TpT>AU%?4aqzFo+i>C?izlSuO z;fM27csTIPQ@A6b0KZ@lt|y1Hx_H)yzx~j~W5!#6UcchT;0D1R)N!dn*J{uy5SOE9 zJ~R^D10y+zixg@b#uou&6^2M0d=hpFhZ|=G@gAItAgs+CYyegViw3WMci(UyyZ3(2 z1z30*yvHSQBzU`}I}afviXn*>-xa@!TSI>#?R|7*CW<%Lhc{Hd;R=x@PPf>hp&kB2hi#R zv@Kn)1~kK!^M@=UvSGgAy%7S;P`fd)K?^)^dGjIMdw!D!l)@aw^9U5X5XRQCwGKMW zwJilXZwX574to4(JMl2zN4L?C>0&!dI|iW6*LI@d36pld?zHX{gnw=fC(;v_LsoQBY{=r2s2fH97l4%TJlFh zEe5NJ5mve#`W8A7*3&dF10!U@b(r_>utIQtTT}e7dNjeK9{gS`6z>&qMg`ta;0+8u z6XcRHz6*X3{zGuxmH2)5%lK#vIffZ@Sq7j1Fa=gI{VQm|83AZR4z=Mj{y2UIT$u@( z`4Ima)QTGTGT@2V;SOK%K7yY=2lwX3+k-Ks;6~s&;VMC{Vqis-(d(!l zV7OG&Q(!u0lsQTc#el*?%_Dn}HITEh@Z^_~R)<+jf!u;ztigE;tJM|99Go=~tk_mq zv!UP?j1c0$rmGOod|=v}SPzJ>0+tU;1%7+{@N?F*{Wpi7&bq){7{ZK5g10#Mly(bT z_Z;wb|DhYtfwdkBa~BFcerfM4%%mpFs36QNF1Wxh;QAck{6t{>o1g%muolk1iZB69 z(1i7I;MN7fsWXFLC;uJre#P3(-(u!}8B4!iySH=DC&A$z4(`Vc5IlqmjOPHBFuF5` zYIPGTiodMamfzN^*q-X1IcS#4-nG5py*E&W)I(J<4p{yT*#GnyHpM;*fNNg>AbI$b zgLoQ(SGI;~#06sP3%qd`qJ4ljfV4y8AEFv&qwVms^Hsp+J{snT4J(9I0l$45dlqKS z3vd%E#hchDz)N_&1!VsAo7n?YgG+7)^k9b$F@Zf$)Gf#+1Oo5yg?Fg42fx2%J$(HU zxB-H{LGCwb0!$8Z_7JYH!aNcFfM8f{2Z%yE`V}uAYkxudZz%mM)FZ0k_17r<8|3|Z z<@>{)UP8Z7aF^i2d-}t@JpisSl7lfFjP93l9*p|nISxDp-tTbm4|^Dk-~T%}^82Iz zxyA2~{q@;DI{vrU|0DhX*&Y9E%>P(lf4}|jkN@o*|9;npB{`$WE^&I^5c>mtn|N6=Q-n#ztc7J^CkDuxjEhEN5OhbWoUniea9;W;$ zTicm0k<0SMFuUwi@B7x|_|&P79%;oN4AV-#1m!ywDdxQ@j%{%7$y+QZtQL7|?(FeL zz29?kkxQfPSWRpx$&rZVy!%Igxcw&jKeppu{qmj^Oj8mP^~<(Qnsul6+uz#6v;E0e zSrNSakL{qp`68ymUMlVg2W+6dkL4wEUDw5T^?~31eoxeI?xn1k^q#*#=)bEIs>Ol5AHt{B!ty#Jq#;fsvUrM^1WB>N`+sogm@j5tbg!kyp+qcyQS z(r#&WseoJTGf-i!HfHTrG9#CmWb-C+9PEL zu3B1gzB)Rqg@!;){0XHu@i8U|CJG>T^{-TGtobQ>#-OkV;gl# z0^Ln@>?wyc9V%kHk2DpI%gNeGXrGMr8a`X1C?NbmZdmQQ#xX~OXKFja2u0OLfVfc{gMsCYLTYXY}?_RuLmQumRO3hlS{?6VjlVykO z<(nioB~@N{yD|1diR(0`Tdkp;<`Xd18?!1hXA?E|AUh);RWk>!KC^>(e!rgK)oRA8 zQEe3RhkX6l(Ee}!C*I>HO;7!@HROLmV^qt>xX^?~=Ox>7hB{gH^U(pEm%NXx;~!tK z!j#Z>;#sohYu3>>AU$z{H-b0nS1l$ydoK=D4Mbp>S@YRbHt&7t$e^zptNA#H`&}u& zx~whhY1l8ZO1@S2Pk-s2M_OOTKhlox=8cE!ANo>`rfj}JgxE$Er+6e^FR=Lj{4pX( zc?eBmTXQ+XJjuV&j?oSO?F9L(C>J3Y!TKsophm69hA^A(K@=>^BgKDm$SXyeq^ms9 z>oJn#9ObLh5jl=F?$J4Kb=l^P+lj+3CE>Yt?Am`X^4P$;zvf)yjr8AfpS01iYKmE= zmbu^%o~SG~P}AFrD|O;HqKUhJbO!N(hz~!H$5NaZ_u@9TwYYK?c~d}6fsFz+y}ll{ z!rycHyZ)%^c=FH24MI%82-P>%T+*o^9#Y2ixv|mxjuZWj8+W^|WR~ZZJUED0W!U4m zzeMk3q`?2;3{{15Mf|cQ`sByqwXzYs9p<%HANnN9Ww=DK1i3z#{z_O@m-Zm5^ow-? zes;%`+YfXT2}*^l!*l1}rACQFK8eS9doiKEp?!wG+jZtXh5l&cH~l)!sa2Mf!k?*k znRNKxN>gjeNEp(xQyH`1@I^_HNMW?@m_6Y&$DUa)Bonqeh|q1RA{mC`e5X*yN-lW? zIB8)yj*1ScglQN`Jf)XF05Rhh(tN*px& zWE8l%J>@^I4=xVL&sLzk_ZIi+#;-Kc4SY=ThzyKdd_T~5GB{m4t(6N_`+I z=*zek>ybSCnz4?4=*4|RkkEah%J+o_XInE>LjPkfIuGODcj(6)?;QMGjO06XY8QjL zo@KsMEe*==tvx@d{HsfIk0E^m+WyvlWo9|8`f(gd%?i%IvVHTjj~>Y+H6{Z}9jW~` zBu#ib!Usjirm$2(=9}^!=Oeb$CPD{4K(y35X|Qj=dTuVk|@wNJ9o~^ zT_;>cliou_;7pkJUm_ZDBgf#Zquc3ovc6_jzkU%An`^Gm*UOHYXcG}BUm3U4c5<_a z{)$cvi=WInb@hY+YQ_QcQGrFP|K!i(FJ$&ub{OaQT&V7%2N{GE2y|a@@Up+5<)}VY zCo)%_#aYuUsV){(g9x&J@pZNfX~Y)EKZUlK$lIbNWm&y6^ zV-=mFdl+{8F|AC26H?-C`NpAKSqFMo4T^AW=Xig~Sdw=PUk7tD*`ue`Td?Lw`9 z_Uh+)e6ZK?m7hRqsq$U!Cy!qpl*X4=B@d(TKk54(ko(IKzsO(SkLLw-pUxnPUyEh9 z?-2L(i(A*gitx&uht9BX<$p_Xnf)@t^zLw;aBRr2= zxEBcE5b2!mbx~x$vLvzQ&ZDJjAxz0}N__alvYWUTHUAA8Y#@hG90jAyUm~u^<;LF&V5&hboVTo=ib#Uax=VGBs%CZl^tHK&Kr<@AdoaUWdML{6a$Mp~>u1 z(fo;48A2(}5vdXM(?q;(n9qY*Yl2(M&k#Y`_ii-1$NUm=@&`??p_&QPE7K;70R%Dj%~&319oW)z+yeYbR%a)FaJn>k35Ip=zqn?9^%@A)Iu2bnUbe&C3d*#w=&GZzrrrr)M}rBm(1q~0s# z&ss@x%H-(93foc5SY+%{D`grTH?xpJmY@<*wlG46QN>ZC&Md(y-U%C6=|6C)Usjvw zoUoH|pQwq!!7SFfC&*ux5fDa8DRMQU$rTi?G@Z!YE^9NQAD1y9{7kfBv20z&@ObSE z%A1&?ZSWIK34Vt|A5HIvHC)DXvX+W`TG_%m{ld+&ICXS_#4)4@?k}{v_1SUk@zKv_ z8skZzO@Mr=FYg`hjqGjt>JRb zq>X%=uU|C~+c-OV#Fg#mic^hHm2I`<%yS0Go#8(6rm^(Bl$?t0uBjQfwI_YT&583# zxym7%`N+XkDt=OjzO|W}k(i;-pA%Ug>BNOeZIOF60ulP6*ZeN+kjpo(mrngC7zwTK z?4=*}8EvPjSa(hmNcP+a;MgY1-@QIy+F?IqF+tgm=#5?WpQWEU3vr!MW!ul&t|Z;m zs5z3Mandka;VpfYP_S+Sa=SLY&U6`vH$u2b|EB&6#!-?nfmXc)D@M?M<#XvOY$9nh z^dDJERL9OQm$j-_diG`@sd>9e=QbiRA+!Y;`Wo@C8j^asbw!_k?S!-4{ z=gh6}1Mm+j9G9znd_yf)GIK@)xlw|x!lUPO?d~cnYq1Hx5+qP@P(7|rYWl`lOvC#K zhd8GDegyA}#!Y=`UN()-h@jauC++3&i|-V2cN^@o^vkm`9T?6jbj@y-c9v_-MxJw0 z#QTw*K(%E2tnLr{9r%9CIK;NY59F|cj?UHvh#+*0!T9|;)N~fEI0+jCwuS2T^rDOC z?YX`R$H7Vx76FF^mnesz$&{Ccif!6I&&HEK|K8v{<~tU;nB6;(l@RmjCi8Rl6oOm< zA^~9onl&~@qW7y6>rL&Cx?JQAR_lV$>utL!;o(GdIkPcmzR}Hq#;e}qOgQxjEZ((M zl{FXU5D9_|jSxTny0=Bsavv90y|~SV5-#_;+6cT7 zj8Mf9kz=YBzRJ3=bBmfma!7?z*-s87o`|9b)<0LS%|j|JBN;4M&+JNL!s8@qN@Tp* zKS`4K7nNRliY&T4(!Z4ci6A&OhA-E?NxxR3I=zK{TCYzp>7d1tCj-;GY@{-m8Jc&Q zmPp9n&~0O9iS)=vhp%LERPQ%S{i+UD8I_x3`yspBb9EEWqYSk%2@A>Yy|X{_J4@+Q z$h@mM^9Gt6ckUSq>IZVKvB}WQaPfgsl3Cu`nQ0eW&cc1UVm88uM=gNAOwsI#6U#fN zbMHKrMlyc>E=@1{U?_7k@7CV2mZ`L|jIKVG)w}3mzCNm?_T1)6WasH>hBaos;ZzR= z{4^g6Sn5RV;$&lnaJKd`Nlwv<$;n#yn4A*Nm5#bpX?JOlu#6|iCw**0PS#Tghj)dk zdbhSZx_xyzvrBMdX-+KbW6J(=1#!sm#R{KV)iRaQ3ZjPD(-Yme{WPAOE>ud}OH${r zH`>hd_R|&$o`Os{e=395NuXW4PbP(Yc$1AgM8bz`ijCR@8^~l%JS> zZU5Hv6Qc&Lh_oB#%n!Z&BH38E1|?}j?!(V>7%mr(-mWztGeMCfE!m3ne_CCUn~*a- zrJ;0t?)Jzdj%QYMM@1Qvw;AXj3tll-xMHHtMiE1U!zU{h#>%?exkQXTL2kOd{5@*) z0&h#bZk6I=UzoGCvwSn$ z9tVesJ~4V!@Ghf(A?@x#b@VFi+4b8oi8LjgwfTiLA2Oa5MWT}C3MpF}=k@lA`fO7S zKR&469BgcR{bBCVSzIX8D;<6vnHpDCTzMvTE6k&|hm4o4X-T6dqeBJjw6|TWQeuo` z*7TFL5Q!IOS{$5_6lxI+T#jxtT^U~3nMr5Z+<8)#Gs>&MbFJ#^S^Y@b^SG6y@Ao|M zMt8e5&!8~4KE~I4ml>{CI*;8IXj1ResP`suZx?saG=v{iJ_Y`Dmi$eDADU^)6#S&vRN5?J#6rZ|6&A!26q(d+=&@0euSaqfTF1xzCeF{bPB>K?R5=b= zwJv|J9Zg>1AWl$9(G%q!T;m*J!odiPs2kDWu5Ie~kmONq!s93P5xBCrT-Q7#H0?dy zB8?4XG;JmpXJb%K=254 zq_u3mk?RT#$FTDML)3dmrO~$0-l!lQ6%iE_!G_p-@4fd}5=}HcF{U?Dp7d_olf?9x zuBO?evG>?}@1Tfc0R&Wva(v!%zV$8sfwg9>nYrh__Wtde`x>b8fD(Zi@Xk=%CPjZr zS0BAH;?`KtdxbNRHU=!XmFy}FD8zu4V&Ki@rvOz2c10EAs5y&?K-_X@oS76k4e@W+ zY(efPSjp{<&`-{{SKb8v7R`90_RpRD5s@D{bx7)f%voA&WprBE)sV9HRQIN}{>g>D z`Ma`>8=zj*t^{tsEQa?;>Huf*_2~VBKU2%%>KeZGK0sx+&bLFdB+*jx>I?A9p)`RK z*`0JqTibejP*|mAM zmpg>c)rODFuU-2_0MFWPAzqNavci#QsY)4&RGp@JYSjkz&z+-l79l(z+UeSj*DjeE zA~M;O5F#5q?%o|b^qqlcmkyScUM$?+sy};SaiSx*bg=&uGjTB!8m{0Vy3QQ=pEHs^ z>Q!F;pqS38POsfp+g>cniKr`HD8^G13Z}pI-R&tK`8Mj%Z-#PkbyY%86PUqJ%9?I} zCzT-10Glf~>V0-Nq#Ywo02?|$6F3%z%F7}DjnwUU5A6WElmpG z>$cwvJ9P{E3=XIJ<;e!jzo#B=+g3vvlhzA~m$kVsCi8A_7_(4WeZ?slPnxhgiRc>TL|bH?&h=yk<+t5W0nG~QtQ7$0<>OxDzsBO&cU z^MF>aa|^Cz=jug}BETIp(gVWa$&0W-6gJ0~t!`Jid*fwE1J{#D* zDtI_=)PydU`4Q2Mmnz0_RHP6M^5qiYwCt=d=jle8Fq&;H&$Vteu_IKVMGN|Z&$bus zJ*@H)wj8^^4{`8de3?g;Srpi<>wbA~NmzAof8YWPD#mm1`_MfKyG?U!C<^TL-QojG zuX4?Q>t9hvVbJf43=vUBG~?bw#8?>BgKAg;@f)6sI0^iLP8ewr4ueifQDA+hqJtU- zG>kM+=h4Y(GLAUnYaG)^d+ zEYB}1a*<6lU%UTzKkog9XJc&Ym%{J0@pRuhe&JlF<)+den7<&+R&-ZQCL6Od-W^Ie zs7E$|3#Kb+ODxLJ~2jy^nw(%d^%@_tQp6Hlc zB4Hole`5XT-d66Iy*V>h_m8Y9FlY%CiaKMQ>hGmD zwDx=MAosl5w~*`mUK~BVTg|plNnYIse{YSscz_Ln`Gvi9EuYRDGDB%u?Z+mw$|m^?xzVR+ZqF3Y{8wpzwe>dAmGJ9)TRPV2XvC1Cw;J zQ(-DY1t)<4I%LvKdTZL-FI=f=b3crK`$)AuLqkBC?fUzxXT49U+G&IjY{BUx&}`~b zE>H?VSncT3_|x{A|2v|+lbVyC`%?VB48VWw_M6!g)q~1VeAoQzcwX2S`A48 zBh`0WfK>oYHAu?0m;@IEE}mD5jQkSQuM*#Mrp#hu&qfOlCBFxm5~O;pG%nnFKPH!O zRxcL;hyRf}&>2%!)GR2>7Uy!P(L+ z*QzHMZsaMw3OSdE^)V(Tbq^)#^w=B>2&(T=-ASi`yiPC7t#4S!9 zAH;f?U4KXM&yn>T<}5=9XoL#OJbQcklg!_34dc04RpB$&slZ03sr$&X^>MbNUVaeO z=|j+1C>t$94Ibalke)Cf+gM(ZzPVJ@fuQ9I;gcVm3~4lN%zlpqLx*Oo71CeyHDjQK zyQaVl<}276c5qLSqI;_DUxj$=Yqfhu(*6&UwA21-o8{1(vui2^mR1WS2t-k4NoQ`@`%ZZWAu|<`V+MPGO5Y(uG79ynD2!0 zEJkb%aG5cjl^N*CDLpwfsPoxDLo3ou(}IC6kh~?iJC(z3alB;A!L#Zuwz4k&kitf7 zatiBri=J+LE$X^`Ec?e?6?2oPrk5(aJ~cI8>UH}G%-CI4(Ym!dI$i$dfmi>{kc*F< zN13vn;u!wDv9Fs4?=qn@`lqM1UuOP`%wgkb*E;fPqau5Cy#ipGy-3Eu$zQ9tZ~2t4G%GUnos;|tIwY~EbfN&-{6 zyQt~LGzDG@eU3V8^1>WK88w&ohZ#+FY3IH!yY_YR+5Q)|p69*3-TrHnanipH5H++LWKYT3+7rAFLC;JaXKT%`RG(|%NkzNfnetQl=FCwv)M*RJY^4)nX%a)0C+Mi3u>esqiDA?N|DvY*aYn6Ih3 zmwSZGu-;kZA~IRp@*CiCSkr#Bk18kUp(COh8p{SSBojLpxR9e}h7wLA8txYRW}@F{ z=Nk3!nBP{x%O4q+VKf)Ci#<_I-A?m~><4-s*H>{x*0|O6`?X0|C11q~^hJ#s11L!> z<-RmCGfh+DmI!KCB{CP6O!7cEb6wdi5MBCn=v80_tNKDgd3r?#c06i%qtmsX+g3T- z4w8>g^sL$+)S$PCDg@K(F5fh=JM)~+2Tb# zxi7$*%|AP1L0B|Kch+`A^N3uk=s9z%@PZC6bH!o!7RK}P?M z_MJ-}{HJ^^)i-+P@+|qU#4F@5OFz?6F(bF@_R{BM0Y>*3Yz_oez66a~Q5G#oCoW!? z^A@L0RMyd_^1;iv(@+&^23QzG^uK2~rWmJKVQ7lX8tyEA_{<~y`Q!q;7=MI3*V((@Jj>dcE;RRSCg(I zOgikdA{f-_a5i?bj8s~1F0&h5_h&`&VcyxXpR9Jn%QmzD_aHfLeuoOf3?0h#SqkUT zeM%fmHf{l)%e_1Ly)M4_IkOcI4MX8tHFOAzHHlUyjO0n7tzaFTc@fg0$e z3XZTR3DWnSiGBU4zsTi|T4p41UN;kq#fD%jUlR@dp?TkCaY8}1p8v}Mr5THo@n4+@$ z4dpO{F#TUDOLDrR*s;%D-$t$IMoUdtj`>x}pw5JyUCeS)&bD*7r8RlGtOLLxV6@~C zW{0w(I&jR`AYjU5t2{^*r|KlZqV9V8M?5fpL#|cZhHlVrHV;Q5sJNajvbSx8$~wIz zeRK1pQ_#`)>0D&A_6Hgg-_`A>#Yz-<@#T>&*5sJx}4SV zOUvc*voa2%9>X90QbzZ*eJ%gd1S-Q#Ldb5)dktRezL3Y`k6D2f)hkthZFH`VS9krL zB*M3eAJWB(m9y(i2jOW!x|oDik`zo|9d{l*GtoIoV?D>T14AYqgk~VUk%HRNfmqZZ z=MM1E%#Gh~`RYLB30%ttFwRV0kw3pzGGbt_JqSzE{Ofbuonhpz*{U(66Qq{QgViRE zgy%5c&>Si!CYs$EZbHJ0EGbaX}1T>MbwpzLjEh?TEM8xUr@`71#JKxuY`aMX|*U6 zM(3XC=Pv~ENwaT9`ny9b=u=;bf%yB#@8}CMj{u5V5w?f*Hi+GpEw)!tXZk_CA>6ks z!=id#*VG}{RZ5y-=!UQ4g?uE|0v$;5)Gfw~RMjboQ3>0Rm_qee93l3pIu}6@AVbj+ zIe;UD{g;VFAx&5p#@pf3f}NVDoqq=cyzUvg82_{N`Vm3kH-mO9AA?)gdpGyD-TIJ@ z(I$h&jv2FcIa?ODGrR_E=YL=xsclhKA}breS8`S`w$eAk@DxkVKVQy?VnwMMD#KwB z>UTU+f;`ok-H%$Mz;+rDm|ZXdvK^#8lvek>7G9<}Ad&Tvhsw%e`;?-&vVG@TMr&$v z(%<(!NY6|h-aAbgRsYR>vgM82&(ylo!Medied1Xkg)yA%yhCYKCtj*-O1=Qn>B;fv zRZI^|8!CH9uiI3^o?3p_j=ApX-;LV2l=p-$@cLV`e7+2Iam0c1gL$z_r^NMJa;@@Y z&>!)0soEzzr*G?iz!gFR#^^_#M8}plaH$S zDkl51$AszYsK40q@;K3dhs`OcAgz4)Aax~!ZVQB7DlBvT=|;H16+MW-6_ zi-~&=>_sTs=wD7l;MFdIJ~AvO8fnx~-XNR$syB3aPhS)-EwkE=F((~6LARPTMYsIlMuAf8zKX#!9 zDJv=quOPSMy+J#ctCdal0Dz9Z(!pgc!v>%&KvFmTOMnF`U>P@?qk6V1{8_V}EoA6H z?*KQ|W~gVzm?dUNjZd`8<_f-#G)xb^m`~XdFJ0;#Z-opg&rP(i6vffbVxu(cc?ESK zR;Jzp?0g%#_(F&Gq*f=tGi6FcAd6SmyGVQnyVa)oIpEj6%!6;jzAjbD%iJ>z#N}#W zC^=F&1B}|fA18l1(i+#5kR32JnYNYU?w(p`_uwdYykMe+B>_)rIOygI?TVj${ncE& zGB+PwYTU=ycx^MFx*+wH=&5^Z^jWpse9F{p`vT9|@Xq#)(~ouDSx2n4O>8uDW;Dy1zCSi|c2LZ!*2#sQnNNV1D!rIBVa?JV(0#JJotmA! zOTd;G_XjE=hy>nt#!28b`Gj2`HfzMCZnX9mXU?H42ox)S+$H%&^jA{b0s-tB@-*SF z-;%FG-17iYK(4<%l+bF6bMl|({~b6}XVl!)DF34L@~(8{x{mQ3v)v>9vlg%d#h=PR zl}Vt!BPki0V^NoR-4f15t<)XhS?Xr~q*B4s z!i0h=x3*nNe6yz!IE|b6((|S8_y4?b*L&GE9uqTsy#d|*YpE0dMD_*kW%J*0d(f2V zTK(kf2fr+*`tmDSkcJ3Jij?0U~kj`TUzMCsMO!ulT_TPKFb zyQham(cEBmEg%i8W|u+%Eo~ja^^DOE>0mqsBC3~tf@FBX|j-PE}DHy$Wt!!Kw5cnOqPME;o4+* zY3v^h?bg3wo4-@I-^1z_JBqc1G-_UjEt`7O=Gp&{j%O$G#cH4JzZ)fK`l2U6fR&g* z{=y#06ORg`Bl7o^?of1W?>b&`8TKE;kQ#op7mOR1fS&*^Yu^3UGlsL*qOC0qM|PN1 zdiMWECN8apG`b{J)YP2#diO1>J7w22?{ZsZrHU6j`eH|yHu>y48UTGxHRvGC#;lmH z0;k66Tx#Q+yoMB5%`=c8pDAS_Vx7lqqPMSpmHo2RFsg(|uz#a5-uCL*^9DPO2P$)& zV>#}{t9^9TJ!eZ(-DP|BcKj346Y^`@&kl9Eoro+rO}ca0R}rGIZSrW7{;Zkc>Y8N8 z|L3)DQsdE52beFr`)2ReEbP17dAzpZMl$0=S6m? z%oAsP>-_3pvG>Z6WzROuKZAec4{sHg^z(mPQkk0HeD0eC^2eG9)v~#EuYNssZHPrS z$nFICTHf&-Gif7wkr7HKmb+B-Y4tnav_e^R2AuZYj?ZZWzcej)Hkwmb z|C-ZuW9oI;*VhN%z)JX?k@KmW$9_WnUk22PZ+=}qloqsldtF=Qm z&pc=CEl5ooft=E9CA?cZwxm4gRP}G+sqQ`NDU<^Aznu4yi!75iRLhgW=i&>PccT5Q z_mXnxu;|c;#rPm}#8lh*UyWhZFz^kJ$23|Bp>C_uY=ZDh$zC30z1`#`UwKcyVUDN zGLw2ThYH5?SBaPh=5=n;#(x#+2K7IsWqz;K?lA^Da+?+uG5or+-wZT$RENr~D~Cco+P(--mC^AW&P{UmXEefOkwn{U>^H~VUfI{t6B z&$iUXTNSrRw_c?7+-GH6>``Fw@f@c33@mK8>dMhM(tN@ z#h=5O>ftOibUd_PD7Q(!0p@Rf0(7m57ehq%5gerv1H;WMkRgg0{FQC>uTy2T_Se{4 zk3pU17!8G4!gIL*UdvoGCmGSc>M~vcBbkQj=Ycv!wK~Dt9kSji2yrtLgluu#YT)7A z?v(7S8TrWi5_EXtI!z1LYqOzo0RvJ!V&JtsbU$5RY31iUwfjxQMd0Nf0Iv$h&&Hy8 z7ql8#V7lp()Msl(mVX1nEIOc%WgK)bM8pRlkxQ7*1*Vu^bg(iPnlp?AW)YY!8lLl8 z*^bbN>6bkXJ!)v;I-%S#{;20Q=RL*-|Au>^W8`oAkNmfNoxbQ2Li&0cZy4yX{BqG4 z@MSS}^yDybin>Hyk-=Was?3-4WwXBk4QcN;ePkFFw0dbUyY&;3EcTxz5AGZ*UA92m zs(DIV(Oo-+2A^&aXYTyA?~?^^B*tuR8?b4s@D6d!xJGN|s^NSz)Ih0z^-aa(Z%1*S z{ypt-dCdBKgq5-@livkcZ6zG0Xjx)?PC8U7I<8BL2rG)*Bk};(A+mTDC^0u|2M(3J zdn-;$yX|*#;ko9om@?hpr)y(}F0}jqHE#VqH;g1H-F19?s_%%{W>(!)?;XToj*gNs z8_+aYxUHV$dDrWj{Ojc%vtL==a%QLy_%3Zd{Zph-bk@e~+<$4}@Wict0qv}K8P`V2 z)^;P(1lo(kLRTdV#XGza`Bkk1Cb79I1flOlTn?7EYNfg4Q{FQB*n zO-mw%vf4drQM+0K&Nt8ao|*Thq=d;n1lUW@ESJqS9o%#UFYt^b)*Aw}Z^H*ySe?Lo0Q|z@`31C7ZA2M`tNy0n5 zXv__ms{+GLdef%&b>_6at1+uO)&l7&n%9$4LM%vms=1n+ zkgjgB?V_7Ew8iH;1kma2;B zfaV;LZTf|vFNkI*BLLnv_WStgDtQMd{!Nm(#DuUips`bZ9O0NG%{2kwPMi@y* z)iF_vL2SqCy2hEWvlmAtJd5=V$bc%x+`_lrY1)io{966bl74MqZbHF{0pZl@*zehF z_VxAEF{zKAU!;C}Uw?7_$@=TP|nc1(n;x!W@Fq6?AF&oF{D%0_NysFw5aD|V`4KzPLXp&T3hfUUPN&ZK~i|}&7qS2 z*M(Eyo3fEE9)#gJ)RE?v2aSKl(iAtd?|w1?+V~>otC>WZMe+eV3}unLL+#s|w+*Cbc`tgwDQr-D&dtXHD@szV3_D~HrwmQA0_wLM1|5u8Uats^^o zA2E{nMvG~+$vp3_rHtcD9)a^6&ZVe7Uuehr1?pW+l z4pZn&X=c5S}NE<3IBHl~(AT`iI5H*>*EB354;f+PJN~!Yw zvm47F89}U_OZ(@98$`uCQ2g}izQUOV?v>R>#WeKGrM(g>Y`XB8=!j{S*Hi7k5F$Jf zcMNk{5VWeL8g9ryUls6yKkdg3?mc)Zj^KUDu`y_iW0-!i6;%JY(iYh%VeO_N4)jFK zDuAH+@=?U3lTk75t3J$V&$tekTs=ec=cbW_X#5tH)6hg&Rh9RqHn!WXh&ljhJrad; zL_B8kI*v}&XuWib);Y2c8@CuYk^X5`U~I8&CNS0_nUS!bYZn&f=EE6xM}x-&>qV*` zH?uHwbw>W20&i}Pm5om(@5ej>u*JJzB^oc3CzyQ=#w9v^=Au64(_tsMmyUZV>cE>b zOb$%2R_~s@t1fL~jy1@OO|aD}Tp^MTtZo zu%w$Z8Y4rTeE#kJcSzSYg&E6v?Ha8LBeLEO^~0i-5!}paXtq|AYOwZbux5m-T`8P6 zSwHlGc4w%sVXz-BWlxMD|G|gJz zrLH`K5#+taxR$`K!$K0mjku<>RbE+?D$IvWs7K@RQvTQ}x2?Wr`u~7SK|0a}(}dAz zKppwEdLo|>9QL~rokg*eNnAKN&j(&N!*9(GDx-iD-50|~L9BJ@baaH;Im>#_P`x2| zowVBma{3hDzEU}qO^f<-KC7zGql8-ITU$`uJ$hBHUF)dIarW+kJyUjzi7RMXHC>~a z-sFkHf_(+Pt@ipx4#IC^pXcWR{j$$Su^GhoIr%yLGc!NCR2%>8JUMTzGNpSMRVQ;| zS=9W2z5|yG_nCrrV(9q9p0 zv{RqmhP^=VsAPREc5Ra;M32x?VV9C@=nOCO8+tY(9+2Z|KR0*QMXyqTIE zvXdZNwWBIY{5zfJa^7X^E|(0_#&(x$<-B5dTQ2A%Y_bn^be!XXN2(YtUahhG?)8#< zW$?!M_vXfZEqRr(L)#R@_&WHF4Ns|3a<;abbQzepe6i~%O^;tH4o7?HQWRd&FZDg@ zIn@*1@^2>rJYhTN3bI^6Idb75>e7$;tk1umCOkLJRp=toD5E#C>0iW40&EYX?+4=3 zz1oPmLQJ+*3gw6aF|^7K4;V&LN$?4Wx8N6*S*J@*RcrSwj@on#SNJyN3g)42WjFO+ zcDLx7D4fyJ&+9-J&3?};4;y_3ZzJ{**6ljucyUgYOWdQ2YBEO*URn;Q5-|b zqi>OAuZK()wvvbb1-U7gL8cL2gmP%-&ISXjj>u2=7v{fItC%A+4o1N_ zhFk!ZMqVTe%#z)N!FN2R45MM`!9JK8SQ=-4 zpq(BA^eqe|4u?#-chf6>Zf5JI>1b~0^4yZ&jB|@kj(J8^!xNsT+73y;=$T6Pj7>WHcC+X>5&;}IFP-^zoy0*)=FAVJJ^P#Q5xl%Xjlb}d~ z-p0!65Zq!tfg3Mj%C5oF6i4JZlC5%KUMfeo?sm7}6RBS3lJ*9FXV|2Lyczg2^7q=r zuxOACYSArgD{3!(`+Lvl$_E?&ds=qpvfdxo#AGM8mD!_}^DX01Yu?C~uGF&p8vgtg zYzTgPF0trz`s0VptGDw9IYrE_VH1uG;DF41Bu-UVx7WB56E_vfe4tFwTtrkVx<^Yc z9XqJ*Fox0C@TRVe#_&I?Xj+`snu4dujp!fpKIBq|04@g0kPzRH;f9~AG?m}2extu^ zwrns1eK4bfANPqFZf1sCPWvQj?V+VlM1co6px!Ory9cIee^@zEIZ|BqeoUqZ$@E{~ z%f*T1?aH^^Dy+&-M2wy0P1R7OFZ3+(nnD)Q#O&-$Xru?sw3G|{im z4ywub{J#WI7ymFS$|)WCZS5q`5UWIv)&^)7`WqfK*=9zZhiq4_)mApi#{J9LMs?ua zlj!k-)>1K%gimvTQtA3veaUO5NZQu@B-LqDi{9|_x%$4Nc4GMf1 zl+DtjXS1k1=;F<^H} zDpnS$F4p$0uTx-fDV$ZF1Dm#_l=BT=Wn7#&j0HLP0cB^NyPq)LTt@Z1+<2 z=FENCxROvm%yP!?*wU^3Zb_=nFO@9|!;>>Jo&yh?b=ddyJax|F*KIre0wQn6w>g@F zeZ~?Bw*1=BhVQR#QY_c}^)Y)#n;#>At3Nwkv9~G-TFQEkagz6nd2Nb)wgcFJ&-RTtS6zi2F_b`EGx<*b#{DPzGC6CH+A znNSU=EC9_3>b*S}r`Wc`_SlBQ6L8QPQPd#dY+O@lR%s(P7z}7-YX@oZ)a&)eaCL}r zrAX7N$WFIZoeOr`{LcpHxM<<-)1>QHYc3YPY8?iusvwntDp1XX4yndl<@%Jei@+4QJ=L-c6T%XVY24`)-%Fb%YI2ebR&6SrsV`PM4ZR> zLSC>Pv$_i=^N=dHBX=YlL}bVQH`h&0-#gGBKe^+3n8dxn_l)bj)^0=urpm0xT0)Y@ z{+P32%5n}*7_)A&o|GSLg2Ub!KGP8?Y-VG49b8|LEbFfN&fp?QTIhz&BUKYU@KLHR zihsq%tnjgSf7T1q#!Wb(Q}@L)3S6l?QTjw*;opq*cUL||mu8pLR}8SQa`nKoNLM?w zOAth1=`L7Ni(@WDrUF{$SJyN)W@auf6|Xe6>g0cYZE@qDHwV6pGl7k#Hd(UmxA&c* zyA_%LU)SM(pYFT=y=CQ0T|?FPI@V<30<$Nt=-!`W&BfhSe=oF$EMwO~28~PB%4X;; z=t^UMvwuj(vGJ0Z)0dV@G{&q(48r84MO&1^jSyIr{9BT<;XXWd#gRrEukJQ(?Hqha zkA_9NSop3P^NA-lEYRsf$MrdlKUy~=>FZdzd5Fxq+3=3`Twd2Yb5V6675Z)>(;8-^&QU=e*Nd$K@bNC>fHDQ|v<0Amd5{n%?@w z*2?}D?b++)BMUrN6P?%!pNkrks_vGq{6Q($Y4Dr5FW-NIm8|q^>3ULZ*qIFws~MPD7@Ly! zZ8~kyeDe62(vm{uN&3bq*;LphFi0wzZQT_4{lNG2eBUfo_QU3`sq5>O8yA=e+BWK) zVQ!maxx-t-$Gb{_)8%w#54l{F67 zjicWge$Fi6a2b*FZ7Zb+FY;Z3hpKp~W`=#QQL|xVBdr{&4$>7lp+2g#s)^Bu0ALw) zkUEb|d&D@%O-Ak48=qIFC z*2!*DCWOs&B327GR90|U&J{ky^%yxD*2!F_7D!Yru6Re-Bx$AU$lDh9y7-;(rw5&O zi8QM)Vi+CrO5bY~v(E}__sdbuO|so-e{7=TUYVm4hgtr81eSqmy!}=uiZT9&UEF38 z0xCa1b(!ySc}paNV?ni0&sB&1vI>(jeTE_=ls5g>d-&)4`rME9k*dQJXW+)T8TnGN zdguH4+jH^@1HC@gf(rfG8$YdnHdF_flz!a)Z_}gi_jO*B6n-h#pFiI>*;SMCqyFWl zA`7VN9d|0OW#qllc!&J_@)tG}mVUV`c66}s&EVLKabH@UL3{X2uFO{9?e@f?zJhxt zZ^}*bUS=a2Mn+!s=?&{HQ%3s=-jsisIsk<0zOi#7Ql)&SN2*_TdrzJ&iO4@xdjDhn z>z-UnjX}fihHbS?4Qc~l79qe*b+42v%Ns7?+!LfoGDQC_Q`UwMV(VMs_k4jCrwvC; znJOu$8|K>r&`vx;lTx9{$X>~%>{E=eEu@_gsQyuNMaWH7E&J}uuO&?;WevNT$i(3^ zpFwX%n9qJulGLuYD4gX*qBO%l6431eI1kKGCNQ_jFsQa|!!2l*{mcb~OP}Ul%8nf0rPDqQ@eqv$J z2t_}W6pK;>hOZ%U6nAhA!OrTDurV^5dvO30J}F_#Im0fi zf1y{#9*$;eb)5&)qck?k_=iP_{LX=xfewx_%a=Z|WVaO2o>>7Io)SuUth(fK(Lxqt z2*KxBQXOgHB?XWRx}V!tgv+@(gHXzsr%O&rB}nBFO9Ln&)#jz*yQ7*@elz#R-MZH5 zfsGZd1|6xBZ3`X!SE|0(;#vwDaw`z!#mcVYcV)q39{ z7{c_Bwz)i3a0jUF(H7lftxLq{zHyI;uncGl$%u1|k4;?ji&UCZcDKyaZ_sbHQZ`m6 z9>?cV2nIE(^(Z>ZM90|5#_F~k%bybRJ)G>(YZ9Q*CR2bumH40UY9Aj7+-sq1a@1&# z2Q7Adn_3*i-bs?n)kos-ZdfRI5V~LOnsK&uGJI&$Ly;Rdrlb2-deUoqGJWm=E^FWa z@RwXP_X<*I)Qo7TE3dEo)Iwq$ksko(jW`Z|SqxelscwJw?oU+jM%Q2o`OTJJP17eq zSsQsHkMc;L+zNku|NnjS)YTo&s(#d#oGAF7wJmd7W^Q3pPu+3@c!z4LNsXpCq(;@& z{-|NRga%pEn@~5Ge+o$xhSJ8{nBBJ+JAv&Gn)FVvuFz7#lDC%?h$-@P{VHrBHL~-} zZ$i=O9wC5z49YPxMJUBhksyZSM1B|7PX zk##Hcg-QIiG?^izbda0i!s0g0$#Gybtl2IMmT67-{rC+r;rLGH8jbgOj<(hTMRMv{2a z$d@WQgzM-tu)vk|j-j%rm4%b(f{yW_0s2NZ?xS2Zo6qkjRhiYO#v-3mu6UJ_)5imT z9nEwvu9|PfccFO9k?O=3=Q0GeTyDYm#d%-FTAe{Cf4I8oLc98~4D+)zNvQ#Bv97=h zp%$-LA{=ysoV2Y^Ywwlg0qVF2YHO!kqu_5}Lw7T40tP**qO>wPwPo@B7o_FpZ%q3u7h9cIToT9u z%3&r_)Fq8IKMc$;&TPi;w6k}BwWXbt-htckWfU8Lgja)Oo6P}V&3r(eG4`hD>7OMR zS+;~jJWX^_suzJlEY*cl_+Epr&Z+(^lUr)t@<$iHGtiu)Q~b{KI<@wi9^|j-+uN?2 zJWuF`AFp5Wc8 z0BJ5wS1@!79m_Aw zg@7XFZnn^;AwVhkDuf{0xE?z;(LrLgalzp5|7BIn4IF!O` zj>g#S<#K2)mpu5UyXftNO4-mHVi75XsG(oc!Y{udO7{6 zBd_vMsm%B1-+p%K4gc)iKc_E%Ps;pgdX)6`zF8`6}GNa|7<+n_g)gF->G{ayM!u3ZdV@1Uq`n?vH`Pmi=%zaDd7p3SfCOj z9eo9PQ}wQXGWnzGC)|GHN)rVl7EOUYkP{&CP`2tja70CYgb!q^d^t?GkqXbopMj+d zqoo|hi7TE`mP&mDf9ydOj>=|QoM>NbRpY9CKp|0J^>Cxzy8AIiOq6DY)p6@y#knQa z%oA>_)Xue(>6dgKmkO@J-d6%)I^hX`4(Nbpu=YKP%DmF5ia2haE&fki!bUd+;w1vI zvtcpLR%&sTCRi8}{NQ}E?Sc!*>mk(DUfhx^=D1o0SRl?t_!!tmjqb0sEd$phxoXSU zvj{i_LU}?OTEjAGp)W06Y@nnKkn`x*l8|y*A96aie)fg#s~`1yHtGm{8fpZ4tt$qj zMmH>KUBK>!W(vf8R#lOY!eiW5G?i9?Q!nP<0M`l6bl8esz$usrH--xl?VZk8-T+;Y zR$TU!x=P`gx2dNnA0+)U-D!Wz<&yS2^O;1wpb2;!{FY06OmtwB?smz)8(xa>U{b?O z_Er7?rFWvzLDA>SkL5nynA~dcM01}kQ00XJdYa#ERjK#qW3&BQ9sf^HZ`-i2L5{(g zE>HbtRwB<*&WfHXTfkB6O0!f3r@r5PN8oU6b?U zj8CnhL#Lz&V4wAA6&lm90tm%`$Os-B} z@j|@PfYuP%jaZ}g*HA}0MW3qKA>2#PX2pW8i>+q%vjD5R#mQ^1v0dX<^k<_hqaA%d zw9Vwq9vO)p?P)pN&>%QKfI*Cw0INxmInbKWdKN*=r2{^b}auQ%W?eC4JP{?1Z)e6r6fK-+_lek%ggBN0lhZ<=I1QWhd1t5u*U;3L}>6A znXdJ2IXN4{prjop=NLzBM@&RK4+u4<804rQk!#n|cG_^$viCJw(=|7kHali{N$Vfk z5@GX9?9kB-bNN9Ia_STFI@5Ptrx#m;{i2b6ru1Z2cXdtnu9C?v{n?#sKASUqMN_DM zlBkDD6HsQ%hC8Xqjd$Rw$x}sbMKAsmsv5o+JOtji`l&)o*mND=IuEuFSXtqzq<*Mk zh6uj{4B`50oRI!O{ZW6itDk!sdK^1qc7R~leZ8R`c+Mb3_a@F$?F3;=aRZbE?^TqS z9v1$~`P?-$sL1`uXdiQ$rqDx{bJq4Tt}|B!k@K@1-$oncTM7RzH@9$_LZ|dlm$VlV z|1J|&lM(vp4)6f~1I>|^Kbkb;zLdvD(C(K%`*8U4yFYE+6ng7CZ|=&f8#aXOY+#JP z1l7~G@HL~nP<~6vQGdhLZj0=cm-%fz;H+&8)h{N!GxQ=qW;M4wV(39HV1NnZBi92K!RIFS!Mhq9C<^5_Z|tN5i+=|KY>SCwc2E`$psbh9@KfjcD5rlQmF)(2O5NifRHLr9Q~{> z&hM>G8e-F?sfCj^Omq2d=t}p+)6n{S|6cf*Zx1=So*@Gk9j_SwH~zek%IH*D4FLDHfE31fC=ad8^` z^RX7}m?d>eSPsn--CNU^@)k1~z^MUN+(tdflcPK#Jt^P*r9eJ^e?B1n(zX9fwOXn6 zug`v0ZL*k{U}g^e`NL@K;CL=yVBQzUW1$BAW-3Z2K?1!_w{!Ae7B8qLIe)Q>^&o|( z`G$~*7@Ag?Wwg#Ug$DTv6+4Xs8h_C**dk#=60&ng?)bm_kLP#}M|1P$eZSB1e4d*C zyA=aiE;(OyN>-$u=IJ!Hb$6QI*N^DgH(1iwO6CAqw5%*`!-y?%E~=lQVv@kewC z;d@3OCiZu^|LZLO{pad$zCKlR@sCGYPAzGO=$YG?RW*I&nDv^Ed!^3;8q}uqpH7uI-x(nnkt{=xl1M` z4H6B09Jv|xf%hMGgD<^(<;+#|u4vz@E*35NmX^O?CA8Hw9Czs4%*>8?JiGC*Gq{2(V=8Kj{9%>}fYqDbne>TS#KZ zTX&PnJFb0vJ?{6Gzy7!ve*d4k0mEtSzdrFe#T>9`hK`#{i3Z=V2J-Jbf7JL~Wmu;w z4c$F5HE6w9AY>~&{Hp@jKy$6dqETKRoD-&#wF&-yC*L5ZZSc_vwd_sTi@}VcS>hrU zt2zdqz_)qo$y~a^Jxf~^7>7L`I&0IC`?RU@OhpO$t8wbflTGcGE7Ex9@{SUFnD=_% z=X-TU{OR`iR*ji}PsvMF`@HAHE}v~)u_G&B;`GVuGgf5${N{s6M)_y`RhC7nCg__d zB~8oSp{#=22rn?(t&_1JJcRyVuin(+)>??Zh@r2Is=AR8x(9>?N|1=xSg?qHblmzdZog|ZQIM9vzNcHb{)cEB&Du$MkhOtY-WEN3e*2RnaRszB@bFB7Nh=34O~N^&j2XKY~585I$T#*vfrBTmWWo`=Kw zQE6L)@q$-E`2O+fZ{@v_GGksw?o=VEH0{R;jgnstb?hqQH&b<^vTKAP*IerM5~p}@ z0plXy8Rzz^!9Vf**Y^n9+_bdL(K!B<(D=rG-gk1ImO2IO9)I2TeBjl7 zNa2XfBf@oRwK^OaL@_#;@siLF4aa7%{XY9S) zo9F+yaJ8T)?Z!sv>6!Uebz|F|mk(YyKr*-APr)Z+jz<6N*(M6sg99I02C%<0 z2I+R=#%GH=KgSa^q4E@Iz2dp&RJBg-?^hjtGt8|qDPufN;3xSExILh8>K~KV`|i^o z3LOPj%Kpe1?+SKR+vZ|!e@5A03-7LIn%}y_x)4^XzVq*r)9xDTNXJ0^`PK^^ zdtPcAVp_Jrt3rD<8=-tbuQTkNFKKwH?JIAWs0)CuOHnR<*t%#mc?pL zMZP`eA1?yh-~&a7M2z%Bh`;~EAoXPbsn?@Ud;0rlMSrZB)}QyXtTU({s)#KA_#tkF znG{D8d_(rJR_T$+DFuki?D)QS9j8W0xeCrpF-j-Fz8%^yc*rpq3(=a@ylzgYS(9Y8 z=zr*!IA>|SqR}{g%B~p!6X%c8rOsG1^3ATuaF1_&$0W+%3Y+ukYoTMcQ|2U(9OD%Y zGCpXT>}$iuw(RDdr+)W8uF^ld&>=n>^K?Vg)BkGz*1mAqi^UVzNT#Sgws)f|d?36# z&b|%)4m#whp;ic!sajUYH(66Sl%L=BqCT-}imQ+7gbXsbq^@IDnr)k zDNUN^vkg_&`bMH*Yj?f==k^_jw(j?yG(6q?@888ce*g7uS7UVZzS>c>VRx^Weo}n$ z=Ba;ARQ_K3vNxKb<&o%F_&8z}lb8(H8Ny9$nsz>Q!hGM4maO&9hG$NDJN5Nv+NbKC z@ekf17pvZ#{?^{H)4dAGY&wm}#_#Dq8Z~yR6V1P#l~)u)Hv1v4xY=z$^y}PcbgC+T%~eMx4XYIchY5KsIHWV!Zsj3nWnY7+FCo4 z%opJlSrz1*g*Z)cX z{GPubfApVVlY}OOAJg`zwkVD&-t~$P^MCF2q_wdHBag;k47>$@+VkUsgO4xhx0{l! zx6H-PCh0`zLPwnaYrhA6-TXTJ`yJ)h#r#$3+wK*eyBtM~YViFIk6x$oS>Lxkx9Av; zM!%h5X(9R21?H3XFvX{SaP-!ZTYcvQq{lAtcRD9UcEE<&ziq>J`3wRHZ;dL z$rv#dVLD-ZDt_y?G&q{OWG=y2)e-q}`9kQDISo9=M`9JM5VP@AYI8?fSBgHZ>BoUm z7X&>F+#M6{bCe&nj4=&b21&UtLDMXUqz%525e=dLcu#~**yahXDur?p^Ry?WNoe@# zY1y5siV45PUM|0}^5^M*tHNqG-0-P6+&a4Jk?G@J;Ym#Eadc(K!{7&gO%d-*+&pf2 z+@e`0lAR%!Lc_=F(}n5FB03}XzB&6nZo&jVBl4cnqgQQA=fV_$Xay&e^r-&yeHcJV zT&@K}I}ByiDS1!q>Z!enPhy5==f>OxQ`@vfTqcgHuBvB}?{l-nDp{CfudXDfc4Sb@ z&hRc-iyKyK5Be>9@mMis>dgAr4@|@ppHDpdx|pI#Dop=%&c)>Z;BS4m1=gx~q>M_} zPpr!Y4tnZkK?|cl)i(X{ooBH5tpL}?ZZE}xyg!k{jOhNKF!2CXLa*0 zuKtVtT2(r-D&pbOw%FeMcJID_29G_RR<-VKMbn@O9sITaZq;x1Lpw~A=vdz+HqB~p z?VR?o;m@@-QH}3Bo>kq{FtvAnTgb~l2fMk^-urz5kzKN>qmbBmRlWd8D`PK=>j+)q z=i&bWEK=zVB_fqCCRR zWqr9+TP}S>R!5@T45xl*emC5Hw`0+(N%h~{{i`=#CD$F1tq?vnXHc2MJP%#u?8$$P z`NeCj|KAh8oHy<5+i5Qo_v$u6S!lY4#dE92UF}=m|N4acW=P`fO9t!~FDjTiIB@gn z_nnc*4(u>7#&2BEL4G{C%={;y_Td*S|+9Hr?r~lK$!U+p>yB zPY<{D*G;QhaqsiyR=uDQ+I5+{T*anoma&(Tg(O>lx-*@k!FB+xK-h6PhGtx4@JFAg;p8XQlp&j)dS?F6nBNgL0-kfTUXMEVFVi{Q{bz-$_ zG?(fA#<0q^1DgTqoCe!kwuISd_|<^&m)#AvhxWhwyE|6_<@cyUM2-1&_X1lrdXn!j z>~2-)m)b!K>+k~|ycrp^Zm@4h=CUxeOID&RN9&|V<5qpJ?j!omx`@9tDat79j@k88 zaXYH=LhXMKy6?&>-nbT7_Q%~seKS+4dfj`xcBCSgTmkQ+LS1Kb??CNk#Mt_$F zyZ-C_ulJV@N%J>PWG}Co+byB&Jmnz4^^a>vYntNx%40hsrBHsWIFp|NRU^TCi~F+V zVDQlxrSCR)v-=W$MpvY*B)?Wygq{q`laDd|-tl|KO=E#@lI-_d8VoD;&VPI zzw*c%p3&SSMCltG_O<_qK4~FqBGLFei5`A)8GrL6g!L(qq&OO#>BP1`h4)N#Yuth9 zuP3BNE{hD9*ff3f^hYV>k%eksFCjEp-rko>f9vECLjzw$+J+l9+ z?n#DnYoo(OC5nZli@ePC57e|AtP`GecZ&AQZrnWfq2K)|)<@lB+1ZfV_*bvpsu{Y` zv!&D2YJcSS-nd>Z}sEPxrbSe2b1iUmqi>2VB}Qcr|!S}x#s z`4eHi=1%x`{`-|hF@-Iyxxed}1DEG4G zb7M2z;TW|1G~{VZ2Qv|ertqc2A*_^JFJ440C{mP0xRlFsX1NmO{W>*T?A*iL7VAip zqF$~gide1nmpwV2dJY5s|y1y1uE>px1@tyFq6Nh{=gRNs5#DOittx>K4e*yLI)FqQ5*K?e z2_l1+2LI|q%c`JY?uxz2a?_=MNr#T(#)m>5q5R&#Ho}#=bbvzfRx& zFs9|EtCRV?x4hwtreC{$H4Iuqgbq9xn<=bi4bWnN9QdrS1$Tz78(9$*GNK?t42uj- z2w#yfKXKET@21J$)Tg!1)=VuJxqRH0iKoXZ$B#%H44)hl6dNBq!S^1YL`w-TMT#^I zi$upuCHU}9+wwDQAN-@= z(6}{WifrW;#ct&rzL;;SyvCzYQ%5F~r?o%$UhtacsV5>WDV<`|j}NG-BQ>@M3!cTd za{WJL)!;G>pSdfAZT~QklejUJ;oPw z6u-L2^RY+c0;Uhmx-vsG5gmCx)-U1D@urv&U}tmw_=u zSNJl)X)I`+_UfJfg9E!;BOdiW82jR%K^c=QnH?N6;w_&VkD2PL$_;1{6V2C>Y1mSS zYH)tf+!yEndFvPK*E6+~o=mF0`6T0+rE?8c?24tpb4xG6iNZUc2ZOizBzhTTL3k~h zNhC36S`k?zeOQ!wHp>fs>>I&z}CA$G{$i`Z} zd(ryOANRUC?snXLIi>sO{!12vJ;HR*mO$cu(P6>iyQ70blI1?0s(|gfpS7RryhrD~ z-ZZ`WjlU<+QOhFEMMs4`Q9@F=>=ylNm!WA_OL$jXcV5%m502MmH|I6}T7UL&`=e2H ztDmjwEOj?4j%nws4+a&D*&2%_jCk#f5o7&-*L~!-U_@bfeKZuI4vLEW07*c$zarxD zh{6#k!@l;Ls?G>f`i_OpJ39M7fpOL$dX8&{!M8JfU=2mPXIQ2W z#=CBaSNI}nRERuE5mOW)2_0^N=_(bJLCvuIIrwv5kRz5_VvXigk?){|P=Y%P3Bq!W zNXNd;yhfqX{HnAyQ@^frciX9#dF_AonJ5mPr)-LxpLlFy?98j_t)uv0WNg616|q0~ zT76&nCQG{9vmIqrJoAR>xMi=qluL88_rL7f<&5!oTbqfCWS(Lo1VJRa5S{@&6_?9v zRk)7zX_n`bCCYESM|!%5LNX3rWk1%ZZ=)M#b?%!6xsQWo^saf6-4e5SE#3=IXf>Yszok z8dn+rPetXsH>ye#{(ToTeRuE2eM<(^CZZ4RwD+Y_#m-|Uxf@Y7guWbyjLjG^$A4U4 zd%!PVS@Kk5H(;4MVwe1~vfCw0AbE-5JFhUbQ0B=%-Njj}Jm6mu;CiaZzH5lYKbxa&xQ zq(Cay{pmZ$|ElH)8|;b^VkEH|vs$UTttNvTLVwXIJ&t(Z36Bon2N-nqC?C9%Yb=2x0+ny*E?!w*il7@^asC;paSVbC`Kqj zV^kv*v9cUwj;qnJq(8E5yWK+mW? z@cLN$yPV-~!Qs9uVm6HyLa#`-aB|r`uV(osi43H}Ng_tY`h4SkTKly+O|eFnM6_Tr zs%AwJU1v2>F4ug~Lp{NFcF5~KB&xx7E9J6TVmVUf$ zs^m+Z$NFY<(;f7yAtqmHL@pv5kWzwG?NOoXx4aqe9@P)33Pm+=Y&`*z3(ci8LsPno z02}7LeBF>u>x3ij1J(g!hWVspiFI+;S6wx99x|7yW6QA?yavAs?P1O$t0g7u#KC=o zq3j8)j*LVV+#tbwr6^8O5LE?j6?D#v#-ICaJzW2nfW@t*--ZfY7sSU{IW`fJvkR^G z(3wHFeQ{?V!wL&QL-6HhNt@*xiNmfBdq3%BL7T~sVJPlzVp*I>Tksvd!~ z&2XxbN{K;IBrPMWU@cKCKZgatkMYeix!frKpC(&bjizCtvUw!pp5lz9JLw8yPQY~C zCg~I9fKOjQp{7QesPL4OX{v(*qZIMngoM$nLVpVRBvHakJdlJ6yF5+6cD?G=zp|CkCj4_xr|$d=mJ#C#PMn`9iV= zdLk5vW1*RnHtiA5Vg=2jhBJCy3#zYu^`g%8G`;no`rrN=UGM)~p?}%?SNqbzxoj)9 zh^?WTQB=JHKQ=V&RZvSzYfQ`8Mrqrk_8kL-A^HyV zAMMP2`E}2a1M*j^o2i%I4jsZWi5jr~cl=L=se}IYb!#fgN2rTDNuE~Xeq;R1nj`Xc zs=qz8V0X&V-*vBhyER4H6-qsk%yOm!)<|<=m$fU#c@RbUJ7%kC&_oV=)qS9E`k<=s zH`8f0nY=AKhc-$7=QlZA7rAaEHF{T+GxU3(sp{Xo+P(7te_l|mL=Qk-ioY~5QU#xf zEQLGiU_O_+2AvBggJ+TvaIkt+XhT>);L_m25mgaeV!n@GGHFEO%u)5xB_XJKysS$W zuG;5$LwX%d?fcrv;pfAC0p!dmk|lLy5I&y!nF(_G_Y}8ywNC33Y~|Jx_5fTUMw68E zW6it40RgXpc59S_DP|8-e;SrIKCHXZZtdRHe4^3b_h4XIgR#-4pK5>Wp7)*5>YuCD z{iFNq)W5U-`@FfYZ#!UQa$sBkYrTy_=bZ!C9+d=Jg#)*i&XNwd$KQthOdD(&@I-&F z=$)YX+5Em&mNPLzs5}^uhe9#WBOFlI3$GsoHimP7&w~m__m29=Z< zm;-H=XUccUY1!B6m0qmsh4=HoFa5{(zTq1jzBy`+f0MKvy9gg~tI<$T+^^s3w6;*= zql@tvB<5lR*i}t?;H8L|5#NBx`Zypryw~ps-}ii~<(PQPw5{J@U&l?Rc9?gV1;8(7 zVYB-~O9|5~Z&eMcxWMv=>w#9^zqI3}`NCW_5V^-Mv8^)B0RFMlvdZ?gfwU=j6ZN(6 zY0n93fw+oTr}Fj2{oe9v@Rtcm)oFUNPD8BDgBT&Yx=2ve8vWJvMJ29AQu!$$=dP%yg`8z!2~J$1t_cqxTE@I|F+=(pyH?C%yQ& zJ@WbbJLui-UIe`O`oH_N|9jB?_}#j!rUqkxje{0*D4XX0x|g+>-dUJh^Y z_4PU;1DW8#0v{9A9aG2ba#~HiWiemEtQapd_L1)Z`GUH(wcS66Z)Ob7JRoN34aKO z(1WHbYsApQ!9&hg&MJN(@%3J;Yaq1bI`ux!k;+Qt7VmG=m1LDHR-TK6&`#qAJ?EOp zrq<3;9k;tD8E<#LJGj7>WZrN5#+d0Iz^}tK*m2}4m24Y+2O)}eAimtEptCO)D!9*$ zL5^O{3-1(#1P_(@dcUJX)mie@l1QWU-kKZvYk+Xm@mAF~&vNX7Sb~wL3bw;#!e#44V~M?xa#2OhDXPF#EF8iX3xW1PTMc#A zc2xhQ+2@r{hwNo@dvEVgLpiP$`~@)!i6@M*TCy4S(Jb-D088({LZoXT3!fl?WG9JL z_+59or3z>#4&B0Ew%r-}&f>874-E`Wam6?fIc5qyg3v}e!> zZWA@u{CEFn{nH0iDLqlBS+6}zII#s}FtJ&lu9~MzmE{5NKBehaq{{N8G15-yXWq*q zaDN~5JDzX&m4+P)d|&&qrchm|PEaSxy*=(~@(>rLMz3m6?@x4c-Fl5%eZv#=Hful| z!?mOf5XL_4G~0}%$Wo-6B$>DonE|!98*R@r~hhpK9<^bEf^eZJ!~>WOOE(RfF#ix_g!k1UXmm z5pbGvtq02G(VJ+&8sj4E2M2n4pLY8WPBP*>Shr6{b<^U`IiPzF46QdMP&DA4^<5W@ zM&}}S3zrTkGgop|$!S0H4ptxadf-1^n<7oZJtc?9pU_Hv4b?TON{5vaO=frz}a468EKH@NVPZ3au(8x8W{zn>-w)j>`e(f!Jx5;c?fANPr6rY0X3cCq$krsw0`ntN zSpTa5o7pzhWYIZB8|QUC=)Y!u2Kv)OyUP{tN^zX9)w1=R-ZjK57AkoiFD1V5nGDWi zLvV1|M1QLe^?u9yt~OT^gukt+3Y;7~F@Ol@2$4mAz8i5X@MBH7s#P^gXZ89>RgNxW zhrhorpNV!N1s?rPIjfZHUuRnIibWFr-o${f5{ z%olU9c;Ybe6J~_Bis@V(vy9yaMY*TAy4>4f39b|>g+us{&{9YbGHWjz0euI_=r4g2 z-S4@eA8nxMcskkYbk?$;JMWlZ_7uIE-?O4?ap!-4cM{xX!VCyjV4A-)CPfK~i7o8= z?rTtj+`nvzzMjigDjN0lo{MY8c`d7dI0|AyX_X-ywm!|P?{sovELYBnmG8hC$ak%{hPgm7Ra@nD-iDS zHCQ)4FtmN}7eN1?S-ZJ5VGG{`m0*p4g_7`Gi4&_J3Z%yoOhnuZt>8*1qd+`%$!AK^ ziGK7DE|Xr6mw*Y{5B6aLnkc8`MY3$=UfmtP*?x;X8zudq3an_h3M_ zT0mnz>F~52w=6aM-2b|fw0~xKWIAs7#5`zevPN3$)!eNiIpQB0-o-E1bWsYMn+E&ibXZ50FC@8x12M=Pn4}{#ACedskq#IPhiDd zNeq~v_1fX@r%;Fm!V1A)BM1KO&$P?v^`^J`d=2H+jg$`?$}&94k7PJ#GI|cxl39qC zxDi$(KQrERAx+u}sl|L1M51*}sWaXc<5~(Ym#@Uy#3Sz44IlSLn9ka=sSn@i<5 zo2W8=9arEgw{D`}BldXw?1_5$de?YR(io3Q$y0GIc(x+`B!8K0VJqD8c!Ok=SA*}b zKHvEV1Wfas;Pr-)#Qh#& zl+RcDsCUT{B%37BM2KX!vRWQ0PmxiQ5@nHWDZB=rDeQ7Cbq#MbLNCn}LmuIP;1d-)$tNH`n`FJ3 zt-gUllK}1g>-$`H-^)jL94+GyKm*uXWtk@3nZ5pM^bO)fV`&g07! zS#r62syf{RP&HgjZk9(A4Md{2#CFN@9iX}wgMNSjuiFk2IjDu(fJ_nP?jk;kkpjPG z#Z2NH;Ee*wa(RrzQ@TQ#C-;`6$d&>LPc^Op0CdVD)q_xqK(-t+i;^Yv1tkTfHOqz3;$%t4Gulx;+hs{hsC%0Z_=V{UXL3R6S_BocZ;jU=#nz&AIu zmHb}dw%)3Dz08_I$#E3Z@H!`6%Y177d*J(?cly6Gr#Y6fA%J+C_)q9uX^pZ~RRmu3 zRb?d^g@;IFl5^-IWF{ZVmI-swcw!?tNVb8UFA!_6qsndCk=h%c9%{M#wycoUlbfWM zh`W+*&1DtX_X#>q>F5ntiqQ<7vVHaA)cc1L1KcYMbB~0aSqYh zbTi$}r*QF1se8Y8o>&MKJ3n{cGXH7FG3re-oKk8xr4y{eQ9i+Kb}PgwqLf@F6^V5G z80^H;(DmXZq>IfMn$|bT5NNXvO&@6QpFQ|T|M<=u-Bwe8Wf1t{6-Tl75KfjDqz6Ig z70Dl=$5d^7XP{+U(oPT|fw_W*TWgKDrrVkeP{CE<-=ic=K8>o^zX0{oh3 zU*pQOLsW&^>4)NrgM&Zu2{Ito}wO89ZsXeL>+PW z2)D&8e6m|l)i~@HkVy7m*Gb0__bP&toF}w|OqvVGtsgZa9r!rpN2rcWmdm6OfQkc= z{lbqB0iQ!t<);;}+@yG>HEUw!r(`?HorFnwR4EdNusC!Ev<8;Tm8!>*Z0wZmZ_k

=U7sm`8R>YgJ}V zk=EDiUC?z4HRH7(`aBG{1zcpFN37-#?~&ReFkKBkKDtwy1i<`t(gbofAkZ%)i1LQ? z5Pk?G+Y_*ZP0~_Tp?a3~sMitCSfE4~p}}rT&!|d0dQ?wUTa>K0!5+^91MjEV3NDXH z;n#~rd@$!tZ+0()s-U%Q$dykAQ_*(9GGHA3Ea)27BH-NDZQq(2&Ax`W238s0Git3X ztv~c{H!iXA1E2N()#u;)U*G-iy&YThTlC$XBMcpeRmN0XFhv1hb2`%9rS5KCOVp~m z6>*pY%ESw#$KZuC!lfQ zd}{Dmd5GqWs>UPRB{zbpJb^o)F83L?4ES|6Ev4!?HBy2FlN`L5zv;4D zKQ-4`lmY=Aap!{!!-p zFQf)&h^c}nqi2ybAj5maYtUiWE(gMzfrA&ir-(NJxfKX;;Hu-0Qe1(y>0_YVpO*V}+U$*XY`mjk%0vp2I zqB7{KbOKxNju9-JFLy%>0rMXLEBNc+F=v5Jv#BWeO;-{f08J6+K;>8|5lzMukTguO zP93i*mJfND!rj!#8$u^Au@^QGAySCyHH zFu-C9rB%|Iz$l08T~TBW6j<$V_4m_&)@+4Gs|}LJ_bE zD&x0s96Sk0LtW%Uc)#cX{@?&7l!ZJ2jRj%z=__0c7Xi&AXM#k%0LbRHda>?_#~Rr# z*$=9<%JDKNT44|40EDk7Vp)?5l z33DKJI2T(3KZM)F9ARZ-3L|I4Pl~hU!B%KmFe1<#1ZsE6zgP`$+2u|z_Q1f9T8%skMkT;|` zxEjqR!;}?xh+qJ_ehl6QR|-qvd1Nh7Cg}mwc>*sGSMX=J6uyNGp~pf+(lSW|T*luJ zt%8|t<#{xdNS4f%Zjv_1{->F*Hp)&bw8RK{slt^?FrNcz`{v%E_I5!V{R}mHEipjJXB|yV_Io#u$S2L7^M&aXCV84 zcOPNpYzm(b67sz3vbB?*0j05Lt%qIfz)Fm885t_8B_B)l#PHcnf-~T9CWBtbXCWL| z>t+@O``shlgoZPS2TBT&(sEeg#J`a4lI2ShYru+)>`b?PZt38;~*qNAK!n(os%AVz#OpWLCfNW!=1=2cl z0OQe1fMs1o5^)ik138dRB-1^|)d}){H?@!7$K|-r11CF0Q8exD=B{vOVHsHAC1R#z z03>rNavhn3R6+LykRU)+GeIMo2mGs8tQ3v`mtG3Th!Ic)cNeIm&>iP+xlGhXs+`Gj zrP+5mQ>jf%EB}EQ07ZaF*2%w8&C*sVE`dJ20ZE061)zT90L+S2P_Y=zr@LV~3$&$F zz!_^?E$(twPdS|s@S}xxR>;A(qmOYdVTa2B3r-Q1a}|mSzF+(CL1X+zYA@*SYR-7n zC_SZ}AkPt{3`{_=f(98BPt<|4E|Oj*A7dnei_X1ae_8RI=q8~XOb`v!O zRxV@qvULmv61>zM%$ErcXcFk`mBM(g6P)y9s*WvTuhT_rv1_%n%k2Xm8%$L?H!q9FO!_WdW5xZ9cZsBKu=#UM!=Vda%>V@ z1g2{pcU#nhS?}hL0a};`rf!P35S}k~0skHk*q~TQ6f1dF&_hvpEqMv&Q9V=)^hL8K zY74iHtK^gL>&Q{=J17e|gs)XXQU|&dsCgBhhbZ_?rptX_Yz2w=1oXic_8xx$=&?t< zEe2tOq<}>Nnur1!#6fqt{lZgm4|B$S0J4g!@D!By7eU<$S+i-@AFq|12ZMbNdYq@US zX(4UL&HtLTfJMUk!w32Y-!pw~d}By$Jl+4N;TuD)*^9bG868*bk(Oj@CzI^nL+f1` zRFAL{?ZAtqTA~!6E4v~+3>xYV@Hz~V4m=I(z;lR7aut4G+<^iAKu+K#s0K@xGs?%3 z7EF!a5Ssv*Y!%LMo89BVUhj1`GnrfC=mB?ty~^*5N*L@Bx|HQ$&=(PX%^Ze5|9IZ zEICZ%5LMDEvP6YUngKXyF6w|FC{d__0^oA2N-C1EVBUY1XDK{E-p9(;NK=4+LBP+` ziBxzER4FI`Ew6!(a`VNX(2KAHcM-$yMMsn4kUC<*egU zVF$F2OLw<&!1;v?_#WWbN32wj8Jh#ov9m|F@~ zpaAMlqGM^ub-s#WkqXerc*97K|cFMx(p5eK>wI|Q2eIz9tFB@g#lCS5Hl#WV3J z;N1m4qgw%$%m5Vmfe1nK#W*xyQlku4J@JT9)v8t6P~BMnAN;0!ZPT`@D?yq|@Ok8N z`4L%)tU#JcbYLndnoD3QW*PIy)lC1)Br$Dbf}}{A0%$=d=>n%)C3TS}@Y~YOvYDiw zXa?P28#twhP!7n4<46~CJbj&6Ci?XP`jV?V^09IVeDfoN5RjA-Dh)wXYcYw_2fvVj{`4xPryVw;%-*wLg z=~>76aunzQ7H+*zATZo%<`hWJBIdkngT25NOCP367zQYYX3K=VptqF)pAP`skcZ3y zy3GPD?EpxebYcOSgIAIjxEi?yoVf|)Q5|5v0!b|Josr5=*+wE%c3F~(RihEGfGw0k zvSj&J9)Q38Un{lb=Qsx~2P`%04J&vxnu&W#ji9FpzzGb{J-(Yij?6{BgE)}VPyhdp zMlIN*OwLPGBPXyDEE5mHPT+--B%q4}Pylpa+y+m^@_=sUVjIDVAA!EM22i|C&EU}q)po)9(D9i5NSsM-mNgI=a0>6^4rTX%7Ce^;1zEC%KLdPm7HH;&fR}EP zdaGL1dpye2Z)@f$zmUdZOC8GTtx)o!*^2-q8pG|VleLuc;tOf z#|QI^`C#CS0q||H#T_F2gbosol6>iS=}bw8q(FK^w$>wF#VEWz!aY_fGv(1_1JLPY zEC5;q2S67=Gj<>njDu#0_ki9PgS_o<<~W^>dRw%k)YS#ZEt!oGrU(IWvB-+skwC-& z9N;0WhYkRS&q0H*PSg&1=XT^faQ;Kp>aGfjM zOyG2nCDrn~k^#H|KS{a>3DyH1wH)m20eA{Xa4*1HE>|sJ-0z?am;{qx1&`B#N!#o$ zVb=m4JM6mY%BC~jF~UTs8Hoe4n}g1PW&@pc}x&ZqY;ZDS8vL9HcnH<^iwh za>vqN*p}D?Tci1!`G5s8Eif;zZLsZjEeE@N49-HD(Lm%lQU#9%XFMMC!0$j#U5BfY zNbn~R_@f3tNo3=l$WNe$evTi2?}1g7AcM{FR9Oy~>$zAHG!|M4 z8$mx)14gE0nexlzbz}{2FO>6fpJp}z7Ap`9;JI(X+4xS-w$q7HkjyU7PdIoE^n~96 zl4T)aNey-hw5U2+1)z;a$t8RP(k2YM+FhBh?quZb zUNGxpfya0Am))HV44Uf^w%!dhB}^IrBNT^rqNRW;Zi{=}5LIH=ISZ*WssnVCWbmwy z=?XwPm)-M(E&LPS08Vs1Ag~Z&3h1xNfhe2 zdagiN5AwW--RuqpI;jNwW&{d}fVKe#x&W?4B9q`WG?+Mnt;B*r0-nb^rLcS%P)muz zAjtvEcmNx~7s5}3GLTnxIA3y-s76Di3WWi5o({Yp@bP|OGkX;{eFC)y^n_*XOg>+n z1N@B@^Tjry2|5O-;ubi&dqD5&MILZMGnxdZ#|S$COL{&b9f<&w zUykm;Wzx%%V?ap|nBp^TaK6Gem`8sCxtxaX7ZbrL@1{Z+6J>N(J6AiC=uq}&!1#r< zH=PPzi=^R%a&A`*@!8s3sZeK{9qNJ{qj*Y-0ecax3uq&R4=I?TIK^l!@(%qL? zGg~0s7rQwhw$zye2=b9@j;n?OF3BZ;7F5d7AkRX?;Y7NKaPW4Z*GS;=I$vgJ0-(?Fi(Lf>lKM|g>sz= zQNoJvmA7TFGLtezQ3t5UfV>ZNQ_Nge z!L0=}vWJNRv{1*?vcs%UMh&}y3!GO7T`_zY3bd;1wviExZEI{00PgI?4kDMiapxAEL?OyRUijOhvvV2|ox$!~!{{`*PJ;#|XKTUq&1JlqTIL9QhO-JBqz7*N z*fb^t(BEUakkV86%y{lchy$nDk46(RNj9E@Uj|onkqP8>z*Tdge9)2aa_jh3u2LB8 zm1{so7YiF99x2BTldB~s$rx#te7StL;(HHBCIBa#44ip8I_!=v@Nb}J5w+kHN-&UN zK)X%w|MB#uu~D7r+vlmOQ>UtI(}w(^6A7?0ufTTqhpBVp`(GFv3peCXH)%^w?(It?A5v0dA#s`*{F z>9>pme@mRp`#npqFhY6(2# zi93T1DEfm`18eqtjjQnnyngza9QRZg!NWW3ku44#F_ zT?jO1_hjGaw-fQGwXEgNfP8C@(-OD>gSj33ELs%#!W#^way$ITXi8q9dT80dr@y-M zGV|ioq0bU;`HQm3H$KTWVY8nNuNnG3|9$S?i$UA+ZO8Cf^OGy%-NUV*^%)~quwdK^ zdN782*@IL~apr}3K^Qf`e}q&8E*|s}j<+;ZjDM>GBlL1dd$IP?5yw$YN<;2CUh)UH z>`pWdCY5~_d;|M3D|WZwgR#jmt*rRMG5Pu3kyzwh^m=qz{*Ey#3JS)o$Zrqd3SGgT z915&-Pe*dz6>P>!c!K!Cb@cvR>V?02fOW! z9S&82RIY^P2CD;A*#E)c(r9%o>$bxRCV`lqalel4jM zcKGjJCfLAE%)*1en|qgkTZ>mbinM+VYOl|&^FK?LjXZs&4uNl z>&VhbHarli%4^O4-|#3;V`abjzd_wA3Tk6BqgTVjZjOEa8e4eObJ(4WvGMuw*n-F# zk&CgW*y(6lv=oMW8S8i(zZVHPXwyx8%5pDr8*&%%lLcsQX=avRpDhFz);VwaC8tG|M;Q8tTXPgu4h-BR3&)+&H0)4@` z!3clf35K7B9~p+FE=8;V6djCS%nKBBp%+W?@5J)+nqq&7e&e;#CTnFF!g#FwZXbB8C?}2FdWLIY%`=yzKna!}c z-B`?ZAeq{D_0ZOTPkiaU`0n}t_u~Akzl`)HgvYO^@z0s%S!Mi|1ZrVmbHK8m^HZ)G zJ~lP9FC-535)`?Gr#l;}z{j2i6A$2@RV~nhz21u@+8Uhf?suQ@Bu|}Jfy2QQK}Fo2 zU|U;3E32`2-B`WVc#SUqc=~ec7)WtmdXksBqtUB+9STzi(tKd<7Q{Kf`6*BONHx!y1Se|{33~Wj-OSh+Gi@iVu zTgUVA{ZkxlS2oG_2vg4HJ{z<3{1l)|4z|3<8E_8ayP9)l+4Y$Mp8a0-3~MK<9{mH>c1dsvdUz!`FEloEB2b*$?9VhL`sbmc ze@9-8A38PM3ktrIT#bjA9R4}t#0DbYg=<1n;9BpqdQY7?JoNocS9&JCF)z6?F+Z^~ zaT?~@nfOCnxg#UnFd;Rir|A0_)>vw2OLITzjtnAC1K6E3!tx+?y#E;$FO0t?nT}mZ*An~$QP0Qu#zbtxw$;; zq+knwQtm-qxRYla#}#GqhJwl{x4EAf;_V9+28y!>(m~MY0q*WO7W(b<2dS%xdGX44 zUUC_{c)+Q02fTBUQ{FhYl4oAee!qapFV7a@Nsqw1+OW%K!8kvG{ge2&<=OM#&Q{R% zMI`G!@1EsfPd~zL75VG@^O=i0$Jo#i7CDN|t_k;ZCz()Z;6ZkK`U04(IH}C}-;%4q zxee$_8P|OQ0uK4dv6|naeLYA;ac)9x5ng>+x<9oJWLKQs18P4R>SyIj!qeRr)~zGk z?%zTBe-AQPpzMa(S-{AgV=H>>L1Sg?&^FT$?#wWQKna%!gWV_4m`853X-P}#^ z$*{XWJRI%{uXQ)#GtTp_$2^JRK%4!`?CCKW6nC3j5q!gY8he)CoS&aJ5SbBP68tf@ znpN3?-Iy!8>FECV1|*L!;kiv{qKlNvPc)+U_pwEi?RSvro#=dFpc38x9=5S7_=|fk z(i7{+o0ZoP{U>|B9~L=)y{f}!t&Mbpum35j2(Ji5f`@(k5)_yb_S}E z^&#-jTJwIbpn?!9iw(cdRrsCnG-luO%aa3mqsys&By4;7QR=JI zo2k#x6~z%M@K3ul%9AG2+LaXg-R_I^lwx1XSfhg68D~lG`50CU)TGHnRprTx$c~3cG=1ObWv7*`EeHz+$X+FV?9S+^U#P15aFm2NOeI z1Sa|xOkKy`He!v=`(I(vH05?SHgbLTUM88@kh=t`9AH;l0?&da?rn5=*liEL5&0u* zLKS$ou}OzR1Kj&w?tMb86s}MdA0GPikR}Z@ff?&z5NDjq;4N_B5w{}zU3eJ?Xc%-O zA34K29r+o2*b%Mqls$QeZ=1{7{Uao_H-IItRz@Xv5VklTe~uKQUrQ}+d)Ggg`d#AL z@SlgehbD}C9shk&j7f3!*|NU)r0&c@Jb+m3xA^!%g5SirT^ zb$=;OokTy@qa|h8G5C)0TxT}c;RZUr0nBwq^3A$lgdQ58a)@SjQ$LgtMDF%PkH~0G)5OhPorBS zUXlC+^1TSjp8(n_$98SQ|4s`u=k8}#`FGRDxz~E0;}t&dO6X)r5u%&Ugxp~9sw8PZ%3V-ECGw;U&Z%$?5AccC1?tEI=LTNpX6Lr>bQ5w!x6BPhhnEm!;`SsA}Fd~#^ttN;G@fB(DuRqj>UaP7$a#Pd`~=3UlW z*<3|KA7ix?N7#**d;$~r-jO{R)r2TK`z(mHFE}k&2o^t=+L-((ITHk$NL@}rcWg-P?I&bzCmJyU zws+pINWY0^*oZ7#P4p$2upVXE@6oHR!9!?CA*}cTtm&uR1FW-nat+uvg9gFm9WW8H zTZbj^L2~xXpvymEbtA^K?TW zm+YSIu{)}mtPE~roqh?IdUf74ugg0MD=GEVtI^Ki?(q8B`vbq(7QW1m?P7f;g^Io@ zhIBc#4isG=_71jRmtK(iGC70Sm&thYSgItQpB_wpnFu51vB7|oz9l* zUG`=ceyka7Ukb_&A$c$S<>+iZ60iJ`o7<6jp1zh^kSa&I*7=V!joGDOoP?o|%gJA1 zIR(ZxZi4Q9Ko?x(L%dctVj`aHBA9#;Hf4FXEVqS!+rzcj1kQ#YhC3p#4Q%OP?4#I% z=&5jJFvWWxV09X^LKADShb3Tyt9bKa_aC6XXMx2|b9S@YwilUZo~Azcggae~zG=71 z@ZhVF@I%g6R>%iYBGqV$e8?f>WHG+F*O`JG?B#x|SrsAXiFo-X@Yg;x>k7=gC-6N_ zQlI-F_ak!E$ZG>={U{c#34T_Q{#)`iY~{1$xzsXjd@a{$!HeBwou~2Ii^n;EwVlR} z^r1<&vGhmbLjy?1FK%ZLPnRvoyv3EeVA|L5vTvr3ArFIK(cdOU@VP=d0mpcx&haUd~}Z2e4=- zf@cj84&xQag)2Nbc&rMK9FIA%j>rs8^@4?gCrH;a?!7b75nmGTG>q~U$Q5svo#XU? zeoydf0g;!f+LcxQ5vjT9s6xv}W0mDn{$>TXrv?AMAHP||9nAnY)qqwWWM^d_fq^=) z3FlI!{z0U-JL}<1dil4dnIgX_^?NKv04q2@c_+C&)r93~OAex4o6x80Sfkx=FBgA* z5RJZ`{wP(PoS*1~(O(167GbN}@n6f?iP#{#AEj2MS0U3C=_*h` zd2%fb;dJ8dR6EFg2!DGE{5HsbPJ(p~peHaO=?Z!>fOjm)T*Cs2i7knbjI@rtH}W-X zt{A(2J5iaqns^hNc$(`U!~$W1!71n2xAW}aY;=AR>wD8|-B`ThA?$?s4D387iJi(f z?!?PaVTZK3s!^VY>}~^xRp7Nw1fM#}dd^JW!HbIT9b{+3&0DkYaOWqH_s{VXy{yy^ zIpt>0I1#Yb2!Fm3913MZRjiBb&pfxB&r}94!IEF*HU_VTPe*(6))lND^FMyG={Nu5 zH|q-WV&9>SQ?c~D*qv!u{*OWR<6w4GVD9&Gt24rZ@8aS2Vw2_uHsr=h8Z!7#IKZa1oYFOtlG%_0*Z{4n(%+ z_m5fhn}uTn1wAnOE^kJ7o4YThEWtFq_)`#jB&f{65PEe5Ihl)x+Xdn&N54Kc>p#WW z1OEL`xvJ0#`1W2bSTT04KGzeNjBJ00oNu$NT}%u;)ax{4i&P=(Z(?VkryixHZ(DND z0>f@MJmRxhcQj`asmbB7tlwVzI~W45CCq!1zbV?e24Cjmv2KT#M$hLx%3qg%K6Vrq zpW&{m42AXJM^usVDlizl4BD^KK5{=_cr%fTKY0D_;ouLsCjX;k-AMV+e_K}k)1lgt zFVT()SnhRyM`kr1uRhn1Ta?>__38ritW1oI)Qp^tznR*B&1?oy-A!Lh<|S6f2hfYQ z)NWrI(1l#xP4}nU!SOF)dc8=y)@?A@hRt6K<2xKuetH7lA1)|NkN+SHsK5YGK(4=f#Uji2Ep{uk742Bbn#$_^64qy<{5}HK ze~(>yqNpu?aS!%$LM{noN+7XC@#ygRSAT!Ccz9-9wS2N1v+;0ActAfmISA)_;df`2 z@^s5VK1w`pDYi01)vyRKNP5#W()%dgFt3%t6 z_fGcdF1qv>KeRBj8uS~=?C{rt+ty>H?z6wmprCbF|8;5MDAnyvL2iT=E@4S$XAfo+ zecuhPdBC5$(ru|@=;r}`R;3qWHwrSFxy~L?&m8AaU`41RJmB4lj6}YO+`&)ZW>t#3 z`C!gJ!cohxN$`$(&y5N^mTm8Dx|-F^?3nz6+>*ysv5rA zSh%8|%0qchuUVs40p&`z;%|4EJd_|8oxy6jeFu0no;(fvKJxGX>t*lD(pNvLS{T`` z5&}s4HQo`gjmP5u8mWxWNDT7omzGZQW<(cu?Ww296R+y^{#C9X2*#wG0H)J3C=hFS4Zz4I%>6*;IF~hVDwt#JDBM*EMb>-E;19Qtm?C}=zm2A@Jf^2 zoA7{MXIC)mejRCu9mw0BR~0)KdBZDrH^O%x~-|1cVs`h^1ly# zIy8QG!pJ;u)?nfT_tzk1G^3iUoii1$x*ys81K4LeQnxeUIgQxQ^X$!s z$mu{}2*0VAQhDe?ur9F1nBpNvIlvaQu>nLXOghI|1Dk9KE(xv)R6C1u>n*-A0j4?R zY=uAH4!;rkC%bhtqDrr$UIjZ?=aqs2&apS2M%uwwyWnSsL)*Y@YtgRBAh=sdt+EpD zID0_sby$JwfT9amf;DK*KP>;XGJKNvR-qKXgmYdl(h&VLdIw+9j)rf8v9`e`RpHS4 z`dL24AC`wsfV<0b3p2;l2Us0-WX%WB-WnMmesAQ~NaM)Q!~2JeM*bR)CyS8Y5c0iR z7ztap9E~e8juQd}ePlVPnfS{ctm{3jS-W5A9|yOtODlqM5cJ|5)Sq(uoXOZ8T)=J zd^++&Y<&L4{6M}cOZ)K%yWrjGQESG2zC_E4*_&?c_+EB-9_&uOp@sE)%I?XUPJ&hJ z3yll6d)k2k?-Oqs-X-V#9jyFIcm_yGRY4jVcH)G;aaE%Lq^ zEAg0hnw_o3HZ%&WvNCU`&tc7*@IAjK^Ub;sBK?Zt_Kpxm!p<+v7F%}7 z%_-}dLKl@KQk-p~aou`6oowa1Foqv<>KGi47fbq^GYwfqr5kcfv#MM){GQfam&V*B zrzJ4estR53wmeLnXFia6&OWyy@9)4KP6T=^UQo+VZ$LFMl>y^1ShG!Od7~o#Mz$sJ zkC5^n{dn*`_Gk+1dI@WC!gx>vn)1Rgz*oB2RBmi=p4%Tj>a}CtvaFv6PF3Z}6u##I zGQ23a6zsnQTzYHd8&K(2$c76e6?(4?WP)f7pI(4J`3ws~pzF0o|RPHcY> z>)DuX0vl|CldCeKDWeGPkaHne1?RehUtNn0UF)t1G-UA$@SOw5%4U4|Y%IcuxfhvI z|3IpW9UV-R!&_#+>EnqR$=@fNlFQPY;perE;-4!)hKduNGPGKSWth*O+Cn!2t+~ya z1?k@>SAr^rv6Q7Ciy6b}ZK`6Q`jQP?Gk{MkPhC&11}BIssy<{2IwY37F{qr9vXi&a zrhYKkS!K>GCkS3)O>VHV9hp*4V*>A6fi|~WZQ+JoB`gO-9zN@CWk12%*vu5jsEJRc zvXZeW=-1THZTCC8%Vg|o#G?Fe_PF1V&uq%5#(F5!6)ugejaJ2aV?D9rSYGrFHn9jx z{0Hw1?;+mnp?$|V_X;*k5wRz5xueMGu~Z;A5WgM20N!f%-v`lO4qZi86^WgST$Q+A zczLk}`F#aD#@sD95eQYj`O=-DZDPx-Y4o zxmz$w*+JogK{P#xrGl|yt%7{FvVmVFij#M+dmp40pc!#AV;$b+E*P;GM%0PCR)g54 zS`UIEql)^#vS2NJ*zOY6`=omr`%oBoz*CJ!>lLe7&Z@7*ay{T0b!MLi*`q6={a~$f zcV4IkJEYv~L9|=3GrbQ!5om!2O-0sw1FFBg3nSQwBsHbh`SsZ~+)X4{XSs(~K2eMI zjYTI~xUZIgGW@@|rIFiUgR85nl1-_ZFui-3T4!u%8>n<< zWCU%m!2692eGl_!<+(N(le)zBe(N;iH4dU(9?aoTU?P$RHfEnbNab^f3(^IA$9ey_ z-|jCL>Vj|o0K&hAuD$~jybwGI*C;`T=D`S#z_RXmr;x2}?o=d7v6&OB#HiO@rc6tC zdMK4!2K(v+Q~cEs;ICNPWjt#szAKTQncj{JTuxp_E`r!({Yl(7k#@CGc;@M$Nw6MR zDV(YzybRwm7(E}mh=gB@d=lOlOy$aWqQ{wT?zWJX{g#&)z%_fGfd)K%sLZ zGc)~7qGqH9?)*Ct%{jd6c~-O-ujXRK;b}Z&VL+Ly0qm|&*oW-#POh;pxC<%EfLZo} zqub#UC8@t9|AxdaL(;`EX2E@$EOxOTHgO&4uV5_;GEEs(1i*3dD-)fX;KwdZ0qoKp znHibk?RSUZ+gE~TLl50Q@NCzkcd)8Gd2i?4Mt`f^B}m#pU>CAA#j;Wi zW)|#|AD%$hudqnA@((ldDmOC1N{*vQ>bH(MU@qA1oIqc;!t*AFKM!jrMu%$X^A_ec z#Qqd5ihKuCSQ32CDa(fZ?WsH1y`V*(#TgEowbJWBR&w9U)u&*UwuNVcx{i8Rd6H*n z=~H!{u<~^9{&%P9#v>7dS@hVTUWytI$XDkwP z5{tPFd)bFCt!Dl1Wi6L$QMGcAma2j0Cwk*6GdIFuSs`@Do z@%(s9>_Ly?2d1;qij(caV`cbLCM55p8Cl&}MD_A^v9k9vscbFSCBpqqdtDQ>3>Mjy zR>u5=|2$ou`UZ}L|46hYKT7qdwxitz_`6aN=OdWrX8cnb$bSv1GZz-S0Zm&3dtHN^ ztl_$y!COJq?bSM}I6eOw>#j=QF)zQ&qASh3y9b?y*`Najx%(jKBJlA8=`1L?0t>c) zRg=bD_s3)}IVEmKX}e|*m*yd{T4ai>y%k9 z>D%e5)K_qR7sXuqehUNx-z^ZQn zUme2k$o?$hv$d?-T&}VPYrLCp=mO(x7Y7HG-$!E0l%dVJxh?ptB3AS+w)Z+5p&R>K z0K$|-niibIH=TrMYy~_2qI{yekU6Z$efY=SbiVnA{FG{l%R%c+ zNNby+_T%aC+3y|Y=~udg_)OWUTCA{-#vBf5f}K3l)$n9@5_Y@~D;L8*4ZsU#cs1d* zV2o$jwz=HNMQqADFtc|-VqJXWDt5j#JDSZ>Ua}cmJb@oofmMb2L6x6He~7)E_gU<} zqSrulS4KKqUCO={|kHJUEd3}Ji_oMr# z)1@$p4Y`R}kd4NG3j>Wj*FF4*uuP#-jivn9^5li^vwCA?50HoV@zz4^gUDo+s~Vrl z*z*%ugfpz+kgcRxYZdsXB3uK{ofp~}_%Qbv?3|a}h(`R4{XCj+bLyU0o!z0_jIa9U zA97Fm+zPDLMt19hRW~jH`7ML#D*|@a-NjRGG-TF^)ZgTrZaQ=ET>HRVZ6TqBeh}p? z<114P{X9^1ADPz)#|Qo0zUs~uN9_!Z4V?|ugf<2z;LAY)fCtY2S3XL0WRx?X6dJN@6i(lsIOy8Ax zEaZ-7W7Aiw4#c9$ALd^2x7C^F;G8D#!U9m>Ihba@X=u_{ch4@grvh(009Vd|4Q@x9 z@+K7grJyhWK%Nt;iwuXa!t|7F9*YGiM`QL`lz9a!domOW`L8Qheq`T-_-3=J<3S_J zd5i}EH-l`k+t`ey*vmD}1u&|rl}>;yF0qn7vKxx-yZrkN%j|v#OYGnYulxP1;z(Tc zoNgx;fCGeZ7Fx7a9bpU7*Wl83u+j;bIAzh>av0FS)REL zPWe5aw*iiJEcrH9coW;b4D@uL6;XZS4OaOgUTO-Gq;A?DEiXFY{T#g*J0Cj-GCJwj z1b4z;J1k?}jn8jDGKAQ+@a{|OwtA5M;Ke{$ie@j3ltw=BmW4}Hg%yNhJ75^lL@FzM zw>NOuP*HpMpK#5;d;7zxhqw|{r^h~Iu`j47ZZqELP4@9oO1&dusH#9yboX7W%xJaD zxgXdUI)b#%FFpMI25jdBU!F%$dw6|ZyYkgqzt z^%e(znf(#IGGG-gTg}S*RtYSIDn!0K(*YA|z#lbZOVqRbW9}tCPmuMbzYMl{E-lQw z1I*mPnwN1m3o`|vVdZttgE>`etv)YoMX1WvESs$LrA)`Vsxw7Xj549m`Tb-p(6Vs9 zyWc9oPl0`lv7UFl@8GCIV3NMjApbqd>Q7e&DtN*&iEHp&EBN!YU@w;ZC~R6ew0f&6 zn~MfU_?JlV1n;Xe*;Ab@{sr`M#%hZ8C?=FUgSKwPhUyN-xhJgNs1^C&ZODBg_@)VT zC}!G$>^CHir50v>%3TP^rgsKZZJ~Vqgj^$g)&joT2cvEYst-=}obpu#xiQ&-j3RgE zK+a>}b$Z{e;3UKGt$g+dHml6)j<&G61z?!%>2q-3CK%An)OKVT8i>zf{~Drs#dcOZ5{}yDj*ZQ0y~}Oehfq2hmL@N z!nsIqY(ai=ejtAkCUM78q@fQD>M`sy7r9o(^h#(l9^;RZI~Kd08T}I;b7r(7(gk0w z3Mpq=pH;Q=JuvD!&J<(f^T4LVu9)!t@F&R3xbRB+>&M8`%|IQ9=V(Uwe|FY!Rs=7* z-+BMVRdZg6J0;L)Xj0m+4xY3FmeGJ;6LV_E--P@FRtunbLmRBA0q@>B(u!~Ij4w%S zOsq@<5-a0hk8}?&8vYbk@J;-;$)=QgvRzj5gym>`JdW;pGq`RU*BVUDfKxOjze;@t z?v>}%q=g!*r|1L=PE@`>r}*L0tTHc8vO+ySvA5M0LzS0%2YaV{S|JE>AG}bwyb@{u z(C%EG@;r8O`D@>E38_D1cT(*rI=Pq6C}(~<{Kv@C=u_~~9hmZhXldjPFAHWJ8?1KR z+#;(MSB0VMr7G-H6Vig!IUKs`mck3Wqo2j9Vr!!VUNqc?rR`vyLwtJ(_O<|Re~u?O zh-YcU`_+ORmjru}kXl2Qid|Onk|y?8rO(8`w~lA^$f>OA!BwTNm`ORB-5YS6Mc~#h zd}}c}SdfAJr20Tb{VDYV?6!!6Du5Q6L>E}}LfE30^-@*)qMRbJsxtRMKU+g9EXpsg zG8+uD+Oq3q_=yj5su+@et-&g+vFiCP*o2ozo8q|YK)DFg(c~^gT$W}Iq>2-ZMFy^M58j4uTvea1tICFXuxNEk*MZOWhcDwpIs?sEOm(uTo8-Jz*r@U)Ww9hh zD)z8OKgpAVHqRp=g>N8+~*GL3(D7I+3KT)`9VL8evzb1tQG8aJhPu)FJRjaKuN_cF)* z1@N(wlzJxREtm3}N9hW<@urj_giXGI$di+(`(aVM@u7j~ogHYZ^#~1Lt z$xH(X=b+euO{XY8>s0M@OEu0`pOXXiy%D(vH@V7c&Ik|Vr*5;NCqw&!Vz0Gu!hNA_ z{Pv_-w_31lV@_QY7lJF@{;<&7r;$@wvw5MXtkC$3(;vKJA@6fY=s^NWBZP2Q}e&LP=!EY;IR6^Hh!7X*5 z#}V%nuOh5y;rFbxymv!RHHqrB`8`}nC%!oGMI(P6es8#a_|nLiiE}AUeO5)TPN|88 zk6>TR-MPV+Ibp~}NQ3J8w!p}irGHIsOb%*lC1_)ouP%XWsg23c67xaWms2}@^=)<| zPh0Sbli&vP!$scF*VUNqNa1j}B&>@1vtXJG68^cn4IeVu&4h;dO_kLjoaK4cb+|gS z3Lp1D@~?^B_{d1nNX_uoq3F<>R|{YL>D8K{Tf<+gf`%P+!CW`^R{a;;&E0B_!D!rN z7YOvGqwI|O`RdFj?ZbENW5xQogXtg-p^$OmkCA9TW2~jnYK_NYb1(D0=}76^fNF|0 z$;U^hRa>kbpXeyIrn>CKR{7cjnrJhuxRsqb$@3_Crp}xXu}#(Zi%3XaE9&yx%6Bgd ztJ}0YIxF^Hv9f5p_X!$W;+AtC)%HCTvG--jPlf*#eq|=|-j59Trxo4UVl_tcr;|Yc z8!elb%C0vyCEZCP+Y2*0urSZjgUd+QUB4LS_-;-!sUK%_)zg-PIGtYT&%&NIAe*Xl zo*JBFYtsf(>Ipo^tZ;iz(6EiKku6Vj;DQv+e z-N;ts)2F-Ng}?B=^J=^!?3Aj3U!e0Fd z89bes_gUUCPg5Asvj_OldUX38WJH-k%@Pv#QuWFC%ndAP9Y|BTft}{t8;n`4&n{A( zh1L3AawK>9wDJji*rgQ6@Ilt{;NbG(;1t!CZ(=8xrB~rARCT8=qVpDMZo(_B1Np0Z zP8r7_tGgYPUSRbTt6)|;Kq8N=OJufXmAa6rO|a45gI10u-vn!dSGfAyAW7Bbj5kkN z3tpXUGb4Uce;vL+Q2E#Qx(2Cl-@xb zQ~^KTDjQ(c=x>*=zCUI8G&yAwYtt7L^Xdd+EI}rQU}LIWR!2;s*_L|NV?Fk7Msj8R z=i!G#)k6!1_7BY%c1Hd((l~NyWMpJzT>W1krA}L2zkJ?xn0^R-@3M+Eoru_Mk~IyF zr4FApSd?nyuqJfbm`V?rT-7Mg0*cWs^S;L839(-WRZj~}HB7%OT;ml*iXt<-Htf&g9=DM@Xt=~iETVdbO73H2jw7iUBKBJM}Zi~aHAGgBlyI6OyP#K@P z$g7^69Fv`e&Kw6JFE@VmA$!@%OAM;l8O!&U;OV-;!{MuVSmkL~1PcS2(KS1#uKpJm z@!X#7GFz*;C}ZGUyIJ9dAfgX*KUk$;%Bs9?WR&+8a%#-V3Ls_h;mu&W9lUm19Jd3% z_!C+Z0rOP3Gw|zeh9?G;<#%T1y8H#Hzb3v+z#7swGKH|NDzx%+PH-B@?@PGrD)!oP(~-&M71Pt#wP(+A6LwcCT|Um4DlSR49t7^N0@` zkGP*v*Ypr;Tg_e;!a{sU^)eAWdInT-*tq;a;8w7WeY%a#4zWk-FRC_duGv;Qt?J|@ zd)n}tiEHxUMXcg#zDYT^BGAQA_F%cyCaFGeg8HqnCyH!zh}rs@#L;cuyw-Ae>eJHe zMdluRcRsTl&27$VD(_V5poxSu&$R{6xTH^mlr{LyTKI*U}PuNiV* zM?Q*ulh>5@Zfw9)Uu-oRranF&d!`;CpWW)QSh?y*BEdDzjZA;4GNFpGnvofaN2&Xn zoz7uAY!-$B&$Fsx@!RjM!(kEpwH}-N0`KYC{;baIKpyvi9^}nHk+~b-g{A091F|## z4jlybtVA~yRg_(y!k+u8sCT6NEPI_(RkmWM^PZzALMxEhwcIh@DX_u%Nw=ylfk{hX#4sCT=`R~D@VU%$y} zfW>Y$g9zL$#Vj2_dvx{=Yrm=^Rs1^UKukwf?s1kPta{CN+(#el9 zGA|92IF6>g46sI%SfLA8<4&%v`ou<<>TzGSy4Q`#YRRgub4c3OyE{n6?+ zcKP-#mL+SpddzzEYcE#$Fl&3nCOD0QyOiNfU~ztbqMU-uGcI z+N{P@bLUjKwb*IQ7G(O<`RRW47k0sGUHU7VsuciBZUha*VF@L?KEg^K^c%95oX%jC zTNC~TzwywG*fg+1B&%E-1dl7z+K=b{ z*u533bH-%*({HAJYd!1uYNTj(Zl}}9&e!l>;jf8~s>)jN5VEM1?0f`ft-eE@6Hwx6 zu1RtByx-0o;Y*J*>gKzMH#?u%p8nFh zZT_0LmaM?z-pKBB#0ICs@@nAcEv(y4td8n<4}i}%rNJ&(#!F&0SQObjP08@Ezf&B| zSa}ERGffjBScg6^>Me9ZQN~3U<2qz)p_+Fcat`6M#_>e`?2oU^Q&y9rzf#N${hwfU zb@!0%)mG2A-ZD~KkUDu`^%l#Xr?0{<@T@QwHcFNA8T5PN72lyRvwF z@X7!v`fc<~U0E}&USJ{nP@L1OzBAn8UaqvpdItwA+N%CK^~*IQJB5z=bC(2K(5Vx= zZobYoX);DLnmjt~LXpxRkOB3%bn?7gv9nLP(s}Tb>d40UjvW?eny4O~oVd#v)oLqGqCS#rllhl>XzLb>j!sj> zWKeTw`+`H@f_9jHLsS#i&&OuPW=5}hGq6y*__k^+@v}e#nW+wFM$2qFL#h>NQ}ifh z(VU{pEcjb~dS*J2zK?~K<|`|TowW`F_0deRIEA>(hZf_Vz-!bSH0IQ;_7o2E6n^ln z^_TDElZ*MBXE7s1qhTT0F0f>IGLV=TpBcX$A56RrS~`GFUg&E+@lw3_A~4JYY>bCY zD%*0%vgQ+1(}rjLFgJkT%7nzf&w>Eutw4U&z5f6i5l2pC zH&`vbo_Q~pO>yZ%`0o^0vynAT8Mb<5Sl0`zVSQ89L%21lOlu!LYjAWf3OM|GWG}`3 zDz`JrBEL0FTx>p|!Pugw4s_OG8rN#(dsD2yKtMHzgCLw0);A$N8nP-x*$4UYT960+ z+keiUZc6E_m*eQbdh2Ca#O?_rWr9brhw33McRxlh*BCN)umPj8uNd>U?D%@5qX3S6 zC-o>LJJ7{m_2b8+SLUwe4-hte`>QQ zFJP}HO7;U6g44kfr|`OMAf>rzx~c+d&6Zq3hJIpaHdxiMCNz%+#ezxke1}+NdAlec z^04jB3hRDTK4C0YShaJvOpi5FbFpO(o>>3r9=xrp0W`eI$&HH)sDm3@&Z z$Z4;79nFyDo3o+JBY1=|Pru?Z-!u#p#5-IEGilz?JFK`m&BgL6;b*GV(K&d+?3MZK{2`JU{L$m9u|c%xqQedyj|_**x= z!TL_^s_$~0X48-}HV5vZE50WLvkR-IS}DzAs%GUCg&YK3RNFT~(B0r@iJ_Csc#6CjD6%G0nqVjoo0U@PC@P{R8%I2iQ{6XpSPE z8*-X=ct3O3pM}1t_fGMSd&YXCjpCvYSo=Lze{nH41e;ce{v?p>O}u&?b^;q5)Rd3! zor2u>jPOfasy!V--!@o2zn1%Xho`IKzK0Aw)!^Ocg;a+##UeDVa6G+~wd-XSc47n2 z8W`duyooaJ>e31!4V%%3P)5~ovypwRgd#G^rQS3)QvyP~8eV2AHrY^b4;IB^ebrg7 zc#!bueXFWpie|pF{w&$u4d~@!%V>AtD>bK&`_U;f__R%FO(A`rT4q@~%`Ry7rQ_>Z zwNihTRrjg~Tay1W`yMu`JTw_bFr*2Dc*k2{*TdMU6`?Ad7joHM8U8N(IozWh8CU^_ z*=uZ3enfqAno-zmHOq=`w4;0d?yk^@Kx6JPJGIVN|4A!cPaWd7(CI!qwIhY*Oh6a6 z;F+Fel^1L@+bV0_>-d3rmIeDftRCueSo7TAM2i)w`*?R|hgE!bTeZSVBz3gSBn75TEQ!bB zOYnYQCO)$HZs&c~)$VmP3+tIlmLgfZkftGvvFQvJ#rIEGpU13BSGp;sPN2M`W(9wl zyaQUjmO7n2Zn5DfaFuDnUFcVlR}{GuDUKFL|0`M+UCPhTk+qSWchu_-EBc1^z&Yx$ zmJ!RTdNysM>~)ukrgmsP8m!#E~KGRN>?DD&L z9@Um8syLVXlypzV$6v<#%YJ+g1NejYou@9U`QclkX~FN&)q8ffiDD{mrjMh`$Jsf> z&Ug5V;B7|7OAL3t3D=Vc>&U3TP1R}l(1S6^`%-pa*he$s9@xJKEA6#PngR31cn0j< zT#Ken1g|w)g~0^mV6Vm9C-OXvxzYIxiUPaVg(rKYuFxd=MyUpu7vB+dSIH%0~w5s0@SuD8|*<9()_eLVK zVn4)m^25^TxyXo@WiQn?qR7$~n+%uYIlHr(@%L5wSnBOmIXt=)c__ecMnYNe@KV)I zc_&>>XB7rgm6<$^kYv4S%>4|WojrR5?`X%*sGC~VLyIlP@3RBb0`FM=p4jYhkjV$B zDywmRjuz}dYTm=fp3syGs|1~f&v04$dl{Ws+GPAzJ#dORD2Le_|7{|ks7k@5kdXVn zIB=6OGR157W!|q=EpQYEp;xv*}Uy&&&3r` z-wM#iEqLO`Zr0t8PkRF`P!@hcWWbAgSKWD`n?j2C_5^bKi02RrzYl^Cmmi(**oWlr zv;6i&*nn~#O~x#hiByM)PV;(ZajzA8*FRp@IYrR&(JBtbx)lMRVx3ZApPIj@SoDwf z>0Z`V)BD~r_OZie<0o0kJr;$l4D2;7v=_^~#NsVmtS|ex@!W$j26Ye)843{AYO$Fs zvn?(w-*(ZauV|*v6MkND%^vIS>y!m@#Clatv^Dt9eIs%%`cbS51~cM)7p`)z1T{Us zTQechP1TUk^83w4H^J%dTlc_YoB#287;61^JDhfge}vAhO6<7iFmTWU&IRh#Y^4zn(+6X zR~O0Q1qQJF>Y1$Yeu05cc89oiR4E2|&r!Xw?tD$8-t>OL1{G;^{T z6jg`kyUFTYWM35*(o}fgnZ)y44ryBSRV<9^e;aZ~GeuZ{0~XINQ025mzI6J?o2-vI z;57lM-R!a^w{)xTT2nL8`{RZriulgu?01o`x_wPa7l)aZ(Ok4eSX*^q^}w2+1t+tT z%PfCT?$(49@9fU1Ui*drm}^O1+L6*y{ysbVAa@~962m;Hpy4oQa8`0@au*Q-)^^ zsSfuK-dgrRHnYaN{knf&)89HWs*wqqw%x#IPB1Q2X}unLy~5VjA&(7~W5=!_#iMJZ zx=Qhad*&;)Sd2~$tW{)vRLw? z)ZO$fu#ZlysfD?0<(U;p(o_yr>?=Rkj&*gdK6<@**<-28$?{}X@>=o(&|yA%ya3HR zVBNzzxKnipG~{k#jh|s*K;Nv$R_o=8;)y=D9_kuRbq6&m(^Zd^n8;pKTjpBP8cm8+ zm8WXmZdyfIr_F*=9k==n7TP=zWlZi`oo^|t^w{Q}yhL8-z$P*_@9!6Wj#&0)vfG9g z{@VK#RPxWr7ueuZPp36b!jHAGCz`F=jJFzVyFO@Dvx+nywobn)tMowYu&?D-Lm0!F zALTV4d-V`x(*mw4bT$~@DMoviW`veCP7~n8zwY_758RJZKZ$ zH0@AqO0~3e1Hu!FjX$XVrorl{x8N(Drx&D7Co1DBMy?EB8GdhMN&IwTCamMUCS+pi z3V0QPc2>bgny^FPBq|fXOU$=fSI1H?Xps7NeB%0y>g1GFR6o6{o|}!ItD|F*Rp;MC znjJ^E&{3ZL15zprAnQJnd)*hj61wVsg3YN2D+>Mzc>O!8s=V!PGX@~-Q7pcTbysJ- zI=4Ru!AuRQs=EgElnIrDv*9nma$kTdCS&~uO=jyXU!v)7`)mia57N4geC8w)KF;E} zs$;HwT@P9gR^Don!>#;wqA|-S$dy>_MVl&j3F+2MC&f-C!zz{pzXcz3unHkx)3;_| zvscFF#ZSlcSg#ogRs7EYB~-@$H8L`}pt1yECnJ=FQZX$=@c`NqjAdRZH*Aq_UdrHV2M2`oEV}FISLjwrr$2 znhS+0k^ZqEG3VRiQ&!dgomb?24lly;f&`zb0w6Hpykq_}Wk_yyw$W^gxX+}JVi-l9 zDp($dqv7dj9@-SRWD#lc+j@I7+mtcSS#0sUIXr_R$$N6@W^Cn3OTeNhHEGXNXJ{$< z^M$9J$QS(mj(0VDGBo5gXJ=tC+I>xER;_S@vEVwJ>o!`aIaZbh8|nvin#&>M5&wB! zVedLtuZLBs2d!+j*~bTM=F)Z9m{eY}m%V5osf>Sv%qz#~TK(d3n{(NiRkz6#UOGjh z1HM@5KYu-!M}6qC4c#h&KbP;nW%1MRyaf^6eVf%Q3|PJ-W&2od9l{^OT5Bx#JSE^b z_p<8idd^PfC0a-J5C1%Lbm-4R`-j?whKCjn?;mzX8b@m54T&H;rYW;0SIz2Qbz|N& z@1LyyFX%}dwn$yCnl3citdeHzl%P4;@NoEuRghf?O%HV<>8eea&-yO>ckfQ*)9C4F zL-dc)5vvM30*~#(eoh35Zo%Fx((EydL7uR9FPJOqf|GY!Y_;3^3siSj2)n#wxv+PT zH?iD~jHbUXz$fVB+})s+IZlM{y`^as!KY3$j9MpNEHT~Lhwe_Y$ySSy&-V*9*9<|WpmH*HDPg!fyA#%_yK&P?4&=3^68SuNzS zJzasF%!i34@cqwILH=|HOr^?d^?NT!-{sSftzu|24sgP1?D|+KERW5?`4rxHI`W-2 zE?fiK7%&}s$2x14us)g+IL`QFzs-X^g00%hnnyx9lWl5H{oslyDmT|-@x*$=+9xc( zF*@tHFyLDR?nl_2rraDgKRz35*n`IU*4_NM&09WeGY>WEs}9Z5RXRcSSy z=wP%mx-_Ec`p<$w;;PG7g5;^bMpMUsL3?Wq=~ckG4r8?j(2nBl3#`_Hbeql{O7$h1 zlAmd!fW7jPI<4+s@xR7vS@}FxUDKvZz(T4d)4ZFbcmQRyuzosU%K9-L!9zE(?#Do~ zZK>^PWv|Cu-}`Q?+!k13u_1fq0W?2dz0o_JI-7gkfJac5$2&I1pa*P-pSJmob8M=( zVo$14UvK&34v>aALd2mo&0T#Lctig*K5HFF^g277Fw8d|$(>;MrokAIW~>z21jsq+ z-$Wu0gM&|jv+4}rwz^%Xs8`&eGUeyu=zqux#vCD zUvXLCP}OU_YjaS~IN}$rJhe^@Q}y*`P+bK!s>0uGwIq*_^uFX(n;&^P@oVy2`k>~M zqF>kwtKiif2-TrB*jy#yKo_q((WY6e-?fYN+hmdBsamcdQbLtftzX`e=3W^OY2NQKKz|USbU-f1hsp`nlU?)7qX{)&EwT*ARsT-Nu6cf|j(oTSLB8?6+EF`vj|| zc*0XC+r1~NsrsvJ<@;HyVEUR>?wrr4s!m-#C$JZu%^+3oO}XVptA0@av(={I&xU1e z_Gj7|LYhd~4yJ0({**iPI)>T8D%`Xa8(>nf<#WjOGUU2~C;rcTxMs_Z{bbSh4Q8u_ z7sYax+N9+Mi?%5uGX~VH{7u8_YI;=^EMzw|6UAd)riPRQyRGwqczpsc_}K8SIL@Tt zUd;lwe)3oB-w-lBo%PYFJ~}aIs%1jXVrev!UASLfNAdg!pWez|oCs*L`4gMZsvZRO zrE4mykX;LSO!#Y}MVjTwR~xPrOF3v+yJ|;MSzB0(LSxs3c7i~qb+0UTbmHzR@X>*E z2o(P~qmH+o$btHW3(c=-O14hGlYf6~i1j{Lf48xf_YH|Y$ga=cz=phK*=p63@3v_9 zQB|3MgtwaC zG?7`E?dkl~uZe;9%(xT38viWWmDYJAb=JKkiCJv@$TtihY96|4^IJz}1@Bd^glqc9 zN^|bKI@N{BK-hoN2~swvs+doylTw_p*>b9Dtg8=P$9=2*Ua?u>Wyx2uML$QsWf6N= zYkfhJc<&kzO(FN9Oz;cK&wpt3lYZceP0Aa@Pmi++H`TVTn(Xv9EVcCsL|Twb5eu>#h3d9x`*oqGsb^ ztJiI=jyg2K;nqzhdGEG!=2S0UiXD>oQXZ%PB-hUSHD5N!&pE4Wd}J6xGf|K!i>s^l zufh2JUaN>H!=7#7rEb@Yph;=VuFx+a=I?CsjB*BTA)RrfxfiNsXtA}_i33wv%UdR& zEyzlbRduw0oCa;~#}PdF{_rVYI;s5)@bXD^Nb!UdmaF;EI#u-~n#3qSwINrQRrLB% zs-L@ml)mq~*qEK>nN%ICdc=2iHip%6pRpN08+pk_P6?+Yg|=vR#XX*Rw$*8l zu^5)Ryep8Fkom*y*!;)-80)8*7-+HRXnCj{^fn(hsakRI%lRO$B6d$Ffy@UXXRwr- zvNS8B=wQE9&bK8$!s@9TK4|Ct9JJo=g*L6To9|UU;VfPtEWGdg*p6PO@O4emdYgeB zOdqg*i0A2pR%5*d%%gnlA=dhm@mAG2FR>{rd->fI{QC*+_7!-*Q;b#DTYgAcTvf5CXROcav!+`_qtJ4R!p$2%Aw`*m7Wq~j zF2w6Cn`pfr|N1_9G|}=zhtcn8!2zr1R^R13n_)GCNAG-{sZ>q7XF2~fhQ&@;-%E>~ z#&Q`6m~LHZbyx&N2^E)p!Rs;Bu0C5}Q`DarJAdj-3#fYPTUO_iogVDrfh2c7Aa`Zp zd{y44dT=zNw}u~a(Iybnc2+tcyPy-14q|CKtQNEzfBPV}GcX;#RAO~0CDtQz#wHZ) zMb9>})`QkbH19Pkk=N5nBkR$o?Up4!mo8$5ORaW9Co-+_bpk+M^2@}RiCv zzI^)=o8!02e>+{C`qgR-%dJ0Jb5wTtMb=6CB&S)y`1;Tl(2+8hnqJmoNT&f$6 z0MYhZ9sCuW7yLPrP=ZC*6wOgxTZ89REz?}=t)!+81l{J=V3E4K1(C1es9#6cMsyCv z{_yAEGUa~{o7deJtg*gV)zY=_%)P9$a`eSE5AZphLw2FSYNN3+)~ljurwj#OR8dpu`vlpj&tWwi6)g|AM|20O>) z0&=QO&|&LXY_U9|<`wFG&ZTsMbwl!6^4FwttRJC`&(kkp>FP37++H&d_n7U+_po-= z*84s>{o){6D$A$oxac-`u8I4YrI?L%6mJc-g&w-?;QJ%s+lnNOKd{tTvlkO)s~NXz9#Ol*{Vksf!CDrtyWW|DxqE0 zVc2KWDQy-!%u(3+mG#)Dha?G;xQpkj0B34~ma3Cf3$Arm1x&H!&6{{4ou^b}C!h%( zkIr9tV)5pP)kkz%^eJWe=x%UGhvnDT+w`RK>~qLamDs^(WtD5(OK1E(FjljOpXIMB z{5*90f>lc2vWfy#tkfa{irT0nNtS318r-9k<7{@P&e+)-&}ljYtaikv5k*2eN%dW< zq$)l&{a(nX!F=FPuq9hicOffU@Sto%VcBPd)gSv1 zUm1njT)|IPn;%gH+7`6r1?ze6byf6ui_?0BW=1O&3Jf3aHE$w`7t`Efv8fx@t#IGY zsM0B7!l5&5?$>FnbU&JD&1ybxuY9f5SQQ3z7T{j1bUb6<@xFEatNT_@0aFP$j!y7V zSH>RWANA;@vTRfAZd>7;FEo?V*BR?OjO~o(%m-j+>KWGDkV;K9LKpTL){3xBItfE{ z`*ZCKSXGML)0`aafvk|OFvaS+1_CWsw^0SJ_!!+$MCGRC@elEO&#I>DE%H-mp7=eh zI#LyLweg}?c9Oa}x^HnWJ;u?`SkeYX= zDnP{ub(YH$JJn*3btb%z_KT&#SRI|+T>x_4VRZv#;APE-Q+>)aL*{4z*HT3;`~`OS z!eUV&o3OXT`1VoTL3Ln_&Yjv|@ezF!_nFg4->M2z#z4D$zXR>QPTJ|tI_UoiTHiUawo!nYwfJ$+wR)eRT}lV``7GyVw^;Q=vys=Wy{ws+RiC`Hq*tYLmm;tcPfxI~_l9 z(`w%|T~$%0v#z42ZLZEMt+I0lYVCZdV$15Rv#E`5+LTaD8S1z0o42jcW0{={vIRZ3 zX?+tqo1g*ds_?}wzp`qd%`mf{a%%#+Y_h5%Rh63N19t5|OSiz>HDj~fI;*c()=)8h z&GD&3AD09aiJWMekRIf>nNQurj?2&PK%d$dTKB*S!+Ywb6wX(bckAnkP90WrdC$ChlU1$U11CJO^A75Bn)LP9s#TQJ zQnl<&>-E;O&fY++T`I_9FkBpQeACEKlUi+pg z+}BuS{DiTET^7sHe1VT`CaQRBr$yIw0^%X#*>zU+qg}Yfvz;+LF0+0hVY)`k7(X$K zRc8~BO57usaev6pue2$65uwE3tJiD7j zogTB+lIud7y|CIOx7%>!7JJ@N&+w!5V^msfXNjFNG=!GRcfYc#oyF|W1aRhgR(FV!n^1ZoFIKX{hxCsS6hFrY`TlL&@4n%DVztvZNaZjG1ORX@;1f#hBc!^vMSa+ zV13I4tkDDOkGx?Smj7VgYCKMP=%jlptVqErt1Lcj8G^mw>BTlj;e}y^)y6uN306nK zcwS{TIbn-c)cY2f-piV+Pv?czxsJ@q)*|2j@Q$pRhjhEGG2$Q z>a^0L?yB;e2h&uvVOQt^KJSqE#{r88Z?)^Zw7B>Uvp1S#qE4@;+>@BQUUMx+p?r(v zi7N&*k;1cnsPS19cAWY0gfo zmRM|0qi4CqJ-@4|x5$H-ZT;(<$rkH0_8gtntTRPb4>{L5qUPG%9Wk6C>zLCCgBe5l z7m(i{kd*T_S>!$#^t?`@K)O0@+Der%`x=Wyj?O;bXZ`L=g1+_4)bZc3uY2iz{stR$ zURozbnMrKDRZlI#@~KO4)Rumjdtls9r;jXG#4nq&$$fQJ`=pZqFW~j-P2L;LgQ(J> z%>0L{u9us{Dbu088BMhsoo@Bm*AA6hO}kEn(@Q-}s_>|{S!j4f)^?ox4{Y=^nrsA zG3SZu$Hvo*)}d+IQ)xyWXZ7Y89~fV5eO-T|_^>*lURjNL#CmvC4WTnKGO&r2;jZuz z_{7Jq=5AD5M)ry2&D>mrd8A%P(+moY@&2b{O?8W&#pMglgFdw$^CybX+H9PJ%}mvF zw+C5lw&jI2wXV-PX?5P9x_&M>vIHP<_Gc)#i&a$qu_UbO?0#^d?r5%^m@bATZm`_; zb&YZDA)898`Ml}@U4`Udw~EJtjB2;AitLwcTBY%=DvLWjv-r=Hfc(8`&d1m^)m7FL z74j9aS^odG_jaL?U0J%|NlA{Z%vMeKLM9A^yEPBtDLsXnYk_30^)N`)sRw0uY8VJ# zIt5{H3ND0kKu>TT$jv;o0~N#+sBmx_ls)YLWiyT^<+Svm>`Fb!P!g!-R_aN{@i1~b z;DVCr46F<7urlMG^{ut`-X~H=H&0fm@<%5{xwgY6w@#e1_g-s#>s#Lf#y$%s-5kDg z8@1$A%TPf)eZxPqXtmq`&x|zM9{M}rsE@5r%U@NLoxcg>k8snQk13n{pWFX)`~Uyp ze`IN9{X{~9}!ycog; ziJ89$UzC~8E2v*cQ-w8D#K!%(DKASM6ZyMRpWs{2Pn-jXA&YbO7=43xQBS|(ug5+A zsoqEKnEuWvur@|O-{~GKs(kAUkpVJ{!C{V@F7OdJ7*4CjvLlQa{S39Fp%|;parayZb zc6Gw{uRalEdld0}6VILW7KZUZ!iyUI6ZTN!w+p}Kz~ARwZMKAGO>9A`RR1IB#{FAA ziec4&e@9h{kIR0nS-kL7ANB1Z%@Vd<2mYNNKuwd>xY|^Q`D7bDdl~uJEV3%3ZjqEe z>$DQNE^J5sx#wRwNtoG%yI^5aAMKI8DJWA6fuZG}tiI2%gc@9WHd@U&g*~@`OfBIb zYWyHu3PY8kFYcNBuoO~m_mkp7nud} zSPAtZeD>}BkI>&J2VUPXtTw%=N%;N+pwHXrR(r+Y4Yeng&KPQ8_p$59g3ci>8hrfT z@!x~rPxVQE32h=$#QB-jNRIk%nfoW##)o=HBKQhFm$-3|7G3B%P84Sk^T3M5ycYKcWKQ*M1Ce z(?9u0*C*kxMN&mC0v#KHPkQ9PYdRC=z$|WeHoV&xe&t*GKOXqs{nP#DzL)Y3K*%pb z^@6_1I#_q4UHpab@7#cIc@vt{q)adY?|Iit1K(>vsZMht+((_>39%BW6ZgCQ@1yJ1 z2a?JEiSJi`>PKz~uSLuo|97y$#7#W=61?^#a$tGX&XQtL6CTVU6i`b*{RdGyw&1Tt z!k6y)Z~0rw{rBC4FI&V;Z$7yO6q7uGcVJiPl>1lo)FYem&!mG43}OfwiXjlp+p`tSD<>V0nc=fxFZ zSfl9uyZxB@-QR>Qy$bcMA>ad~{n-YVe&pS~@TtEuf8|HrUm>seem}Zx`**dA8U<3- zO`|%$0k7#QawWsC@ipWlNEwneS+1jt`$xz<(F&uy2I=f=`+K1POrj1Sh~jtZk-Lwc zwM}6jvtrvle^rnw_>mt^T{eP8(d{%`!4=->YM7yi0<=a}>v{Ad%i zY~Xy%<6Y1x&A2ad<`tz!*Nn?-~=08tQLP`0tee))}FqstnI-Lc{EVzY|G`cm{ST zi5`3uwcJDuLkdcxU@KR__fGr!(f1jF&h7%M$@u49oD*Cj~Ebx{s}zvEzrM%iR3i*IkNuKGm-1ai z48QeHoIA+vzK=cecHc2{#>Wvy=D=hr`hSN!B*IE57XM4UyQ;s6SHQ6(ZWLLkoIgKj z1Xkdu60e&$T(dZp>&OujyMEvaap9;^`)B?xp^n8_pxX^pdfkL4`iXx!P(1fL#E*X> zU92|!_e?!YcEM_)m7GQnixj>Z;vE!FhqMmFb`coV`^a10hT{EKzNbl5zhC!JXMwa= zKr}{i300Hqpss~=0tUgU{Sx=_17gE#P*Wyu@eur3%5bvo11V${QQz2*-tIN{duikq zsrPsqm35TMr8WJyk2;1N`Tw?fA?NuK`I8^e{gYxRs#IXrFMaztAYd8){|V_ImtMw? zq26)iQOAh}x-61U@E!UL+(6anRphsm(BeuHGY_>~yXdk_9_lK%7laXi@7sh=(bI!; zx+oLgLWQ+&k-@5BhQ}x>i>ZqkWiEb!Dx|;jPp`j1?}@v}WOL2@l)oNY=)5or1Y`pG zhc(zFQiuBnjIQ^5FXz|jih2vyguWf|rQSt74poG#0}Fr0_c|yON8GNzMAXL_=s|x~ zuvS0CNjX@fah&eoBXgVa_i4E^iweOq-f$XfE^nfWXR2=(>fMBB-Mc`&;2uL6@2x)S z9a9ENX4qc`)8Lp-Kx?Inwai>t&RJYT*Qf&YPN~+Gtm_BJ`KG;LR6-2H3JgL6gt`YT z0ohpfQb1C!J)zi*as)+aA5Qf>leOIb+L6Zp*c)YibJ`wmre{4TZ;k5eSJ0cPHt$m)=mDe)%P@b~Wf@BBWn{6X-i zhQN#<4DAbKv#$BqtfAA7Zz16KHaa;l%eiMq6;D0sp94o8pQ`uJfhL7BoS6DG^tGTG zwIBSM|K-Pj^`n8`2zX;8`5)&6gY`HakazM zxm!@1B+kJQw3;Xrvj(j1KJcOvx=MJc2B7GIFopvt9v6VWTzgE|%6(M83`1EbkN6-5 zJ-&VTQg@A7<-R{l9w$H%F?R}BMgwf#d32enqEe~?UIN)bim2cBR|R|72jGhmulg}+ zC`q+`1Qm>j{=2#P*V;KfjayQs(2IVGBD-Odr$g$egbs% z8z8w4r2dbr_91xs33Of~87>|Fu5+D1Y($;Nsp7IJ{MsdOg(>n}f~{3% z*ev{pI!=TfcxoTP=lCA_T6B(+O{GeaVK8!uxj!h?1xY-C7GhLl)=uJ?Y(kG|9d&(# zn7-BjTh#UaL;ttP;BWaWo^s4itbwkOs=AoG&;1f0O>hPnZvW z4Sb|`9#g-%VR+zoQH}a-A7RH|`@3KY?`jJ9+3FMOcv^ssO5=1O6|Z5SacwB3ZNfgV z)m}o}mWLJJlFZVw|19c=#hTy%5r43Rr$FrW>)4rOi`i=+J;@LH-^J;@kMp;N+&O9S zmB5}KfuL6;Vb5nS)+|{>nb`hD)$Co1HQ`Reb}T@C$HV ze|Jm~DkJ{auwLKst;7&A4NF*6Z(Y>I`C+WT60bO|n_^O)AiW zBkn`n$?{UY|36VJwQmppc;H*;(^J>IMMN+~tg{2CV`*Jj0-qL9kIQU|7I6LrFk151 z&kM*TUG!Jm9}h6Q<8eg1tH2;i@LxIG@j$Y3gU~RZ^`BG2KNqOdo8tKfGR-3w zZi~7nX|v8_ofCtz04`-2I2C0imf#1s@mz_ayDKa-<@*uVxQ*()0%}w0h^G%d-}3eS zqW{ka{=b1g1CxVlxT#w?@wVhS)^Do%7Jo?LnSv*X`DE$BPw z!R62ujuA#$?MY}+a(#0`l(34huPeaV2^%I3XbJm#+Mky*&g8YsJy8F@hpNxt4ZJ&W1b(UJ%ia{G;1<-TNXeH_g2(=M z{s3xC)cK5ZKvan_iq0)%-1ju{B(ty<3BAK5w`DxZ-cnQ{d36`0&7#I)A9i}lw<$>=UKGWU;{6cLfjV+d zHF)bA@Xpt9N>Fz9ns{fVbW?-ANDc^012_nAQzrboo$$XCF^pIwT_O0C8_qwzycp&Z4e%NgbYp%in8P* zRB;Xx=W`cXh9dYqAEBS!SMUG`bENN+3Sf3ks1W}Y91X5j`Ua@|gufOZptACo|E!3O zLOq^Wknv7Q=IH>O>4)&%-$uWQH1@|GL_;H}p}GV8H)3CDPOb@cS~B_vi-fJgGT- zCSC*et|=im{0%xn{e|y;{Vh0xpM$^GctY5E5&jJ^v5Cd<2^7AGFI>QS973i0BoOW_ zn2`HmDwKeya!z>yS;$G?BxyW#!hfg-FP&G5*eglIgM=I|BX?OdepnH`*0=nh1MF#H zkRM;*iu-%u-fT+$nMXhp_c|Ni0#KzXud_R|2cT%#60~H9?BK}?F{&LI)`3{DV*yw(1@#axLaEt`GQ&Tla^31NZuHA zZlfsu2J*>tn%?riZxu{ria%!&_i}ahjJ%5$wC5-%Gk{D=33|P=IJw6JlcMvAGQw6z59bQilo^RBBn zUq~64xTe%q;0o~GIb@{R=bAt?^}x4EpQFP0OW*JNACaZ_8MxbJf45KIG+4(wCB(7> z+?zEeOM)O!HR^rvvIz4e9>6!~t4xeMs)jEE!z5IhYAAB(eKvxA6u9QH7InOmq8nL@qar@k+8vHvanJcdRSbx5do?jv7D{bT;@nDjjeY5Xaw z|M(;(kDv_BCgF6Xf%OfvME}uWXT*Qv9@U;V1NFgi#4LA#-%X*)m_1s~wG04};GFLY z;*KmdO*}A022BJxij3ees^4_&CJ+rYk?AL%$O58b?g*a88d-uu3gHG5$UD$?_{RS( zx1c9559WOy*X8`*SO7A#27GS~@A7v`Fz>%uYkE743p zpq?7YJSTwpaIfVpWb8SYkprH&0bGm`_&G%4_hEC08?l5Fle@%^fYUXF6OJ(27I>i7 zpqFzC>{h~vCxBe1!5cUL^0R>Gw1E6U1>d@ann>yZLwUyva`&W7Fo0OM1{EY$>exXX z!bmrt_Djen9l|3e+b{x_2gTFNV5@ASM!SyAqGT6nzb+%YwTW{s1I3RtBFaIiZr%h| zQ-zHs-QO8x*r+n30z~JEzps7?or!OJKm0v^byaZ+lLaEZMAqq^!5bz8`<8!Rkh;Nj z;X5Bd&usx*B|-%jMW-nNEQ&is6%YxfQ4KqVReB&@CP)L0I8F(ucQ?>S=rjMk=qJ_| zD)ZS&9U^y1RWpC(pMUTByXjMZ*O8Z-hgw1lQ62xz9bld8o3bur(Lb}6{I_(qa}%~` zTk?BpRO7J4S^x?%3I^h+e^OGM^qGGbq@??U@2Rh$#&Z-|)Gtwi(|`Q;$QcsHi~4CS zL6cz|NGA2a{Rr9Yi~Vo*AE6IN5$X>d;U!SB*@oK2v_zhyRJjSpMFQ$J`>0n*KvSXx z4U8IcNVCw4Y;`7)+2Sr-W$fEU)KQHid&a7oWIuk@|8p?&9{SH>1o-v>bg{YmjJXzR zvA1Q^I!+^toq%>c?U38(6+`tEx4{Kud}SIPk~os0SeX&22jB}$10y3=`ZD;keH)>+gdv@EhNE?}yIjcaMjFF;q~YN0{P$-%hQW_^1TS@*R+k?|_aK5HGQo$^kq= z?P&8`prwmIf0sr1Iu8$wI5OX$d)vqUc}l8^LqIi#fXPv(o%>MCB(Gr|-)IwiW(D5H z6!<17si!0D<`WXBnQin*wezZDNLvj;3VWf|`h}s}hfF$*f zC0SP^s2$k_Kd}t7fGaNxIC)4L;bTPo4}b)dHt;^G^$9(lN1RS|RYPDY3_^j4tP62G zMuBG+VbNxA+L5)}2KV>AcvM5c(OVt%ztX})VSfJ*&f^>YSzLk|QxbjLD^R5({Qo1= z>Tz}EJs_`Hto%(dJ!pQ~tyM6|4xq?Rd!4@jr>HOI8k%uLg=117Hj2u*Lv)t9gG?u3 zi7iB9ypu+ukJ3Wj>NaXy2chg!G}dMjD0tET|3$2@COCWal$3eW#t)--9#mK>xaX== z0@T2$yAS<*TJPJaTyLS{)Fdoz0(^1m(epX-wts@k^I6=-2G(8%C|V1)eFJRWESTM_ zmO+fQby2e=46zJvZwIJi1N~81`-RjJ=ddQJYr_iqqjQeveLr5k1FvogNWyLOWv6KN zF4PU*1OmMe%#snZ5v=2TV8T;hly9jAvPYfa9{Jz!5o(hL5XYwkXCA{UpT}OS`s?!1 zdwe7xQ_Zg zVyfm5dy_rf1Xikeaz=9ZWAO0Oo??;9*!fLSsX73!cM%<=uZmVY=~riQo)y7#pzQB; zR7%}3KH0wD*`tCpKR~oS41J;!GAs$fI|;KOk8f4fIHs}ohXf~7rp7AR0Cb0}5px^< z*#Z2?O{^~N0cG`W_E9BG{Yv+tpR@&xH3c5!5OzuhS)vu7NehT>CK2J#x~?Io)PO~9 zJZV95cWzVhdztsU?$)Ce7`;Bj_K7l$rRm6Xe7>YYKZV4Wwl}-ET(0YW*&9A{WAf8qN zy~Zx0Yy8iB@9EqAcfl8Yci^9-TPU4uO>hW?aNf=fOLPTxh5OVban=w+@EUCR8rXxx z+ataXVT;#cZx@kEVE)EkREJ+gA1UrgO|?;kBaEQRk-FRc0A~3E)MtDK-;8;x75MDa z*a74hG{HFCLYC&p%OfXOLajS>mZ#_QC9<@HBa>PzF$*5~yO_EbRbU0_?Ne1ZF%PH@ z{4khMW%(%~m&(;69D80x9y|@(y9@M-d6-k8g?9()x1@4F8vV>P(hTJ|So@6dB%vh3 zepVK&{w4HAD1z&<;$+xJo%~(uJ_U@FnELm?jU}Cv1Wr{xIm+m!Qji$B0vwHa@*h9` z4jTTCjz0m4J}O!b_kd&2`^lqE(Tqe|t6;&W(D8y0u?MgR58$U=K^A5hJ{LVrVjSGU zx^BXHToeB58qUQsY>$Vz>1ieKq{ypo`gga66Y3Tez~*5O<|U8h2|6+&Pll@Je*qn) z+u*@Wq5I7QR1Mak7tw^p&Z2UKa(34drEh^*IpzPng=qW`s*49;1YL(U_h*OB&<{Xg zKlk51)iO+=8wz1Q)Vtt&=&l~40(}bHGm3sj;1f0RoClz7SHVhQhD8OHT92@Xze9!n z6;xJn6<-~?y7TahDUUV*8+;44_=adv+`?XB{?hl!gm@n}jaHv~GX@*%`1=OkV3AT;8m+dFBKqfg4JO(ab1u+*z{6$n?P=(N^ zV9MS@cI<6rte51h$wLh^1%}Bqo=_EkJBbP)5B1mFcVGp+6rs+X0iQyry6e6-GldxI zt^Q9@7xOJnDB{C@4~@8{fA3UtI*e8Cndo~7nhL9kPAG?8!kZWtPqc|OFbzDE`->bl{*RewZs%1K@ROM(2Ok3)@8xTT5|3d zQ4x}qOh^%IwtZ9)?I8n8SaTKJ;QP>&_yh_l1K2qwVa>-($`@Hm`%2X zZ;&--#-daKq=lK#5N;Di#LI|AR`5O-ftnC|nO6J)qLI8PR4hx*i+BOkIBhCeNz>pC z*5Qq{QK8Yo+2ElbmXPHC2P)2Y!F{}qQ*+HM| zQLH!e4{N|PD0egPY!> zPVWKoG>rJs3F6@-(H_aHM_B=K${s>pq7cSa_Qdud0O{mNxC+Kp12J_D5e928@_Nd{ znsGin3r~x6)rf_+j5viW@OF^DUXp%mZ=qu7uD^foKnvm!-twU^_F3IxMb1>_JnZ@3 zPGhi!X!=u*s3yFZtRUaa$Vo~++NMP84Pki=o0yKZee38-@Ce;j=!ui3z$|^ny=p)e zICDG?en%QwnAgE=OhL1r6=v2@J8?sDCfo3-))BQ8;eF@8!tu}xVFJCXhmhl?JYiMz zX&A#^MFm*`6+Um_jNeBe>LMa!_GJ?n7_Xoo=0$0(@jlS%ec%BeuqcXPa`3y7u-=DY z(veb59vmG;Jr01`jG@D55x*;mSobP+AZO&b&*&s#vlOcC*0DOKu`&mwcCmzgJORF9 z1$CtqP0)$_Iq=#m$ZQZ!XH_`ZVy<96aJTz)Fzh`jQCT~o&tO3~hzr7VrFG7IV>9>; zS=?jNYYEmdhgHZ`)HSU18oZ6Bs8sDj_2?t<@(z&6)tb{+ zSRI9OIt}p3mFM#qRa0+CuV?CVJRtVzKF;`?@cLNeU=h{23sQ4Za`L8}o0x-V-bCNc zDx%>BQZYUYyGC!?!#k;>%9^w?-b44*FZ~sEm5@iM5YgVHY+?@4W5S@`e2!~&XA)~6 zB{>6)O*r;nL6->5fqajCVyyFb5BYF}9w@$wV>Fv3T?)r3HlEHG{#C^Drw(_6)QcUyuZKHb#Ltp+bj>14 zuFD&{DmYOCC+ajbzze{_`0V3K&vEG*zY9E%*H;Fy_pY2%%m|u1!lu_)p^c<{D z1E;~DU?e4QcxdmgVr}HmNxKEluLVVf6!=q=#XCe_%0-FCH&B^FDk+4v-xhsb)~{lP zj|1cBz7Hm%e>M2z+}%T;%cA5GidfNXiRs+0A%i-K%B?k60Ok6!9hk*CXXcr;s+8F- zz!RB9wH{ZrQ|$;2zgg+Rh>NfRN$?b|A}{+0 zaXqo%IMcd_%m~|UsvRS5cL68-F1)TOsFf~D-lPD3kbHw-XxnBbr}6!T5vW!?gd$-Y z^}DQ?@&S6${0ec@ub@^>XWatUlJ@_rOZD_R{DLO1Va_^?!cKk$RfsR3sY|%wB+#E6 zJUhbH6-^H3*Lf8hhsP`$_5kSdOcbvHNmF70b*AG0yT^XepBKAW~v-Oi7tuS z9`?@j@I1ImV*_|GaU!@navOC=SI|Lx4+=tBNuLoPwj%s}$|Pqc+p>ofr;gK)krb+* z+(gD@2YDQ-!5W4=z4GLS#I5tdi#MQDMe1a%jj( z5X$ghp-zvgDjvcHDoSzN)RF9of1Qy^|K$KPv5mT4j?(!VO@Y-zIr$XwV4N$wikjYe zJj+Sc`mwLeOdmQ^7@z(E6@sL<{NeHMj&Fg-H3Vxnf#)%SD%BtSXYviKY#Cg~6uiGY zyr(q0sWcF-b!hF^q&vVKyad{}d5Nu9;bTtt6KzcY)Ee64Vran5{YjpNo_O-o?+`q98DWUMV*3yof!z zg1b(j4u_uXgs4BafoX7kXA8NqD!gFrZT%g%Koii@q%Owe@Szvbm!So_F@dvZUNTFJ zGjbe4JYmYQ4hf643{Qdd*a;8b2NuD8(=zxV1&K}X!^5Qbv<9EAftrC?6UnewSVyf+ z6X<72kn;*W#ChzOG4pPj_o$qLO`O4ORf}Nk5bm3Y>dh2zgH@b_JMg2Y@vJ7`ITdg= z)TNHAikULt`sT2H)U#}hPdSOxX%C!`8SwuPjcw%o>9Tm4hw!$Gh=6_ptshb|{*~w` zFuK1e2v!0e3q0ZKHxbhlhIAjgheOC0q!6#v5eJL{Zz!M_l^$Kz!HPKvYq5r@JIBhH9SIht_oq?~F7L1=x)-rI4NnlV1rm}%?kQQnb zQ{cpX0RR2Bs1ltL&moC=$W?IJ?#eZHP%%F)tnv}y3~AKO5{{z`e$99@29|>@*uvSm zh&wq#7IOuxPdX_k;dK*6G6igC#s7RA=XM?4;D~8LHH%fmg=KIwuL@S(MzztbAnUxs zCnYB2sF2pjI=u87{_g!kaKSai{1$N|rZsu+gmGSj6{fixIGe9ZY+l4Sm;r7uf&TK> zphfZsI%T)OP-!6FoJH3RWt}YI4P{Lh^r641-xkl~A?*7@slHcs1}put#UWe6T@SX9 z3n9$+ZK!G#0T3lo+ZDN74RV!aF-*{5?#hx$|7%C z#fq-r`!PO0gc>%k3iNPlPJ;n53wum#;DmUfgmUF@h9%+Gu(m`4Ip;b&1}_x-Fp6}S1!HJAmY^z6y9z}WPZ*fI8yA7E9^i=+ z2G>Hq^s4j~7{>n1q1(rGaJ94GDGouaV;VZFTrDCe!S2pWM`PCES;B8* z^_&DEr=n!2MvV4FTCkdmFxB*DRJ332%Q;hpePRr&fS)qz09e^Bi@h}?=X%TdRy8p5 ze(C?LAsb0b>uIAxl$D6Eij_GbxweYvSFHhYz5?YjVq-ENv*iDmdFZH8-4a!ClV9~M zI9d1n|9=b2Yf?u1JLIsbhV(IN9+rS3Sl#0m&VUronYJ*;Ql^4cy@6#YPwav9Q3BGr z1@)|b>4w4`XIABXWW_sb0sT_W%&Z_~L-5U#;88LY=&ICyS7E!ALB`ePDOqRCS{TFi z!(b+qke8g0jN~X3KL@}?zAs$fZN&GZh&Suv8?2ccms$L`X<^3ZVOclC3amiIeHvIw z4SBe0P$M10>dXLfTbAnMv|uNU0Z)oD7j;A8Ovx^?SX;p67EESk7ZKK!=!E>j)Wdy* zd`%X45>ktqhdNC|H0T(KxP}Tr)%ZU^bh!j2nuk&c!RP7*?r;HXGJ|?@=1L6Udr`dl zjVKl0$Ep6)CtORz)ii5h2d%@RR0Ut2k;?g`RBQA4VGkyWGiL!$W(8i#0oVu3e&Kp? zV%fAM#^N8|V``ij3YW65mYWK|DJ*Z!3yFF=76_wA}nB6u`0njVr~yU z+lth+v$9tjm5r(xI|8DDb?4~f^rlszt2CJTtw~_?Ekh4ThlUHIzj$tqvZbAi`vtJJ+mqKUy zPbFWx4b{m4V*6dNadOZi$s@jRA~Gximun!p%^JLHNE9M0gMus4`RQbkiEN<9+?>fT z=S)@WGOo@8LuEvGOtK()C2ujbj zO-*<*>+(q&9y&+ND{{Uri0`t4m__4%MOv1CYZk@!uVU?t;khRzFXEnn3A~LtRJsj9 zqlk7StNxG46RN?3Swn^DeK{97^0+115m(?NUxPN?Xa1h~4SLs)!aB_3OkRO54XG0m zm;P(Rx8f|-47iOod>{6DIDd52REm!o*7S(8UpUSmK@GzcP?jlS*=)#ZlEi6}0l%EP zcNKAZ?Be~V;Quk(kC@a|hfSD86~VON*9~M7ropt~h=G-uDp>iaSdyIuuHo)57op3(7P$oR7?vuvj9|vEpY|K19@i+ST!o7jH%avrZR_qS~NlSaSk$jBne*C zDt5W*AyuT_e@FPmjLWl*%p$yg_CoUV)N{h|=Y5ekGnEX^Q59^9Gk#5E8g?Z^qqS3Q z*aChtoR=EInVXk$m&bY7jXe_=6-?#*4S26~veZziOtqnD_>EMDLly6d3)&%pR?n`W zoU8?;Ir|23t7VC@>7*hYU=$4hlpvFJ-~sIQaYm~KyH^9ESQb1w52RNybLQa?{+z|x zTfwQ>GTex&WQ^ETFG-~yS*$y#;ijsBBlJk1`i$>UUos;4QA=h{R%@t$S*evCqryUB zRUpR4NTI0$9)VW=4~hp*xw{0NUr=4-I+b?~s=13=JLYxI0?FF}e_#Xo2Sy$2%GYnP zfr|A5XqJ)|NENkHgpKp_CHCbys!$Gq!Kv>}k}yp8`*}B!uh_;@pOzDkJMt0NrG(R{4bLwrwTPU-ScmsBA?G_G zs?-r7h1?mdpd26$p2R9vOq$gt@~A~y0%pOrA%~)yy^jc%c_|5;U|R;qZ=k2ZGFI@u zWUV%U$?Xc#wICkFf#ix6<;=;BWPfem=y_PogFQuNJ1`f55$b8t=bI7CpS_|7cy=X& z`;_7D&0@FDN!|OlL|3<@qvNbpObi0!Y#}<~iXK*yo)-SCRZKpTP9_=25HeeM&S1bb zlNCsb+Ev4FF)Kh;*{fMW&2UYc?H&QPEHO! zI|^bE%d!`2%$6|sJSV7jSu9WuXOZQ0TgC@Rx2$c$C~X4jhHoNnpF-z@U5U5%@f34- z>I;&~R+QD9V^#LRmh7Q@#21rzKP}0Wv$dQ-Ea4b6<)}WFeuq?o`Y|nmY8ZEIMXiPVBTS=%sQN@x}a86ds8#Yh;^J$1)PLU zc}}Wj%sH+?* zQ=gfWRwHsjbbL#u(*Pr6go1t#mFC+<^@ln!?Bbr7by1THF4uAFVU~HrTbU88UnG*y?HJU@#zTX$-=<-2iS?Nl zJ=Cww!TG8-Brv z^c71BUtiITAygeHzx6v&%T*7$E^+vgsI@Zx{kr%G?A28f%Ql=?Ac6Ik7CvA?_!AbP zQl-2-#BZLc7BCvdT3|Kd)0a^<%y<{G#cHBrI)R2aN( zVr7d`ahe9Mz@GYw#5v3?*%WpGKNE|Ur}4xqa&DGj+c*j@NL|dn!G7IE=D*lCk;hA@h}?%0clRAuZ)CFQ34hKxjO`@#V# z!Uuc{d}Cs2zb~D?QnC_=O;(0t_%+ERZHsEH)nG}9XUKWg8Nqbs;IDCXv4=CR41Ke@ z)Jjk!TatRtF=Jc!t>_7pGUvW( z22_M6!}q-c)*SnI$`)4^eg^l}6fS?$`2I7Os?TP<90pEyypb~a+L)c=P1umgthf&*xWFy%- zSn;%n!lC3N7oq!eT`EACF|8FKQ=*s2n(8^RC=HxF4d-qco880;)$gDdhY{mtc*AMo zLDG(21SjZFcn|B~h$xRr)nYj!YQWpymL6~Gc$OujnNfwx{1iN6$`-QX@v8}N&WX=B0MwJX94TP^jL5D6drFB zJvWQODcXM@iA<6e_zzTj(~g3UYE0I~z5uDvKSn|2~h;xV|`T_(_a6vp31{ zOT|?B)xkO8H(8Z9gJVQKyEM1YHGqmDu`QdI2yI#_ruby7o1BbVC)EnbLf=$%LRANN z#o%s(zy#NcFMj3(BAOlHZGC50 z6J59VV?~rI0@6jKNR{3}x`=?3(0lI)p;rY2>C&r-6sbw*y@^z55h0<2(jtT&La50X zpZ7i2IX}K@{_M#$v-VzV-|JrYWcJK(IjHG{EAeKE`F?s3T50uhS%YTZ-BLsmNu&KO z-q`{p%ria(t=r8_uK3Z9KtaR)L`}_G8@xZ7#p*K*PP@%xBhv@u3fZQI zn>hJhVGFvWZMj);;_j9{AlOs9>fouhXw;&a#N2adb3cVf#ld!y1Jk)1oV^9^t9g5x z#}Ir)Na=`6UBpmnp)}uWxqg5ReW9=Z1IOKI0fSox*L^3Wss^?7hIu(KBLI+v0OEOR zKVW0Dc)5=MVaA}6xyk5Gufr2rD+xYFWgY(sPp`Z6o!2Rjsl$}z+4Gtfo_)wXuM4h> z<{i1v+pHc~rJ$bUEo-+Cp}GYuu4oPehyY49nRyd&a`qq=j@Yo`@fX}*?&?%06q;}z z7DB$IojU@~Hi6$}e#1O6(s3-JUHUJ7T~?frg;ylj`D*k*iZv@+ZSk0-_|x2m!E?(o z>De3iYu)@hF{_$ozx#Oai3^2GiTZXQw3yHnyw!KgM5b}V1x{9p`h?Q97_~aiPCDNx zeID5_6s*z90xOB*Y~|xmKhx67rtdq#l+_={1Vg~m->ImSySVbd-Lif3hC9}_w@x~H zv7bhlVWpF6@v5p*UY>I2d+z-nfc&!mY-^?@2ZK%XMRTeR4eFwz&avvG_VFP}U>bAI zofsd}iDH(!Bn}oqH%1yKS$P`jbv=w?+?55)0Llml{pm)-mR}MN3cT+nPKj(9=ns{r z!PHx{rS0cdt7izjk4pR^E$t!Pmrts?-hhvpX1cD zeqFh)!nyx%^g8*ysOo5#Y=}I=ffduQ2T97P@_%B7KH3&H%4$lR`wl8|%5~i5QgbeQ ztgzRfv7n>rrGX(yh+5ziDDkT)q5ZBh?79C!-dJz>>`A9FUQ_x)SKcknM@g?MXMc@R$&6t0E8J!{H^t%dcoiWy+g~*FK%&NUIQ{GUk$Clc~qz4^3%Y= zZN`AqUvsgaI>(%TS%%nY0oF>N@=5YZYiuZQ6xsH+|6{fbkUSR`|K5hiH}czIAJ8Rt zDT+a$jYEjUq+8QZnDl8HYu$p>9M39W@b@oXtLAXRiumDtRK10tL7xq4s!MPx=AR9J zxb+KF%S}Dlh*|eoLXo`*7;sOdI3JY_F*TtIKAawmaqqgJt3(TIL@pu5q%-kMu5BGL zhwUg%Fa1blghrEdIFI0iIJW-B!B16-739SditU7z;Bwv zca$^l?99}!Y4Bu!6GlQD;+nWV0qKGv5RRR996TkptE+d7ZeywnzWKelF*EnkqxB+8 zBxS>{C;7tgi69S?8f`;niR~I|#Jx_g)Gm7^m07l>xX6;cDTX;xbA8iVPH6@!MbY|h zF72>^m&~3@FT6>)Hxzz&ILf+(i_~y;prHCR^b9JdzvkHre?Z zZ`-_W*KqJ!U>%H&03JN0@plbxk{sleV~7PDBaYn_~Ot#H8_bZuS^;AywMsda3y4{*GMb zE>&eedCFR$IZ58A-X*FC(hE7-{-rVM$4Qx{mBG_N%x^Ui-!%2_Th|Jj_ybyHMgl+G zGg)ar@E_`@bbSOAb~8l0+}ziZQiQ<1oEgF=gPO1{BW3U)2)a)`{kDw7g`3Y{cK=1e z#1trlZG&DoM3F;Rm?mf?d&6DtdG$kaL94qBb%r=qzDxbv><(;IPXP?u-cP8;1>%$Q zsBgYadsqA@c@gu)O+-AqNz`2q(Y`Y)ud3lDDo)e(SdM4F$FMHwg|9cw^W2>U$X$a( z&%M%9e-F-CN(Uwh-t*?MFqV%lWrBbFCLF4bzsSf4!1>rMD#)Y7_a2LBZ9ChQ)9 zOZzcyB!S~w`QpJ#QKw}pTr^+ly!2PO0I%oMuEd{u7h>!sR*E1GHlSnDI~ArF@;u6H z+F1SNgQQ?K!H0mhTb(nHmIv#8eXO{RwCNkQ0oM!088ryp@}~dH{bul zpXW>8_XdtFtLPQe)``;->~;n~Msi=g3cR^1yush7>eFCT56!=aSpIPm$hq+Z(N&el zIqpU`z%=`Hzd5TY)5j)z7WcZSTY&6J?D1;x;r*uUmn$?gBgPv7&JMd=WcLwNhOKrd zI^*k=Bvez{1y?q8Y=bsf{yAYD(4d;5Ev(ABKTPf@w8@wj=qCA!B^gQP@zTGwKD=>0 zI&cG|ike3$iTdwcs|L4oT5@ZA)w34cX)@DjlE<`??A6viS^Q1ir)m1JbrPusEf{-? zG=tnxR8EuMc&;PceixwO-M1P6f!6a?DUVStZ%ua?RbnUOZti{(w^)-uypcJRnMq^K z*HcE0GYd2X%wD%J{&OC`!?Yn^-DH%;Q^#;nb4r1;p`kxq%8@gE$M3qz>*W4K9;f?l zaW~hw={8WGVAGXb7`$D;0wrU};BOi?2$iB|AhGX&J9CH5k5O4N@ZL%`$f!$_2-uHljfxd%ta0+zE#01A1Ce>0w$S# zdmX-Pe?4&~)0g4GyZ=0O7)jqKJOQn5AKAH6kX@L|vn2n?BiJyUkz$&IO0DQPo_x zGI%$=Kxfa8A<4qnmlpMb_i+O~gf}0cx6gO4g+l;9x>WUHj8yOgr|ll626k-G8Bv^X z=!M4Dyolhm6>-Stb7cxkUzsX)NTcfy!QAEhO~xY8Va-R=7C2Sk7o_!q0NflYyMEWe zg2l(Yilfm2H_|BlGF`*0Gtsf7cZCHI8Bce&TR`Dl&^0F$1oc0@|cnI zy?J3*P}(bJ^u)Z4pHIyFS-+<33tG-V57C0^`{OQI18IxYK$+~Z5cukq^Q)Zzheo-) zh1#dfA6Msq5=L&$>UX517pb3Ka4lp8Ue+?KxmFCOaOaMfH4qG9-!E?S zuo+adz!I+VXgYiWyt>DoYpl>4>hg^qKQtuQ?}_vZr=p`s|J|{GM(=-ycw}Q; zzbwywHeqBUEU=Ahb8E+xFapE4GxeIvtv0LlCjcDN&Pk5=$@O5#j}Bt zr57eX4=2Vd%D>mm0OHAR-yHhsT%>43u5*T_jn|SofyB>rd7YNt>b)JCCTxFuu-)N? zr%ty^cSk*#vgr3vleQW6_gDMuYfCdX^}snHJpmdBeFlH#Gzcr|N>Gz(9jiVIeJr3f;B>V*QZq+@guxPUo@Lu zozP|gUSr>78VrcBnnqK2hc{p@B5&nV7js52d}gjZS{R zy+qsqb^|?;%Cx&+*};1lGmtl5k6f%;Zm-jCN`YEx4@X)`>J@ZTpLlt6JUMFjj>6YB{gKP);-)gWrvoxtYD9tiFZF5fsw7u+e6xk>pEOn`^*8EQUWIRx37^llH zT9Ln?-S=zJM@MLR_cC-k_Km{(CIzX)$}t}EyrMhfDUfHohA!B`M*EG%L)tjN=(`fm@ug8bj4m;YC-v(%E=6;>;_0cO-8%$qJePae^nP8v9ox za@;_}9@45&I+02;uPm+7Xmj(G<9_d%hUR2|kfJW{zwB8J%r}Z?00&EA3&h<6D%2Q} zEYrjF&>ho?bAO}Vx4Sz!8d#HTwKzZPk2RY1anri5Lwnt^|5R)~I5l32oiP=YZfmwV zR!Z#?g}>AjI&sUQtO#ayw1DS^RV4N!Vw&tki`tzG?DQJjW5PlCXO)cnTGH`jXN=E6 z62?w-gUxOXU4$DPMQk?-mjs!H(ZOO1{%P-fmCQS9s`AOyHV=JeX01-kaT;guqV@)u zj{9L*VcG84{oFK$&VAw~a}N3ldAw_$q^kQmg|wwVz+KhVKIfOY+sz$PLaU{-0Nf%^ zbDOW4P|Wb5zK*V{VlSS4+vxo)#sK|m_9f5bFZg}P6@#%pHTuu@_f z)nV(l#PuFBpIFt$rAMk`_?F#P-AzwEh-~|-%_Gw2AgcDtDI`chyp^{%Cc`slqmf39jIUrc4Ep)Z?_r0dRq8HTel{Dl zbusf!_(ZP>EWj|XlvC!3#Dc_=TyYG?&lGYbEjYttuITvJtGm86)jy4R-Q{8DFm05! zqn!JGR$teX?&#uqK}G+cv!C{8UUO8pJG_Jl=uuXAP27dbBY53*;fs5-;??b3NRpWZ z^^NML!WZ-EI@vzu4EL8@(VreU>k1UqhiGghlLheW&LUQ(uQtxPMDL4lla|rWsI5J% z$>;Y|UXE{CXOxDL@JEjRdQ{D&`&I7QM)6$dY$?jfQN-wV_BLRbF+X za*x)qDwGS~n8%{2M2A?Aolt(0$CVLN;8;+z;8@kBxxzZEUz&N1sLtpHURfyI0B2>Z z6)|#)*6R}`r#yXuk~;%4#~<_Z7^N??dl{@Vk9hc6k&|Y#!M5d??;Jw6_NJYEL~4L$zp)`QLe^mgABv%+}qCiOMg${I+FPTOer z;jVBK|28zvj-4WT&+1zqpe^d2zIDi>Pug@z;|*DsA-7HMb-C)KB=q)LWKPM0p*j7| z-65fLS}h3)G~W*DE>SFT(gk}7u@=lKP#Bh4tA2&wTB%EFMp6Hky?TBoXVINvfEK^3 z1%I+?6l1kEbhH7KhWtEdQD|Nu{xp=^`ILcACkDNlkAR`Q0dy7H+B_0= z7EW*t#U94V>37o^_!w%&1J-NZ^vy(z=Jh>EynkF;jPk_Q#EY~U zWxm;aX0l*|9_ROhj2%MO?VF;0s;53h$^C4ZFoPHNnUS6LhjInz$!<95O=AF~8N$P{ zZg1jfyNWwqB-VMI+?C~pc&$G4zJ5uGv(DT&x|xOIRcyKY z)Y}dTnfq==*~9}m_WOtXrSwYZl=LXAt07B;X(k{FK;a9Hx@1r-*tjX3%=_Oq#xAM11?&++ql=yN>vvdWT2_ za5eM+b9b^xCPM2cC_EcXTpQz#_irs>Ny45r%Z{j;iBv=(R?H=mK6S=xL(_}Zq#m+V zXm;LDGI_vR$DL%yo$p;Y*-gA(g%RU=t@;E-Ts9X=UeA7~2q0W{ni;|=&h1vq{7LOQ zzkpWv+iD|57HBoA7^EWoG^u3M;)fYiOLUw(Hve5%`qg3+13K!cV-j5d%<{snYam;+ zoN01ycFHQv&*LPijy*)8tw%euM9tT859PX(=ebkb*J-dHp~k!InfWEGNxMPhWK1Ez zUAwV;!tB+6Q>MQ(M_Tb_ljlS!*JZx1MpKEUhf%O(RZ;l}#Ptwt^h(SPtp(*?cj{pz zzW1>$MnIY*YI417?pC&5%{jGTfgZtRu#tCNRMh)m@)tesIc=c=NMxXcP_|R0tLfa?cGG!h;0U@T~`RtXK7(eIjXRrM0A^@ zyJlM)MQH>l3IcrJZ7a4pOZDExId5kx)|E%(u7iQ%1ORNbyb+CeH{8IlGZgI zV`kX-)O1gcd!>|DZj_z79gFjHLWFlWr6837vRX*MY7lkjQPnFjP?Grp$BF*6x$EC*VPr==UGbb@@dOl%5T za&;BVGzWjO!N$W>m=0URKX6@Vem%OK7kHWWC~-tV)X`}6u19lhNd9do_&nB&*+G~e zS{~3;1u-hzjHMt4zG#bHY7cfrIp}lgaUJ9hsu`u}=t_;Jx~@>5Hv&V~^UwGSrWTX4 z5G(a}g-CxVwpp}Y{4{q`-hQ|E%I8`8n=YATF3VWe*9!*l;btX+2hvl_vEyDHS#Q0_ zio;TkP_8imgce0%NKE7J7u>3z`lg{H4Yl0OF#77~k{9Y7_5j-`g~H+&g3B`VldNso z$wt}jg7k?xQrsWHGxC8(dqt1G!m!4%9fQ`PERtG~<*LmE{`$tLEWRcNUp41MkWr&M z#nN~)Z$z;kVbzYDk%8NGA2hIU)p9XwMi&y72B7Mx> zvk*f26qB(xpN4d=Q%ljP}%?1L{-~A%pa};eD-Y(5Q@8Ifj*=;`G3Yl0Kex*x%yaY|! z;_|F8%nGq?x(Y0zn6O6~{jK^er^+XZ{TE*?? zmW+fH>?b_T`&_cN3`>$5ZU}~;f(6SB1M>#og|ck;FU-5(Ec~QZvu`;OnwbRna>h3g zcdLvQ4NK;J$*%RR4L%i&hL0!vIk#(-32K%+b`*2z!Z;17rEgC(%wV3-28lGcyqcS2 z%az2xwY!M~&ty!9tQxUkS#|@#hx`Ton_eE>&pv37M79gGf^@fy-T7f4clCwMC z!I~Y{o~FGhZ}vOqIlPx-tkDqC*_5nC_B**1I@N=u}#~N7T+!0 zT^maq1EjgWZeJyeS1FCRF1AlBRxrVy$i zKkkjZtOP8)3CwYGZnyYQT<-5Lq2kH$$%cet$@+Y4FjYLmv6-yj%gX-Sp}a>+oYN!T zy1P_LUdt7>wT3r9MUIIb2wo*}jnOT#ZjB`aZp7i-l#)Ez#&^?{lJkP>hEFnw1#?p4 zCnz(z)JV?PqvZ+v`7DRm0nhWZkYl|(lKShFfXJLEntbcVU@5w**bYt zG5Kq=o3~feOZT3n2oOVww5}^JPE6g&%@{>il@^M_-~;14^9H8D=Lr=qpk=phNbX4d z4L$ic4SFLVNC#B_K#8`%bkS^$2Hf~_$d>QNXsO%~lB%vs=Pay~-%Q8dQnV#1^|9*S zl&8%8f+O}8@LqF>4lenEtFc&cShPW*e&g-zouB8gN1mBdcU1`()D=s+j{j)6A+fwM zHm_(QAn7Xie50iFy6p3;`%Xz<7x>UG(hB4c1?faji5nLmR*IUwFEw3Tf~%nF@BBk( zu_=3YinO@d&RmOAQheQ&+ekmwGbi&TQN&1B?zbOXrA~_Dv?+AB@UYsGGa=d6^JILY z9I48|un<48aWpq2mfJIft6dwbq9%v$ia1!Z`NO5ZdswV@Uu#({KUnnQZ)RXhR~ zjDS9>I5}v>|WGz z!+?sPuFD`2Aq(|`7G@kgubxJ$%j-H9S(4l4XuGZjqk#)jh9#x8L;Lzx4s)N?+qW(D zm+*dIk`tMh>`Ga%9oW95+)jKEK#e3`G!BPO#lxBl!<+d0Ge;iX?Ut6j`*Q^51uAkP zvHXMy%WrVi_eA=T4O-nrK@D6FPKYO1KZgDShyA;~^)xnQ^v|2@bLU#sSqq91L z-I`*R-J<}L1wj*@xxVj4r1-bRpR-2iIWHedI5DGT;1D(7ngsoL?Zfgb*=z>JMPM^U z3xgE0MYa!&plqAGXjjO(lMcVSy=St! zif04|dzx0Qy7^r7<*@+FLzh*^234SY2H3Ok>J}OHA@#jj@-O8E6`=N-;cm{Jbcdx~ zUqG!0!RgjMY`4S>bflS1g{y|o3^ZGhZN#z2taRVCbObrk8WHeg-ha)mcQHtkV(CiK zLY8j5uhpt(d~e$vpt$j5-AkmFx4rtrk}%^KehZjAQZ#bYX^Qs|R%>a=c{lB1dNHFP zU*TBSbh?D7Q!1SgQKUo9@Cyye$YhMxgwCtfakneTV?hade3E+-k%g~C%mby z@EBKHsC#QV#Cmh?qz1Y|rdM z1m%;3wq(MHuQFeo`~`c%v6Me&E|CwoM>i(84ZIVA>n+SaA!Wg|9|Dc7|G1Wg{xGP& zs9#X5g-k!{7z0%*k$u_Pv5|~k?N*cLj4E$8-zr)`4AdEJwXXNC7i?a+gr_>PwTiP! zw9g5bC(nbuBHBUwOYmu|geC09cZL^Bt{EUTz+wVR!5Sl`9rLvL`m;Z6Xjp^{$*kqL z#Mv~1<0KuEc54>7c0&Pwid{piV9pP<6N>^*_%)pT0&Z>M*l)8BL}BJ=;&=3qAnWYa z5@ZQz`qt{J)ofrbRW4$wL6FG|5Y}!g)~r65EVHydWAng4ulCUlM0Sb=(oky>ujZ(g z;@o#zd0{Oi?bRQLC&(NPB@P`*u@0>Tg+&Y^A6a~k45IH+s9CvC>;w<@px+;# zY0_96*C?D}YSFs*%VgH^sg;u8^NApk)e8I&C2_3^yq=*>fzK{1zKPmA2PR@8iKb-28nOJQ4@>LgsHCrA8__YcKRV-}Tgz#g{;{+WmDC1!aHxK+5MJA0XeUcd3`KD8p{MVB6`?MF#4bM#lkl81f&4L?w(`S$O}R~+?9t$!?~ z4l%XC-(ZwXJ=8wYZ zgkyqj(C98^xTHR*SRroM-kmB!nec)98*tgVhAt>_{nl&&x{qSG_SQ1}AuiT(r6ag_ z$$1ugcplk(5e7g;)-Wg3Vrj6_s-L(YY?FqkQj@2M-^uyIww!oGw(27nkvEvrvHgbF zQlPgNztefSMtmGC!t;GyYOw<9^bF?k76r?tROjjTz+3aBS$oLPq8?$e>O82@ zuUl9AH2sLN^3*lA&8eEmxj`Rs%+^|Kep?HsXBshveDvnaQA5|)nTC*4#}067{@K8? zuEqGJ-99(WN#P0y(iCqHzvJ`8_rJcOiN0A>Uh+pi6gZ^^9XF_1#D@{zC!S*+lB6=nCC)TzH7rdu95*}+A`P2cgRc;ZPjo$U|0@tFg zXRem3FEnEoiGhl^|Cber3BUSs<3IeOFhd+i56%FB#Lzrcfu)%QfGA zr^K<*8`v_GG~_H9AbD-W*UFLgq*^KfOn85KM(7=?Fm$MMY=BKORE9gXty{_>i-1r$9YVJ|2;j_e{f4#%@!n# z>1p-957&*nUxX#qL(>&c(7;pwGDF;(`u~Du@NDwQK5f_V!#^yt~HSPB)9i--htT9^V=s+Eq3 z!R^pk+*FKDPwF`UZJbN4pF4l*QC!7_Q`e-*uqK^`6{qy=Deg!gZ(p3e539ld1p|>D z^!6ivq-K_c)%;;a%}uajyJF|M_?zgCfyw~&5 zKckcku*Ng_*iN&B5t0Ay-)Y&y>_-lOdqCitFx&aJ56ZAr2PmBBgC$H)%3qK(v159C zMzDH!`*jKkkjQ<_nYgQER2zW@#}IJ!eE9Ol|AF|0%I3b}#(BeKx6r~>A@*$TVNB~Y zfxiWt2uCcD5)zN4&0M&;%1zY`x5Iwk%uyjuIo@s+ANOmD-Vx zNiID81fFxX1pJmi}=z zB+ilz4xGnc6{XYZeGx34m?}8CcpS;fC4FeO8R>(50s`ZoD02!FzqBM4HxL_<7iLFd z{wJlgVgE_#chc%0jjUk$&T=8L3%UPO<6MG0^pPMLk!YK|h zkxhHVrhEhik^Db|A%#jQt2CW)|4f{}SM4I?c&Ze(pa}I0F_@D}_`>;L5MhP3iO{Xh zo~*_zuaf(m%b|A9hHe+N5VP|h*I!cW}Z#c{Ui zpzG!n|4N~Q*J77A^|tOnjA{qG7QKcggyGJrAOtJv2YN-h2UuoL(6he#-3nkP5&bjt zLzQHr+7Wz}_-_Gtw-(*{-s!&u;I9CJTji?H=o4c0;6iJd@|tp|C*0w9^U;Xd@VJC8pjvL3EYkD(+>>qVqIPgz6}G z6&EZ-9K3CQsO{`*I6GSich5&kmF^#L%io38Rrc5E?-vr~_L9)C?eIO)38Hmk_Lr}O z99?opMhLHCM%lqQCC%;9GhMt~#DolCP60)f)YdX(#@E7O zH`GG^`InU=XL00_?W2N zTd_$*&R$vEJ-hTJvf>(%#H?)^FXGST`e2Iai+#kU#2a}gO4nzrSE?+yxJBZS?soju z7Sor%FXZR{zjOqCcKzeUC3vIb<^+v9Ri^XtCF?5_5w5Bsx>Q{@ZsiOBw<4kU11rij zwJ-gR?f0GvYU9(vWa40fDKmsbmLW9ZY!KdvhbsL@xdZq9TgDTdx~8AACH^+%{`jf@5X(DN5IYmCvT4nphTuj7kUcd}D>-t@zpo0Lky5Tzft zrG1jG!P#aW9$eO-fGO@|e)!hGx2VV~cd{r9_>#yijY>Ke_HX8;V8T-2%rg%=XaCyJ zVe8pO6CnF5!gq+>&O9tsAfBqjHY9$V(1j*;H?P6pb)P!AU>x|m?Rx$p>8%0&E0 z2doGa{-x-X+`BbHJeVlB8E@c$T;jLk_4E)TYsKW+U)c=_51pS45|2R(6Me@dhc@9^ zqQCmz@kv%9diSr-K?<@bSRSawtN+-TnAGUD)rwj60q45vz#G^KVVSkd3cDC ed>o-bbx7pl){m17O#d1k`ma&E_a`fD+y4g*XqGkr literal 0 HcmV?d00001 From a09ad00e48bfd50eb20687a459e52af75e7dddf6 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 28 Dec 2022 18:11:30 -0500 Subject: [PATCH 24/30] prepare for 0.6pre3 OPN: add flag to make ExtCh op 1 be the only one controlling FB GUI: move Arcade presets to top GUI: fix YM2612 CSM not having flags --- android/app/src/main/AndroidManifest.xml | 4 +- papers/format.md | 1 + res/Info.plist | 6 +- src/engine/engine.h | 4 +- src/engine/fileOps.cpp | 26 +- src/engine/platform/fmshared_OPN.h | 5 +- src/engine/platform/genesis.cpp | 1 + src/engine/platform/genesisext.cpp | 4 +- src/engine/platform/ym2203.cpp | 1 + src/engine/platform/ym2203ext.cpp | 4 +- src/engine/platform/ym2608.cpp | 1 + src/engine/platform/ym2608ext.cpp | 4 +- src/engine/platform/ym2610bext.cpp | 4 +- src/engine/platform/ym2610ext.cpp | 4 +- src/engine/platform/ym2610shared.h | 1 + src/gui/presets.cpp | 937 ++++++++++++----------- src/gui/sysConf.cpp | 41 +- 17 files changed, 549 insertions(+), 499 deletions(-) diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 082cebc3..6c75c8e4 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,8 +1,8 @@ diff --git a/papers/format.md b/papers/format.md index a192f138..ab8cacd6 100644 --- a/papers/format.md +++ b/papers/format.md @@ -32,6 +32,7 @@ these fields are 0 in format versions prior to 100 (0.6pre1). the format versions are: +- 133: Furnace 0.6pre3 - 132: Furnace 0.6pre2 - 131: Furnace dev131 - 130: Furnace dev130 diff --git a/res/Info.plist b/res/Info.plist index d7f0f98d..86477d15 100644 --- a/res/Info.plist +++ b/res/Info.plist @@ -15,17 +15,17 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleLongVersionString - 0.6pre2 + 0.6pre3 CFBundleName Furnace CFBundlePackageType APPL CFBundleShortVersionString - 0.6pre2 + 0.6pre3 CFBundleSignature ???? CFBundleVersion - 0.6pre2 + 0.6pre3 NSHumanReadableCopyright NSHighResolutionCapable diff --git a/src/engine/engine.h b/src/engine/engine.h index faca57d9..7eb5c00c 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -47,8 +47,8 @@ #define BUSY_BEGIN_SOFT softLocked=true; isBusy.lock(); #define BUSY_END isBusy.unlock(); softLocked=false; -#define DIV_VERSION "0.6pre2" -#define DIV_ENGINE_VERSION 132 +#define DIV_VERSION "0.6pre3" +#define DIV_ENGINE_VERSION 133 // for imports #define DIV_VERSION_MOD 0xff01 #define DIV_VERSION_FC 0xff02 diff --git a/src/engine/fileOps.cpp b/src/engine/fileOps.cpp index d56836bf..d5180c80 100644 --- a/src/engine/fileOps.cpp +++ b/src/engine/fileOps.cpp @@ -2511,17 +2511,25 @@ bool DivEngine::loadFur(unsigned char* file, size_t len) { } // ExtCh compat flag - if (ds.version<125) { - for (int i=0; ifm.alg; - chan[2].state.fb=ins->fm.fb; + if (ch==0 || fbAllOps) { + chan[2].state.fb=ins->fm.fb; + } chan[2].state.fms=ins->fm.fms; chan[2].state.ams=ins->fm.ams; chan[2].state.op[ordch]=ins->fm.op[ordch]; diff --git a/src/engine/platform/ym2203.cpp b/src/engine/platform/ym2203.cpp index 00df4edb..95ab537f 100644 --- a/src/engine/platform/ym2203.cpp +++ b/src/engine/platform/ym2203.cpp @@ -1041,6 +1041,7 @@ void DivPlatformYM2203::setFlags(const DivConfig& flags) { } CHECK_CUSTOM_CLOCK; noExtMacros=flags.getBool("noExtMacros",false); + fbAllOps=flags.getBool("fbAllOps",false); rate=fm->sample_rate(chipClock); for (int i=0; i<6; i++) { oscBuf[i]->rate=rate; diff --git a/src/engine/platform/ym2203ext.cpp b/src/engine/platform/ym2203ext.cpp index d19276be..701ae9e5 100644 --- a/src/engine/platform/ym2203ext.cpp +++ b/src/engine/platform/ym2203ext.cpp @@ -44,7 +44,9 @@ int DivPlatformYM2203Ext::dispatch(DivCommand c) { if (opChan[ch].insChanged) { chan[2].state.alg=ins->fm.alg; - chan[2].state.fb=ins->fm.fb; + if (ch==0 || fbAllOps) { + chan[2].state.fb=ins->fm.fb; + } chan[2].state.op[ordch]=ins->fm.op[ordch]; } diff --git a/src/engine/platform/ym2608.cpp b/src/engine/platform/ym2608.cpp index 0ec5cb48..b5dba5f5 100644 --- a/src/engine/platform/ym2608.cpp +++ b/src/engine/platform/ym2608.cpp @@ -1538,6 +1538,7 @@ void DivPlatformYM2608::setFlags(const DivConfig& flags) { } CHECK_CUSTOM_CLOCK; noExtMacros=flags.getBool("noExtMacros",false); + fbAllOps=flags.getBool("fbAllOps",false); rate=fm->sample_rate(chipClock); for (int i=0; i<16; i++) { oscBuf[i]->rate=rate; diff --git a/src/engine/platform/ym2608ext.cpp b/src/engine/platform/ym2608ext.cpp index b38e1a26..0a6abe7a 100644 --- a/src/engine/platform/ym2608ext.cpp +++ b/src/engine/platform/ym2608ext.cpp @@ -44,7 +44,9 @@ int DivPlatformYM2608Ext::dispatch(DivCommand c) { if (opChan[ch].insChanged) { chan[2].state.alg=ins->fm.alg; - chan[2].state.fb=ins->fm.fb; + if (ch==0 || fbAllOps) { + chan[2].state.fb=ins->fm.fb; + } chan[2].state.fms=ins->fm.fms; chan[2].state.ams=ins->fm.ams; chan[2].state.op[ordch]=ins->fm.op[ordch]; diff --git a/src/engine/platform/ym2610bext.cpp b/src/engine/platform/ym2610bext.cpp index a5845461..c8d0b645 100644 --- a/src/engine/platform/ym2610bext.cpp +++ b/src/engine/platform/ym2610bext.cpp @@ -40,7 +40,9 @@ int DivPlatformYM2610BExt::dispatch(DivCommand c) { if (opChan[ch].insChanged) { chan[extChanOffs].state.alg=ins->fm.alg; - chan[extChanOffs].state.fb=ins->fm.fb; + if (ch==0 || fbAllOps) { + chan[extChanOffs].state.fb=ins->fm.fb; + } chan[extChanOffs].state.fms=ins->fm.fms; chan[extChanOffs].state.ams=ins->fm.ams; chan[extChanOffs].state.op[ordch]=ins->fm.op[ordch]; diff --git a/src/engine/platform/ym2610ext.cpp b/src/engine/platform/ym2610ext.cpp index 206c904d..54bbd2b7 100644 --- a/src/engine/platform/ym2610ext.cpp +++ b/src/engine/platform/ym2610ext.cpp @@ -40,7 +40,9 @@ int DivPlatformYM2610Ext::dispatch(DivCommand c) { if (opChan[ch].insChanged) { chan[extChanOffs].state.alg=ins->fm.alg; - chan[extChanOffs].state.fb=ins->fm.fb; + if (ch==0 || fbAllOps) { + chan[extChanOffs].state.fb=ins->fm.fb; + } chan[extChanOffs].state.fms=ins->fm.fms; chan[extChanOffs].state.ams=ins->fm.ams; chan[extChanOffs].state.op[ordch]=ins->fm.op[ordch]; diff --git a/src/engine/platform/ym2610shared.h b/src/engine/platform/ym2610shared.h index 9671c157..ab1bd052 100644 --- a/src/engine/platform/ym2610shared.h +++ b/src/engine/platform/ym2610shared.h @@ -221,6 +221,7 @@ class DivPlatformYM2610Base: public DivPlatformOPN { } CHECK_CUSTOM_CLOCK; noExtMacros=flags.getBool("noExtMacros",false); + fbAllOps=flags.getBool("fbAllOps",false); rate=fm->sample_rate(chipClock); for (int i=0; i<16; i++) { oscBuf[i]->rate=rate; diff --git a/src/gui/presets.cpp b/src/gui/presets.cpp index 44d1176e..f0e4fe92 100644 --- a/src/gui/presets.cpp +++ b/src/gui/presets.cpp @@ -1114,474 +1114,6 @@ void FurnaceGUI::initSystemPresets() { ); CATEGORY_END; - CATEGORY_BEGIN("FM","chips which use frequency modulation (FM) to generate sound.\nsome of these also pack more (like square and sample channels)."); - ENTRY( - "Yamaha YM2151 (OPM)", { - CH(DIV_SYSTEM_YM2151, 64, 0, "") - } - ); - ENTRY( - "Yamaha YM2203 (OPN)", { - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=3") - } - ); - ENTRY( - "Yamaha YM2203 (extended channel 3)", { - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=3") - } - ); - ENTRY( - "Yamaha YM2608 (OPNA)", { - CH(DIV_SYSTEM_YM2608, 64, 0, "") - } - ); - ENTRY( - "Yamaha YM2608 (extended channel 3)", { - CH(DIV_SYSTEM_YM2608_EXT, 64, 0, "") - } - ); - ENTRY( - "Yamaha YM2610 (OPNB)", { - CH(DIV_SYSTEM_YM2610_FULL, 64, 0, "") - } - ); - ENTRY( - "Yamaha YM2610 (extended channel 2)", { - CH(DIV_SYSTEM_YM2610_FULL_EXT, 64, 0, "") - } - ); - ENTRY( - "Yamaha YM2610B (OPNB2)", { - CH(DIV_SYSTEM_YM2610B, 64, 0, "") - } - ); - ENTRY( - "Yamaha YM2610B (extended channel 3)", { - CH(DIV_SYSTEM_YM2610B_EXT, 64, 0, "") - } - ); - ENTRY( - "Yamaha YM2612 (OPN2)", { - CH(DIV_SYSTEM_YM2612, 64, 0, "ladderEffect=true") - } - ); - ENTRY( - "Yamaha YM2612 (extended channel 3)", { - CH(DIV_SYSTEM_YM2612_EXT, 64, 0, "ladderEffect=true") - } - ); - ENTRY( - "Yamaha YM2612 (OPN2) CSM", { - CH(DIV_SYSTEM_YM2612_CSM, 64, 0, "ladderEffect=true") - } - ); - ENTRY( - "Yamaha YM2612 (OPN2) with DualPCM", { - CH(DIV_SYSTEM_YM2612_DUALPCM, 64, 0, "ladderEffect=true") - } - ); - ENTRY( - "Yamaha YM2612 (extended channel 3) with DualPCM", { - CH(DIV_SYSTEM_YM2612_DUALPCM_EXT, 64, 0, "ladderEffect=true") - } - ); - ENTRY( - "Yamaha YM2413 (OPLL)", { - CH(DIV_SYSTEM_OPLL, 64, 0, "") - } - ); - ENTRY( - "Yamaha YM2413 (drums mode)", { - CH(DIV_SYSTEM_OPLL_DRUMS, 64, 0, "") - } - ); - ENTRY( - "Yamaha YM2414 (OPZ)", { - CH(DIV_SYSTEM_OPZ, 64, 0, "") - } - ); - ENTRY( - "Yamaha YM3438 (OPN2C)", { - CH(DIV_SYSTEM_YM2612, 64, 0, "") - } - ); - ENTRY( - "Yamaha YM3438 (extended channel 3)", { - CH(DIV_SYSTEM_YM2612_EXT, 64, 0, "") - } - ); - ENTRY( - "Yamaha YM3438 (OPN2C) CSM", { - CH(DIV_SYSTEM_YM2612_CSM, 64, 0, "") - } - ); - ENTRY( - "Yamaha YM3438 (OPN2C) with DualPCM", { - CH(DIV_SYSTEM_YM2612_DUALPCM, 64, 0, "") - } - ); - ENTRY( - "Yamaha YM3438 (extended channel 3) with DualPCM", { - CH(DIV_SYSTEM_YM2612_DUALPCM_EXT, 64, 0, "") - } - ); - ENTRY( - "Yamaha YM3526 (OPL)", { - CH(DIV_SYSTEM_OPL, 64, 0, "") - } - ); - ENTRY( - "Yamaha YM3526 (drums mode)", { - CH(DIV_SYSTEM_OPL_DRUMS, 64, 0, "") - } - ); - ENTRY( - "Yamaha Y8950", { - CH(DIV_SYSTEM_Y8950, 64, 0, "") - } - ); - ENTRY( - "Yamaha Y8950 (drums mode)", { - CH(DIV_SYSTEM_Y8950_DRUMS, 64, 0, "") - } - ); - ENTRY( - "Yamaha YM3812 (OPL2)", { - CH(DIV_SYSTEM_OPL2, 64, 0, "") - } - ); - ENTRY( - "Yamaha YM3812 (drums mode)", { - CH(DIV_SYSTEM_OPL2_DRUMS, 64, 0, "") - } - ); - ENTRY( - "Yamaha YMF262 (OPL3)", { - CH(DIV_SYSTEM_OPL3, 64, 0, "") - } - ); - ENTRY( - "Yamaha YMF262 (drums mode)", { - CH(DIV_SYSTEM_OPL3_DRUMS, 64, 0, "") - } - ); - if (settings.hiddenSystems) { - ENTRY( - "Yamaha YMU759 (MA-2)", { - CH(DIV_SYSTEM_YMU759, 64, 0, "") - } - ); - } - CATEGORY_END; - - CATEGORY_BEGIN("Square","these chips generate square/pulse tones only (but may include noise)."); - ENTRY( - "TI SN76489", { - CH(DIV_SYSTEM_SMS, 64, 0, "chipType=1") - } - ); - ENTRY( - "TI SN76489A", { - CH(DIV_SYSTEM_SMS, 64, 0, "chipType=4") - } - ); - ENTRY( - "TI SN76496", { - CH(DIV_SYSTEM_SMS, 64, 0, "chipType=5") - } - ); - ENTRY( - "NCR 8496", { - CH(DIV_SYSTEM_SMS, 64, 0, "chipType=6") - } - ); - ENTRY( - "Tandy PSSJ 3-voice sound", { - CH(DIV_SYSTEM_SMS, 64, 0, "chipType=7") - // 8 bit DAC - } - ); - ENTRY( - "Sega PSG (SN76489-like)", { - CH(DIV_SYSTEM_SMS, 64, 0, ""), - } - ); - ENTRY( - "Sega PSG (SN76489-like, Stereo)", { - CH(DIV_SYSTEM_SMS, 64, 0, "chipType=3") - } - ); - ENTRY( - "TI SN94624", { - CH(DIV_SYSTEM_SMS, 64, 0, - "clockSel=6\n" - "chipType=8\n" - ) - } - ); - ENTRY( - "TI SN76494", { - CH(DIV_SYSTEM_SMS, 64, 0, - "clockSel=6\n" - "chipType=9\n" - ) - } - ); - ENTRY( - "Toshiba T6W28", { - CH(DIV_SYSTEM_T6W28, 64, 0, "") - } - ); - ENTRY( - "AY-3-8910", { - CH(DIV_SYSTEM_AY8910, 64, 0, "") - } - ); - ENTRY( - "AY-3-8914", { - CH(DIV_SYSTEM_AY8910, 64, 0, "chipType=3") - } - ); - ENTRY( - "Yamaha YM2149(F)", { - CH(DIV_SYSTEM_AY8910, 64, 0, "chipType=1") - } - ); - ENTRY( - "Philips SAA1099", { - CH(DIV_SYSTEM_SAA1099, 64, 0, "") - } - ); - ENTRY( - "PC Speaker", { - CH(DIV_SYSTEM_PCSPKR, 32, 0, "") - } - ); - ENTRY( - "Pokémon Mini", { - CH(DIV_SYSTEM_POKEMINI, 32, 0, "") - } - ); - ENTRY( - "Commodore VIC", { - CH(DIV_SYSTEM_VIC20, 64, 0, "clockSel=1") - } - ); - ENTRY( - "OKI MSM5232", { - CH(DIV_SYSTEM_MSM5232, 64, 0, "") - } - ); - ENTRY( - "Pong", { - CH(DIV_SYSTEM_PONG, 64, 0, "") - } - ); - CATEGORY_END; - - CATEGORY_BEGIN("Sample","chips/systems which use PCM or ADPCM samples for sound synthesis."); - ENTRY( - "Amiga", { - CH(DIV_SYSTEM_AMIGA, 64, 0, "clockSel=1") - }, - "tickRate=50" - ); - ENTRY( - "SegaPCM", { - CH(DIV_SYSTEM_SEGAPCM, 64, 0, "") - } - ); - ENTRY( - "Capcom QSound", { - CH(DIV_SYSTEM_QSOUND, 64, 0, "") - } - ); - ENTRY( - "Seta/Allumer X1-010", { - CH(DIV_SYSTEM_X1_010, 64, 0, "") - } - ); - ENTRY( - "Yamaha YMZ280B (PCMD8)", { - CH(DIV_SYSTEM_YMZ280B, 64, 0, "") - } - ); - ENTRY( - "Ricoh RF5C68", { - CH(DIV_SYSTEM_RF5C68, 64, 0, "") - } - ); - ENTRY( - "OKI MSM6258", { - CH(DIV_SYSTEM_MSM6258, 64, 0, "") - } - ); - ENTRY( - "OKI MSM6295", { - CH(DIV_SYSTEM_MSM6295, 64, 0, "") - } - ); - ENTRY( - "SNES", { - CH(DIV_SYSTEM_SNES, 64, 0, "") - } - ); - ENTRY( - "Konami K007232", { - CH(DIV_SYSTEM_K007232, 64, 0, "") - } - ); - ENTRY( - "Irem GA20", { - CH(DIV_SYSTEM_GA20, 64, 0, "") - } - ); - ENTRY( - "Generic PCM DAC", { - CH(DIV_SYSTEM_PCM_DAC, 64, 0, "") - } - ); - CATEGORY_END; - - CATEGORY_BEGIN("Wavetable","chips which use user-specified waveforms to generate sound."); - ENTRY( - "PC Engine", { - CH(DIV_SYSTEM_PCE, 64, 0, "") - } - ); - ENTRY( - "Commodore PET (pseudo-wavetable)", { - CH(DIV_SYSTEM_PET, 64, 0, "") - }, - "tickRate=50" - ); - ENTRY( - "Konami Bubble System WSG", { - CH(DIV_SYSTEM_BUBSYS_WSG, 64, 0, "") - } - ); - ENTRY( - "Konami SCC", { - CH(DIV_SYSTEM_SCC, 64, 0, "") - } - ); - ENTRY( - "Konami SCC+", { - CH(DIV_SYSTEM_SCC_PLUS, 64, 0, "") - } - ); - ENTRY( - "Namco WSG", { - CH(DIV_SYSTEM_NAMCO, 64, 0, "") - } - ); - ENTRY( - "Namco C15 (8-channel mono)", { - CH(DIV_SYSTEM_NAMCO_15XX, 64, 0, "") - } - ); - ENTRY( - "Namco C30 (8-channel stereo)", { - CH(DIV_SYSTEM_NAMCO_CUS30, 64, 0, "") - } - ); - ENTRY( - "Namco 163", { - CH(DIV_SYSTEM_N163, 64, 0, "") - } - ); - ENTRY( - "Famicom Disk System (chip)", { - CH(DIV_SYSTEM_FDS, 64, 0, "") - } - ); - ENTRY( - "WonderSwan", { - CH(DIV_SYSTEM_SWAN, 64, 0, "") - }, - "tickRate=75.47169811320754716981" - ); - ENTRY( - "Virtual Boy", { - CH(DIV_SYSTEM_VBOY, 64, 0, "") - }, - "tickRate=50.2734877734878" - ); - ENTRY( - "Seta/Allumer X1-010", { - CH(DIV_SYSTEM_X1_010, 64, 0, "") - } - ); - CATEGORY_END; - - CATEGORY_BEGIN("Specialized","chips/systems with unique sound synthesis methods."); - ENTRY( - "MOS Technology SID (6581)", { - CH(DIV_SYSTEM_C64_6581, 64, 0, "clockSel=1") - }, - "tickRate=50.1245421" - ); - ENTRY( - "MOS Technology SID (8580)", { - CH(DIV_SYSTEM_C64_8580, 64, 0, "clockSel=1") - }, - "tickRate=50.1245421" - ); - ENTRY( - "Microchip AY8930", { - CH(DIV_SYSTEM_AY8930, 64, 0, "") - } - ); - ENTRY( - "Game Boy", { - CH(DIV_SYSTEM_GB, 64, 0, "") - } - ); - ENTRY( - "Atari Lynx", { - CH(DIV_SYSTEM_LYNX, 64, 0, "") - } - ); - ENTRY( - "POKEY", { - CH(DIV_SYSTEM_POKEY, 64, 0, "clockSel=1") - }, - "tickRate=50" - ); - ENTRY( - "Atari TIA", { - CH(DIV_SYSTEM_TIA, 64, 0, "") - } - ); - ENTRY( - "NES (Ricoh 2A03)", { - CH(DIV_SYSTEM_NES, 64, 0, "") - } - ); - ENTRY( - "Commander X16 (VERA only)", { - CH(DIV_SYSTEM_VERA, 64, 0, "") - } - ); - ENTRY( - "ZX Spectrum (beeper only)", { - CH(DIV_SYSTEM_SFX_BEEPER, 64, 0, "") - } - ); - if (settings.hiddenSystems) { - ENTRY( - "Dummy System", { - CH(DIV_SYSTEM_DUMMY, 64, 0, "") - } - ); - } - ENTRY( - "tildearrow Sound Unit", { - CH(DIV_SYSTEM_SOUND_UNIT, 64, 0, "") - } - ); - CATEGORY_END; - CATEGORY_BEGIN("Arcade systems","INSERT COIN"); ENTRY( "Pong", { @@ -2564,6 +2096,475 @@ void FurnaceGUI::initSystemPresets() { ); CATEGORY_END; + + CATEGORY_BEGIN("FM","chips which use frequency modulation (FM) to generate sound.\nsome of these also pack more (like square and sample channels)."); + ENTRY( + "Yamaha YM2151 (OPM)", { + CH(DIV_SYSTEM_YM2151, 64, 0, "") + } + ); + ENTRY( + "Yamaha YM2203 (OPN)", { + CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=3") + } + ); + ENTRY( + "Yamaha YM2203 (extended channel 3)", { + CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=3") + } + ); + ENTRY( + "Yamaha YM2608 (OPNA)", { + CH(DIV_SYSTEM_YM2608, 64, 0, "") + } + ); + ENTRY( + "Yamaha YM2608 (extended channel 3)", { + CH(DIV_SYSTEM_YM2608_EXT, 64, 0, "") + } + ); + ENTRY( + "Yamaha YM2610 (OPNB)", { + CH(DIV_SYSTEM_YM2610_FULL, 64, 0, "") + } + ); + ENTRY( + "Yamaha YM2610 (extended channel 2)", { + CH(DIV_SYSTEM_YM2610_FULL_EXT, 64, 0, "") + } + ); + ENTRY( + "Yamaha YM2610B (OPNB2)", { + CH(DIV_SYSTEM_YM2610B, 64, 0, "") + } + ); + ENTRY( + "Yamaha YM2610B (extended channel 3)", { + CH(DIV_SYSTEM_YM2610B_EXT, 64, 0, "") + } + ); + ENTRY( + "Yamaha YM2612 (OPN2)", { + CH(DIV_SYSTEM_YM2612, 64, 0, "ladderEffect=true") + } + ); + ENTRY( + "Yamaha YM2612 (extended channel 3)", { + CH(DIV_SYSTEM_YM2612_EXT, 64, 0, "ladderEffect=true") + } + ); + ENTRY( + "Yamaha YM2612 (OPN2) CSM", { + CH(DIV_SYSTEM_YM2612_CSM, 64, 0, "ladderEffect=true") + } + ); + ENTRY( + "Yamaha YM2612 (OPN2) with DualPCM", { + CH(DIV_SYSTEM_YM2612_DUALPCM, 64, 0, "ladderEffect=true") + } + ); + ENTRY( + "Yamaha YM2612 (extended channel 3) with DualPCM", { + CH(DIV_SYSTEM_YM2612_DUALPCM_EXT, 64, 0, "ladderEffect=true") + } + ); + ENTRY( + "Yamaha YM2413 (OPLL)", { + CH(DIV_SYSTEM_OPLL, 64, 0, "") + } + ); + ENTRY( + "Yamaha YM2413 (drums mode)", { + CH(DIV_SYSTEM_OPLL_DRUMS, 64, 0, "") + } + ); + ENTRY( + "Yamaha YM2414 (OPZ)", { + CH(DIV_SYSTEM_OPZ, 64, 0, "") + } + ); + ENTRY( + "Yamaha YM3438 (OPN2C)", { + CH(DIV_SYSTEM_YM2612, 64, 0, "") + } + ); + ENTRY( + "Yamaha YM3438 (extended channel 3)", { + CH(DIV_SYSTEM_YM2612_EXT, 64, 0, "") + } + ); + ENTRY( + "Yamaha YM3438 (OPN2C) CSM", { + CH(DIV_SYSTEM_YM2612_CSM, 64, 0, "") + } + ); + ENTRY( + "Yamaha YM3438 (OPN2C) with DualPCM", { + CH(DIV_SYSTEM_YM2612_DUALPCM, 64, 0, "") + } + ); + ENTRY( + "Yamaha YM3438 (extended channel 3) with DualPCM", { + CH(DIV_SYSTEM_YM2612_DUALPCM_EXT, 64, 0, "") + } + ); + ENTRY( + "Yamaha YM3526 (OPL)", { + CH(DIV_SYSTEM_OPL, 64, 0, "") + } + ); + ENTRY( + "Yamaha YM3526 (drums mode)", { + CH(DIV_SYSTEM_OPL_DRUMS, 64, 0, "") + } + ); + ENTRY( + "Yamaha Y8950", { + CH(DIV_SYSTEM_Y8950, 64, 0, "") + } + ); + ENTRY( + "Yamaha Y8950 (drums mode)", { + CH(DIV_SYSTEM_Y8950_DRUMS, 64, 0, "") + } + ); + ENTRY( + "Yamaha YM3812 (OPL2)", { + CH(DIV_SYSTEM_OPL2, 64, 0, "") + } + ); + ENTRY( + "Yamaha YM3812 (drums mode)", { + CH(DIV_SYSTEM_OPL2_DRUMS, 64, 0, "") + } + ); + ENTRY( + "Yamaha YMF262 (OPL3)", { + CH(DIV_SYSTEM_OPL3, 64, 0, "") + } + ); + ENTRY( + "Yamaha YMF262 (drums mode)", { + CH(DIV_SYSTEM_OPL3_DRUMS, 64, 0, "") + } + ); + if (settings.hiddenSystems) { + ENTRY( + "Yamaha YMU759 (MA-2)", { + CH(DIV_SYSTEM_YMU759, 64, 0, "") + } + ); + } + CATEGORY_END; + + CATEGORY_BEGIN("Square","these chips generate square/pulse tones only (but may include noise)."); + ENTRY( + "TI SN76489", { + CH(DIV_SYSTEM_SMS, 64, 0, "chipType=1") + } + ); + ENTRY( + "TI SN76489A", { + CH(DIV_SYSTEM_SMS, 64, 0, "chipType=4") + } + ); + ENTRY( + "TI SN76496", { + CH(DIV_SYSTEM_SMS, 64, 0, "chipType=5") + } + ); + ENTRY( + "NCR 8496", { + CH(DIV_SYSTEM_SMS, 64, 0, "chipType=6") + } + ); + ENTRY( + "Tandy PSSJ 3-voice sound", { + CH(DIV_SYSTEM_SMS, 64, 0, "chipType=7") + // 8 bit DAC + } + ); + ENTRY( + "Sega PSG (SN76489-like)", { + CH(DIV_SYSTEM_SMS, 64, 0, ""), + } + ); + ENTRY( + "Sega PSG (SN76489-like, Stereo)", { + CH(DIV_SYSTEM_SMS, 64, 0, "chipType=3") + } + ); + ENTRY( + "TI SN94624", { + CH(DIV_SYSTEM_SMS, 64, 0, + "clockSel=6\n" + "chipType=8\n" + ) + } + ); + ENTRY( + "TI SN76494", { + CH(DIV_SYSTEM_SMS, 64, 0, + "clockSel=6\n" + "chipType=9\n" + ) + } + ); + ENTRY( + "Toshiba T6W28", { + CH(DIV_SYSTEM_T6W28, 64, 0, "") + } + ); + ENTRY( + "AY-3-8910", { + CH(DIV_SYSTEM_AY8910, 64, 0, "") + } + ); + ENTRY( + "AY-3-8914", { + CH(DIV_SYSTEM_AY8910, 64, 0, "chipType=3") + } + ); + ENTRY( + "Yamaha YM2149(F)", { + CH(DIV_SYSTEM_AY8910, 64, 0, "chipType=1") + } + ); + ENTRY( + "Philips SAA1099", { + CH(DIV_SYSTEM_SAA1099, 64, 0, "") + } + ); + ENTRY( + "PC Speaker", { + CH(DIV_SYSTEM_PCSPKR, 32, 0, "") + } + ); + ENTRY( + "Pokémon Mini", { + CH(DIV_SYSTEM_POKEMINI, 32, 0, "") + } + ); + ENTRY( + "Commodore VIC", { + CH(DIV_SYSTEM_VIC20, 64, 0, "clockSel=1") + } + ); + ENTRY( + "OKI MSM5232", { + CH(DIV_SYSTEM_MSM5232, 64, 0, "") + } + ); + ENTRY( + "Pong", { + CH(DIV_SYSTEM_PONG, 64, 0, "") + } + ); + CATEGORY_END; + + CATEGORY_BEGIN("Sample","chips/systems which use PCM or ADPCM samples for sound synthesis."); + ENTRY( + "Amiga", { + CH(DIV_SYSTEM_AMIGA, 64, 0, "clockSel=1") + }, + "tickRate=50" + ); + ENTRY( + "SegaPCM", { + CH(DIV_SYSTEM_SEGAPCM, 64, 0, "") + } + ); + ENTRY( + "Capcom QSound", { + CH(DIV_SYSTEM_QSOUND, 64, 0, "") + } + ); + ENTRY( + "Seta/Allumer X1-010", { + CH(DIV_SYSTEM_X1_010, 64, 0, "") + } + ); + ENTRY( + "Yamaha YMZ280B (PCMD8)", { + CH(DIV_SYSTEM_YMZ280B, 64, 0, "") + } + ); + ENTRY( + "Ricoh RF5C68", { + CH(DIV_SYSTEM_RF5C68, 64, 0, "") + } + ); + ENTRY( + "OKI MSM6258", { + CH(DIV_SYSTEM_MSM6258, 64, 0, "") + } + ); + ENTRY( + "OKI MSM6295", { + CH(DIV_SYSTEM_MSM6295, 64, 0, "") + } + ); + ENTRY( + "SNES", { + CH(DIV_SYSTEM_SNES, 64, 0, "") + } + ); + ENTRY( + "Konami K007232", { + CH(DIV_SYSTEM_K007232, 64, 0, "") + } + ); + ENTRY( + "Irem GA20", { + CH(DIV_SYSTEM_GA20, 64, 0, "") + } + ); + ENTRY( + "Generic PCM DAC", { + CH(DIV_SYSTEM_PCM_DAC, 64, 0, "") + } + ); + CATEGORY_END; + + CATEGORY_BEGIN("Wavetable","chips which use user-specified waveforms to generate sound."); + ENTRY( + "PC Engine", { + CH(DIV_SYSTEM_PCE, 64, 0, "") + } + ); + ENTRY( + "Commodore PET (pseudo-wavetable)", { + CH(DIV_SYSTEM_PET, 64, 0, "") + }, + "tickRate=50" + ); + ENTRY( + "Konami Bubble System WSG", { + CH(DIV_SYSTEM_BUBSYS_WSG, 64, 0, "") + } + ); + ENTRY( + "Konami SCC", { + CH(DIV_SYSTEM_SCC, 64, 0, "") + } + ); + ENTRY( + "Konami SCC+", { + CH(DIV_SYSTEM_SCC_PLUS, 64, 0, "") + } + ); + ENTRY( + "Namco WSG", { + CH(DIV_SYSTEM_NAMCO, 64, 0, "") + } + ); + ENTRY( + "Namco C15 (8-channel mono)", { + CH(DIV_SYSTEM_NAMCO_15XX, 64, 0, "") + } + ); + ENTRY( + "Namco C30 (8-channel stereo)", { + CH(DIV_SYSTEM_NAMCO_CUS30, 64, 0, "") + } + ); + ENTRY( + "Namco 163", { + CH(DIV_SYSTEM_N163, 64, 0, "") + } + ); + ENTRY( + "Famicom Disk System (chip)", { + CH(DIV_SYSTEM_FDS, 64, 0, "") + } + ); + ENTRY( + "WonderSwan", { + CH(DIV_SYSTEM_SWAN, 64, 0, "") + }, + "tickRate=75.47169811320754716981" + ); + ENTRY( + "Virtual Boy", { + CH(DIV_SYSTEM_VBOY, 64, 0, "") + }, + "tickRate=50.2734877734878" + ); + ENTRY( + "Seta/Allumer X1-010", { + CH(DIV_SYSTEM_X1_010, 64, 0, "") + } + ); + CATEGORY_END; + + CATEGORY_BEGIN("Specialized","chips/systems with unique sound synthesis methods."); + ENTRY( + "MOS Technology SID (6581)", { + CH(DIV_SYSTEM_C64_6581, 64, 0, "clockSel=1") + }, + "tickRate=50.1245421" + ); + ENTRY( + "MOS Technology SID (8580)", { + CH(DIV_SYSTEM_C64_8580, 64, 0, "clockSel=1") + }, + "tickRate=50.1245421" + ); + ENTRY( + "Microchip AY8930", { + CH(DIV_SYSTEM_AY8930, 64, 0, "") + } + ); + ENTRY( + "Game Boy", { + CH(DIV_SYSTEM_GB, 64, 0, "") + } + ); + ENTRY( + "Atari Lynx", { + CH(DIV_SYSTEM_LYNX, 64, 0, "") + } + ); + ENTRY( + "POKEY", { + CH(DIV_SYSTEM_POKEY, 64, 0, "clockSel=1") + }, + "tickRate=50" + ); + ENTRY( + "Atari TIA", { + CH(DIV_SYSTEM_TIA, 64, 0, "") + } + ); + ENTRY( + "NES (Ricoh 2A03)", { + CH(DIV_SYSTEM_NES, 64, 0, "") + } + ); + ENTRY( + "Commander X16 (VERA only)", { + CH(DIV_SYSTEM_VERA, 64, 0, "") + } + ); + ENTRY( + "ZX Spectrum (beeper only)", { + CH(DIV_SYSTEM_SFX_BEEPER, 64, 0, "") + } + ); + if (settings.hiddenSystems) { + ENTRY( + "Dummy System", { + CH(DIV_SYSTEM_DUMMY, 64, 0, "") + } + ); + } + ENTRY( + "tildearrow Sound Unit", { + CH(DIV_SYSTEM_SOUND_UNIT, 64, 0, "") + } + ); + CATEGORY_END; + CATEGORY_BEGIN("DefleMask-compatible","these configurations are compatible with DefleMask.\nselect this if you need to save as .dmf or work with that program."); ENTRY( "Sega Genesis", { diff --git a/src/gui/sysConf.cpp b/src/gui/sysConf.cpp index 9ebe7ec0..8e41fa00 100644 --- a/src/gui/sysConf.cpp +++ b/src/gui/sysConf.cpp @@ -31,10 +31,12 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo case DIV_SYSTEM_YM2612: case DIV_SYSTEM_YM2612_EXT: case DIV_SYSTEM_YM2612_DUALPCM: - case DIV_SYSTEM_YM2612_DUALPCM_EXT: { + case DIV_SYSTEM_YM2612_DUALPCM_EXT: + case DIV_SYSTEM_YM2612_CSM: { int clockSel=flags.getInt("clockSel",0); bool ladder=flags.getBool("ladderEffect",0); bool noExtMacros=flags.getBool("noExtMacros",false); + bool fbAllOps=flags.getBool("fbAllOps",false); if (ImGui::RadioButton("NTSC (7.67MHz)",clockSel==0)) { clockSel=0; @@ -59,10 +61,13 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo if (ImGui::Checkbox("Enable DAC distortion",&ladder)) { altered=true; } - if (type==DIV_SYSTEM_YM2612_EXT || type==DIV_SYSTEM_YM2612_DUALPCM_EXT) { + if (type==DIV_SYSTEM_YM2612_EXT || type==DIV_SYSTEM_YM2612_DUALPCM_EXT || type==DIV_SYSTEM_YM2612_CSM) { if (ImGui::Checkbox("Disable ExtCh FM macros (compatibility)",&noExtMacros)) { altered=true; } + if (ImGui::Checkbox("Ins change in ExtCh operator 2-4 affects FB (compatibility)",&fbAllOps)) { + altered=true; + } } if (altered) { @@ -70,6 +75,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo flags.set("clockSel",clockSel); flags.set("ladderEffect",ladder); flags.set("noExtMacros",noExtMacros); + flags.set("fbAllOps",fbAllOps); }); } break; @@ -457,12 +463,15 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo } case DIV_SYSTEM_YM2610: case DIV_SYSTEM_YM2610_EXT: + case DIV_SYSTEM_YM2610_CSM: case DIV_SYSTEM_YM2610_FULL: case DIV_SYSTEM_YM2610_FULL_EXT: case DIV_SYSTEM_YM2610B: - case DIV_SYSTEM_YM2610B_EXT: { + case DIV_SYSTEM_YM2610B_EXT: + case DIV_SYSTEM_YM2610B_CSM: { int clockSel=flags.getInt("clockSel",0); bool noExtMacros=flags.getBool("noExtMacros",false); + bool fbAllOps=flags.getBool("fbAllOps",false); if (ImGui::RadioButton("8MHz (Neo Geo MVS)",clockSel==0)) { clockSel=0; @@ -473,16 +482,20 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo altered=true; } - if (type==DIV_SYSTEM_YM2610_EXT || type==DIV_SYSTEM_YM2610_FULL_EXT || type==DIV_SYSTEM_YM2610B_EXT) { + if (type==DIV_SYSTEM_YM2610_EXT || type==DIV_SYSTEM_YM2610_FULL_EXT || type==DIV_SYSTEM_YM2610B_EXT || type==DIV_SYSTEM_YM2610_CSM || type==DIV_SYSTEM_YM2610B_CSM) { if (ImGui::Checkbox("Disable ExtCh FM macros (compatibility)",&noExtMacros)) { altered=true; } + if (ImGui::Checkbox("Ins change in ExtCh operator 2-4 affects FB (compatibility)",&fbAllOps)) { + altered=true; + } } if (altered) { e->lockSave([&]() { flags.set("clockSel",clockSel); flags.set("noExtMacros",noExtMacros); + flags.set("fbAllOps",fbAllOps); }); } break; @@ -835,10 +848,12 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo break; } case DIV_SYSTEM_YM2203: - case DIV_SYSTEM_YM2203_EXT: { + case DIV_SYSTEM_YM2203_EXT: + case DIV_SYSTEM_YM2203_CSM: { int clockSel=flags.getInt("clockSel",0); int prescale=flags.getInt("prescale",0); bool noExtMacros=flags.getBool("noExtMacros",false); + bool fbAllOps=flags.getBool("fbAllOps",false); ImGui::Text("Clock rate:"); if (ImGui::RadioButton("3.58MHz (NTSC)",clockSel==0)) { @@ -879,10 +894,13 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo altered=true; } - if (type==DIV_SYSTEM_YM2203_EXT) { + if (type==DIV_SYSTEM_YM2203_EXT || type==DIV_SYSTEM_YM2203_CSM) { if (ImGui::Checkbox("Disable ExtCh FM macros (compatibility)",&noExtMacros)) { altered=true; } + if (ImGui::Checkbox("Ins change in ExtCh operator 2-4 affects FB (compatibility)",&fbAllOps)) { + altered=true; + } } if (altered) { @@ -890,15 +908,18 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo flags.set("clockSel",clockSel); flags.set("prescale",prescale); flags.set("noExtMacros",noExtMacros); + flags.set("fbAllOps",fbAllOps); }); } break; } case DIV_SYSTEM_YM2608: - case DIV_SYSTEM_YM2608_EXT: { + case DIV_SYSTEM_YM2608_EXT: + case DIV_SYSTEM_YM2608_CSM: { int clockSel=flags.getInt("clockSel",0); int prescale=flags.getInt("prescale",0); bool noExtMacros=flags.getBool("noExtMacros",false); + bool fbAllOps=flags.getBool("fbAllOps",false); ImGui::Text("Clock rate:"); if (ImGui::RadioButton("8MHz (Arcade)",clockSel==0)) { @@ -923,10 +944,13 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo altered=true; } - if (type==DIV_SYSTEM_YM2608_EXT) { + if (type==DIV_SYSTEM_YM2608_EXT || type==DIV_SYSTEM_YM2608_CSM) { if (ImGui::Checkbox("Disable ExtCh FM macros (compatibility)",&noExtMacros)) { altered=true; } + if (ImGui::Checkbox("Ins change in ExtCh operator 2-4 affects FB (compatibility)",&fbAllOps)) { + altered=true; + } } if (altered) { @@ -934,6 +958,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo flags.set("clockSel",clockSel); flags.set("prescale",prescale); flags.set("noExtMacros",noExtMacros); + flags.set("fbAllOps",fbAllOps); }); } break; From 893b48b9bbae35466052e120299aa2644ee35eb7 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 28 Dec 2022 21:37:42 -0500 Subject: [PATCH 25/30] fix SPC_DSP.cpp to work on GCC 5 --- src/engine/platform/sound/snes/SPC_DSP.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/platform/sound/snes/SPC_DSP.cpp b/src/engine/platform/sound/snes/SPC_DSP.cpp index 1a937558..6ae8275b 100644 --- a/src/engine/platform/sound/snes/SPC_DSP.cpp +++ b/src/engine/platform/sound/snes/SPC_DSP.cpp @@ -803,7 +803,7 @@ void SPC_DSP::run( int clocks_remain ) { loop: // GCC, why -#if defined(__GNUC__) && !defined(__clang__) +#if (defined(__GNUC__) && (__GNUC__ >= 7)) && !defined(__clang__) #define PHASE( n ) if ( n && !--clocks_remain ) break; __attribute__ ((fallthrough)); case n: #else #define PHASE( n ) if ( n && !--clocks_remain ) break; case n: From 37c2ea3097e1f9da354446dad507942bc91376a1 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 28 Dec 2022 23:04:12 -0500 Subject: [PATCH 26/30] NES: fix arp macro --- src/engine/platform/nes.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/engine/platform/nes.cpp b/src/engine/platform/nes.cpp index 5e9793a8..fbe31dae 100644 --- a/src/engine/platform/nes.cpp +++ b/src/engine/platform/nes.cpp @@ -271,9 +271,20 @@ void DivPlatformNES::tick(bool sysTick) { if (chan[i].freqChanged || chan[i].keyOn || chan[i].keyOff) { if (i==3) { // noise int ntPos=chan[i].baseFreq; - if (ntPos<0) ntPos=0; - if (ntPos>252) ntPos=252; - chan[i].freq=(parent->song.properNoiseLayout)?(15-(chan[i].baseFreq&15)):(noiseTable[ntPos]); + if (NEW_ARP_STRAT) { + if (chan[i].fixedArp) { + ntPos=chan[i].baseNoteOverride; + } else { + ntPos+=chan[i].arpOff; + } + } + if (parent->song.properNoiseLayout) { + if (ntPos<0) ntPos=0; + if (ntPos>252) ntPos=252; + chan[i].freq=noiseTable[ntPos]; + } else { + chan[i].freq=15-(ntPos&15); + } } else { chan[i].freq=parent->calcFreq(chan[i].baseFreq,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,true,0,chan[i].pitch2,chipClock,CHIP_DIVIDER)-1; if (chan[i].freq>2047) chan[i].freq=2047; From 85c4086d5aaaf692c9481ea0a53340a73c8460a3 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 28 Dec 2022 23:11:16 -0500 Subject: [PATCH 27/30] why is this here --- src/engine/platform/nes.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/platform/nes.cpp b/src/engine/platform/nes.cpp index fbe31dae..ba467c10 100644 --- a/src/engine/platform/nes.cpp +++ b/src/engine/platform/nes.cpp @@ -217,7 +217,7 @@ void DivPlatformNES::tick(bool sysTick) { rWrite(0x4000+i*4,(chan[i].envMode<<4)|chan[i].outVol|((chan[i].duty&3)<<6)); } } - if (NEW_ARP_STRAT && i!=3) { + if (NEW_ARP_STRAT) { chan[i].handleArp(); } else if (chan[i].std.arp.had) { if (i==3) { // noise From f2fb67eba62f7de6e5b2b60afab59a1e2efb8620 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 28 Dec 2022 23:43:58 -0500 Subject: [PATCH 28/30] GUI: comment out some log spam --- src/gui/gui.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 655e9ec0..59d23f2e 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -626,10 +626,10 @@ void FurnaceGUI::autoDetectSystem() { } if (defCountMap.size()!=sysCountMap.size()) continue; isMatch=true; - logV("trying on defCountMap: %s",j.name); + /*logV("trying on defCountMap: %s",j.name); for (std::pair k: defCountMap) { logV("- %s: %d",e->getSystemName(k.first),k.second); - } + }*/ for (std::pair k: defCountMap) { try { if (sysCountMap.at(k.first)!=k.second) { From 286cca3a54cb528799ed0668c63793fb67cbea08 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 28 Dec 2022 23:57:06 -0500 Subject: [PATCH 29/30] NES: What, what, what, what, what, what, what, what, what, what? --- src/engine/platform/nes.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/engine/platform/nes.cpp b/src/engine/platform/nes.cpp index ba467c10..a46a6d3f 100644 --- a/src/engine/platform/nes.cpp +++ b/src/engine/platform/nes.cpp @@ -279,11 +279,11 @@ void DivPlatformNES::tick(bool sysTick) { } } if (parent->song.properNoiseLayout) { + chan[i].freq=15-(ntPos&15); + } else { if (ntPos<0) ntPos=0; if (ntPos>252) ntPos=252; chan[i].freq=noiseTable[ntPos]; - } else { - chan[i].freq=15-(ntPos&15); } } else { chan[i].freq=parent->calcFreq(chan[i].baseFreq,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,true,0,chan[i].pitch2,chipClock,CHIP_DIVIDER)-1; From 3ad342354234357164c2a4af146efe8371f45217 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 29 Dec 2022 00:31:10 -0500 Subject: [PATCH 30/30] update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e8970291..3a27c23b 100644 --- a/README.md +++ b/README.md @@ -264,7 +264,7 @@ you may need to log out and/or reboot after doing this. > .spc export? -**not yet!** coming in 0.7 though, in a future... +**not yet!** coming in 0.7 though, eventually... > how do I use C64 absolute filter/duty?