From 0759da75fba1f519a90339fab63e86da25e33c57 Mon Sep 17 00:00:00 2001 From: marouault Date: Sat, 1 Jan 2022 14:34:16 +0100 Subject: [PATCH 1/9] Corrected checkBridge --- Pontu/src/model/Game.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Pontu/src/model/Game.c b/Pontu/src/model/Game.c index c64afbb..ce8c4c6 100644 --- a/Pontu/src/model/Game.c +++ b/Pontu/src/model/Game.c @@ -189,12 +189,14 @@ bool checkBridge(const Island start, const Island target, const Board* board) // Vertical bridge if (xdiff == 0 && abs(ydiff) == 1) { - return board->vBridges[start.y + ydiff][start.x]; + const int coordY = start.y - (ydiff==-1); + return board->vBridges[coordY][start.x]; } // Horizontal bridge else if (abs(xdiff) == 1 && ydiff == 0) { - return board->hBridges[start.y][start.x + xdiff]; + const int coordX = start.x - (xdiff==-1); + return board->hBridges[start.y][coordX]; } // Not a bridge else From 28c65bb4db702b54589769bc61cd80a98e935189 Mon Sep 17 00:00:00 2001 From: marouault Date: Sat, 1 Jan 2022 14:53:05 +0100 Subject: [PATCH 2/9] Maybe corrected the correction --- Pontu/src/model/Game.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Pontu/src/model/Game.c b/Pontu/src/model/Game.c index ce8c4c6..39d33e6 100644 --- a/Pontu/src/model/Game.c +++ b/Pontu/src/model/Game.c @@ -189,13 +189,13 @@ bool checkBridge(const Island start, const Island target, const Board* board) // Vertical bridge if (xdiff == 0 && abs(ydiff) == 1) { - const int coordY = start.y - (ydiff==-1); + const int coordY = start.y - (ydiff==-1?1:0); return board->vBridges[coordY][start.x]; } // Horizontal bridge else if (abs(xdiff) == 1 && ydiff == 0) { - const int coordX = start.x - (xdiff==-1); + const int coordX = start.x - (xdiff==-1?1:0); return board->hBridges[start.y][coordX]; } // Not a bridge From b218a0eeb31b674ddf40302ddde155639deced79 Mon Sep 17 00:00:00 2001 From: marouault Date: Sun, 2 Jan 2022 00:11:35 +0100 Subject: [PATCH 3/9] Added ArrayUtils to facilitate use of dynamic arrays. Tested some solutions to the InputHandler problem (The one which is commited mostly work) --- Pontu/entryPoints/main.c | 30 +++++++++++++- Pontu/include/debug/printer.h | 8 ++++ Pontu/include/engine/ArrayUtils.h | 64 +++++++++++++++++++++++++++++ Pontu/include/model/Coord.h | 10 +++++ Pontu/include/model/Game.h | 10 +++++ Pontu/include/model/arrayCoord.h | 9 ++++ Pontu/src/debug/printer.c | 7 ++++ Pontu/src/model/Coord.c | 5 +++ Pontu/src/model/Game.c | 68 +++++++++++++++++++++++++++++++ 9 files changed, 209 insertions(+), 2 deletions(-) create mode 100644 Pontu/include/debug/printer.h create mode 100644 Pontu/include/engine/ArrayUtils.h create mode 100644 Pontu/include/model/arrayCoord.h create mode 100644 Pontu/src/debug/printer.c diff --git a/Pontu/entryPoints/main.c b/Pontu/entryPoints/main.c index deadfcd..a8dc4f5 100644 --- a/Pontu/entryPoints/main.c +++ b/Pontu/entryPoints/main.c @@ -5,7 +5,10 @@ #include "engine/InputElement.h" #include "engine/TextureHandler.h" #include "model/Game.h" +#include "model/arrayCoord.h" #include "view/GameDrawer.h" +#include "engine/ArrayUtils.h" +#include "debug/printer.h" int main(int argc, char* argv[]) { @@ -35,19 +38,22 @@ int main(int argc, char* argv[]) } InputProcessor inputProcessor = {.selectedCase = {.x=-1, .y=-1}}; + struct array_Coord interactiveCases = array_Coord_Create(); + int wBoardRect=99*3, hBoardRect=99*3; SDL_Rect boardRect = {.x=windowSize.w/2 - wBoardRect/2, .y=windowSize.h/2 - hBoardRect/2, .w=wBoardRect, .h=99*3}; const char* pseudos[] = {"Azerty","Bépo"}; Game game = newGame(2, pseudos); TextureHandler textureHandler = newTextureHandler(renderer); + bool quit = false; while(!quit) { // Event handling InputElement inputElement; while (InputType_None != (inputElement = proccessInput(&inputProcessor, &boardRect)).type) { - + switch (inputElement.type) { case InputType_ActivateUI: @@ -66,19 +72,38 @@ int main(int argc, char* argv[]) break; case InputType_MoveGame: fprintf(stderr, "Move on board\n"); + fprintf(stderr, "From (%d; %d)\n", inputElement.data.move.start.x, inputElement.data.move.start.y); + fprintf(stderr, "To (%d; %d)\n", inputElement.data.move.end.x, inputElement.data.move.end.y); + moveOnBoard(inputElement.data.move.start, inputElement.data.move.end, &game); break; case InputType_ClickGame: fprintf(stderr, "Clic on board (%d; %d)\n", inputElement.data.coord.x, inputElement.data.coord.y); - fflush(stderr); + fprintf(stderr, "\tSelected case : (%d; %d)\n", inputProcessor.selectedCase.x, inputProcessor.selectedCase.y); + + if(!array_Coord_Contains(&interactiveCases, inputElement.data.coord, *coordEqual)) { + fprintf(stderr, "\tselected case reset\n"); + inputProcessor.selectedCase = newCoord(-1,-1); + } + if (clickOnBoard(inputElement.data.coord, &game)) { + fprintf(stderr, "\tselected case reset\n"); inputProcessor.selectedCase = newCoord(-1,-1); } + + break; case InputType_None: default: break; } + + array_Coord_Free(&interactiveCases); + interactiveCases = getInteractiveCases(&game, inputProcessor.selectedCase); + fprintf(stderr, "Interactive cases : {"); + array_Coord_Foreach(&interactiveCases, *printCoord); + fprintf(stderr, "}\n"); + fflush(stderr); } @@ -95,6 +120,7 @@ int main(int argc, char* argv[]) Quit: freeTextureHandler(&textureHandler); + array_Coord_Free(&interactiveCases); if(renderer != NULL) { SDL_DestroyRenderer(renderer); } diff --git a/Pontu/include/debug/printer.h b/Pontu/include/debug/printer.h new file mode 100644 index 0000000..38064fb --- /dev/null +++ b/Pontu/include/debug/printer.h @@ -0,0 +1,8 @@ +#ifndef PRINTER_INCLUDED +#define PRINTER_INCLUDED + +#include + +void printCoord(const Coord coord); + +#endif //PRINTER_INCLUDED diff --git a/Pontu/include/engine/ArrayUtils.h b/Pontu/include/engine/ArrayUtils.h new file mode 100644 index 0000000..e00e0e2 --- /dev/null +++ b/Pontu/include/engine/ArrayUtils.h @@ -0,0 +1,64 @@ +#ifndef ARRAY_UTILS_INCLUDED +#define ARRAY_UTILS_INCLUDED + +#include +#include +#include + +/* +This file define a macro used to generate array structs and associated functions + +If you want an int array use + GENERATE_DYNAMIC_ARRAY(int) + +If you miss a function, write it with a type as int first then rewrite it in the macro + You will need to follow function naming convetions to avoid multiple functions with the same name + Functions in header must be marked as inline + Don't forget antislashes +*/ + +#define GENERATE_DYNAMIC_ARRAY(T) \ +struct array_##T { \ + T* elems; \ + size_t arraySize; \ +}; \ +\ +/*Contruct an empty array*/\ +inline struct array_##T array_##T##_Create() { \ + struct array_##T array = {.elems=NULL, .arraySize=0}; \ + return array; \ +} \ +\ +/*Free an array*/\ +inline void array_##T##_Free(struct array_##T* array) { \ + free(array->elems); \ + array->arraySize = 0; \ +} \ +\ +/*Add an element to an array*/\ +inline void array_##T##_AddElement(struct array_##T* array, const T element) { \ + ++(array->arraySize); \ + array->elems = realloc(array->elems, sizeof(T)*(array->arraySize)); \ + array->elems[array->arraySize - 1] = element; \ +} \ +\ +/*Check if an array contains an element*/\ +inline bool array_##T##_Contains(const struct array_##T* const array, const T element, bool (*areEqual)(const T, const T)) { \ + for (size_t i = 0; i < array->arraySize; i++) { \ + if (areEqual(array->elems[i], element)) { \ + return true; \ + } \ + } \ + return false; \ +}\ +\ +/*Apply a function to each element in the array*/\ +inline void array_##T##_Foreach(const struct array_##T* const array, void (*func)(const T)) { \ + for(size_t i = 0; iarraySize; ++i) { \ + func(array->elems[i]);\ + }\ +} + + + +#endif //ARRAY_UTILS_INCLUDED diff --git a/Pontu/include/model/Coord.h b/Pontu/include/model/Coord.h index c41afbd..0891866 100644 --- a/Pontu/include/model/Coord.h +++ b/Pontu/include/model/Coord.h @@ -9,6 +9,8 @@ #define COORD_INCLUDED #include +#include "model/Island.h" +#include "engine/ArrayUtils.h" /** * \struct Coord @@ -46,4 +48,12 @@ bool coordValid(const Coord coord); */ bool coordEqual(const Coord a, const Coord b); +/** + * \brief Convert an island to a coord + * + * \param[in] island The island to convert + * \return Coord from the island + */ +Coord islandToCoord(const Island* island); + #endif //COORD_INCLUDED diff --git a/Pontu/include/model/Game.h b/Pontu/include/model/Game.h index 94ce9ab..d1f3e5b 100644 --- a/Pontu/include/model/Game.h +++ b/Pontu/include/model/Game.h @@ -13,6 +13,7 @@ #include "model/Bridge.h" #include "model/Island.h" #include "model/Coord.h" +#include "model/arrayCoord.h" #include #include @@ -177,5 +178,14 @@ bool clickOnBoard(const Coord coord, Game* game); */ bool rmBridge(Bridge bridge, Board* board); +/** + * \brief List cases that can be interacted with for movement + * + * \param[in] game The game + * \param[in] selectedCase The selected case + * \return struct array_Coord An array of coord /!\ Care to free this array with array_Coord_Free + */ +struct array_Coord getInteractiveCases(const Game* const game, const Coord selectedCase); + #endif //GAME_H diff --git a/Pontu/include/model/arrayCoord.h b/Pontu/include/model/arrayCoord.h new file mode 100644 index 0000000..031be97 --- /dev/null +++ b/Pontu/include/model/arrayCoord.h @@ -0,0 +1,9 @@ +#ifndef ARRAY_COORD_INCLUDED +#define ARRAY_COORD_INCLUDED + +#include "model/Coord.h" +#include "engine/ArrayUtils.h" + +GENERATE_DYNAMIC_ARRAY(Coord) + +#endif //ARRAY_COORD_INCLUDED diff --git a/Pontu/src/debug/printer.c b/Pontu/src/debug/printer.c new file mode 100644 index 0000000..a1b8451 --- /dev/null +++ b/Pontu/src/debug/printer.c @@ -0,0 +1,7 @@ +#include "debug/printer.h" +#include + +void printCoord(const Coord coord) { + fprintf(stderr, "(%d, %d)", coord.x, coord.y); +} + diff --git a/Pontu/src/model/Coord.c b/Pontu/src/model/Coord.c index 3bacee9..efd7dea 100644 --- a/Pontu/src/model/Coord.c +++ b/Pontu/src/model/Coord.c @@ -15,3 +15,8 @@ bool coordEqual(const Coord a, const Coord b) { return a.x == b.x && a.y == b.y; } + +Coord islandToCoord(const Island* island) { + Coord coord = {.x = island->x*2, .y = island->y*2}; + return coord; +} \ No newline at end of file diff --git a/Pontu/src/model/Game.c b/Pontu/src/model/Game.c index 39d33e6..28a73f6 100644 --- a/Pontu/src/model/Game.c +++ b/Pontu/src/model/Game.c @@ -1,5 +1,6 @@ #include "model/Game.h" #include "model/IslandOrBridge.h" +#include "engine/ArrayUtils.h" #include // Not defined in header to not pollute inferface @@ -376,3 +377,70 @@ bool rmBridge(Bridge bridge, Board* board) return false; } + + +struct array_Coord getInteractiveCases(const Game* const game, const Coord selectedCase) { + switch (game->phase) + { + case PLACEMENT: + assert(false && "To be implemented"); + return array_Coord_Create(); + case MOVE_PIECE: { + struct array_Coord retVal = array_Coord_Create(); + + for (size_t i = 0; i < game->board.nbPieces; ++i) + { + if (game->board.arrPieces[i].idJ == game->currentPlayerID && !game->board.arrPieces[i].stuck) { + size_t nbIsland; + Island* islands = islandsAround(game->board.arrPieces[i].island, &nbIsland); + + if (nbIsland != 0) { + Coord pieceCoord = islandToCoord(&game->board.arrPieces[i].island); + if (!coordValid(selectedCase)) { + array_Coord_AddElement(&retVal, pieceCoord); + } + else { + if (coordEqual(pieceCoord, selectedCase)) { + for (size_t iIsle = 0; iIsle < nbIsland; ++iIsle) + { + if (pieceCanMoveTo(&game->board.arrPieces[i], islands[iIsle], &game->board)) { + Coord coordIsland = islandToCoord(&islands[iIsle]); + array_Coord_AddElement(&retVal, coordIsland); + } + } + free(islands); + return retVal; + } + } + } + free(islands); + } + } + return retVal; + } + case RM_BRIDGE: { + struct array_Coord retVal = array_Coord_Create(); + + for (size_t y = 0; y<5; ++y) { + for (size_t x = 0; x<4; ++x) { + if (game->board.hBridges[y][x]) { + Coord coord = {.x=x*2+1, .y=y*2}; + array_Coord_AddElement(&retVal, coord); + } + } + } + for (size_t y = 0; y<4; ++y) { + for (size_t x = 0; x<5; ++x) { + if (game->board.vBridges[y][x]) { + Coord coord = {.x=x*2, .y=y*2+1}; + array_Coord_AddElement(&retVal, coord); + } + } + } + + return retVal; + } + default: + return array_Coord_Create(); + } +} From 822a9d79cad67817273a89f27af667dd2e2ec192 Mon Sep 17 00:00:00 2001 From: marouault Date: Mon, 3 Jan 2022 10:10:16 +0100 Subject: [PATCH 4/9] Light modification of main --- Pontu/entryPoints/main.c | 7 +++---- Pontu/src/view/GameDrawer.c | 8 ++++---- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/Pontu/entryPoints/main.c b/Pontu/entryPoints/main.c index a8dc4f5..daf442e 100644 --- a/Pontu/entryPoints/main.c +++ b/Pontu/entryPoints/main.c @@ -30,7 +30,7 @@ int main(int argc, char* argv[]) goto Quit; } - renderer = SDL_CreateRenderer(window,-1,0); + renderer = SDL_CreateRenderer(window,-1,SDL_RENDERER_ACCELERATED); if(!renderer) { fprintf(stderr, "Erreur : %s", SDL_GetError()); @@ -103,10 +103,9 @@ int main(int argc, char* argv[]) fprintf(stderr, "Interactive cases : {"); array_Coord_Foreach(&interactiveCases, *printCoord); fprintf(stderr, "}\n"); - fflush(stderr); } - - + + fflush(stderr); // Drawing drawGame(renderer, &windowSize, &boardRect, &game, &textureHandler); diff --git a/Pontu/src/view/GameDrawer.c b/Pontu/src/view/GameDrawer.c index 99f5f72..351b03e 100644 --- a/Pontu/src/view/GameDrawer.c +++ b/Pontu/src/view/GameDrawer.c @@ -4,16 +4,16 @@ bool drawGame(SDL_Renderer* renderer, const SDL_Rect* windowSize, const SDL_Rect* boardRect, const Game* game,TextureHandler* textureHandler) { - SDL_Texture* menuTexture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, 50, 70); + //SDL_Texture* menuTexture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, 50, 70); - SDL_SetRenderTarget(renderer, menuTexture); + /*SDL_SetRenderTarget(renderer, menuTexture); SDL_SetRenderDrawColor(renderer, 150, 243, 59, 255); SDL_Rect buttonRect = {.x = 0,.y = 0,.w = 50,.h = 70}; SDL_RenderFillRect(renderer, &buttonRect); - SDL_SetRenderTarget(renderer, NULL); + SDL_SetRenderTarget(renderer, NULL);*/ //P_Button menu = createButton(menuTexture, NULL, (windowSize->w*5)/100, (windowSize->h*5)/100, 50, 70, NULL); - P_Button menu = createButton(menuTexture, NULL, 10, 10, 50, 70, NULL); + //P_Button menu = createButton(menuTexture, NULL, 10, 10, 50, 70, NULL); drawBoard(renderer, boardRect, &(game->board), textureHandler->textures[TEXTURE_Island], textureHandler->textures[TEXTURE_Bridge], textureHandler->textures[TEXTURE_Water]); From cc70ddbaa236475e5230412fbeded6f95585ba93 Mon Sep 17 00:00:00 2001 From: thmaillarb Date: Mon, 3 Jan 2022 10:29:33 +0100 Subject: [PATCH 5/9] Updated Doxyfile to document macros --- Doxyfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Doxyfile b/Doxyfile index a7443b0..8baa703 100644 --- a/Doxyfile +++ b/Doxyfile @@ -2059,7 +2059,7 @@ ENABLE_PREPROCESSING = YES # The default value is: NO. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -MACRO_EXPANSION = NO +MACRO_EXPANSION = YES # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then # the macro expansion is limited to the macros specified with the PREDEFINED and @@ -2067,7 +2067,7 @@ MACRO_EXPANSION = NO # The default value is: NO. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -EXPAND_ONLY_PREDEF = NO +EXPAND_ONLY_PREDEF = YES # If the SEARCH_INCLUDES tag is set to YES, the include files in the # INCLUDE_PATH will be searched if a #include is found. From d90840571ea2530f2ae5bd7534a34f1a8f52cbed Mon Sep 17 00:00:00 2001 From: marouault Date: Mon, 3 Jan 2022 10:42:55 +0100 Subject: [PATCH 6/9] Documented some files --- Pontu/include/engine/ArrayUtils.h | 31 +++++++++++++++++---------- Pontu/include/engine/TextureHandler.h | 19 ++++++++++------ Pontu/include/engine/TextureLoader.h | 6 ++++++ Pontu/include/model/Bridge.h | 2 +- 4 files changed, 39 insertions(+), 19 deletions(-) diff --git a/Pontu/include/engine/ArrayUtils.h b/Pontu/include/engine/ArrayUtils.h index e00e0e2..64e6220 100644 --- a/Pontu/include/engine/ArrayUtils.h +++ b/Pontu/include/engine/ArrayUtils.h @@ -1,3 +1,10 @@ +/** + * \file ArrayUtils.h + * \brief This file define a macro used to generate dynamic array structs and associated functions + * \author Martin Rouault + * \date 3/01/2022 + */ + #ifndef ARRAY_UTILS_INCLUDED #define ARRAY_UTILS_INCLUDED @@ -5,19 +12,21 @@ #include #include -/* -This file define a macro used to generate array structs and associated functions - -If you want an int array use - GENERATE_DYNAMIC_ARRAY(int) - -If you miss a function, write it with a type as int first then rewrite it in the macro - You will need to follow function naming convetions to avoid multiple functions with the same name - Functions in header must be marked as inline - Don't forget antislashes -*/ +/** + * \brief Generate a dynamic array for type T + * If you want an int array use + * GENERATE_DYNAMIC_ARRAY(int) + * If you miss a function, write it with a type as int first then rewrite it in the macro + * You will need to follow function naming convetions to avoid multiple functions with the same name + * Functions in header must be marked as inline + * Don't forget antislashes + */ #define GENERATE_DYNAMIC_ARRAY(T) \ +/** \ + * \struct array_##T \ + * \ + * */\ struct array_##T { \ T* elems; \ size_t arraySize; \ diff --git a/Pontu/include/engine/TextureHandler.h b/Pontu/include/engine/TextureHandler.h index 4696d6b..149a954 100644 --- a/Pontu/include/engine/TextureHandler.h +++ b/Pontu/include/engine/TextureHandler.h @@ -12,18 +12,23 @@ #include #include "engine/TextureLoader.h" -// List here the different texture to handle -// In the enum -// Island become TEXTURE_Island -// In file -// Island become Island.png +/** List here the different texture to handle + * In the enum + * Island become TEXTURE_Island + * In file + * Island become Island.png + * \sa MACRO_TEXTURE_ENUM_GEN(E) + */ #define MACRO_FOR_ALL_TEXTURES(M) \ M(Island) \ M(Bridge) \ M(Piece) \ M(Water) -// Allow the generation of enum +/** + * \brief Allow the generation of enum + * \sa MACRO_FOR_ALL_TEXTURES(M) + */ #define MACRO_TEXTURE_ENUM_GEN(E) TEXTURE_##E, /** @@ -50,7 +55,7 @@ typedef struct /** * \brief Create a TextureHandler and load each texture defined in MACRO_FOR_ALL_TEXTURES in it * \param renderer The renderer which is passed to texture when they are created - * \return ** TextureHandler filled with textures + * \return TextureHandler filled with textures */ TextureHandler newTextureHandler(SDL_Renderer* renderer); diff --git a/Pontu/include/engine/TextureLoader.h b/Pontu/include/engine/TextureLoader.h index 9ad7b20..8a87b3a 100644 --- a/Pontu/include/engine/TextureLoader.h +++ b/Pontu/include/engine/TextureLoader.h @@ -1,3 +1,9 @@ +/** + * \file TextureLoader.h + * \brief Define functions to load textures + * \author Allan Point + */ + #include #include diff --git a/Pontu/include/model/Bridge.h b/Pontu/include/model/Bridge.h index a4374a6..152a5d1 100644 --- a/Pontu/include/model/Bridge.h +++ b/Pontu/include/model/Bridge.h @@ -1,7 +1,7 @@ /** * \file Bridge.h * \brief Bridge - * \autor Martin Rouault, Jacques Thomas + * \author Martin Rouault, Jacques Thomas * \date 13/12/2021 */ From 057079b5bb54558294541ac4c74b3a18a2e8807c Mon Sep 17 00:00:00 2001 From: jathomas2 Date: Mon, 3 Jan 2022 11:24:09 +0100 Subject: [PATCH 7/9] Add a little modify in a commentary function --- Pontu/include/model/Game.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Pontu/include/model/Game.h b/Pontu/include/model/Game.h index d1f3e5b..4787c0f 100644 --- a/Pontu/include/model/Game.h +++ b/Pontu/include/model/Game.h @@ -38,7 +38,7 @@ typedef struct { //TODO duree Phase phase; ///< The current state of the game Player arrPlayers[4]; ///< The array of all the players in this game - size_t nbPlayers; + size_t nbPlayers; Board board; ///< The board for this game } Game; @@ -147,6 +147,7 @@ bool checkBridge(const Island start, const Island target, const Board* b); * \param[in] arrPieces Array of all pieces * \param[in] logicalSize The logical size of arrPieces * \param[in] island The island on the one we want to check the piece + * \return the piece address if there is one the island otherwise return NULL */ Piece* getPieceFromIsland(Piece arrPieces[9], const size_t logicalSize, const Island island); From d9537f3e68f3dc32af4334a013d65ab6910026a1 Mon Sep 17 00:00:00 2001 From: thmaillarb Date: Mon, 3 Jan 2022 12:00:19 +0100 Subject: [PATCH 8/9] Added AudioHandler, based on Audio.h and Audio.c --- Pontu/include/engine/Audio.h | 23 ---- Pontu/include/engine/AudioHandler.h | 126 +++++++++++++++++++ Pontu/rsrc/sfx/testClick.wav | Bin 0 -> 316112 bytes Pontu/src/engine/Audio.c | 35 ------ Pontu/src/engine/AudioHandler.c | 186 ++++++++++++++++++++++++++++ 5 files changed, 312 insertions(+), 58 deletions(-) delete mode 100644 Pontu/include/engine/Audio.h create mode 100644 Pontu/include/engine/AudioHandler.h create mode 100644 Pontu/rsrc/sfx/testClick.wav delete mode 100644 Pontu/src/engine/Audio.c create mode 100644 Pontu/src/engine/AudioHandler.c diff --git a/Pontu/include/engine/Audio.h b/Pontu/include/engine/Audio.h deleted file mode 100644 index de1be9c..0000000 --- a/Pontu/include/engine/Audio.h +++ /dev/null @@ -1,23 +0,0 @@ -/** - * \file Audio.h - * \brief Audio management - * \author Théotime Maillarbaux - * \date 13/12/2021 - */ - -#ifndef AUDIO_H -#define AUDIO_H - -#include - -/** - * \brief Fades out a music and plays another one. - * \param[in] music A pointer to the Mix_Music struct used to play the current track - * \param[in] path The path to the new track to be played - * \warning The program won't know if it failed. - * - * This function creates a thread that will detach on its own completion. - */ -void switchMusic(Mix_Music* music, char path[]); - -#endif // AUDIO_H diff --git a/Pontu/include/engine/AudioHandler.h b/Pontu/include/engine/AudioHandler.h new file mode 100644 index 0000000..cf64ba5 --- /dev/null +++ b/Pontu/include/engine/AudioHandler.h @@ -0,0 +1,126 @@ +/** + * \file AudioHandler.h + * \brief Audio management (music and sound effects) + * \author Théotime Maillarbaux + * \date 13/12/2021 + */ + +#ifndef AUDIO_H +#define AUDIO_H + +#include +#include +#include +#include + +/** + * Macro used to generate enums elements and paths for musics. + * It should take either #MACRO_MUSIC_ENUM_GEN(E) or #MACRO_TO_MUSIC_PATH(P) + * as parameter. + * + * If new audios are added to the program, they should be added here. + * \sa #MACRO_FOR_ALL_SFX(E) + */ +#define MACRO_FOR_ALL_MUSICS(M) \ + M(base_tardi) \ + M(testMus) + +/** + * Macro used to generate enums elements and paths for sound effects. + * It works the same way as #MACRO_FOR_ALL_MUSICS(M). + * \sa #MACRO_FOR_ALL_MUSICS(M) + */ +#define MACRO_FOR_ALL_SFX(M) \ + M(testClick) + +/** + * Macro used to generate the entries for the musics in #EnumAudios. + * It should be used in #MACRO_FOR_ALL_MUSICS(M) as a parameter. + * Each entry of #MACRO_FOR_ALL_MUSICS(M) will be converted as MUSIC_name. + * \sa #MACRO_SFX_ENUM_GEN(E) + */ +#define MACRO_MUSIC_ENUM_GEN(E) MUSIC_##E, + +/** + * Macro used to generate the entries for the SFX in #EnumAudios. + * It works the same way as #MACRO_MUSIC_ENUM_GEN(E), except the entries start with SFX_ + * instead of MUSIC_. + * \sa #MACRO_MUSIC_ENUM_GEN(E). + */ +#define MACRO_SFX_ENUM_GEN(E) SFX_##E, + +/** + * Macro used to generate the paths to the musics. + * It should be used in #MACRO_FOR_ALL_MUSICS(M) as a parameter. + * Each entry of #MACRO_FOR_ALL_MUSICS(M) will be converted as rsrc/music/name.mp3. + * \sa #MACRO_TO_SFX_PATH(P) + */ +#define MACRO_TO_MUSIC_PATH(P) "rsrc/music/"#P".mp3", + +/** + * Macro used to generate the paths to the SFX. + * It works the same way as #MACRO_TO_MUSIC_PATH(P), + * except the entries are converted to rsrc/sfx/name.wav. + * \sa MACRO_TO_MUSIC_PATH(P) + */ +#define MACRO_TO_SFX_PATH(P) "rsrc/sfx/"#P".wav", + +/** + * \enum EnumAudios + * \brief Lists audios used in the program. + */ +typedef enum { + MACRO_FOR_ALL_MUSICS(MACRO_MUSIC_ENUM_GEN) + NB_MUSIC_DEFINED, ///< Index of this entry == number of musics + MACRO_FOR_ALL_SFX(MACRO_SFX_ENUM_GEN) + NB_AUDIO_DEFINED ///< Index of this entry == number of audios + 1 +} EnumAudios; + +/** + * \struct AudioHandler + * \brief A struct to store and handle all audios. + */ +typedef struct { + bool canPlayAudio; ///< true if audio could be initialized, else false. It shouldn't be changed manually. + Mix_Music* musics[NB_MUSIC_DEFINED]; ///< Paths to the musics + Mix_Chunk* sfx[NB_AUDIO_DEFINED - NB_MUSIC_DEFINED - 1]; ///< Paths to the SFX +} AudioHandler; + +/** + * \brief Initializes the audio and creates a new AudioHandler. + * \param[in] volMusic Volume of the music + * \param[in] volSFX Volume of the sound effects. + * \return A new AudioHandler. + * \warning The program won't know if opening the audio device and the files failed. + */ +AudioHandler newAudioHandler(int volMusic, int volSFX); + +/** + * \brief Changes volume for the SFX. + * \param[in] volSFX The new volume for the SFX. + */ +void changeSFXVol(int volSFX); + +/** + * \brief Frees the music and SFX, and un-initializes the audio. + * \param[in,out] audioHandler A pointer to the AudioHandler to be freed. + */ +void freeAudioHandler(AudioHandler audioHandler); + +/** + * \brief Plays a music. If another music is currently playing, the previous one will fade out. + * \param[in] music The music to be played. Should be a value of #EnumAudios starting with MUSIC_. + * \param[in] audioHandler The AudioHandler used to store the musics. + */ +void playMusic(EnumAudios music, AudioHandler audioHandler); + +/** + * \brief Plays a sound effect. + * \param[in] sfx The SFX to be played. Should be a value of #EnumAudios starting with SFX_. + * \param[in] channel The channel the SFX should be played on. + * \param[in] audioHandler The AudioHandler used to store the SFX. + */ +void playSFX(EnumAudios sfx, int channel, AudioHandler audioHandler); + + +#endif // AUDIO_H diff --git a/Pontu/rsrc/sfx/testClick.wav b/Pontu/rsrc/sfx/testClick.wav new file mode 100644 index 0000000000000000000000000000000000000000..9a556e5d1574198a8a142ccca9990f7fafb9eab7 GIT binary patch literal 316112 zcmeFa2YVIO_x?R|5}MK!yI8@B{cG=nqF@C@5m6~h@4XW`Nk}8TC#3gYN$9%~IL>R9Hn{H=~$>D}**S9f&a;J<(WG4LM)|1t0%1OGAb9|Qj}@E-&JG4LM) z|1t0%1OGAb9|QkCV&Id(QwHzb;BS50;&)%?n?AmF`b}MKe5&0at%Cd}`L1g^^4AmR z=l=fBxw_vjX}a|EtJc}SXSW)9vA)Ar&ys73FTL*8kSm|PXWY%VKjwB@*S+84d2bwi zv2?(UKAk>&YhdlD0YmzaJMii33CD+jGdXJ1vs3zynl*Lc=ntk`IWlC@y(8=iw+wx_ zZ*1=c_jkSZ)^GQ1xu<+~+%pY3v%Hz>SG^NAyZl^m&bk9xmmhh!JnGmRX|1*$FM4HL z`KDQ0&mZo*=Cf~atKM@ww0PRS{M?$x^y(Yh{;}(-Gaa71=hYW# zdfYvvru*_i`(N8L^2rZkr~dlEw-c-0%^R8V(zyP|o}TgMu;<_Gv$Ff{UT2<(>2d$_ zGhS$Xz0d2NhVB1o-bbf~JFoShx}?v&uRs3mo~K9LJM-cDF7)%3ZybN%%0e&LmgIes z6%*g8d~b5qp`UlY>pOC^=iPUlo7r<<+g7h0?9l1aJ$|2Gvh&0fzuvs%x9#^9^(cNQ zV`!9L;{L!(Vuyv#PP{$+Vrk*p>v!}&G5*&joj$teng^CYw&V50$1e^)`PhmHcRu^= zgm<4jIm+*$Q?G1&Z2ye`44bvX`zrR8t=rjh{qOdZd#`#T>`Yz1lU9 z9*Rp!t4j`fJ)?72aiY7bU+Vac_mp1!NAND|mI-Hm?$xJrw;>0fzGe8{H^#sJ^&272 z4(xvTsukS^{c`^$XVxd4=$`x2{%&axZ>%W#XhYQQ+56UC$UJq)9iEO4ymt7$+lQ}u z<(A3!4(K)J)6CG~&(;SYL#*uKquWj|lhY45gH7v8Jc{C&%s_YeKJ_1Qyhe>nf0 z$A8Y51-AyaX#dRNE1!MsrrQ_vZgGF@lV9C4`Q~n2YJE?4y6bRuQ_s~$zfH>hY3B=B zjScZ-Zq3A0STiN=%?t^dX_WJh!4Sr?s)8UV7esa+@ zmG^#oZrn9*eAUmoZu>nai#LrwR=;P_;T1p5{-(Eoz@HUeR<>^Ubox!ZU*7S+t`|Rj zyy<@f9!b4s{~ZuKiV>8*k{-en!`gS9Q5{!nN(L9((0WEw5=i=uB^G{*RBIx&7GHC&wMT z_UDuzuR8JR-`h?P_v?S*_l`Awmt9+YY3#LwI;^^UZ2ORwSG2kQ{3a{lWahb~@BRLW z`>ywI5x+chD*x{f|GLe7{o>$u=RGf6`NAcsSG8z=?y{72ueM&*rmgo9zx+Q=HYJ_t zeAe%T-`_`1E<abGM(H>Dl7VXxr1jbEoJ_{_b>LyBQtA+y2(_=hkK3*?uSg{-5vn zQ&*pVv zo72ypJAV3?e@2{n;oQ2Wgo_vao^qWwWqyyh-Pa=glA;!GwRq3}HfN|^K1V8`uv9%mR~&K#`+3doVCi@)cbkcJkerp%bqQ|dO|$2y&3M$XJ7R_bmp$6 zV`sWGZ9l)zd$+ULY3aAfI^MF#^LXn@|BkKhYw?<2s^8=gPc~UbKBneKVXM zR)U-F8DO9A8|Ino*U7KJUgFvAq`J{fGkhH`w(*U-7~uP~smd4ao9bL^U1QzonQKRS z?(lT>yx=)y#oDhqL#>y*!`yC7USI#F7k&G^gM9yU?{t^h6Rc3rW_!QqZNI5@56>EB zul2n*-M!1(%DvdM&ROi;?VR_Wber6nR$u#3d$|3Zz0dmHKJGT!E#0~H?al-|*)-gB7zSTZ%FSE{CKRY$n6V6pun6t*c$6ab|ah|nK`)q5t^N6+2?P8sD zzp-{YtKHG=&F*10)V|zJ_V_zpY|EMNKI9gp0QW@60F;tJyw9T-A;0ntxMf{tHNz(KVn`_sdyM6^=eRL;tuxt*bgr;!;N}bGOY2^zwP&Gw(#~{O*k8NH>^|-f zc7I=uJJY$(9qPu}@4Bz~ywm&1N)To zjPwf1_{NBf2<7V5Rx;KJWQ9)?fBlP5`lBTQ4~stfTIuo=>fBJ)PWHp6lEYyS4R+wb@x^ zwRgN$7iWR}sC$_`#O>sH%8j=>xntZm$XjhKv>&z(drrEEo^RZn?7Q8y)=f?y%kdp? z`@4Tz%kj%r*K2Qfvh5Cx#sc4u&ZADIdzrJ}p6Z;mhq(tldG2U?9Jtmvw^9hH)cx6>=DuXV;U>CoyPvzM z?$1_V_qZp-{o7vZ4zS*L%d8u%0_&VF-frppl~^4ChhJImS~;-gbxv55V7IMjhFk7= z*LlzW%{kyKwcc{Z+Vh>eJgwa)?LBss^`hS!&J%uZeXn}ncb+7YSNQt6PddY$(e}08 zPA#0KC;gB4F88FnkGLM|7vF>KDd!gJR(p@T&hIt%2hVL*M^C=>x^=<2-n!CRXTRqg zX#daY=V{|y?w{*U^iQz9COiFN+4f>9gHhex4P-m**0?_3TC1&Z9#ItHbg_cH;dWkA zm|f<(*WPV?Y&~tiZ*8!?u=1=;o}=ywzY%VXo9Q0+I@Yb;dpy54jj=-n4%3&Gnq~-qPajrY-(2TwLbq=6%@x$+yo}kNrVTcl&W?soy2; zV81Tbr;N}zXRCF)HP=nHd~OfB+Ku$Q2y9?VY!qZuEWYyw+51E%AD+{mxMLb?YJf8GDuIj5Wn?yFJW*ls(te z*FNjqU|;5a)eZ8-J2~z)_d{#7dz)42%XfSG>c|(%tiINJo_1CX|1;L~7N@PXEq-x^ zdb)c9-A|i(`X2TA`QnHlL>Z@a&f>m)g^xz&!(zTXb@3-*NgJ?(ei zZtZ`i8{?njE%STI+ta?*Nwx2^8|^-xwN{0-$NkKmVm)o8+ONBdtr@;kPMI^xd%-$& z@w6Mz^qjA+Q|BGzwsg*tTSj`9_}$#J-2W%vM87fi8+LEcgVr;iKio5(Y4$DlpZ0yu z7U#5YgZE?iu=gJ8TPMhBWiPVN+KY)#+ZkYW@wIZl_I~g9TVJ_dJ)gT@SR3u%yd6Eg zFFfP6yAbT0xcG%N()r16o~Nt-4W4iPa@_aeKixgz{@_-+@$Pyz-z{^eyA|$ivgs#o zu{*%6W~5ZPFS}Xp2sgzY;ug6BiHi|#k~_i8a3{Je-8pWyJI*boeXP6CO>k#%K9;t# zkvPkZb{D(L$uV*6TsP8P!nJ9%9l<^Tnd8y>2{MAX6G6l+pzTUGoIWw`GOh-@p%YT8G+^BK9bkw2XMd?YTS&1CK`cca*nI1Wet60SsZ zFO~CRu%sa~!JWswCE%V3u5s8u*3AK59UPQ0;|On>I~6_#xofz#m@A8r6@~qU@DK-{ z2seytE3oNPcp3@T04!Kan`Le}{Z`R70r`ov&4Pzm&hybz39l7wTitj5tBYNd}>1^g^eUI7hr!pdLux*l&h8aAp^Z3Xpqbm{Ek6~7>mXN zaylGMg2NdwupIs-xsB+`0#l6fG$WCLoP<5AyT5E`C}k zvyf4MZ|d<;-M>7CVR<+$qTwl))&;~*HJI~|mu7GUfnX%DKNr3N*w4W)VMb3P*cE@P zz!HzHC~yUVOi>$-tW@lYMZRRO15XXsG!W~B@RG&7GW5jpvl1E6^iIICB79YVo(S`k zK!3&b4El}2@&F^R5*eB3&LI93HS@7Pl>I7WLx^dYimY^W#DOEyU69ePXwE)XBuI6E@p*VY$d&Y@C^E7(KiJt(vyV*#X=Q$vyc(W zofPDyag>BTscdod6~~%?O5r%4{+0MQhrZd!sDr->&V?}=l*#CjujA>Pg`60!CV{(v zwyTh(c*&=4Df>*$g}(rqS+p02Ra~zGkNhdUC7c(6O>voz{~|${K)-Bc6cFRPh|?l$ zNWlwba3)Ukusa`%GlAWG*r)0_u^ zZK1(j!d~(V=$8#Hjj?LRN~&Qjp7xK$y#h0Qa(XLI@Z^Fym$vz|QwB&tdbW|X44mPxmdrij2nNSOBQpb?wfMCHK5E$4phxzW zfVmKP8t>(Xw?M8bu2&KVT34hXCj<{AgD=Y9&%^#w?A7%gvg{=^oMYJzutAdMMd|hK~magTj|7Ng{G(IT-TQf&| z42jNC_|Am~aZ`q@I51}#M2hwVY)OFYrN~%_{2<~q92_h0kDe118?r;O75lIL2ZZ zZ-dE!k*0kCEySdB{!RRDu!?QQ}&c& zr{WDkme$6nPD~^g`ZY?pp8h@@P23FI*0$Yl}oJSAYT#jAhyb^guV6T9q6881~ za!?Hp*`9~ZtB_s+wtVjAqNm98YmWU2`ZwDso05qQ%}H8&DnE%^d0{13qd3-#TxKkh zJjJ)J<%6lr@RwyU)u3-Je3uvt)4->3pN-B0+J=HCjpI0Yi9k;h_cFMf!IdJAMdK&QQXI<0Q1phd zk1@Vm4?g)e7h7agIlOJc<~sDQroH%C1v0gcI$Nl_gE@H*>x_f! zcQNN3WFFj#tOA2AomLs>$fidzn)0w)8sCQH_Y^#u!gr-EIAlUF)$#E^$G>)n{&L9TL;VaFc$>uBxK9&;G^T8fRTRm50!CM^i zk~m-P?q#mp$6E1Q*66!A-wcj=qbD6~+3*{SKIPX!^b~-+jNh6?i$SQ-D-S7pWQp>h z=CGCQQ|T8)+YB%%f@DDjqizi?D!Hp1q)5ofGW$gKvFOwI4rdI6u@A&wONoaF&Xw~bj1Tu2%uC3-iSUpPf+YGzg1b4! z>d~h>S&g<#v?ZZs6~|@pC9X9;Z8f$mM<)NTf+cI&8o;p{9Tmm`<)da#6Sleu3I0Qcy z!*x0g$&)$!&H%kyMq{^R1cOuKRs84CPBEN?4bfZ=#CO3a#uSHp@n;1*CiDx>HFD_0kMe0+Lkr zg?J;=aF;-AEkkE8_D7;&1v(?>tMRQ|r+Fln>#4+21llxb6dnUUzz+^4xM5^l6!lzr7ibptYrz^-hn_(`E% z0@AX$s$5yg{anuD;9Pknn)p+kMj>Y<*Mj)pgoW%SMYEz<`oCze;F{*W0{TVKCl(HZ zP3)A?E*bn9(GAFKz&HB5b`!C(6?}Vmp4vm(&EVG<(~3YjNV#6|ulSQ~8}Q{OWNVzR z=UN^2E08Pn1=yna+{*o0^aw{0K3fg`^;};Ep0&o76!?-i6w!@nsWxnBE-YYc&id_gz;se93(JYI!NtvgaV%QgO2l;onP z7C)APP2*m3TZZwF?r9!f3l|5NYj?o+2IK!&BqYF*@_3?QME+@@Z#lLV(@&YL0*muG zuS0q^SBkk-jf?}>vKO3<21_Xt*CRzX*BFndu-7c4k)vFlMoWz^<*qHn`3C&E0gPHN z)tVmKXB*6#a~j~a!FWjXMlMnku^}9vXl*M?l@$uXsw`Vc3&mL?C^QettI95^hONDf z&0Y9&JLk&E@}J^Zb`^t2E3MUVza9DOiS@(qeSn;Kl=$2Sj#@a{1Wv8Hc9R1e&|hU3 zSDeLiPkFpKdX;~34R7*7B^ET$U!R|q&^7}JoA|Aazs~R?o{PY{!SF6WWWi`MHWYEB z_^vU$)nlK~YLulRHyeps)nsxkezZ!fqlZ|?LxLE}0r5&0TZz{Lu`CG;bxD@vHUGZnJ4_)A&`cN+a*Y&^N@y+g=#0M27sW z`D-g!zaSp>nmJv4n)9vlw(`ejuqqF4$FB9@tArzAt-^A}x}FBAxn2XBMtr-?#E|A+ ztvB?{w2JF$ABV1Z`ot2yTI(dR*ZimKTtEyJa4#CHtGK2yT@Au~({C64-vv*5k)d@{ zBYoDOrw$KQ(oz!2!J>X^*s5Vj>j!y$J)G^Jt=4*L;a1tCl>3@LG_sTzx8bWJ@URnH z4aig*Jqf5!9nvLFjMZVI=I(m5WpS;9-y5()zOTb48V4J&dox_EG4Uj;H18l%sNVX%3WsmDd}Psnu?p@j@x>WltK{oB3Xgeyxk_txHCbl)w9N80X^hT>DBsFvwZ`{`ZS@QUTUL=P-avXRBl>NY;6F;Zt!XCb^yi{ z!#jzEGJcBqQJ&mRUOPlyKgj)E@V6N$$^+HhF9n6xhFg%c7G5@UEMHfHO}S~6@l&0_ zn`flvaW9$n(ag(>*<^v%5bJ1LMvqL;Mr%I6Tz-ndMjkKsjhVpqV(V{g#1p7qp=$WDt#uOK2 zTo30w2ANTCqvv#GwQLZG_Xac;a-{eX4q?ovpRz|Km~&{S=+(5e!}z%zhBS*Q7jDAx?Tn)x zY?`aqb4_!V=5YCbC)cWxRR=Py!-aD%+P0!+7d&jH{RYEa5xSe#6C2Q}6|H7Ot&O)D zz4^!~;#{Lk&*nKCD|Ye>F0JF&Vx^)?`B3xBZZ?fTjXjMp&1bvd>~mt}3;eQ!F}#}o z8;ODD{`#yk51Co!p5nH`uvJ0SDZ6TQQO!>=Ei_v43{Ej8MykQtKntz?~ zJu>;5FO#=+8LY`*P^Q+}NQ`bU3~PnF#au6>eC?;fwWY!{GGiNEi^t@Gp6h%iS66EtzTFAb9tk+B{jx^_KemH`^51~(ab1zaf zt8Aoo715*_PyA{1REF*<`YEF;UKB?gIooJ_m*jrK_}N2#IS4m3v{mFQPL!7p!POV+ zW!nb&tTukgLb`mGfq%tYDg7!;KgFD~k+N15SCmJTN#*CQ_;EM9Xsvbt+?vY{Vu#l2 zTF)KEo_$i)*1_Be>QD0Oq{GXQCtaksmN{~S2bv=p=~*=78-=>;Hv=(*3&|x zPOBbqS;bE!?5rV*i@{%j9g0D%S>wPG1uo5H*+#!2M^UBNuA_&f=(Crd=oTLvX{T|b z2$4SJYWaGN;kwai$fuWlp^+<2cCb$QhV66oZb80Aobt9-a^)NgT^ZW5K@Q;5 zc9iclW@6zv5xe8jExpQz#h}dOema}{sdb4mrDDAVep6|$`MiRwT4yWc$sSoRmc?5R z_9UAz{SCf5Wb&Y5xtYD4v=qKQ|BjRIv40Q9BuR6r@|}FCxoMN}R0hZ+8Pf^ij6-g$ z`z4!vz5xuHKQ!~Kqiqe=Deh~)x{3RHutj5ktKlV$J{ep~hM5AcY1}D~ma{J~+--s- ztyMPR@oJ8u(WF^eQMHz98cS8QZ$w@VI;-%IR_I&Mvl0Bt@!QNe(%h)IT63&oHIL&W zj?-x?Un%le(^HzaV(mJRZ9$91u6`=%(MUfmwv9yL3&2#lZ_*-jw zXgrl7EtwnZrDSaxGAr5Sh2{}dNNj0+saapMtTOdB zqg`C@CT@0vcQcr_;x}dHHQ-e)759phy(Wk0ek^$OoS}8-8pB*3DC+ zk-r`diU=`P!xgQF>WyDDFE!Gx)G%4Y?@uGM>XyQ<7phBZbj4N|$ZM}>8>bHgc7sx$~O`6A)3%8)-YhrsZ{@e;$ zWx6f+V>j*f$%CRpV?>N@MY2}2J7HaG8{OBsTx*phW{iZhR}Rpcuo5}VtK)63qcNfE zzlHu9YwNIIPZ9fRyMeZujO2K%P&U`>r8pEF2GJUCBO0{Y-vU}aJ+0%OY*=OV97Nw*?r)@}a>x(F{t;s6 zXP<#%ATt^|YwL4?Ae19I%(|YkZ}s)rionr%|kNU&E1dVgpBOz_ihDTn_JAS5#wT zb4*s!LYwB)ov^Iuo!#KodZ`hM*KkkSMtM|OxE>7hn4VC1wTv@GNjbWj^Y(Ta&{}CP z`f8E78f}_68`%`$iW}t!wb_9LJuB{J)13G@*S4W$8}}8nb@UPTdirT*RSwp(^;ZBAxC4Pl-3&S@}r(0c7RE(G4iTFQ^Hk6l0Lms#*wA992L<=ku2-i7&bN8k*p}F1#=>2`LxZ1Yprf_SQ|vZ zNrHO<9@fL&9?8CMr=#_5|9r)N@A#k*64xUrUXT6wy18TL{7ej`Vqs#?cqp{u!KXG<}QtUCrGh?rF?v zF46jEFD*ZV)gNGYD{UIFI~&^yLEN0f_Lx}GXxI3wrj_2;$V0wjPkCH(X|fq>M;LR5 z3<|B&o98&?b*(**5kJ4MUijYlPh+)tOe$L{vnb;0@s?IRMO-OD|3<9eLqv%Gedt_o z;;6*5&`2uhNYAdjiRWFk+X};CU715;YAsR@qDSkdU0m0b$~LUllZj$(1FePdnu*jXaG%F`NW)Wt0RYRv>!^+j`pSc}97*xm_cu3Sd-g;4G{tp{0mB_iCMKlv`$C~xnUO-!oy#Ef}?W*iP>a$Vz5RE7vQ>ZbpJKLGx%>4IAQGGwyLba>%sP zif}j5_amtcOu5L8cTbt|m4k1ykXJzaTCO*8+{ie|a~-&8XVtlvSO?r|tiA3X*0=8C z)@im*)~nW)ymfZFwZgjBinZRfO0BV0trcwTw=yZt7h^rl8%6`|wbpRnnVM+dU@x}s zv9o#iW|KXHw-Tq@tvoC2uAUhCbx)Q(*i&x@d)Bf2WS4r5*=sz1*n2&;=ZL3`XQ$_W z&q2@Ko?V`YJ->QxVY}XQ!E>$W62EIb_xQc;S?0IYn?UYz1{o6AF+0ye?D#fWYY&7pZ7a|&528A-I{x4$UPHp z9{Jc`-G1qQ_v4jsEPpY6fPbIwKH2y|?5O>NdyE_P>7ohChaa8XbJY7&t{)XJ^_tN` zrtBXvXj1X;MdLpja(7?<-rwAR|E=$SfBE+FmBSMcH^$~H%5IyvINra)KO}73cUhkv zK2dhy=#aE+TMrer+!na$o~_k~k2Yp~d$_9l_(R20_C1lizR{DvJax;e>Y!n(PKEqf z`a=9|>&vqecf3MgJb1zUjUFOw)bwM`CU-KK9*> z{r{}JrmfsLFM_s>mZSVZ` z-IK{%j_g=jbfEa%jH;;b67~chjJYHH{>0DHYDUspeIOeGl zSAWp;#UH+Lu3sJbk|>eqx+WSk5AHZgWpuhg>}tkU??Z|;h|x!ak-Ubl39mKp)` zhPQh2ngOHV?DJg59(h-fzvsadS6-UBA?VkQx%r=sPdl=4b-{1??r($pS zb@=(!Z|`e8eD5poO`bbo!QFGgu zZ*H@{Z2QB+?+5!WKXd0TU0eM8q;+LbuZFHazWmm`HIKj5ZQ)JUt=Bs>mwS)2@?N>- z`S05ow%n7Q`|;X-l@;}#-P_lFf9kgVB^~Df64z~j-Q(%Hs~Vo&)V1yZ`rq~U^$lJ6 zIU}w-dwih%($)u0wyeMM%fDCm+#SB_kKNDyQg=A8&G_GI@7&(1+jApty0X`=59GWU z`NZE3)jl@w>XF@&&wqS%@UcMa@m(Rm{l0bb@$UO8zbgCb?(Y)(I{)?XEqhzt_xSW1 z`t>NkH}mW%eIdR!jr@wO#A4>Y|#J256vp28%JaEsV&%?jH z_UOwOH=q3F@>D15wox75ywBUYTerctxShZ0d`s&mFWdCz=XU$!qyGB%K=4mf4!r;E zsjvHgfB27?zdg}%>cvynmbba@j(e{D`RQG*!Eu6t=-vMZn^TvO{G^ayt1j&<`yqrdj3o|>(ozQ zoVn!q{l7hae8evYetP`Z&3_O7W3Ol2g@_I}`#p7a)g}9{exQB7%lfu!(Q;7hap!}q zfZy7k@9^WUKRiFYdMfqAZNGcY{Q6gw_36cD+b;E#bQ;&D?UfhWR&>m2o73vI*4KI0 zct-qrskipmk7vC%{?gC=sxRBvCiL=q+74=;f9d-zUuxax z?cz7(On2X&-$$Om^7oNvqyM_%+_e`kzj&8li4%9p`+ncIf3Vfo_EwuO+uYsyw7u0o z>cUR3iT*MzAoZWRM`doce-Nk8s?cF=tboYDZ((Wzl+T7D(xBn@>cFx;& z-MPKK2mcPb_~oA+E7Vl}y%%|xKgsj1^;pY~JfW>#^qBtKY&z@|oS)@;>U@Q_ z_r;dJDZb%O3v0UjhNp|Y!0!gn)qa~jlkDd`nY?$O+%(76jXDC0FD~?rY0C7?_lhBi`qI(t6(eiu+*GdEW=r2&nT8^R;n1x)0g?tVcb;yxn?< z-<|d)o>bl=-_84~w|dVxr<%%~sou5D5#Ltk)OW0oc57y{20O@FXY(Ea?`6NnyZ^6P zoxML$Bj7pb5#N62J^rRP&>ChPwm#u~e#bgvb+XsHo$QmoPu!N?E1W01SGfayBdjZ& zhpa!H=iNeUp4-6_VU4pdwf}OjyY8uL z1?;h=xx20J9gqEqGuSHgJ#T&Qd(QgJw~2SoJ6VI=-`)GI*46@RJMW5D+h015+8Msx zR(sz9tHw9mUF>^?S^*m^-ie|@LxugO^`%wiMDq^*Id`~|=kiXml|-F_uYAYc*PP3( zY}c}QTC_@>B=;4!B`d6cyn{W;^Skd)-cg=H`%rhDRcDo0o$X`1|GUf$wtjG`tg+4( zYk=>2_dQ>gljJ<+-ryEnG43n&0p3Or!P@(*f9wtJ)t;8_WIM+s2l)6)rti=%FxwUU|&kGWS_Yn>%ll>4H++U;#0a6YkI=V6`=_-j*E zDs$kYtMh@?!oAvl%Gzze<&L2q!MoNt$8qBwkCpEF|8e$xZk_#{ zFUuY5+`^mXQ|x=)j(%5LBRwJ3Z`2(4opd#JV6Q{V>KyPWCnBx zx~_8{v4&b#TSIv#{|CE^waKn=hFIHtKe@L#K30H!p8Kpq&!5gKp1+*oy#4*UwaQs+ z{o^}kwQ=6J+q-{SPr5(Zm$?&oqr1QRv$Mesvfi;bp~uAkk)jkj7*%ixr6 zwfnHU*Ba{HYsb4g?LudY?epDgCHoFLH-N?QrP%|WT5ut)u@zR`A*cdK=$^Mt*d7`u;(7{{&Oom!&)5H%b6y0bk`P>*Z5zb72mbJ2U1=OyPM_ly(h`=8t0dCqy(zR|nM|6J3b zetUdh;@i7;9{<|c$^F$i>7KLl-PwM3xP_jx?pM62|0K05T;BRmvS0K)ZeQWt={fD& z=Qr2A-G7Lc>$%C^!TbJ0tflT2tFt={8xHcnZx?(KRtH}%tI(P3w6qp@huOtVgBg<+ zbqjb4-+Ibg&gyxlwZy|;FZ%W5|LLc@r@b4k$GqR$t-SZ!vz>eF{?=Kyo9Am^t>;tU zXPvBUJENQ{>>Hey{7yL6`<->4 zw{olqXC>9L`|`&8L25(&wYpHDDp}NHqE5}Zwa>^F#7VA6S zOyA%;=1jfl_=Y!i@@;lLXd;HaU%92uTkg$P3%iNh1)Hr0{Fd04`~T1G>ABke-ucYwbSh zU+I0vudlbAeTg&Jw(U9gm7Zl*1a(yEu=+YO|D$dnYrOA(lk5!k?zF6?-R``m9=?a2 zHB?maILCaWtx?{m{JJ&W?|;B|hu_2Yb#_b7rItf=hRl-s}h9<#2a0>NkA&zvuKhB{_fxk*-#{k``Kd)S5B-Fq&~cTQg{ zvwAskeh+vK`W?1I`~uut8SAsjrTT09nLN?W=Lvft$G!Qaz6YN$Jk0syyjgHRfA!a! zH&1);DbN$N?8W)(?B8IF3}mM1OS>N2|B$!L-llzT{yOk2-pJ_3+rJ<27VjwT^`q^_ zZ2kD3(^q(-^g|-7H&2*Paqkn}A|J+^r-Rs!;w|M*IR20~rblo#jJM~<@iPd0j4a+i zpW*f)YrO~BUhMnvm!O0AtNMQ2>yO@7!T&sM`*8j)I$lNBVAEzUm`3v+bhEC3w0R3G zFY?ycJG6P9Z74b69sUC4RsMSKWyZ`);Cqrby}TX@q#n$t7f*xrP4M-Fmp*K-g1;a5Ug6%eaQzfd{r7PH zeejLM#&>A*HlNGR0vi_=AzN+~D{a-EZ;f!DGZ)U*rsgi~iU#1dNKe(OCBZ z7~bK|GBc96;C?W2WKR!b=PhK6WB(HR-{SfZm>U4*_vq7)|8aYc z?M1kK3*KLb^XK4e7;WAK|5z}*kKaC}-vHv{b?oWKy$`WzFxXQgBL5Tmj>R7N|2^)%j{ja_-wy`IW9cN? zjHb;fF!n)XA29UC-y^^`gyXll_73Mmuy-Ksh9P$}e*A!*6F~Vc{WW%VXF7K#&~Jp{ zdX708!l!vJVEb$Qug}ZKcpv)*!dGAVOU@_wZWMin5&9?|Jxvt);Zjt55}diG#eh~6JJ6!!yp?+3-UboW#2;DiW}J*g&d8v zdE8rwZt)U^)Map$%lHTf?{ve(X!;Bx&iiBG81#Hd|F`ky8|HWh8UpD*4ZX8Ww9n@E z6l8wPSo;8!Lrs(i(r+Q#Y=e0yxQEkz1lR`CZYY??BVz>DM}TP%Sl&m!|A&a|Ao^w z2;PFxxg1$DX(zdJiAat0WE1bNl0(GzC-`nK+>F3>o|`xyj+O=Bnnu4MWTcX>m!oek zdK7O9v1u{-7SeVR?G!i5={1#~iD;V*#&~#Mf{hEfuD$_CpGn(bxClf4Lc{cAu8$>- zCL4REfKL930l$0}jGdAAS(xVI>t*PPrEdUorsJm|Y?}mg0q9x5y=h#XMY}NUng@2p z`U><-2bcN>WBXEgo{jEF{FV&)HHd4IXtR{|OTjCjsU53*{x|1s+Q{A!=K5lz>m&M% zWE+J1PvKAbMRJB49|W@x2HPTRn};s>B^EmtfMGt@#P@t`R(vf%hhioS8>K@s0>HHl zd7)g3WL$+IKZtvw$XP~z`6QP6iiL&rUjkwqku#d>A8>6f?PQDaDyAlyHjA)zv5A?@A#x?mQ0=uHY zxDp*P$X$d!aTAOj-4l=MLnSJ%jp3g1(pWa>8-uRt$R5x2k;wT7eV<~(Bw7S;X94(i zZv?h~VA@FT68bKJ*J$uZ;rD24UP7BFqeuLWG<=A+U^emFjA0CI27*i1hw`ca0QAYH z;zF@Dnr*U)gIHuP;5ZOnOTjQ3l-e(Z=LN*y9MCo6`UrWlZ9JGJayy4WDG}#{HF0S9vqXfLp&<- z1Nl9Zx$hmYk7q41kabmGco)9mw3!MwlaMD()6hGLc9W2&tTcxC@fVD3@>wKu zrqX&P_fm+(aBzsH71$GrZ7abt4Jot08N$5)^v^_tm{|@7i{VE$H0v2je{tN5ArhI( zz%~J7k?=-9Cev2+pT@CGM5khH9(IkR zZ?pen*o*5G=-2oOK+_B)Hn)=vlej+_ElZK7IG>L$<*0GkGzRRS8hx?ojzV`dZRhc` z1XfoXxnsCLh4v%aPp0o!(>Iy6Da27cZGynQ*zm17U=z7Nku%lo8DnBEg7Xk~5dKj1 z;yex;qYbZPnZJfHCupopVjIQ1@$_B*;(4?gMjT9I8_PBkF6B$%nMT`j$ec|7(O@6L zHOZb$KVhF{oNiJWD$Tf)_4=$ecTvQ_%08Vu2fmzhRR0{n%-uefW*HIDz?8%$gc zXDn*GDnf*ArD0_yasrJFbFfjIi>L9d4L{<4K>P8(fP?v;%QyKv={-Ir)7YP9+R5%f z@Cd&u!c8)W6@_6i5XiNKa5)Y+Lzur+qimSrHiecNlacVD@w$@M(eOAA%^~!eMql-u z!TA!dE;ri5ei%I#p)D9+D&kZHZz;W1!EPbfm(fdC$HR~2i)CD0NQ+stkdG##XEHnt z=6^ar#I^zOF&w_9({d_(R3mL9cqe1c3}i-Po5t}>{5OGnbC9_N?5cG(3Y$jo{4$Jf z3^GR{M+{8Gx1;Gf!>~J#mb2&=2Kp%U7Q;m*IkAMj{FKK&nSDAutw44F8UnC?F~1k# z*=cOb$YLW3j>2I;V?q8+qR&eB%LTJyC4zg+%m}$`Q5`|8gFc~+<|pN{6-ZiU>{tdS zRkE9pnPg%<2kfihH4@!1$X4D+gD2(7G~_BC6FFDSLU~O; zisdBwB$HoM*DwwIL2Q{|2||u|SL}p?eI?grmypO8>Ga8F>}6w{>KZOXUJz}?it^nG zu&t!O##a(P%w&t_T>2N$HVp4Arp*fEE#+r1*OqcWm7J9i|EhTx2S17&<&$u1iUwm5 zYl$+}TMf)JnY7J;zi9La87Yg9IM?7=Y!EF&dUHf9#M(t1E3;|_m<9XGz!HHi@oX9q zF>oAWIM>KjEXNw=l&O|snMO_mNEJDAK{o?!s=p|YWx`JiQscQ3iJl0qt4g89vEp35 zP<=(!z*C(x`83L44x{}-G^wJZDl5)1?Q-yM5k4y;Hj40*>M?4|18X8)QBBEsI8$9j z)w5G2!Em!hB1t-Yw*6#1cG2<1G4-;r!$Np;0E##QGm7d zP`$Dk!-wj;O*T?h4^p-8($Ery>}C995C@rtmjEQI{**q8n@0?4^ag@n)&ErMZ9IQr zF@!ugnYh%rTL9iEa5j$dJf3sqmQZ8}hnP|QJ5_;PjI1eabJ$eHQgt#DISS`zDRwU~ z*ivYhX#5*Yixo(bq)2208J1N?Qxz&z4>1T-suLN--3V-nqiq6q6rdv&e-@%I6HHb3 zIGy{dJE?kx=`fo^JPWI8A*v3dJQvTgYKE$&q~akBUz9LL@@T6XoCT(zYI>^w3}R>z zZN&3JxR}J4Qf)tRG!L5s;AlMOqxn0S(cqXwoXx?uIUEPjcP_`O=c#Ins)QG5B1M%K zD;e*qD<@p>h8xwon+JB)`V7X_m2j)7m67OC4Yb*8^T83sPb%n&L6?NbRKsl+7#1LF zIrriW??GG-rri`Ql3qog#!?tEW5K5Sl_}s9NBQ6uAEn@`U@L)#GVChE))c%dD^$O4 zfx#b$)+I<$jZoEAlus9OS7Tu@+|D#yW*Mw8pw0%Js_(_qdO2-Xk5%@B@T2GsGPb2~ zPjxEek-G{!tApC82dC ztwYhgf_)VDVz?rWGuc!pRy9`(U{Yt{hNnz4%j-FCmu2`3p{HUyn)a$n*_RYN_Vlu5F&@Tx|NK#$LWONn5rs~d?l9yJS+%%ImihI=|n`XFBEk|ie zg2Oy)DFa`I;dueqmLq32Iu_x_6=+eFP1TN6+=~y5oj}f&1Lxzz=D1NTr($6gzE7oJ z64zBvQGScSra*i&4klE|a0yc7S4FJyvFuYV!UV9ZreY>BQebq8SJmWy4{dLj`mpwLK!JZ8IrW+K2v|dTC zMKC-U|4Fy{V-0`7N9NijNFzQr$`Ao>g!dg;hckiY=->siy?hOqF%Q7iBC|#ZBd5 zMT@MT&0ow7N6#qM5Lzcj(pGI|z~@9_TY42QQ;GelV44PpOYynlPBk9`(4tz4$@H#d z%YrxgTe_Elbun!xfPW5n6<5*_&5vve1MyP0l0Oz9SMfX#9pk~GIVylY^0@e3!m+px z!aCKVjfVTtjMXXp?ci8s1an{fF2Lu@O)LthB2Mj-;kF#iX<$;FNsS=YPE{S=9P}!h zxCh@!pRFrjRrv7O5m)gV<}YSq+C#pW^-Z5l&U`KyiT*fyR#r~mU8C#s{W5v{tt zn$tq)uMriGJmm~=qMD1LXp@DJ97}FE+^I&fYFjE(D1y_ustVZ!T$P^{pUwFtj{B8AnIUZAM`KJQTR6l-7}hD;7Sl3_HY;hP%G6?N3D=c3 zB&!}qiiw#@lW&wIG!j(jQ#GiCHraSZSxYw5z<(vESD{1r#kTaR+OMhzt5R{MK^_8b z<+(I7TGghxqO4*;^@FueR|T>ZuB-lNyx}1lEA=dx#2u~IRLi-RSgs@%H-J-_KyyPB zcO#Ll%Fs!iDXvu?Sh`i~IL|Pr{Hkb5fo07Ps;{iIrRpFn!^qZH{Gt_1q=_Bzr`)T& zu6bso(XV>as^hHrU_RGpAZI?;7H~YxM3u&Xa;oZrYHd*jZ<@oSk*YQ4DkE3RDX2=?ewIl>ce7D z8Bg_}HU3niRIw8dieeNU@^Y(9JSZ;Z+roGti`3N>Tsf4Wp&x zuVCLi#+6xBi&*uj#hv0t`C<)rRG>2-DY5ic-Eqwt<=CY-R-IYpJbqc9OEiAJAlOU^gGsQ{~L25aq5kFI>| zu0l=&d(~D}&AKJv)ff>5js8@wY7W(SucBWqHaEgk2C~z+D!i*WEDcf>*Q687a6uZh} ziZIRjnMO_;67?jujXbM5=47km{>KSFSS|xJJ;X=7ewWW)QwFV@r z=6fdi5>4MQ`UYd)1m1R0=GR;<#$rGbY2r`MA*y9vjBHg!R0JqLDyGW7uNv6dSf~uB zQKDF`Lzm`*T4F#om2<%&{uDQB%sAEeCj{b&=G@uX53= ztTL7AZmSOX67(r&Yt+`kN(K^C|6Mh;1K>&{b0uuAom8`j)U)o`?ps>XU1R zRm7`;Yz54vf>%7L25~rSh?zK!^{JGqEXpG}TvNVXOfS_>*Zd=HKErR=V1MDYJnq9=M;!1VBm7n5}u?UW56IF}Z^vn=Wf6dui ziK$YY#zz$QG-g$YSCJ>LtNOC4CWjdI^gRI827~H+H_vjaPp(y5HZ8TPlTY*Lxr!~z zFf5;`I=wPU2>n&ZTX}yuc$N2((3FV;RWMYRQqEQNaDB&wvWCWla$J@1g1&7c8;q)z zEj^l->alMF^XO){l?|)7v+UpOtU0ZiGv$R^!>nrgix*{G)#udww2*u;)5Pp{;QUzi?N0!sB1dig77V&SUP~CTVU3}ItFQ|61>f|aP$s@{BS+o&SRd!uMB&ou+ zzP&{C%2nxFt7olhD(NrXYr(M*IjZ$6pDQl2&{0b7M(orWQ>}94D%IT9cRh$h)v{Lp zR=roP!8F1(M`{eD(_5$sk*)zZ>n=E&Q+H_3|tYk&Y_(wFQJzz+}9#mbzoJ+Sv9IvJ3j~MnyGT&Kvn(4 zQao~1D||UI5@A?U6bQ9)tLE3u%p3X+ff~b|DxBwGeZG;Yy7!9pA}p)~O9L@h%kg^p zti^iOEzd!-s=#YjQ|)-!r1gX%bx}X3 z4!A9_F z9OiL1mFx1bva~#}Y!wCiNLq+RJ=s)(VJ&#qf>Uu*$TdZ$zW1R4``5yQ>SQYitfj4V z$j@a+RYhg_L{T8$rK6#od--S;uX;{ehwM@!LE|oi7W%FN)#b0lhBctqv!<%P%9k-n zjR%3g1xOyzrvcUYQ8`Z7H1;$jDhl+>sM^}fcI8H&B2RIhgbu}KGWYbXrMsFpviMOQ z-sM=INPo>)stO%r=3=eM8quTJQvMJJ1;&?}$AjQtI)4{GhhxP?1b3V31~=InBRCS0o!G<=HUi5 zt#HbaqB$&@d$L2Zr|h9M)=qkB6`|_$*+|wX3d6o>ypyY%C z`fl*3PO|FHtKPmUEo;V6eLz*6jzX`V2=t8$$_^T9&ACGLZe_nV)rQpQQ(bV?&ep0# zwP`gHW9YGpbH%G>J&no|wq|}*SzdZlU|l)25NlNFIUSuV@T9&4L8C`fls&X=uEmd4 z+^I6MRDo8rMJ{{g@&?0=zJsKmEsq}JCJ}p*uub_wnN@Z9b2-*kY1j8M*{zIO1`=_oTJM@2RsAy*`3v!-KJSt~ z@tQ|ZeTRZ-ZzsTtVk(|{nuj!>Cab4``+wcgWrZ0I{Tmhub|$XazivQ?vh zF7K3&;7yn2u^LYgjpXP*Yt=~= z7S;UJT%+3m;;E1y*{AB58VO=m=w-jELu=NF1#u$xvDEcC80zHFei zYP%{QRnS9gRE^n2e6j6c46;Al$W_JojfM%0xG;lA8LWtY(wGbit#``#tMEI+R=E_$WX-Ty8<+GrO{gRYB?yxm@1&F)&HaEzQ62Djx*0!d%6}WiX)9?S2J_= zm;E32>}qDu7-{83lt_`HNQy>HwqtvkhWD-jQ~@ZU;Hu!g_omUnen0s(4^Gv+b>Dn5 zBO@c8cp~15OlKw7r}O`5?f*-d`(KioR*lHk{w^8+->(1n^e;||zIHyD zMPg&CvVJyZPq#lz5^>LZvzPx-TW53F_x&gJ^XtaLYVEqn#_V7B7uok;WGD8Ecdo@h z)_yvlfvv2pZ!u;~@9nS3>qT2~yqCOodH>gbCd+@X)=$;&wJ-Sk z(Us|983{%d#cpANZqhj)htW;sLQty+>`RrhbpI_&|?cb#9smVVV(&JFlwSL|o} zuias9+v#to3Gg*L_uH}BsRTc%KfCjOKgpf$Aj5KAfb(bUD~>(bv0Fu8TUXZ%oMZL8 zz<$Wiz_6n+AGNpj-?fJScRusi=@;&cgREvc<-yL{G6|R^Zmn&!jrD6!=gBMWGltWA zzg;x`TkH3C-C{pZcm2`w!4o!{;wYB`aXX?dbfYWN{YF59-tD zO%t-&9UMl=b+?2cN1KOpYwR2LZ|TVn;dY&N3Ir_saijmkK;%vJu{uee3Su{O*1S5+ z*z+HDiKO;Jwb%MjhW(Ojb26^$&dG1ZI~@HtLj!EkX((%IhZWiZoY&Y>l=V4p#<>EU z!<$`M!iwP=|2$@5FMX?TANpU{iyiZ)ozm@FtOwHCQ~ig{fNkMe^v&;o+ls(Z81}Q~ zV5i>?oA2A*%O9Mm;4Fo=x}Wbj3&2kP6SC6rZ~Es<1X|rW){fUWVL%jSkN-X0{@2#$ zFB@aR8LXdOt#3ZZhOPY1?2%>vT|RGrd3g(a;x}-}9`S$EXZAe*`OvaC^Dw&EGWxBEyI;*pL=V(rce2fz5agKJ$3?h z^1#n(35D!W``iB6pB(0HNL!!v_k@i15aM)Staxf0D+WY9R`mvEAF*E33BezJ0jApWf|t&(FnS`4A6~JJ|twI(5qK zw{TaiT$P@AsXb1`IWci%*CCYMzu<`owlVzJ-`sI0wzH`#eA&L&*o{5@?2$it%V%RG z`rMQy!kmR{bWb*9Z)^L)%JbGYz8u6}?POb3pKH?tnVh>}Pg!S)U{$MIGkZwFRk;K2 zw9By-`{#P#-M>l;bS(D}YuJiCJ4GCJIhRdtPxd|CW$#4sz`pLAnv*>eojPX6NIdSH zWa5j?SUQ|Ooe8jIjE1p%SPQuQFZG4L$wBS-CC<3dxleouYS@+2im@3P>iqDIzb%vb z+eU^VqK=)?-ySo!<0rk_XU?e@_VNCtzC|)S<@N4nZNdoq??`kt0xSsjTi<_(EB&|b`9W(hzkpu!!Tz0n z;6A82d61|KADqACyplDw-q0#c+7?AV?+&&mir979{^ri>`ls~rzmiK_#qT~(8gcQb zUH|*8Im^KrI4qihn?{)dudKF!2aKM$K+Yih+T`hPO-2v|69rNVNzNzXXcnO1m#_}Xto`}M!8rEia*mVX?4fLDfBjk~oN+d(__%!yod{yzdpkh?v>vBZ6P!?EmtdKj z9WBMAU(}~u&5q($&z|`IoL#co|Iv9|e;JC2Ggb<6keroFmV@Q-Tv-JMBVUBGn|pPN z2o2#w*4&9FY~4P!Ru*pCjhkiLeVM*}Vjb+`IPKi*>LhB_6}?KWvx_w>@fV$!E87 z{sznDyVG3<`g=$7w$r53v-b3}x{>YZ55qoe^**W}er<1eXt1Sga-U6IS=AiH5{wJ( zPJ4#`ue`(DjSHFWp-mfhq1KNW2qWm%9{A!jj9=GPr%Y|{m8IL~l1`_6tm&6O?`Tb( z9O0CJ_j(oUNjUkJyHyVhIT>Fk-sY?_xINxydBHJ-h4oxZfGKJ7n0AEqAey1lJ; z)#uvobutD_!Da0g>y!&WwDb8`N1T8K?rem`u{!@)2K9q_bHW+FaB7JCV*jmC=@z2V zD(Tj=F8I~{VYl|{|5a(7WNhvPc2^<^SUyldsac`?>xBXuZ+q0*!yl_X- z?5j`n6pywwhVzzA6swm;9F4HxWTj0dc4R!(7hw~@(?JK2ZyAHp9vVa4$T zd!YYIQiwZj-`NR29C&{*JlfSg`_i_kY~R}{uI;Q>@o8^YjmabIAB#_0)m4qKvDGrB zGcMFjoJ|3R>__YzBG~RM7313P*x3}~g?-rZ1UO`0WWMCQALnd+P=7xfHgY6?-QGxA z*r}f9z*l>;+b4WOuXa|&3uPb}z^>81{lI^g#(zF^u`u-QOe*I^e80S2ZZG%oyzOY3 zSZE}>TRU|Grmz;L-`U?5rb1?H8d^h3_DL4I#>30mM#ggNWK2Vl-Kiwn&eryw=Jtc+ z5eXr;9r5kZ4|6a=75U5k?5w>Vp(NkRci*$LD4X+nxMi_h2UyITOLTP_yZ1 zO(Qu;fTf6nSe8g>zj}LAlR@;+Vo$bf&vQEgI|&6lU)%3J-G#f@?O26E7PB+?oI!%C z+VlF~YHtju6+x6A=G9I(vd^)|VxN36Z>Z(2B$AOGOrp8|){lLd`Jlc1Cmv$2^63O0 z=YWZy7|H(RUaV$tEIIcir5&hc`ajRUojQWysiv$MW3fNy*4Z_m#&^_+u4@R*u40;r#?1y zbwUc!lLd+^WN|Wd*R!g`TaEOL;>FHjJW0Ii)Sq~ z7EW-ab`W-b{Xu*4vTry0w4*;xU^Mo$p}uzwYjPF^PqFj49kC~-I-MD@zFCQH&KYvz zic=P>yLk6jYy16T!r#T4 zI}U{za`mNN_ce2K!Mf-2?E|g%k?z}_HQdR04jUT5Nl!-D-QSzX4Bu}y?9quKY6g(N`4CR4vPb-udUCIbBBqIFJH|TG zpHp1;9fT7b?5#chgRlIAZNn+C%~@XCYGp5PTuE!pX6tC_oFC^j8AI%Jq6@rXId2c2 zVl~_9^S8C8$yH$qNimD!dk$sTcp z6{A0RO4}l|xyx+qgATto^$x3@Pj9%d=(eL4MzG(yb4WxWo=jIxB7w*6wdViO3Wyy} zt@^aNil)Cv^FQvI*k*LukzMhf!SGhso!K;^y%k z8CIsXPtq&jvs$o;-kkq>I^QGj?t0dvY~^_RapHnq?nR(&{exs?rUJV@8Jt4ogbTHz z*?zG9UGtm$)@X19DEvpfBnhgf&4{!cV7)+TF(an9Q~lsqiz(=_DNB&)qHnOM%= z`o??blVVRJ?60rw^}ekZX6huApEkNk3n%4R&NFfz#_t*();i^e-glpQnirlG2*!K`sY__?PpC-s$h3#hCur( zbkELSokfB+{mJxqXv~7uI9gOjfE+oP6EOL@veaz>R zhi@L13!Nt0>3|k8uoxqicVOmC~{y(?DQ9RPdt!azTf=bN=7JX z-h4z{6vekC2Xw(utQ3^p(%m?z6H}b9@>yf!dE(yO&>!FD4-jQbSDaCU<2rE*zOa>j zed3&xO+)Hwt`nNC={gKsn~ab^WoO^`i#|^!EAF;0$uMMI`)QhT>KQ!wXn3m=Pxf`y z*;H_ompV(1&x+ieyUz(UdxzGnuvK9-tO8z|7oUNgo0CEO{xr#W9nG(=oyfVZzvWln z!DS4aO*x@xe{vqmHuu+uEX0{OJL>ndr1~h0|5KLh6cgTfaQNc8&F^oEmA}kh;AC?%sFu3jM*BwTCgIvm9sC{ z`in4*2RZ9g@6Ok8vYvI^Fg!*^a-@06()KilbBe6pXGtK#gV)vvQ+7JiNA=G0to(d4 zaZa1np|4G~!^*7@OP0;g)mq&DwNq)y1;{ZzPx80w+nGG-m4_O0YyGix*Z_xN`+TqS-HoCBCItUMKfg{p z{LJ}lva%D!%WK6=mI7s*O@p1&|JpwJpmFp98JrA6^G-pVPI}s#L>Qwxoq#nvX0&$b z5PI*Zmkr7DR@$(7Q)KylPvY3Iu;fDV>0TIitTowRdzvvf_9A~0AD!_?rp;*p#=>)$ zXmy;YdaygR5yPCP=5(gLLt3ZBIqB}*Z0nbe@vqr9HaO{gO|s&r2hzob!6k7}YyI2W zibd-i2lGEt4=mH1R}a0hqou}JpHv%a_CBb~g@&w6&4M?8CJ<-Aceo_)~$w@Exf3 z`B-b#b1EId623+nXQA<)4c)z%&dGW_eJv!-jz)Ddq`5i$Xs-4~_&6!}rKqvHJFWkY zMudgyhi=z5FZGsBissf#B!xIzYsC(5GgfNV-)~*;Icx58CMTh>a`!v?Yho@~!d&-3 z|4l=BNJ%eq*@8JA$`k)$M?|>yYw7&Dx4O#z*Vfh?rnvTTcSAbXJNfThFD~Y@=d(9F1?S$I zG>eTm->hXLM|*!I-eL9jHxH+3ZB7>F)a~mtekO}N+?<`IM^nqKABJ&cs!@bBY| zb9C7FN45DuWB)SV{|~V$H5%S7KDf)NW3&Ajht{mk*0J*J`apfq@zK%0>zkVqfB#(? zg)tL~!E?G7eHOFD6O9jZHYM=~-GSY%@49>m4-s!>huw+ia2p5Q+KTenovkM}HhCXz^iBxzPV;yxiNxto)4+Sl@rzd7 z`DCmSJAl>8wdCuwwG)@|S}gUw*5{w&15RA~Sr(zj;!HxU%DH8HYtGv*CrY-fV5{m>YYxW*hnh z-y+o~jiti#N%x8>`?|U^`PrL(osu`-?9LabZV${NjTQT#J9!t>TbFFV>7LcYI=0o% zuErF<>2Vr;-xyDA>S%qQj7y&z{)R`cu03wEDw*F(6F;h!|Krw2lg)5fBa)NmoE8XQ_a@cn zU45r}e;#}JewutY%luV+tZF_#>piW?1{Rv(wq(^F^QJ!*B|B1WKie7~AM)bGP-jo0 zV0{Ps5rei5ySP{0*^PW(HD&u)Js2zQ%=Q~oJXW7#2aKNY{Zg+>!wy6xe!aG~ z7><)}X^Q>JeC8WifWjgb$&(`?^v<{xKMIM@ft zM=O6(UFJtG?vz8HPv*=0(B$F9g?d|)bIn)-2x*QV^w-wjW0T^T9uK6Goyj4-e4H-T z#$-c#YxQ|j%cDL|a(s15@~LUy`s^8^i)v76Z!PBfoE;uYiiI(QUxquXrMQ7ObFTG1 z(R^X>(X2v_yV$s5)N&|wHaYgBu{F)uTE1ONePeyJiU;y}mI9IXB`JotyH{G?Gk){k zoqfK#{y$Ei&Z=D7_|Wg&3zoEtK_+Z&wpGS?S7S>oMS1rV@C&?56j-!XU3t8tzA)7#4I3>7CV#W^G4p@ zyH&}oPw~Pk!aw?wxrnrIK|khAzZ2%t-Q<7#9g5M{ruyUg2Zu&}m&I8#{BE}UAu~Ku z8-#pETZ@CehlIvoZjLG)i}g)k+s2GH3|SA1&vrBxHn}~itS9a%FWlSca!|*^w%ca_Fto3KD6YjmXJLGDcyBl(d{dB)630CwOeh4j&bjN`- zHqF!A)Ko;XecgAgxb>`9e_~iHeQX-~#LqFrrTUkL&o|Px`WHdyN!{yowEhAaJ})QHA(P6?eT=2jlHec4MTev-hm-0ex?3$ zHknS>^HOr{9lF!+{?-d#nzu2w4cl4Uy({bc?GOrs{h&J`!sf1R)OhJNz|%v_F!OF-N$eg1yPAu7oPkMzUi zcQp<)7G=aUex`RdAU+R^&nLsSY)ZwC@51Tje)#7USq~%|Z1yR>zPIu4D!I;Q$@fk; z{ImG5x!}_4`_ZqQkeyhU9o@0D{&~=WMxyD(bh@wiJL_?M?c7hxE4rUw%G)Q;$7a=i zZijyt8h2lPZmAy}`Ec!E7{uA#I4fF9PQExa3~v_eb9dveOv}H>H-DC&z1vFvs@LBp_lNaBf3SA8cN6wNDOEb0 z<68E3VYL6%u+0l;b1|93iIr(l%wzqqZDVu89HGfV65#-6y2^U?)&AY&gw|M`NCZda z#IPRz98Di^1gkjImAQ0)8R3;X`nR`stOlNoD|~7x31Fj`qf&geHDu9N37;Xu$*!Hw zCyq9sE4`m$<^D#%Mwe=7g;#$S!#>KF$RK`;lg5)L^ILiG@uY+z*n&B1?fr?dlA9Zq z_2E@px*~qD_;bbb$6?5wbk2&GlUX)&vN=yHyC%E)RoCPfGN7%!m&1KBud6^>y3vX8RdqsE3BUOJdW;?9?NZO@iSJ>Z< zX1BgiS9YhB#_Mr*jV5B~?LccqyNhXB{e%Z$rh4H^TSmVyd`}}y zwnbaG@5yxH9=ai|eB#(xM^%i2U9oajm(_W?f2&z8^?J7ZRuH+K7KkeZHxypT#!+x^oIufsLldb2^FH z6q&^XtkycgcRclCc6_OJIN!L4*VKva*InZ_3 zGME0>WGzPGquBPQ?#B8Sx;}Zrd-d{my{+nJvU|+h9DIlFR&%}(x4GBr(y&OJ6)QZ~ z9fxYOsh;^2Jz!La(%*{u61hGe*mVW3uNuQjDA0FG?8e_Rv@%G@5VO?^H z8!VnopQXtaU01E!+%-{WZLe%6 z&eikeox6H3XWjgjd>ga3txrN7EB*;0dBHMkT(8$6|*n$x`j{So5RF4Yh*oBI1GZiN5ekbC_&V~4OHu-FKCn(vC7=FoV>I?PLa*)`;vB;S?%tk@lR zz}ZGP-|J#pWGkPJZ0!2r8mdXNwS{i`lYez<`Bt(2ts)1@gn2YYt_^7#gZQW%lc&o7 zRK*UDk+yY(Jgd_VT;0_jCzFij?dlpP49C=-^d1S4^NiEjqcjR(q37^>4X3i4JqM^TYtpn4wS;2I6gkNadjxc-g&;A$GYGDcXR z{N_7x=?ROWyyrdp>rb@ZR*zyb-##>Sp%NgfSxvfRVaM{=v$f#8bKN`no}PHSDjlw@ zJ^(Qx3_16v!IMK@boNoc$hUsiyndIYKkd6C@Jh}sMv-IxSV=a#wU!?Z3%d|DUrJ)$ zu|Jt7`=L#m+mwdHHh0P|Pqr33;?ulTeGcZIs1*iqG`~LFb^g3DiLj8JNqj2lFEo>* z>2t2@a*O@VLMC~&HMm<&`n+6jsnK`T+rL$%`YfHuBU!*~KfCJFok!Cd+hOCpVmX;$ z#d2-1)YXk9tCX4YdW`Qx5{bS0x{LkbjK{`bc*+#-4v)Jx*Y{^3-EZ>QkMa|%g7>ZK z)z8mgygc)h7q4`>^fzbl#)&8Ht5;UKCGBi$#0|-Mu={rOH}<U2FVq91g`D@wA|B=Cx106e zbf9m(4H*ygZg2Bbu_Kiz$1^88f}iZ44V~_lH;Xwe;$S_nJnM(es7QU72d!&9kpF64 zakEvs-F-*KXsULi^|>^-&_DjXrTK_;JZ5cU;6CCOE?~uI1%7RBj`9YpdLdtXUd8xk zW5GL7b$7GTYN1)PwFAAfJ~oP`UXYKh($M3%W33Vf6@Ah z?%~<9{j3~!9T{uw^SNfUd)Ul!@*Hhm3(0V{{!S*_l|~USW^1=6oq0m^xVZW(Z@^e! zh6=@|u6&#)txD&x9oIdXbSKh*{&DigD5 z12dD+Sbur=^<+BPn45-%c*W$4C;Dt_S2mS0}H zl8UX1>#{TdL{`XR1o?`y=(FFwc#>^CDE3|HE~~s_{4BNxTN_)1+}5n%&}`Zy zD=umb)=Co#%|diM(v=B4?$$4M@}TjTYqi+DuFa1=Ss2T*8d%Eb$>?vfTcu0JcDcLn z<#{Sm%e5gbOWQj}lhx|`Sp6O9%I>j3$CCvEJC!Eb^sTHPH=q?LG+WOr^EjN0MT%^P zdjDCY;e>J>bJ;l7SjCa94)!S)zbgqvcl8f(4$|MuGmkbe_O-g6Wt{Bz!4T2S#P+%qrTMmSO6=8-Ft^Fc@Cz!oHW-$1DV|EF*-T!Ur>m;TOO3O=UJfM%-m$qg|Fn_y$Kwt)ldX-oKJBU5y!YaM>%!xB ziR^N=yEZf~FUMh^7~ExBbNyaDbbfKPB@b?HZTQ9JdR50eR)0sk7mI_$*xrfmKhXG- zF6O&yXX9=fICreIzLHlhHFFgxSqAPVR_&?}mJQ8)ci?36JTo*0BerK}Yr3*7pYnX_ zVzQs>bum3{Od9phPnsvM-`)?qflMcoZ{^U|WRHg%VMXme8Y_G`8La)eG&wOsOl2vp z@zm}0vbNRxB>P{}`zbPu##rW&B$qE-Nh1*BT6f_h7wSoT-ZAEKD49R&einc;9&S}| z7Z|ZF89r!Tww)<&m;vZ~sZ6k}ZA5?Wz zUBJp@YbTTBaJ`axfA9GB$$mrHy?wGR3B-JBI#rJ@^`1mK>vctA!c0EBEj?lId|x$b zHi@ToTTw)mZGM&~|F#v{Q{SrC`0&B*6S=X+#a8)1ci~WaWrH}BIk6KfkDbe#cBP&7 z$9x_pA8ev=2(Rx`^-JGdl1nX6CFD$>@9rwr=c&uFW(U1@)V~^=yV#<2+gQ)+b`QVDW8~Bu(xTc6U9&VEfoJLSP;J>b zwy;<~q=8ObyMKRDuFXEM?Dx`<4E|b(do2l0*Eio?l_z3>hgvsv7@mX0-)x;1`^!44 zZG2X117RHWupLbDiV$AeR+0 z**81b_SFjPNG7ZJc@m4>`V+0Uc3n2*nf9&b^q^eoaq~Ufk9F8xyRAb%R%05ARj*G{ zI0%LLEj+r=`^8%8N4|e^tmUe)COCxJ-04PA5!p7d@qGOstsilW{IcldUG-gxBV&G| z%ke&)c;%^j#FF^-STpwGq%TM!eTu@EqLHaz` zsLNgTL}GuVvV^66O-|XQjf+sQR_R6In5G|i^8OW8cSIc|6CqY9PS?TIa%+EwZL`Ro2W&0 z=z_1DAKKnMY=PW7ZnjsE!#%QH-o}QZ8Jok}b)| zwmcEqoy_!dc=WCQg0WmoqLWFtvstZ8D;xX7oW&khVexZYe`B@Syty826!Ak|;wisb zU23d}EiE>8JpBBa)&B0nX&^OxVjmlZk3K64yqB+DN*<8`t0VEH{PIF9tgEut#im|>6Lv}Irc;j17{}z&! z-yEu~*Z?7{^yJy%#?h`p6in=Ddb~e){5vn6CKvCfXEMU=XEEq|Ltb@0maeLCXUu)$ zU{>;$>sf+~-O6E0^Z{9{$J5aRyWde8kq&g?{`*)bk!@9I6k|lO3q39B8a{^|P(NF;GlQp5spb3U6>A7z8!M8f-;& za;C5O|I@b=AdG8tXGokX$-Qc`|Pfbs;O*Ajy&Hi*5xX&f?f&|KtEi zd-ZfujfIS?>Tr^;Pk(fTJ07lIwG%OMW=4%sbw%96k1mh?*&o!wGmiB+ZNa`R^$aCN zu1&2TeB#Y=pM_dm?b${a2mHN|4j(1$m0I4eXFNxg!I?Mq$(qsMxg@gQXX=t*Y-62r19Hh=CF5XtMYD`@$0J@t6hIoKWb%iQ}?KmKs)%syLpzUw$>JsK5X9C8XX?PL(-Ah z%x=^JYk(qhVNv!{BbxcSTCY!+TeF(?lUa4ulZ1WAg&7>`2hS0IXhcqQIZ4Hu9cg-1 z_u+G7fe>tBLLIG_)4w`|=yN4$X6scHoUbqTv}XA1)jsEgCz75$Y-=WR7aaI%JuW80 zh8Hi*c(y3hIoDtC#9tFHQEN48jLy^13ym;8MrTLYla8Kw>h`a6DnnCWI@&n+(f&SP z-F>s&1s}z3sJ(K?b8GmwwWd|kM@+KX>{1qi0hzzp4YkDz-0H^YNj%-&XP>7jRt7`0 zqE{RO!tzt`3h$AdunV)nxvcu(uJ3JxU1|70cNlk}7Dk`ueX#rY*TN`}(sNK2c%`uH7FG{gtn=R1UQNthkP{AIZ0aGr8ahCYYe^^Dd3i?lYJZwkfnPhS zZjcU6>~CdpdzOwF?o1OavTYUS-L>Fjd+TYkHF44y6UI$gVZKoPM)SFm9o-)ha%(pC zNxD&uPz@3_WEr=b*`>xkQ$JhAtnasGm&RB!DN)WCVu6?>13#7ia0!fMiVSL|%jpf9 zz1gcZIy7{Cv^x)^F&@U!)QTYULcOfd`_$<4XvOrtzkc>KlDWeQjF5k0%uwfY_5)p( z>r)=TKHa?6(+M>xah)Zyi2Xxf)@-p^uNyOaoF*RTbyt&ZcQc1I;v-q%+40)W4O=+X z48*x}Lt1{UkDEygov`1-wVPx*Hsmo&H9=m8^T2g6{&8A=*u8iAIa~`qY^CW_hIG8w zi`~1UHJ#YbwR%_aVUwq8&p*!8cH)wY12-V=;rhbr8GTCkwa>0$L?c2J!M@~EX|E#mF#6L>J29yg{d-nYFUkzlezRe`&W z^k~#BV9(aB!6K-1tbW*wZ<#$!j)!Uc!LSVLdoFz+XjYrkkqko5BIxe)?AZehg2zzy zY-8}rNjf&-vsH264UPX^dic2KmA`uN#>|AnOSP22vfJxv9hZla3whBBP15HoY->D(9HNKNAoUdp3@@$&+oO{02$5+;y}m8``z`pw@=n2DbBQ~zvcP- z2v??Ks3Ysa_GA=d%Z+sNq`Pp{J42&WuB`&Y&(1X_jhZdS_}dq+&#cLcJfAz1rf|%w)VjR@7woA?TNv*Lc_{X2%!&GIMt2fU>)Ie1X+z-cP4RCr_ z{jyxlQUz45v)H?J!#f})Jme#66kmriC;GP~c{ikSEK?;-j?G(+_j_M=i{NLI(I|7n zdt@z-lR@-5G3?3HAklQOzF8L!l%2zFnVjfxtvP!BV+GDM#-V=i7%P9Vbva${JZg6% zd=eh5{pt$#CW6WnASAg&oyD}t-o&Kk-Y<-i@AM4jd)e_9v z);F5T^>hvQPxfv@_VsqYv91~6QhUFe8N`|GJsVh48&xtn(v@1tV$^}Wst~9k@K*dA zI^#Xt$I8i!pdrf^)lT%o+LpUh?&qq=;Ry%qne1`W-syV2QD2xGAG)43+^OZ!?omnG z)YYAhhPPa8c6Vw6XXWGOp;9b|Bg>QS#aS*TftiR{JO{sHr#xYMJwUy+y>4kPpNyH` zt=HqVQEA#;-*RinK&JGLdAtr1i9mny}pGrxK9^_h2HeAyKl)?D8HS-s*+tm=M0 zml_%SINWEu8f`_be^;)d9xHobKeVUM*Jpm$-4IK)<3V$M((ET}F^4Vn$Wpd+uXwba zY`7k6V~^%7E1GPbKk_+D4`qfV1%EIn42X_*cIVn8^UVs;6r!K*^*|bjj9ZEY z8)^^daal|aj*uU-V~OI2xv0+Z4}FM5H%DLm&Wd^V2HEj#eEO4kuAId>V%(D_uxU&R z`m55D3C_!jF%B!s6RrQPVYiz@ldY|)nM{arytSL~W{R%j7EVH5)nDA~QLneU@ABx4 zXX)`^eN4W_)92GMzno8>IQz+FDQdIYt;vW9!_v!RzFX6xe0y(ejqxld|C#>cFZ=3u zPZ|~ftc>c>OqtJv*5#!c9A{m3d&-0DVcW+WQw>B03wNy6jaKPFtM#B)(P+7zWXhPz zi{k1l+18iM>uO_Jt;>y$3%pW(>%M38L8r3dW6hTr<9uqeOZ~uJ6#$sBw@<7suX&sl zR^!;X8{#gHw&D%{#;p%FBEN^ZkIJvaV*a|^J-b>V`T5e&nDu0_Vlm$rU9pbC^&)@7 z13iDAnfdf9mUy%_{9erez4hX|a+Q~A^*kQ+xO?w5%E|tji);*Qk-7 zqdHNqo&eL@lOph){)VyUj>XBopaeUS&8b9A8Nl^gilWo18WqAoOl{`VC>!71cr-d; z3KZirK7SHcsQKJ$?eOa5?vS+{tOqNC-`winrDQ)^kC=%}NlgyEUh4Jw4)QBHu#uvu3lsiickJwbB!xJzX38 z=2HF02WVV{MWpukjru#D=5SkHsDj6TMUiR7aAUr8kXy0_{8W8&e}5gSUwJ>t;NHXL zjw#;m>Ya4U7Vd}PaQt~_e71H|TsV~+`+9%2es4GLug}OdcXbEv#~9i5fvzvszg6+P zRK)Y-Qf~X@=yyZ?i?u5Gr;~%fkaDhehZ{qj#EciZdq;DEmHV5usJf>)t3=QmMt3FY z#ONc9CVt6t{2U%qi9al1XLtD?3Py+j-$?39eS!^N7#b1pw$>Z%V6Swp1_z(<$}P=Q z?TKz&pW>#9n2NwsdY=#pYUsfeN*U;@Gjd@5b87r1+o7T7yY&xw-~~n`2jLgjn(d)< zIa{9)OH99!tX6WaJ8>FMw$IfgZobfX`I=o?0eNn1yhWh)O`-!FRgeU_JJ zJkh|*@Bndm|;-Ry4sfAN4oO(I>sp z?WwUU$H#BJrUr1MHuK%-Srwnc6^;&Fi0~(p^Rwg=^I3o6o{#>toVnfohR33O`NWw>s_kM48$kZ?{?DM5G_MkDR z_`qvD)4tnk-s#mWPxQ$Y)2`Nz-$6GzGCLS4R`&9= zrF6KxG1iaulCwY}I5)8+cd3!!OOQe3`Dv^Bq*a~}nAOqJa`&979k1D0n@_VX)esDl zZB7}o=Ps;aaje4i#yi(&bB$*8Cm&vD6xGwSjjXz{)aO}>HFr;4?fKgc;l^MQ4<%0HkbsPVUdfCeW0G8Ic~A4Ra%{{ zK1qvfd;eJ&=@|m#V|zy$UB9@zc|)_)Lwl^5he0?VKQT}q%Q|kg0%23}5@m29eGdaY$?m3z;c*%rQdvUb9!1A zDy<72aLK*(DXM$kc&fJBn)%k|z{2Ppn^EsNK1LEz$SU_>XS_?+aKAaLmp-Z&_H(AY zW&bSuLD#Ij8Ufa#8YKFuamkBsH`ckv$8%IGAh4W5rgx^1uM>9^p{^wv{9r%wvX^Gm#xa4Vu`rIX zTKT!I!Bw)-@q9gR{VM;nGQPWWV_aY89$DV}ux@$Um(A*4qvKz)VjT5E^W;u3T_nfRwG{>++ zil-sZ6tm@l*zer<>`v0~Cw6|c@p<&2M#F|5gznFW=EPY1@JOSnj_nyMVZE;RBab?j z3~WzrInWOV7Z!q$yUxHaFyTd~IJgD>sD~p7TB)E6me9 zCy>qG7{18zL{PE#Zn9rbTF8%y-feuyHs9T=^UAejbsp6pHiaLmBV4LAW@%os&@ZzR zUav0lJQ?IvpqLMVpgJCXr!~0S-QttTtPZaJj=l2N#jcv??&gPAYQw747w~vd_;B}Z zODgq?={lX>PGb}M;s0vUx4XylEw+T&JW49-c&Ywamgh~_h39qnF>l0)G3`6GyVdIy z8L<}3RfO8s+NwpZd+`S|D|@w$2fND3c!Z}BOWiMi$oA+M_fauWZFnQL`9<@)k#r}L z%ab6sEbF{dPnhxDw0=1`*d#0T-UJB_MBaAnvIK8VA( zO2RvhbFCh)G*9(`bIohEAM>Jd`sDu*NA!G@UgT18Cj9$xqd)C4aS33+n*Vqn7h zJYZ9E*`Ac@L$cQSq~B8?avV%hJ|wF1SQZA6uQcMlbcR8l>Ytnti{o3+S}s1ZeMqFA z$s+l>XSNTL=xJ8V&t=Q*e3-N(5nFIj+y^G&Xd*Wb^*p4xlMFC-cXQj^9WuCmeaa4x zrB^Iby&4BJcW8{8;pODV7(8phlGRPF_X&JGK73NdIGaou$c<)tv3D1{3ftwUv^eRI zZ7nw+aSAg#+%->EPSt*?9y~XqKYA5+U;#AngzZuHn)h;gk%3@~nB;Qp&3(Dg#MNzC z4i;&BWghcs$rDf-ktdw5^^tz?GOy>mlQpw3jO%)R9dC?njnA@F1@4c#cZ?|bQaSI_ zM$qok(4csQZ{DoGoArXlpZ)5y8{MhC_Da$B<&g8pU?pFxeyf5fCSMqRo29X21^CCw z?q5z~u^n>2nA5d+G2-Ti){vgnpUejSK<(2=JNj~exBV-?gG&bx1 z%VJmNl2U{gNp23SFu%q67q`T7m1r2JasYeZNWY%wd~HU27eQ_|*1lGFZJ+tx33e*? zypXgf`b(S>J!X^9H!v_zh$ino-N+C}jTMKun=VL9n`&?8>w(u<8!Q5wcR$Re^C^m* z>Qk8}xwpp}HzchHuLdB0fKjYnZlK=5d*CdKyOx%3C(Wt)Q^_II+4|p{)SJq!KCQpq zjiV|G3m*4BeQRV_TH7(K`)PgiuzR)OLGmn;s0Cna zyp5I0?s&?rUR~2OTR2*8Q-tR2BKDIkR7LHTEcsb~li+H1`7Xk@TPLjbPBKk61f8ze z8_#^)IFNXX-1xJc9D|jWp6DG5*`EiCX(GjxWr<7=>-9x(;CV8_u>0vn-T3kF2fWS7 zscF!GD&cF{+k<*zrwgsRn&HG9@XDonkXJ9)+oWfluU>Vc*11^~fI7YOW^R>oaNs2Wp4e$cMxl(bYW|kZ7pBa<)&7 z_ZMst5qLO0BwrBq>5l)4cC;g!%j}JGvaxvE(ilT5l_6eBOH-YM&ZkV1r7Sf%ZlU6O zqZagjEbYi%clN_7p%tdBp7EeNF!LK@9az-S?v(=_%G$&bD0wxhtr>5`%3!Bj9L6j* zLLb?;TA1e^Pg}J+%^em!N<%pC{VZJt`C0nDQ#+CRW^M1Z4kSHX3x0sb$&b(V?@;TY zE+=mLOS|RnnoTyV2bD-6M!^G--a9;qHS)?EeJ*3deQ(q|i@4d}Z1G~!vR2-Yi@_-C zgu9*XAB`H%HKSmR4{J>i#=@8%B;my*hCk|$i~V@^aK5?V8dqzj)@_X;i8}qu#k+^i zN3{fU!C0B^?c~Au_qG?s+A&AysrCk?Ukh)(l$ABHFH@WG?aY*!J{_t{lhCiWyte3m!=VcGMy%I;pD@$7ZN z+^MGaxcSNi0oGOvlKluhQSQc9Y1@N9(W*(z@g-kXPe2n`jA(V zR;@(;P>#P}ZG66==Akm^JA`j!`48&rT;uam{Ftq)@LlUZl`Z!6disAUPkB6SNe$pa z*TvJrX_{|NNPN8B=F=d&QbQLZ*a__)OLF@(kk3)|_GNILNhlvp06In9w4kc%;S1;oJ(u^l|iVm$qudH{jQzr z-^}3R+rmOSRA2=!4J_qPVn4nshf&9uv9WLw4X#^t^`Ds;5kZ{;zf}ccsgPH;`!qYe zJx04T=EeWi6eg6A(Wv~t8k@%AWJ~lvGvnKc4;%mG?C5d5<9jL!qWPspf^X){;~~am z|6;j%g1*E6c1-sZ!ifB`FZhDl@5@S8hm0#jM&B}~r8A>%9>QW5lSFl9YZ7__tMUM& zmay#Mi-ySg=JfMhHt|O5 z{`C?6+^%Xy;p_z3xw zGFiWxxID-B=lYcQSyk4Gqhbz^TX#Hx&zhO6u-@5BC0Q| ztsBiuREY2nBR=kP*~cs4*sYt`3{zb)Gi9+REJS z&hvSfx`7zx37Y32f6^G=h{L>A8wi4}_~EgS$9h3*dcW1@B;a``lS0OYv+m*>P_GUp-?jRoE`q0k|tp|Q?J+Ac+r(xwrvI4AI)$DHX)Rp$t`_?3(Gakfe zmizojEeDK=DO3OQjoW|U|2TR*AD5e{$jJER*k5$rb7L9w%jIvX_RqTRJB5E7 zF5Iqnh)>^a>)wzR8(B<3d<&kiFm}A7eq=W0%3WobA2Q5VM_9}Z2x zFf~9PV%45@1(#>nJOK0dJrPf8X%#x$Pp*rNWQ-}Bd7frqm5yF=gX67zW0ysmVQJRh#gnbex#qIr9s{V-WQr#)Xg8Qk&u@& zTu-~`lMTvi=aUV;5>+lXpF<(LZ;Okr;`A%UWmWU*t)D(sd7jl$6kbXORsDxuKb@{s z+c6OtJsj4zs?oDrLgM8<#~!Ado3*;yDA@JhYCfNb2|J2Wo}~5Kaf4LI{*LkwV_ir z)2sEWMj&#@0PhbeC)Rj+jLefR*MmAg?WB9wRdbL*wCo>kM zCM-IiJ$c~2FAvTP zFR>4i^IBKM)#e{q0^pRX5nvXk}Xo1RblZEeoQhXoWlw%@^qW;(YaEy_?!ylL%A-#8Zu%|`l|K0I2i7IClkj?Q?OsQG19`o}R32=H)7fRUOl7W_qPYi>};GZC4Z zZO<7qn+JPNC-!Zs7rlz`&=<15 z+WkD@Mt6v#o{eE{{P=cPCWL;{=PdAA?PNw)kY7J4a(^pneYg7Sp~-8l7(HHS{?>vl zn3dSd)0Vp`D^OQC-OO<}XerKJ?Vgj#Wj@~FF=CuJBkN~3*gs!U7k)I_@To~d_}hW3 z4Nu%PI1#LY47eaK!w6m~GF)#2BVpnA6d%FyAgvr8)`@JM8@*cWVuR{0s-F`x;;lS< z!a%%%{ZDb}r8Mq4RnHm&le&_GIO)V9pY|ymmr<(UnE!HD)y&NhK1{rC@~HXz9Bbd0 zFYZrfC@|r!d=gXQ#pZDDBWMdcrGSwCb$Q6Xcg>@DdoHCLz+vD6Kh``7Bg< zqj>vf^L}I44D@nU@17$0h9SJiPVroy@N*2EY;sSv4~%MI%-J`tFQz@(V)>%ha;;## z7!04~a`N}xBX)l`+?kp26h%xIEz~$wz5JfI>P)tV2R^L_&(|K-S~h{D`aNsBS|1|qoq9Ue{rj?J^F5qRZK~hB>BRq$dy))aG_L3S zVwNoELHFRus@T(00CHiER+L4l7)|So89;(_-39xOq$@eSb;sh(S%jtcvq>Wg-R^GK zjfaUQcntr=M^%ih(}Y`izD)U>p|Gc_e~`Uj?&|4*8+W_M=xR_n*yG0G0X&OW!gup0 zl}fV=le}zBE@#bQ-n}8)G&)pyE!*@xCu=D3f4wzSi-spEJmxWdgLI0k5FYYC8C42i zYQCOx!ugr(2@0P{ie2>%W!bcKyWFQI2M>BuOBp51pBSjseIwL>_{ms7nXc8NI}viq zNmY8p3Xu&~@?&TqE?gQ~!u@?}{^lu4(9V=e?avz3RJHqO=O#?VXV;W;r|<2%@d>KE3|n&scngY?gv z-^JRT>k4^P67YI+m22)vt7^5LQ_wUX<@uOu;F+}KInmw_4+gRG2mN?b`n(ljKkV{( zV|sGUYe;k=YmkpjjP61@_vDp#@jMKj9r)i8o}!C9yay&>Bs9<4=@c&DHmqF~mKm#8 zygo4W)EG^Dc=DqCeNLNG-gmCPd`C-!z_aOAH5cO$v(7Z~j`HQbNg;>BZe@GZ8hgS3 zi_X?^sh&hS_I#zbZ#8s8Fn*J8m@e>^SMpt2+rvW6q)Li6~EN`lv!XtH%m%;*T za%T9Rn$EqkR_ySl5SjNrswe%yTl%?~Uf3SCx}0u&yA$V^<;&h6G0%D0Rkq81NHN8k ziIb8aD$5JiUgUlc`^!_NW9iJdYTyfdU{hE7CtBfQe8XzdE=0TDoMn($8Rqr}dETG& zU9|5Ot!_64h6JJU)A>APS9c%k)f2wc{irD29er4pNw<20Mr?7)&sC?a zAM_p{K2z_$hkc`2sQo@4^H7JE5%4A0BkHKty)t9<3)qGqSGB zjfWelc6lZtQoor#|0u0}+1c4fk$gA#Yaxrg6zh7B^b>o$Tua}>IWV4C+#hA{e6{-_*yZk# zX?~f6(85(b2)bA^^`JY+tY&t%x$+boN#?EkqQda?{8+U_m3_)hW{Qz-4tp`yycB!WNhrNf8 zU)G0;f;mAt6|%WB<=b#L#grfOc^pV4g(JK+R?}FbifTC)#ga%x-#5~M=MnenU(HG+ z^iAULCdc=xoqaDk)c?Pk9Czx&TBzH7BMtpwoDC|!+o+kOlX7IG%zO(VL zUUA)fY0!7sUY?n3l&8U@>Df8l@Ei%#Qs2NQa2MDv=M-15A92|?;lI_q*gt&5CRO;C zn!R;U8xxbtEW9ApEuDCh88AG(P%3+ZBt%U??$&+3JT8gIe_adq-j^jDitKng%hYsaOv}&GmM7Z?0`}qogkcaXu|MTUKiy2}I)f7ExRL%q!Su6ca+y@TG^00WHEvHe>JfM@_dBv;Q_}3flR`Z6Yy!qT% z>#yaFZ_cPB%K>p8+(2Zb6?22FJY|Zrm(rtJseb3;7QS%>h2>N5Q8r=*XPPgIoY0om zMLoWuPY3}i#SE;$vmb2j=_5MGNzx-i%^{6{pD%-o+y{a5)Gb)p8L2k!7 zaZp|_Pvj@Qf4~;t6sz^^kJlSRt?qvPi6@KU-L||E#;|?f?WqI2!_)M3s&!DuIFW{q zOdI{D#rhgr}H_NNXENyVWrzmiFm{c^~wipnp&Np(@vR@1t z!FO7`% zLidY0c!#>$Je&iXYZz=t|qR^ja%iqlczSgRUqQ1Mr=2(F^%Tr&B*}=1Oy;twX z~pvvc4 zh01=Ch=pMnR-DJNCv}DCDgMJ= z#mIX}Cnw?$`~bH*T0dAJ){gmNV3(52%y&0GaSWSzGhF_Ibn{^JtLAWYc=WUW#xc|? zrVMv_N=bU04u3WGFOnac$nP;CHV#eU7bfEF%gqZn^j(69>!(ki!g{AF%Y_ilH!ekdSrFZ_P5g}yVoq$DpSW^oNKf;s2V%1C zE{k?*Q8W2DP9`VNzo$cwx}QH_NUXtkI$~Hf?A+U0CQ@-x$0jtD=JY^Em?$ajDKD7=5E6`z^$oKjT>J7pp2UcP0uSS<40Mo6b-4P~@Z4SJD2 zW#&&tzwG{8y7#oi(;->fQrA5LyxzS$@?m<%Dm_=z+Ow{w^X9q-50G!N z2N(w{c(fseYWrPjko`^k^XFOFPzgiM^qKg z)D9-$F+A?p&^~lhQNd=_O3Zs_J;@EAy!zFHdQf-1SWCK9&w?xJA8bOzVV}5`?44cQ z?@m>%FVnDpFu=;vstQ@H%{lt$Ox>>%wb2UTa)W9u~jS6;^q^zdfIs zkF}_0s@C}4#8fN6i1o(iZuQ%m^9Gp}`<7jJKKG~Dl&B=@S1ZHtU>8lov76&>HjeH2 zpCK&Ze&bC%{H0KDinlOP`^k$%Am13j9G0kKx=+PS9-|TpNxfG=SRB6n-M*#ypJGb? zzSVvyd{-OfwZ3`t^?LFQ1+RTQwEPdTmTwG>@9CnI_;$I%pJZX*3%%4o)UDO?-RU|e z$g-ZNCG3swsbk0qdA9nEb>OA)L-y}mDX-LzCwDSjx!&vPPRx5Lbf?oN&7Lit2!TC0 zIMyr9vy{L2RuX;sUYraL8^Gl}Pw-DvIUbNK@a*D$I;kLT8!V8+qm*4hF8Lmzy2Dd|nS~V)F89 z{ic6b=9z)-azE*xmEe=pGemXB|4?TBov`zMcfle&fi_>R|F5ML91~N2W7w(~iwpRc z)9W*ykH9fZ1a~0Wlu@wW%k|^;g=WqdXbK|uF4-S7gKsywD%@nZEbDmJeBWxJ>zf;S zzFBT79vrCc-lW#Qr${H#?7rG;%L~+~RCi$iOEdoOo9}P>eu>q_n|Rx`dY2*JX@wD_Fn80m(LHYgPB%K{&~KuDu7-w zqNB~gY#_OuMl|7lxV`H4#G4j}HlYij7B|!rebZ771}9}HEN1dCe4Z}Vu;mnTTp9SO z`er$&y2BG$@doFHTq3W^qI}4cm_JB+Sj6oyrrHUPG;u_A9V-draWDEjo{Y1tvMdop zlL34?jfl_plgun-z$zj~dQ~fiR&)Y^Zr4V>;)wwMU>(no_2t)7-RE+$`@WXvFtTe; zT-XcTJewx)Ak|(O_?y|~pN;&||3*?F@T1Pev%Q<16x_`!WtZ2-YhT@P_?k9-N~D;)^;{&ad7RhRPn^hKKp8AV7=8)$r9V;74l7$XE6jn^PF-*ba9qN z@%)#&rdoQi+;&U0wLRTVelXQ!aj$O_@#x@b`tiJ4O~kht)n)#u9~?j=g;}shtyP;x zN#dCj=JBE{R{UtZ%y${4yaDT$8+t;ZJ+I)kBCS}B?}%o&pnCB6K9^DAX1J;6Ww-`p z!{Xp4LP~w~As=;bNMiOLNlpQhmt}mg|T8Lq*k8K0JNzhh@WlNaEWZGPs+~NQMaEJ>fMo z74w-HHY`(^dc~w<{_3GJnCbb%?z~U@#nRy6qy=?tcKXIwu^HB?B!4}fV32>7UU1Y~ z^)1%9s@?+8@yBP40PoBUj;O$X*-WOY2%DiD9QfPSpZ;T*FDgPpaaslD+g)S#SmM1} z%g{a9g2)s1!B+f#sqf`oZw_wZ+jsIiRtrs`n>Yo5Jm-IxrA9v3nk?i=xC_<_<<+|7E52!TB){0-&)ip@KIJlU%a@zUcZ#{+ zYBo3yrXz2IAGp+>=D)5MVxj86Ok<-1N;qU-{ zbtK%e=DuU*`xjI8@kaWxy5Ah==(_5Ur^jqt)m>e{cLjN(r%3SNNNw0J26DCc7}?VB z7PGLXce|=OtXl8;z@E{3qaUC1IRAHoolp5Q{m5;<=&Jk`-^J!|e34?R#!P5?rI|w^ z88>b&x0+b*qhx|_V&Y`O@@ti4xf>6=H8i2(@{Q(=0(OrZmizXd$U@;Cd2FF1*@PUiN@b$bg|Q zwx`;J#p4lXXgoGORpWRtUu4r}bH3KJI(eu{IlY`$0j z;)W;6DvVERhm+l^rHp{Jz&Py4+MgWu?Hg+o^V5dBp3{7hjIw}x$$@t~Nej?yiVc(e zzO936e7mv#bN}n~f9t&`(sZmE;Hm1rZ_Rn(mDWPGLqDRZN(hXY5JENSPr5_A!?je_ zaF0Ljo^PguN8NFz@!6>PVOug?mTq2;>*-SC9V}vR?@oDvx-2hL1@XKb{=! zys|sLA7mWl9En7LIdqfVJ(`v@8cQCR$0d(_F&9$~7yidwWmoyaRrX9x$&$vS8c8E{ zAiJ3}n*m?|34$O<1cC@80e?TwYL>}5IOn|QeV=FVwO9D9-&%V=_PEe4+4JVbbFoah zvFIeah@WaD@QKK);>-K3%?pUZGNHj;ez)$hig*lxecz{aJ>KmqeA(b}_Tt|AmNkPN z*@qR@`Gy-*wUgO`0?{aj+t#YMufpU++H z+VablB&AnJjhDVp-9d&Y0y?K@TONfztxMiMHxctv8U$5-u=srFKwkc3@5GedZiMjX z949T-}i3V;#~8T!|}diAqGm!!BLR^bQ7FQ z2Y#_|F|f)0q)h*>E}xg@44bsJk?U35zv!Nd7F;Mw%4_Ue+1^hokT-iByFD4CoLbk@ zp*-A<#RA0x_9;{NU2K9~ve2N8TA4fk%)2-CDt-ANS(2apK~4=PU+w+!?{E4SQc(GT z@Kpe?XSgZV$n(o5WCk~y2VJ<-HDxBRH%l3-tH_Gs5;YXHZSU4YN~hd+Q@)>1p@l0k z2K?U_eV!HK|6p1<2aiX;G0F7P8e0(vM2-ttK^pKe?geiF@oj1(x{cs-o=?8b9>i{% z@!fJqnC{zN)up0G=5|+h z*rndfL(9Zo%ty+C$%t>^zxg~P)sqXCZds%wj}xcwH8;$zFIVSlAR~D-&7+h0UmzA4 zh=?d>5X-LhIzRqZcl)sQf2OXUe<&Ww+@U0yFUA6b;eSMau@C~s*6m+Vx~#@Lp)V_j z9T*1xTJOehTufFNIq`jb+^nz}K&3RE$D&hkjy^T0a$7UqydbdQFn5(191c00?CWTw z#fp8~=SKeQpB6xzUYQy{9UOcpJCp;76FajySu$>ZV=D%4>O{cbiPK^)=J0mE@s7F> zrhi2I!>@=YZ{;7K&30aDWoZr#_#(;RFvVqz{`#&i4dnlI)Rb@3ZdmyKMB8#phW`NM7crS7&FRyV9(9CmhDU)({&if|>)g zv1j2NFavCvMnfxbqquv!Sz&Lk_kQtQcBwCLZN9*68~MrSUGJS{uGapEB<;jkUg+bYlYLXsyrRv$bNY<)(7>lKi6a3 z7rGKePE&Yo6(gM&H1%#HlV6cJi}H#UXD1>to<&!}rtFq1MPT|UKERSjK-aNDQ24H7 zdawJ4zvO0~JQoi&J$Jb3U5h509Uo6N)}9qZ^rX+0VbV?MH+KJ8GI(a;7WXf*Ak~kO z@(bzE-}m}6>C-c5gPNDf`CfCu1?aF6>u9Iw!IzQ+?`(cz(7pa9*AcJi{JLbb5__*| zYsH|wSrc6f?!o`Oxmdw!mJJ=V6SO6edR1o#4K)3kPH~NIQDN~o(iPWrr zU3RJ-wJ`)StT|1>SAM&!ERRb6d1(4^Eh%9Y+`~w5(W}|X_%)paSUYUi%<;4C#h=PN zF7`L*5bq(6RP*CeMPaLgalk#vyX4X^E`)6!!vOH4tBsUDdu7q#-Ak0lf{0+e7yrQO zVcl!}Z0w>WWTCnSBV&@)Rwu&jT|3NMDI(8seidHWqMga~kn zUWW!I=91N={{G>zYA_NkbEA>UCa?i~zPiC@-QmrA`QKKF|8)rEw^NT&dgJBkc?zgq zo~(zS2N&n90>4g2#DjN}w4D+n5naM%=uv{g2ARqkp|oqwNRDmwXtFpuRVo%NJH6Ro zMNh08Nvn`U?yLEwUClwSpFErQhS|>bioSTPyYY%h;-RsMpTmKwl&!Wt7_ZHJKafOV z$~)chqikNT3^T#W#*Y)`b+PTk5JE<*OPvyHPnTFLfADFalwE(^xa|dm_gE7D!X89| z=kJ{^?>w@splYSh(|ndDlGA3meOK??*6T7!E5qWhbRAq1epfe&=s)u(QC`jZf0#}@ z6Fd25m$@o)=dmLt3hjikxLwJOgcknpV3z&m)JDXXB?tVXMV1 zUB$=-ZG6>gzuU;|*@TW{S$x{|qy)2CMd+LtrZv`w?4T==ldN3xy+&zdDwDXE1KIGF zq$_u)XI9u}Tmhr_MR(yNVILWmE2#14f4tq8aSoq0E|o#~g-lm})@RE~i$E9y`4qjE zd&pZ@hinTk{(kqTVHiI%)~{$)<$>ZFEqCg~rgX`tWwI&+m^93%d`M;5id|f!NvfZ; zQZF~VXYy8R05lK6;tTO_Ff0}mZz%fGCNkFJjfWMLWaZwiPeQEMF|c{j8)wIi2EiPv z6dRJ^=Zyn8A5S56zz=@=A*+N-Nojlw+<*@eEA0)xvq*&m-HjK(Ke8zq!1s;s%l_q) zuxUmm7gy`t82XX9U+wxL^(XyB#zSJ(9#X;p!~N^hc-I%}VQzH@^;o_QF8V0BV9MW3 z{yY{>4NvgZVkM8QE^M{LI@uLT;iO6MgXXQqrRV*fMPqTS_hpr5(lxK|OfK-q&8~&L zyxz6g18saJtjW&p5ZKu(e8%;z_+l2PQ$$@_UnX9D_u^CFF1in?Z|HBv^HHBwO}BO| z0iu_IOei~RgKg=V?qvvee``;pNPDiyuifjf^jf_T&XcFZ z*XGDVtsjpHjq~C(YcesIPvnuu+qHgp(IGhtr2c-Rf3y3l%t9ouHA{A)i$hF0(kq)5 zf5Y#5*e7IDla=bF-MnZYJoRp$#yO~1@T@X7Jg(JNF~ofEE3lM~QW%-H#uk0oZ;;-r zaWj~zUxooy_oqT&MrsJde!@5q{IK_Y2A!e_s%bDd-p$-GsTfXpKriII?#&O;IXGC{ zVZ~O9cQq>f8kT2wSDpNJ%i{6iUi%rGKJ-q$L@%=WOs^6gj!lNlX(n{!YAS)yo7nkP z62JlRf1-xi`epBcc_6Yoy~8@e7HZmGHbWTWy;cMkf-5la{3&~Yp!Ff(hxrd@(C_)Z zeX*hMni-DjUhm~mX^Kv4@p8CaGnV;J{a1e=go%5EfX73_IAYD$edg8X{<~JknIC#7 za0u7~-a_0~@%z5t-^p9xIG8jAkt`)TQQS*6Qn*`;;h52eDlI-o8d5QmS0+?Mi#H%)Ln*6D^B{ z(P{BW(TYtz1iOtlmx;=SSDTA|gnf;LE*Zbbsk35Ff5QV|17H%Pry;sz#8LOOo+6)~ zI$0!Cqn`v5WZxva7fbFmHkKxL{JK~5KYi6-)KNt{(Vy?q6R|ZZ;IsMS;f#C+PQp~k zrtG#l(i$1v#-umhR;*msd?2lSB5wC|4CS%be0$@^-Lc_Iy&u=5&P+~kgc_#%a8I(l zn*>DAPnxglpiEkprZ)!T0yJyoM zD@LZ65?l-&zme_gg>@Y@U&ukWjsM0#?CyHI@@V`5M82W*#&wC1>d&wTJyf}MMZQNr z4WC6~7rP%EEN}A;9IlF-e1v@IsrXHrdj}T_mNhr86USJRoPs3iIbJ`^zyWN-kg}jGBfPAppdPom6f>TRHLSGG> zrV7HN4%QQ+*`}FUL9*bh^+;@786-*<=?E@B9z>fl#5}l6h?VFp_X+aWO*QP)rhLG# zCL*jj?{o0tSIPPHn}JQQrDM{<(_H_d?Yg!0eE;aAbVXCxLDRA z2GAa_i`NjH3JAGiTGSTlCN`Z89BQVJi?t;IwMcitn)3{pN7&&`{~NI@L35jWjZW!c zy3m+qZ#p7LVt5VpF&zPO9oZX6l0B|)*f-45sn%Sim9@bhGQ`z>{;bj97@-;%17;ct zz{KL|?(~;Om38xu2fEsUMsFX?`L3yIp@R=5q}h6YWCH3%vKAiGX!vlM_*Y#`UWOOK zIP$7EKXaCW@b|E$x;$^bzG#Z+zyix7FwR)t3(4Z$v;=FE3C=x8glF~4Xu7!AD0bZKIo_+R6d^Q)V}cH_5sLLTPZ{*~*fWMfm`X;m=aI&s_wvEmmzKRPHokgusBLj;?e8(u)X!C8^QsAKke$~pzPjoo* z?Q({z{RGXb@4dZTMepX8beHFnY3m>PHtERlMUbg_iWHE=jsBOn%iM6LhZj~&pR#_K z{f&Y@+tKWK>>Z7HJ_lLpR1!@g92^$h0khocXYti;7Ewfwjjy=SxSk7rf3Rq>u1SoD z_sYJm^qb6!PN9L&mT2h4Kunn{uf|gl1-Rg8!1O;O*)YW}Q7Ex9O!DE9zZQVXd_V$2$n)G;n^U-sp z+O~dSI%z2_5NC!ZRl_E)=`$Gb&Z_upIltPIiVKeojmVtGxAIm_&w|s3$HRcb)==(8 zOFk#NS#1@d5lrC6jU9Ka!euWMP0@Kk+T^Du3ip!i=DggcWfu1DeA?^!*?D%%`Nnh= zA4#{=H}zYnFWLn!`#;`y^IDr9#D}pI$ks@CWYX~p9}f@fFIJyoi+l^zwc2%#7GY!r z8=5~aCG&8XaKG15aI;>3+BA>`Vaq+@}F?J+bbNH;^o(o6lEw?j_jlZAfiKXu+%R&3!G$#7> zRqt>f#Fza{KCTS!@ut35y^+A7{4xLQ-C{Znw3^jFn1$-I+1KBv>L4?~Zm5r8ecniN zuQ!9=F4?MC=t|uGdv9}Z8R7coWyj6yOALoO_9lP%|Lw*|@8DCYjPCJiaHHJ9ZnD8Q z_FAZxSz#JIojUAqYGO1)&6lmIZ|>{;_Ft|hd#^%EB(B1Juk~}~HybksMg+t(!og69 z{@8WN3r^)zaMxB-2EhicHC|eMM|TTmlFgFhj^^VXtdBLz+<8X3kT#^FW_YW=*)w-v zUR0L7+SNpCb`Gbjl^t7j0)oOG&@DX3FeJu?cca^?fO0WWLll~fLk@<=l<(=BxV}gg zqQTlu)(C4(rC+5>y^BQ{q4A5=Y#8F*oOC9hoNDcia91-SmCqZiOp0%lRpOBB#9rw? zoh0A%HyCjjato(4T@m=(p0eI zC2)#3^i6UgYu=Cki}Ui|L2|16GScz(+q)J#^L6(bHi7=i>sY>gUz8JFWj))wi_Qx5 zdwGUR9o}2bZ{H$abw+*z_8@udBW7CpxhwpHHT5Y~?3bFQE+96IyWE?M)Z_SNeobCa zCj9umMfdfiTVp-L@T+L5;;E|zUjF{~5*MlPgQAKN9_Z7gN%Bw{|ES7yw9n9M8Kr7I z$+$Nx3sYlX-p;U=HE{y zTTIfo{dIcZZuK{(K|qYq>U3zydOlCK$nBcgd3LGWNYzqh2HRt=18!=v1a>p4 zeLG3u*QTrHYWJqwGRevCMSXUOlV_836eg5Ov2d#dr>M+{#PV*wmu1PQzV9=-rg$N` zs7lU zaT%gYkL*aqy1y8rdOX?VYCo|(QlXEyZh6O>#Tr#j8pOx2rC}U+Sqv#HVMi0+_!(J> zI~#}5L-)Fn#33GgI&;L2;aAim0~ztnrYPyCl< z=$0}1*<~;Yj&x*NIB)9>FTenLrZ*=GtRMfT{w(vyC$E%Ei8m|*E>I1}wej3n8i82o zzT+j}tREuvwPpNH43l+k{e2$1vDw2xwn znlOeq-062+Q&i%AWym5Jge&UldZQt_itJoJ*xlGNsf~BF-|@a8$mz0)1I zigRKz22&@w?mGxT4NxWwb<-^pR1XllaK^(de3Fgoi~MMri9JGefWMgCB&tR@V758= zv5o^#o5a6q7Np8o!rOX_=%%$BT|V3O%?2CzL+xEp00btIVYuW^a26jYtK}_*z2VEr z!6&iyCqjW3OS3%K3cs=-ZoQgz%6!urW4}fH>1%;YbSv#zq=5Utd0|VO1-iTS-qq?t zWweDar73iW4`Q?Sy_hLW(6s?&@qoPV-X@?UrgW5k=vGpx3#_h~WW*>wJm1xc^#uDsOb)GAZh6t>21V7{>D ztlC(h2AYKFAraB<%5opP6uXzBtZ%MR?7cpribA5hdp~a@FA^om@M>3>zD%}8)6K$I z%mStpo!tkoD?>h>cKGYsR!_Fh%ejL*4lA>}wTH70^*$?fx3P#4x))f`^t1D4cE3Kh z)Xm@MQxL2BLdR1FBr*D>`XWCzHrQzJosJVcv(=prDBP>ajLRki^)%AMH_}_(8`vNB zKG;ZE-KJ&@RkB!UP)?&3rDK+d)DXzT~`jMIOjzUkALK^c}vE7H3Iq%14N z#j$brDvGdN?=TlEj@9I8E-aG6TZth0V%Ukw8U!dG)O}&E0Ct6DjZePZb#M@#6Zi9; zZ~svCvOh_RjN+EwGqctq4watCrc@S=FLq&n#g~mn*O*QK*{+>-FvW&s%AP;`y=NBT z#*@;YsYt76sM$kzSQ8k-l`bbgQhql~{_8v|K3u#Phjo^4Y_@wy)QCX?+YB z#pzbW8L2%$ETRIw{lRL%50_!f7a@G!M7@d>FiiLbcDJSV!GrO|vSgX~1NraMdF%Tc zJ+2I!sDFcxfL-vo*PF}a2v`&~St|f>k&cdBeeALtv5iIWH}DGP5&jT)L}3|#$SQwS zOW}FEx~Y-L&Th2gVi0r#tGKV&14)XPV$O7~t`rSLZN8Ca@SPX>tG)zT3$6gyC_gsV z@yb>me#RM*H4lMd#2nxfz038C#@wJ@9#oDlW5P0sP2z#OVW=@JVgv4xbbNvrxZdl$ zBws`KStQ?xi5DB7b8*0@@hs$Nl~^`JhOg(p^(|Y?)7dF4hBox)i|sQX{tqWII99b< zwLraeW3z`Ht)-gVTUnK=&TGXG96CNy7D@i_h8XZxRw;5odh84%L>>@2jH)I||M)&^ z0ok!T(NWIIzI^AEE_RRi^CTZ8tCzzHm?-P3#!6b(y7PNU^;{mq&P$#{6-UP9{`MJR z9Px25hh7#1s7hdOdXtktw`3aeQ<0fok9*+K;`#NjS6XU=p9a z*1s}Zl@&-?ZGcxcSD%<_t$r<0Rd24$Pp9Fx-AS*+*7RBifUhDgwfOOnYsz8H<@H|8 zUVoK0b#{c{c985@5)MFhOB`mO>lz{7 zD7sHJB2L2Ns^k2S?~_A{>9fvL3!jXhr-ToG*Jxxg7+xJ-P_PP{xO98bmP4(@eT^DN zw5?I_fj9dNYe;T9gW96qPV!uP(Y;f5=$bT+)rmT=99D@g(Gro4O_&pJfQ7c+u5LA0 zle`0`B6jIY!7R}^2zY9ZYl@G2x|pYH4xYulV6Ie*l8H89587yEN25!w3Utyn+J6!&P6+Tr1@r7EXpw72Xi*y?0w z_PDDGk`24W$%JrfqK@>{DyvH)mEG;MsDJ&tdqrm)jdT?{ch@H`tnq>a4&IzmR8u|HU=ebq2}a-fOptd+BDe=NLmvhxlEZk4?s3?oJk10gQmE z2#eLTh2x$TyO_-QAxIM=%hzM7_&a0giJ%x2CK!Z26t8jQvS+!n$b|jf)+>Cix|j@S zxEg+uuJBv@%e6-L!om(5OFMMK$!~Z}@s&=gJLtTgGb8TyioS%)$wV_cM*CWR zUuDU7=OhFAflK70#6P*S?ttx$dGdPx7q)?Ecs(cvw=D9jL_rPu|3qawM>qFL*zo(t zH+-F1H0kl4?`9dlsWaslAv2YEXVafvxc^_YcEd`tAbwrvg-EL2EeBSexzTUxp2NMm z>aAX(hmgBIlYL#6r=!KLz$0B*G!P%p)_H0O@QbAAtVywq6+^vmq&=^vt15e>^{euO ze<(`4kXO>HB=e?0ctSr9SED2AUiX4IL^B@!N^7PEOMYfFbV^T%Y@LVEN5iL!_B@hV ziE*SRcJVvB!kt!1EdwgXjANl8ORR`YguTK*d>(lW%Y!pz56-50EWadTukHHsX8DN` z!;@?a>Zh@97Dx0Lxf8$7v%nRblE$&{!l|wYWAou~5p2f0&g{PFC%Qg8i&)luU5U?~ z%oxL^Qym{W?Cqdg{19$N#5IQ_$$DG!p!?)_x!;W8z5X(c)%9L6v$q;O4E^?Esp_)4 zi!AF>cfgAAO@s4{T4$IzhE;?;aVU_VoSjZ%@^!Vo(|Z3ZIbUv6SbCL0@4DFxu!?wU z<5Js&pLuEP%O>a|q$^`xn_TUsfPmDs_9rPGhR@VDKUp=O1_^FT0@yIQjC!Fpf!KUu zKIBoj4ZCmVGt*&2BV-Le;qLeXT|ILAA94z|@J;%l7a6yq-gT|9Pglj)z3Q|9{)Fu4 zB#(`Amn*ZHfgki!d;ja!!)@Y

??>wgCF(rUH_RJB@kXsa2Kz%1R-aEeknGeq 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 literal 0 HcmV?d00001 diff --git a/Pontu/src/engine/Audio.c b/Pontu/src/engine/Audio.c deleted file mode 100644 index b8ba560..0000000 --- a/Pontu/src/engine/Audio.c +++ /dev/null @@ -1,35 +0,0 @@ -#include "engine/Audio.h" - -struct params { - Mix_Music* music; // AA pointer to the Mix_Music struct used for the current track - char* path; // The path to the new track to be played -}; - -int fadeOut(void* args) { - struct params* argsCast = (struct params*)args; - Mix_Music* newMusic = Mix_LoadMUS(argsCast->path); - if (argsCast->music != NULL) { - if(Mix_FadeOutMusic(500) == 0) { - while (Mix_PlayingMusic()) { - ; - } - } - } - if (newMusic != NULL) { - argsCast->music = newMusic; - return Mix_PlayMusic(argsCast->music,-1); - } - else return -2; -} - -void switchMusic(Mix_Music* music, char path[]) { - struct params args = { - .music = music, - .path = path - }; - SDL_Thread* thread = SDL_CreateThread(&fadeOut, "Fade out", (void*)&args); - - - SDL_DetachThread(thread); // Won't wait until thread is done to continue -} - diff --git a/Pontu/src/engine/AudioHandler.c b/Pontu/src/engine/AudioHandler.c new file mode 100644 index 0000000..06e8ced --- /dev/null +++ b/Pontu/src/engine/AudioHandler.c @@ -0,0 +1,186 @@ +#include "engine/AudioHandler.h" + +// A channel represents the number of SFX we can play at the same time. +// We normally should use only 1 channel, and we add one for safety. +#define NBCHANNELS 2 + +// Local functions + +/* + * Used in a thread. Fades out the currently played music, + * then plays the music passed in as parameter. + * args should be passed as a pointer to void, + * but should actually be a pointer to Mix_Music. + * It is the music we want to play next; + */ +int fadeOut(void* args) { + // Since args is a pointer to void + // (the way C handles undefined types), + // casting args to a pointer to Mix_Music + Mix_Music* = (Mix_Music*)args; + int ret; + + if(Mix_FadeOutMusic(500) == 0) { // Starting the fadeout + while (Mix_PlayingMusic()) { + ; // Waiting until it's done + } + } else { + fprintf(stderr,"WARNING: couldn't fade out"); + Mix_HaltMusic(); + } + + ret = Mix_PlayMusic(argsCast->music,-1); + if (ret != 0) { + fprintf(stderr,"WARNING: %s\n",Mix_GetError()); + } + + // We're supposed to return an int to use SDL_thread. + // We're not using the return value though. + return ret; +} + +// Global functions + +AudioHandler newAudioHandler(int volMusic, int volSFX) { + AudioHandler audioHandler; + int nb_SFX = NB_AUDIO_DEFINED - NB_MUSC_DEFINED - 1; + + // Generating paths to musics and SFX files using macros + char* musicsPaths[] = {MACRO_FOR_ALL_MUSICS(MACRO_TO_MUSIC_PATH)}; + char* sfxPaths[] = {MACRO_FOR_ALL_SFX(MACRO_TO_SFX_PATH)}; + audioHandler.canPlayAudio = true; + + // Initialize + verify opening audio device + if (0 != Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 1024)) { + fprintf(stderr,"Error when initializing audio.\n"); + return audioHandler; + } + + audioHandler.canPlayAudio = true; + + fprintf(stderr,"Musics: %d\nSFX: %d\n",NB_MUSIC_DEFINED,nb_SFX); + + // Loading musics + for (size_t i = 0; i < NB_MUSIC_DEFINED; i++) { + if ((audioHandler.musics[i] = LoadMUS(musicPaths[i]) == NULL)) { + fprintf(stderr,"WARNING: %s\n",Mix_GetError()); + } else { + fprintf(stderr,"Loaded %s\n",musicPaths[i]); + } + } + + Mix_VolumeMusic(volMusic); + + // Initializing SFX + Mix_AllocateChannels(NBCHANNELS); + + // Loading SFX + for (size_t i = 0; i < nb_SFX; i++) { + if ((audioHandler.sfx[i] = Mix_LoadWAV(sfxPaths[i])) == NULL) { + fprintf(stderr,"WARNING: %s\n",Mix_GetError()); + } else { + fprintf(stderr,"Loaded %s\n",sfxPaths[i]); + } + } + + changeSFXVol(volSFX); + return audioHandler; +} + +void changeSFXVol(int volSFX) { + for (size_t i = 0; i < NBCHANNELS; i++) { + Mix_Volume(i, volSFX); + } +} + +void freeAudioHandler(AudioHandler* audioHandler) { + // Freeing the music + Mix_HaltMusic(); + for (size_t i = 0; i < NB_MUSIC_DEFINED; i++) { + if (audioHandler->musics[i] != NULL) { + Mix_FreeMusic(audioHandler->musics[i]); + audioHandler->musics[i] = NULL; // "to be safe...", says the docs + } + } + + // Freeing the SFX + Mix_HaltChannel(-1); // Stopping playback on ALL channels + for (size_t i = 0; i < NB_AUDIO_DEFINED - NB_MUSIC_DEFINED - 1; i++) { + if (audioHandler->sfx[i] != NULL) { + Mix_FreeChunk(audioHandler->sfx[i]); + audioHandler->sfx[i] = NULL; // "to be safe...", says the docs + } + } + Mix_AllocateChannels(0); // Unallocating all channels + + // Un-initializing the audio + Mix_CloseAudio(); + + audioHandler->canPlayAudio = false; +} + +void playMusic(EnumAudios music, AudioHandler audioHandler) { + // music should be a value of EnumAudios that starts by MUSIC_ + // In other words, it should be an enumerator before NB_MUSIC_DEFINED. + if (music >= NB_MUSIC_DEFINED) { + fprintf(stderr,"WARNING: tried to play an arbitrary value as a music\n"); + return; + } + + // Checking if audio has been opened. + if (!(audioHandler.canPlayAudio)) { + fprintf(stderr,"WARNING: tried to play a music with an unusable AudioHandler\n"); + return; + } + + // If another music is playing, fading the previous one out + if (Mix_PlayingMusic()) { + // Creating the thread, passing the music as parameter + SDL_Thread* thread = SDL_CreateThread(&fadeOut, "Fade out", (void*)audioHandler.musics[music]); + if (thread == NULL) { + fprintf(stderr,"WARNING: couldn't create thread to fade out music\n"); + } + // playMusic won't wait until the thread is finished to end + SDL_DetachThread(thread); + // No other music is playing: starting a music normally. + } else { + if (Mix_PlayMusic(audioHandler.musics[music],-1) != 0) { + fprintf("WARNING: %s\n",Mix_GetError()); + } + } +} + +void playSFX(EnumAudios sfx, AudioHandler audioHandler) { + int nb_SFX = NB_AUDIO_DEFINED - NB_MUSIC_DEFINED - 1; + int channel; + Mix_Chunk* chunkSFX; + + // sfx should be a value of EnumAudios that starts by SFX_. + // In other words, it should be an enumerator after NB_MUSIC_DEFINED but before NB_AUDIO_DEFINED. + if (sfx <= NB_MUSIC_DEFINED || sfx >= NB_AUDIO_DEFINED) { + fprintf(stderr,"WARNING: tried to play an arbitrary value as a SFX\n"); + return; + } + + // Checking if SFX has been opened. + if (!(audioHandler.canPlayAudio)) { + fprintf(stderr,"WARNING: tried to play an SFX with an unusable AudioHandler\n"); + return; + } + + // Getting actual chunk + chunkSFX = audioHandler.sfx[sfx - NB_MUSIC_DEFINED - 1]; + // Getting first available channel + channel = Mix_GroupAvailable(-1); + if (channel == -1) { + fprintf(stderr,"WARNING: cannot play SFX because all channels are used\n"); + return; + } + + // Playing the SFX once (0 repetitions) + if (Mix_PlayChannel(channel,chunkSFX,0) != 0) { + fprintf(stderr,"WARNING: %s\n",Mix_GetError()); + return; + } +} + From 08f635a30394808cd5d6978a8d189d6cee139c30 Mon Sep 17 00:00:00 2001 From: marouault Date: Mon, 3 Jan 2022 12:00:47 +0100 Subject: [PATCH 9/9] Completed interactible cases --- Pontu/entryPoints/main.c | 4 +-- Pontu/include/engine/ArrayUtils.h | 47 ++++++++++++++++++++++++++----- Pontu/include/model/Game.h | 2 +- Pontu/src/model/Game.c | 32 +++++++++++++++++---- 4 files changed, 70 insertions(+), 15 deletions(-) diff --git a/Pontu/entryPoints/main.c b/Pontu/entryPoints/main.c index daf442e..25e52db 100644 --- a/Pontu/entryPoints/main.c +++ b/Pontu/entryPoints/main.c @@ -5,9 +5,9 @@ #include "engine/InputElement.h" #include "engine/TextureHandler.h" #include "model/Game.h" -#include "model/arrayCoord.h" #include "view/GameDrawer.h" #include "engine/ArrayUtils.h" +#include "model/arrayCoord.h" #include "debug/printer.h" int main(int argc, char* argv[]) @@ -43,7 +43,7 @@ int main(int argc, char* argv[]) int wBoardRect=99*3, hBoardRect=99*3; SDL_Rect boardRect = {.x=windowSize.w/2 - wBoardRect/2, .y=windowSize.h/2 - hBoardRect/2, .w=wBoardRect, .h=99*3}; const char* pseudos[] = {"Azerty","Bépo"}; - Game game = newGame(2, pseudos); + Game game = newGame(3, pseudos); TextureHandler textureHandler = newTextureHandler(renderer); diff --git a/Pontu/include/engine/ArrayUtils.h b/Pontu/include/engine/ArrayUtils.h index 64e6220..326e48e 100644 --- a/Pontu/include/engine/ArrayUtils.h +++ b/Pontu/include/engine/ArrayUtils.h @@ -11,6 +11,7 @@ #include #include #include +#include /** * \brief Generate a dynamic array for type T @@ -23,34 +24,66 @@ * Don't forget antislashes */ #define GENERATE_DYNAMIC_ARRAY(T) \ -/** \ - * \struct array_##T \ - * \ - * */\ struct array_##T { \ T* elems; \ size_t arraySize; \ + size_t arraySpace; \ }; \ \ /*Contruct an empty array*/\ inline struct array_##T array_##T##_Create() { \ - struct array_##T array = {.elems=NULL, .arraySize=0}; \ + struct array_##T array = {.elems=NULL, .arraySize=0, .arraySpace=0}; \ return array; \ } \ \ -/*Free an array*/\ +/*Free an array*/ \ inline void array_##T##_Free(struct array_##T* array) { \ free(array->elems); \ + array->elems = NULL; \ array->arraySize = 0; \ + array->arraySpace = 0; \ +} \ +\ +/*Reserve space for an array*/\ +inline void array_##T##_Reserve(struct array_##T* array, const size_t space) { \ + array->arraySpace = space; \ + array->elems = realloc(array->elems, sizeof(T)*(array->arraySpace)); \ + if (array->elems == NULL) exit(errno); \ +} \ +\ +/*Fit space to size for an array*/\ +inline void array_##T##_FitToSize(struct array_##T* array) { \ + array->arraySpace = array->arraySize; \ + array->elems = realloc(array->elems, sizeof(T)*(array->arraySpace)); \ + if (array->elems == NULL) exit(errno); \ } \ \ /*Add an element to an array*/\ inline void array_##T##_AddElement(struct array_##T* array, const T element) { \ ++(array->arraySize); \ - array->elems = realloc(array->elems, sizeof(T)*(array->arraySize)); \ + if (array->arraySize > array->arraySpace) { \ + ++(array->arraySpace); \ + array->elems = realloc(array->elems, sizeof(T)*(array->arraySpace)); \ + if (array->elems == NULL) exit(errno); \ + } \ + \ array->elems[array->arraySize - 1] = element; \ } \ \ +/*Remove an element from an array*/\ +inline bool array_##T##_RemoveElement(struct array_##T* array, const T element, bool (*areEqual)(const T, const T)) { \ + for (size_t i=0; iarraySize; ++i) { \ + if (areEqual(array->elems[i], element)) { \ + for (;iarraySize-1; ++i) { \ + array->elems[i] = array->elems[i+1]; \ + } \ + --(array->arraySize); \ + return true; \ + } \ + } \ + return false; \ +} \ +\ /*Check if an array contains an element*/\ inline bool array_##T##_Contains(const struct array_##T* const array, const T element, bool (*areEqual)(const T, const T)) { \ for (size_t i = 0; i < array->arraySize; i++) { \ diff --git a/Pontu/include/model/Game.h b/Pontu/include/model/Game.h index d1f3e5b..d0b423a 100644 --- a/Pontu/include/model/Game.h +++ b/Pontu/include/model/Game.h @@ -1,7 +1,7 @@ /** * \file Game.h * \brief Management of a Game - * \author Théotime Maillarbaux, Jacques Thomas + * \author Théotime Maillarbaux, Jacques Thomas, Martin Rouault * \date 29/11/2021 */ diff --git a/Pontu/src/model/Game.c b/Pontu/src/model/Game.c index 28a73f6..7382f2e 100644 --- a/Pontu/src/model/Game.c +++ b/Pontu/src/model/Game.c @@ -94,7 +94,7 @@ void changePhaseOrPlayerTurn(Game* game) game->board.nbPieces)); - fprintf(stderr, "Player n°%lld turn\n", game->currentPlayerID); + fprintf(stderr, "Player n°%ld turn\n", game->currentPlayerID); fflush(stderr); if (anyOfPlayersPiecesCanMove(game->currentPlayerID, &game->board)) @@ -382,12 +382,31 @@ bool rmBridge(Bridge bridge, Board* board) struct array_Coord getInteractiveCases(const Game* const game, const Coord selectedCase) { switch (game->phase) { - case PLACEMENT: - assert(false && "To be implemented"); - return array_Coord_Create(); - case MOVE_PIECE: { + case PLACEMENT: { struct array_Coord retVal = array_Coord_Create(); + array_Coord_Reserve(&retVal, 25); + for (int y = 0; y<5; y+=2) { + for (int x = 0; x<5; x+=2) { + array_Coord_AddElement(&retVal, newCoord(x,y)); + } + } + + for (size_t i = 0; i < game->board.nbPieces; i++) + { + if (islandValid(game->board.arrPieces[i].island)) { + array_Coord_RemoveElement(&retVal, islandToCoord(&game->board.arrPieces[i].island), &coordEqual); + } + } + + array_Coord_FitToSize(&retVal); + + return retVal; + } + case MOVE_PIECE: { + struct array_Coord retVal = array_Coord_Create(); + array_Coord_Reserve(&retVal, 4); + for (size_t i = 0; i < game->board.nbPieces; ++i) { if (game->board.arrPieces[i].idJ == game->currentPlayerID && !game->board.arrPieces[i].stuck) { @@ -416,10 +435,13 @@ struct array_Coord getInteractiveCases(const Game* const game, const Coord selec free(islands); } } + + array_Coord_FitToSize(&retVal); return retVal; } case RM_BRIDGE: { struct array_Coord retVal = array_Coord_Create(); + array_Coord_Reserve(&retVal, 40); for (size_t y = 0; y<5; ++y) { for (size_t x = 0; x<4; ++x) {