From cc3d3a67e6d3bcf21d3c13f196786837a875c0ed Mon Sep 17 00:00:00 2001 From: Sryder13 Date: Sun, 26 Jul 2015 20:14:47 +0100 Subject: [PATCH 001/121] Colour Changing MD2s I don't know how I can move my old branch over so I've just created a new one. --- src/hardware/hw_md2.c | 314 +++++++++++++++++++++++++++++++++++++++++- src/hardware/hw_md2.h | 1 + 2 files changed, 312 insertions(+), 3 deletions(-) diff --git a/src/hardware/hw_md2.c b/src/hardware/hw_md2.c index 02f505351..8953b3a88 100644 --- a/src/hardware/hw_md2.c +++ b/src/hardware/hw_md2.c @@ -41,6 +41,7 @@ #include "../r_things.h" #include "hw_main.h" +#include "../v_video.h" #ifdef HAVE_PNG #ifndef _MSC_VER @@ -881,6 +882,59 @@ static void md2_loadTexture(md2_t *model) HWR_UnlockCachedPatch(grpatch); } +// -----------------+ +// md2_loadBlendTexture : Download a pcx or png texture for blending MD2 models +// -----------------+ +static void md2_loadBlendTexture(md2_t *model) +{ + GLPatch_t *grpatch; + char *filename = Z_Malloc(strlen(model->filename)+7, PU_STATIC, NULL); + strcpy(filename, model->filename); + + FIL_ForceExtension(filename, "_blend.png"); + + if (model->blendgrpatch) + { + grpatch = model->blendgrpatch; + Z_Free(grpatch->mipmap.grInfo.data); + } + else + grpatch = Z_Calloc(sizeof *grpatch, PU_HWRPATCHINFO, + &(model->blendgrpatch)); + + if (!grpatch->mipmap.downloaded && !grpatch->mipmap.grInfo.data) + { + int w = 0, h = 0; +#ifdef HAVE_PNG + grpatch->mipmap.grInfo.format = PNG_Load(filename, &w, &h, grpatch); + if (grpatch->mipmap.grInfo.format == 0) +#endif + grpatch->mipmap.grInfo.format = PCX_Load(filename, &w, &h, grpatch); + if (grpatch->mipmap.grInfo.format == 0) + { + Z_Free(filename); + return; + } + + grpatch->mipmap.downloaded = 0; + grpatch->mipmap.flags = 0; + + grpatch->width = (INT16)w; + grpatch->height = (INT16)h; + grpatch->mipmap.width = (UINT16)w; + grpatch->mipmap.height = (UINT16)h; + + // not correct! + grpatch->mipmap.grInfo.smallLodLog2 = GR_LOD_LOG2_256; + grpatch->mipmap.grInfo.largeLodLog2 = GR_LOD_LOG2_256; + grpatch->mipmap.grInfo.aspectRatioLog2 = GR_ASPECT_LOG2_1x1; + } + HWD.pfnSetTexture(&grpatch->mipmap); // We do need to do this so that it can be cleared and knows to recreate it when necessary + HWR_UnlockCachedPatch(grpatch); + + Z_Free(filename); +} + // Don't spam the console, or the OS with fopen requests! static boolean nomd2s = false; @@ -1058,6 +1112,248 @@ void HWR_AddSpriteMD2(size_t spritenum) // For MD2s that were added after startu fclose(f); } +static void HWR_CreateBlendedTexture(GLPatch_t *gpatch, GLPatch_t *blendgpatch, GLMipmap_t *grmip, skincolors_t color) +{ + UINT16 w = gpatch->width, h = gpatch->height; + UINT32 size = w*h; + RGBA_t *image, *blendimage, *cur, blendcolor; + + if (grmip->width == 0) + { + + grmip->width = gpatch->width; + grmip->height = gpatch->height; + + // no wrap around, no chroma key + grmip->flags = 0; + // setup the texture info + grmip->grInfo.format = GR_RGBA; + } + + Z_Free(grmip->grInfo.data); + grmip->grInfo.data = NULL; + + cur = Z_Malloc(size*4, PU_HWRCACHE, &grmip->grInfo.data); + memset(cur, 0x00, size*4); + + image = gpatch->mipmap.grInfo.data; + blendimage = blendgpatch->mipmap.grInfo.data; + + switch (color) + { + case SKINCOLOR_WHITE: + blendcolor = V_GetColor(3); + break; + case SKINCOLOR_SILVER: + blendcolor = V_GetColor(11); + break; + case SKINCOLOR_GREY: + blendcolor = V_GetColor(23); + break; + case SKINCOLOR_BLACK: + blendcolor = V_GetColor(27); + break; + case SKINCOLOR_CYAN: + blendcolor = V_GetColor(216); + break; + case SKINCOLOR_TEAL: + blendcolor = V_GetColor(220); + break; + case SKINCOLOR_STEELBLUE: + blendcolor = V_GetColor(204); + break; + case SKINCOLOR_BLUE: + blendcolor = V_GetColor(234); + break; + case SKINCOLOR_PEACH: + blendcolor = V_GetColor(73); + break; + case SKINCOLOR_TAN: + blendcolor = V_GetColor(49); + break; + case SKINCOLOR_PINK: + blendcolor = V_GetColor(146); + break; + case SKINCOLOR_LAVENDER: + blendcolor = V_GetColor(252); + break; + case SKINCOLOR_PURPLE: + blendcolor = V_GetColor(195); + break; + case SKINCOLOR_ORANGE: + blendcolor = V_GetColor(87); + break; + case SKINCOLOR_ROSEWOOD: + blendcolor = V_GetColor(94); + break; + case SKINCOLOR_BEIGE: + blendcolor = V_GetColor(40); + break; + case SKINCOLOR_BROWN: + blendcolor = V_GetColor(57); + break; + case SKINCOLOR_RED: + blendcolor = V_GetColor(130); + break; + case SKINCOLOR_DARKRED: + blendcolor = V_GetColor(139); + break; + case SKINCOLOR_NEONGREEN: + blendcolor = V_GetColor(184); + break; + case SKINCOLOR_GREEN: + blendcolor = V_GetColor(170); + break; + case SKINCOLOR_ZIM: + blendcolor = V_GetColor(180); + break; + case SKINCOLOR_OLIVE: + blendcolor = V_GetColor(108); + break; + case SKINCOLOR_YELLOW: + blendcolor = V_GetColor(104); + break; + case SKINCOLOR_GOLD: + blendcolor = V_GetColor(115); + break; + + case SKINCOLOR_SUPER1: + blendcolor = V_GetColor(101); + break; + case SKINCOLOR_SUPER2: + blendcolor = V_GetColor(113); + break; + case SKINCOLOR_SUPER3: + blendcolor = V_GetColor(114); + break; + case SKINCOLOR_SUPER4: + blendcolor = V_GetColor(116); + break; + case SKINCOLOR_SUPER5: + blendcolor = V_GetColor(119); + break; + + case SKINCOLOR_TSUPER1: + blendcolor = V_GetColor(80); + break; + case SKINCOLOR_TSUPER2: + blendcolor = V_GetColor(82); + break; + case SKINCOLOR_TSUPER3: + blendcolor = V_GetColor(84); + break; + case SKINCOLOR_TSUPER4: + blendcolor = V_GetColor(85); + break; + case SKINCOLOR_TSUPER5: + blendcolor = V_GetColor(87); + break; + + case SKINCOLOR_KSUPER1: + blendcolor = V_GetColor(122); + break; + case SKINCOLOR_KSUPER2: + blendcolor = V_GetColor(123); + break; + case SKINCOLOR_KSUPER3: + blendcolor = V_GetColor(124); + break; + case SKINCOLOR_KSUPER4: + blendcolor = V_GetColor(125); + break; + case SKINCOLOR_KSUPER5: + blendcolor = V_GetColor(126); + break; + default: + blendcolor = V_GetColor(247); + break; + } + + while (size--) + { + if (blendimage->s.alpha == 0) + { + // Don't bother with blending the pixel if the alpha of the blend pixel is 0 + cur->rgba = image->rgba; + } + else + { + INT32 tempcolor; + INT16 tempmult, tempalpha; + tempalpha = -(abs(blendimage->s.red-127)-127)*2; + if (tempalpha > 255) + tempalpha = 255; + else if (tempalpha < 0) + tempalpha = 0; + + tempmult = (blendimage->s.red-127)*2; + if (tempmult > 255) + tempmult = 255; + else if (tempmult < 0) + tempmult = 0; + + tempcolor = (image->s.red*(255-blendimage->s.alpha))/255 + ((tempmult + ((tempalpha*blendcolor.s.red)/255)) * blendimage->s.alpha)/255; + cur->s.red = (UINT8)tempcolor; + tempcolor = (image->s.green*(255-blendimage->s.alpha))/255 + ((tempmult + ((tempalpha*blendcolor.s.green)/255)) * blendimage->s.alpha)/255; + cur->s.green = (UINT8)tempcolor; + tempcolor = (image->s.blue*(255-blendimage->s.alpha))/255 + ((tempmult + ((tempalpha*blendcolor.s.blue)/255)) * blendimage->s.alpha)/255; + cur->s.blue = (UINT8)tempcolor; + cur->s.alpha = image->s.alpha; + } + + cur++; image++; blendimage++; + } + + return; +} + +static void HWR_GetBlendedTexture(GLPatch_t *gpatch, GLPatch_t *blendgpatch, const UINT8 *colormap, skincolors_t color) +{ + // mostly copied from HWR_GetMappedPatch, hence the similarities and comment + GLMipmap_t *grmip, *newmip; + + if (colormap == colormaps || colormap == NULL) + { + // Don't do any blending + HWD.pfnSetTexture(&gpatch->mipmap); + return; + } + + // search for the mimmap + // skip the first (no colormap translated) + for (grmip = &gpatch->mipmap; grmip->nextcolormap; ) + { + grmip = grmip->nextcolormap; + if (grmip->colormap == colormap) + { + if (grmip->downloaded && grmip->grInfo.data) + { + HWD.pfnSetTexture(grmip); // found the colormap, set it to the correct texture + Z_ChangeTag(grmip->grInfo.data, PU_HWRCACHE_UNLOCKED); + return; + } + } + } + + // If here, the blended texture has not been created + // So we create it + + //BP: WARNING: don't free it manually without clearing the cache of harware renderer + // (it have a liste of mipmap) + // this malloc is cleared in HWR_FreeTextureCache + // (...) unfortunately z_malloc fragment alot the memory :(so malloc is better + newmip = calloc(1, sizeof (*newmip)); + if (newmip == NULL) + I_Error("%s: Out of memory", "HWR_GetMappedPatch"); + grmip->nextcolormap = newmip; + newmip->colormap = colormap; + + HWR_CreateBlendedTexture(gpatch, blendgpatch, newmip, color); + + HWD.pfnSetTexture(newmip); + Z_ChangeTag(newmip->grInfo.data, PU_HWRCACHE_UNLOCKED); +} + // -----------------+ // HWR_DrawMD2 : Draw MD2 @@ -1194,13 +1490,25 @@ void HWR_DrawMD2(gr_vissprite_t *spr) gpatch = md2->grpatch; if (!gpatch || !gpatch->mipmap.grInfo.format || !gpatch->mipmap.downloaded) md2_loadTexture(md2); - gpatch = md2->grpatch; // Load it again, because it isn't being loaded into gpatch after md2_loadtexture... + if ((gpatch && gpatch->mipmap.grInfo.format) // don't load the blend texture if the base texture isn't available + && (!md2->blendgrpatch || !((GLPatch_t *)md2->blendgrpatch)->mipmap.grInfo.format || !((GLPatch_t *)md2->blendgrpatch)->mipmap.downloaded)) + md2_loadBlendTexture(md2); + if (gpatch && gpatch->mipmap.grInfo.format) // else if meant that if a texture couldn't be loaded, it would just end up using something else's texture { - // This is safe, since we know the texture has been downloaded - HWD.pfnSetTexture(&gpatch->mipmap); + if ((skincolors_t)spr->mobj->color != SKINCOLOR_NONE && + md2->blendgrpatch && ((GLPatch_t *)md2->blendgrpatch)->mipmap.grInfo.format + && gpatch->width == ((GLPatch_t *)md2->blendgrpatch)->width && gpatch->height == ((GLPatch_t *)md2->blendgrpatch)->height) + { + HWR_GetBlendedTexture(gpatch, (GLPatch_t *)md2->blendgrpatch, spr->colormap, (skincolors_t)spr->mobj->color); + } + else + { + // This is safe, since we know the texture has been downloaded + HWD.pfnSetTexture(&gpatch->mipmap); + } } else { diff --git a/src/hardware/hw_md2.h b/src/hardware/hw_md2.h index 0fb486ea0..36078268b 100644 --- a/src/hardware/hw_md2.h +++ b/src/hardware/hw_md2.h @@ -120,6 +120,7 @@ typedef struct float offset; md2_model_t *model; void *grpatch; + void *blendgrpatch; boolean notfound; INT32 skin; } md2_t; From d050a60f3600eea067c2476f8d8461309ec2b515 Mon Sep 17 00:00:00 2001 From: Sryder13 Date: Mon, 3 Aug 2015 02:01:56 +0100 Subject: [PATCH 002/121] Change a few colours. --- src/hardware/hw_md2.c | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/hardware/hw_md2.c b/src/hardware/hw_md2.c index 8953b3a88..e4b839b68 100644 --- a/src/hardware/hw_md2.c +++ b/src/hardware/hw_md2.c @@ -1145,37 +1145,37 @@ static void HWR_CreateBlendedTexture(GLPatch_t *gpatch, GLPatch_t *blendgpatch, blendcolor = V_GetColor(3); break; case SKINCOLOR_SILVER: - blendcolor = V_GetColor(11); + blendcolor = V_GetColor(10); break; case SKINCOLOR_GREY: - blendcolor = V_GetColor(23); + blendcolor = V_GetColor(15); break; case SKINCOLOR_BLACK: blendcolor = V_GetColor(27); break; case SKINCOLOR_CYAN: - blendcolor = V_GetColor(216); + blendcolor = V_GetColor(215); break; case SKINCOLOR_TEAL: - blendcolor = V_GetColor(220); + blendcolor = V_GetColor(221); break; case SKINCOLOR_STEELBLUE: - blendcolor = V_GetColor(204); + blendcolor = V_GetColor(203); break; case SKINCOLOR_BLUE: - blendcolor = V_GetColor(234); + blendcolor = V_GetColor(232); break; case SKINCOLOR_PEACH: - blendcolor = V_GetColor(73); + blendcolor = V_GetColor(71); break; case SKINCOLOR_TAN: - blendcolor = V_GetColor(49); + blendcolor = V_GetColor(79); break; case SKINCOLOR_PINK: - blendcolor = V_GetColor(146); + blendcolor = V_GetColor(147); break; case SKINCOLOR_LAVENDER: - blendcolor = V_GetColor(252); + blendcolor = V_GetColor(251); break; case SKINCOLOR_PURPLE: blendcolor = V_GetColor(195); @@ -1202,7 +1202,7 @@ static void HWR_CreateBlendedTexture(GLPatch_t *gpatch, GLPatch_t *blendgpatch, blendcolor = V_GetColor(184); break; case SKINCOLOR_GREEN: - blendcolor = V_GetColor(170); + blendcolor = V_GetColor(166); break; case SKINCOLOR_ZIM: blendcolor = V_GetColor(180); @@ -1218,23 +1218,23 @@ static void HWR_CreateBlendedTexture(GLPatch_t *gpatch, GLPatch_t *blendgpatch, break; case SKINCOLOR_SUPER1: - blendcolor = V_GetColor(101); + blendcolor = V_GetColor(97); break; case SKINCOLOR_SUPER2: - blendcolor = V_GetColor(113); + blendcolor = V_GetColor(100); break; case SKINCOLOR_SUPER3: - blendcolor = V_GetColor(114); + blendcolor = V_GetColor(103); break; case SKINCOLOR_SUPER4: - blendcolor = V_GetColor(116); + blendcolor = V_GetColor(113); break; case SKINCOLOR_SUPER5: - blendcolor = V_GetColor(119); + blendcolor = V_GetColor(116); break; case SKINCOLOR_TSUPER1: - blendcolor = V_GetColor(80); + blendcolor = V_GetColor(81); break; case SKINCOLOR_TSUPER2: blendcolor = V_GetColor(82); From 7d914913dd94400ad3369b152aa02d845774bd4b Mon Sep 17 00:00:00 2001 From: Sean Ryder Date: Wed, 20 Jan 2016 15:55:32 +0000 Subject: [PATCH 003/121] Tabbing --- src/hardware/hw_md2.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hardware/hw_md2.c b/src/hardware/hw_md2.c index e4b839b68..0745b9a00 100644 --- a/src/hardware/hw_md2.c +++ b/src/hardware/hw_md2.c @@ -1115,8 +1115,8 @@ void HWR_AddSpriteMD2(size_t spritenum) // For MD2s that were added after startu static void HWR_CreateBlendedTexture(GLPatch_t *gpatch, GLPatch_t *blendgpatch, GLMipmap_t *grmip, skincolors_t color) { UINT16 w = gpatch->width, h = gpatch->height; - UINT32 size = w*h; - RGBA_t *image, *blendimage, *cur, blendcolor; + UINT32 size = w*h; + RGBA_t *image, *blendimage, *cur, blendcolor; if (grmip->width == 0) { From 7d6dc3a5bb64e1ad8fe1ac091fbcff8c11ef7bcf Mon Sep 17 00:00:00 2001 From: Inuyasha Date: Wed, 20 Jan 2016 09:25:28 -0800 Subject: [PATCH 004/121] fix bad lstring usage in map header lua This is not how you use pushlstring! This is actually sending uninitialized memory to Lua, which is making scripts have inconsistent results (duh?) c/o JTE: "Tell Red they're a doofus." --- src/lua_maplib.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/lua_maplib.c b/src/lua_maplib.c index 0a12478ca..85c3b094c 100644 --- a/src/lua_maplib.c +++ b/src/lua_maplib.c @@ -1162,9 +1162,9 @@ static int mapheaderinfo_get(lua_State *L) //for (i = 0; i < 21; i++) // if (!header->lvlttl[i]) // break; - lua_pushlstring(L, header->lvlttl, 21); + lua_pushstring(L, header->lvlttl); } else if (fastcmp(field,"subttl")) - lua_pushlstring(L, header->subttl, 32); + lua_pushstring(L, header->subttl); else if (fastcmp(field,"actnum")) lua_pushinteger(L, header->actnum); else if (fastcmp(field,"typeoflevel")) @@ -1176,7 +1176,7 @@ static int mapheaderinfo_get(lua_State *L) else if (fastcmp(field,"musicslottrack")) lua_pushinteger(L, header->musicslottrack); else if (fastcmp(field,"forcecharacter")) - lua_pushlstring(L, header->forcecharacter, 16); + lua_pushstring(L, header->forcecharacter); else if (fastcmp(field,"weather")) lua_pushinteger(L, header->weather); else if (fastcmp(field,"skynum")) @@ -1188,11 +1188,11 @@ static int mapheaderinfo_get(lua_State *L) else if (fastcmp(field,"skybox_scalez")) lua_pushinteger(L, header->skybox_scalez); else if (fastcmp(field,"interscreen")) - lua_pushlstring(L, header->interscreen, 8); + lua_pushstring(L, header->interscreen); else if (fastcmp(field,"runsoc")) - lua_pushlstring(L, header->runsoc, 32); + lua_pushstring(L, header->runsoc); else if (fastcmp(field,"scriptname")) - lua_pushlstring(L, header->scriptname, 32); + lua_pushstring(L, header->scriptname); else if (fastcmp(field,"precutscenenum")) lua_pushinteger(L, header->precutscenenum); else if (fastcmp(field,"cutscenenum")) @@ -1221,7 +1221,7 @@ static int mapheaderinfo_get(lua_State *L) for (;i < header->numCustomOptions && !fastcmp(field, header->customopts[i].option); ++i); if(i < header->numCustomOptions) - lua_pushlstring(L, header->customopts[i].value, 255); + lua_pushstring(L, header->customopts[i].value); else lua_pushnil(L); } From 9d5718760dd287947392b09abe7ce5b2520ebce6 Mon Sep 17 00:00:00 2001 From: Inuyasha Date: Wed, 20 Jan 2016 09:42:35 -0800 Subject: [PATCH 005/121] interscreen is a lump name and thus needs lstring ... not just lstring though, but the behavior with i that is used elsewhere. --- src/lua_maplib.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/lua_maplib.c b/src/lua_maplib.c index 85c3b094c..6f28997ac 100644 --- a/src/lua_maplib.c +++ b/src/lua_maplib.c @@ -1157,13 +1157,10 @@ static int mapheaderinfo_get(lua_State *L) { mapheader_t *header = *((mapheader_t **)luaL_checkudata(L, 1, META_MAPHEADER)); const char *field = luaL_checkstring(L, 2); - //INT16 i; - if (fastcmp(field,"lvlttl")) { - //for (i = 0; i < 21; i++) - // if (!header->lvlttl[i]) - // break; + INT16 i; + if (fastcmp(field,"lvlttl")) lua_pushstring(L, header->lvlttl); - } else if (fastcmp(field,"subttl")) + else if (fastcmp(field,"subttl")) lua_pushstring(L, header->subttl); else if (fastcmp(field,"actnum")) lua_pushinteger(L, header->actnum); @@ -1187,9 +1184,12 @@ static int mapheaderinfo_get(lua_State *L) lua_pushinteger(L, header->skybox_scaley); else if (fastcmp(field,"skybox_scalez")) lua_pushinteger(L, header->skybox_scalez); - else if (fastcmp(field,"interscreen")) - lua_pushstring(L, header->interscreen); - else if (fastcmp(field,"runsoc")) + else if (fastcmp(field,"interscreen")) { + for (i = 0; i < 8; i++) + if (!header->interscreen[i]) + break; + lua_pushlstring(L, header->interscreen, i); + } else if (fastcmp(field,"runsoc")) lua_pushstring(L, header->runsoc); else if (fastcmp(field,"scriptname")) lua_pushstring(L, header->scriptname); From c33d20acff6b712acc293bc97327b3021786a184 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Thu, 21 Jan 2016 13:50:05 -0500 Subject: [PATCH 006/121] whitespace cleanup --- src/r_bsp.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/r_bsp.c b/src/r_bsp.c index badf8bdac..c547713be 100644 --- a/src/r_bsp.c +++ b/src/r_bsp.c @@ -935,14 +935,14 @@ static void R_Subsector(size_t num) ffloor[numffloors].plane = NULL; ffloor[numffloors].polyobj = NULL; - - floorcenterz = + + floorcenterz = #ifdef ESLOPE frontsector->f_slope ? P_GetZAt(frontsector->f_slope, frontsector->soundorg.x, frontsector->soundorg.y) : #endif frontsector->floorheight; - - ceilingcenterz = + + ceilingcenterz = #ifdef ESLOPE frontsector->c_slope ? P_GetZAt(frontsector->c_slope, frontsector->soundorg.x, frontsector->soundorg.y) : #endif @@ -953,8 +953,8 @@ static void R_Subsector(size_t num) *rover->b_slope ? P_GetZAt(*rover->b_slope, viewx, viewy) : #endif *rover->bottomheight; - - planecenterz = + + planecenterz = #ifdef ESLOPE *rover->b_slope ? P_GetZAt(*rover->b_slope, frontsector->soundorg.x, frontsector->soundorg.y) : #endif @@ -966,7 +966,7 @@ static void R_Subsector(size_t num) { light = R_GetPlaneLight(frontsector, planecenterz, viewz < *rover->bottomheight); - + ffloor[numffloors].plane = R_FindPlane(*rover->bottomheight, *rover->bottompic, *frontsector->lightlist[light].lightlevel, *rover->bottomxoffs, *rover->bottomyoffs, *rover->bottomangle, frontsector->lightlist[light].extra_colormap, rover @@ -1002,8 +1002,8 @@ static void R_Subsector(size_t num) *rover->t_slope ? P_GetZAt(*rover->t_slope, viewx, viewy) : #endif *rover->topheight; - - planecenterz = + + planecenterz = #ifdef ESLOPE *rover->t_slope ? P_GetZAt(*rover->t_slope, frontsector->soundorg.x, frontsector->soundorg.y) : #endif @@ -1014,7 +1014,7 @@ static void R_Subsector(size_t num) || (viewz < heightcheck && (rover->flags & FF_BOTHPLANES)))) { light = R_GetPlaneLight(frontsector, planecenterz, viewz < *rover->topheight); - + ffloor[numffloors].plane = R_FindPlane(*rover->topheight, *rover->toppic, *frontsector->lightlist[light].lightlevel, *rover->topxoffs, *rover->topyoffs, *rover->topangle, frontsector->lightlist[light].extra_colormap, rover From ccb0abb853233e414a1734bf2556f556d4580320 Mon Sep 17 00:00:00 2001 From: Monster Iestyn Date: Thu, 21 Jan 2016 20:19:43 +0000 Subject: [PATCH 007/121] Diagonal ring springs should now be able to face any angle --- src/p_mobj.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index 0f25a8655..25ae8815a 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -9696,7 +9696,7 @@ void P_SpawnHoopsAndRings(mapthing_t *mthing) // Diagonal rings (handles both types) else if (mthing->type == 602 || mthing->type == 603) // Diagonal rings (5) { - angle_t angle = ANGLE_45 * (mthing->angle/45); + angle_t angle = FixedAngle(mthing->angle*FRACUNIT); mobjtype_t ringthing = MT_RING; INT32 iterations = 5; if (mthing->type == 603) From 674ff5115392fea76bd757e39d6312924f70739d Mon Sep 17 00:00:00 2001 From: Monster Iestyn Date: Thu, 21 Jan 2016 20:27:35 +0000 Subject: [PATCH 008/121] Fix shadowing in mapheaderinfo_get --- src/lua_maplib.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lua_maplib.c b/src/lua_maplib.c index 6f28997ac..38920c223 100644 --- a/src/lua_maplib.c +++ b/src/lua_maplib.c @@ -1217,11 +1217,11 @@ static int mapheaderinfo_get(lua_State *L) else { // Read custom vars now // (note: don't include the "LUA." in your lua scripts!) - UINT8 i = 0; - for (;i < header->numCustomOptions && !fastcmp(field, header->customopts[i].option); ++i); + UINT8 j = 0; + for (;j < header->numCustomOptions && !fastcmp(field, header->customopts[j].option); ++j); - if(i < header->numCustomOptions) - lua_pushstring(L, header->customopts[i].value); + if(j < header->numCustomOptions) + lua_pushstring(L, header->customopts[j].value); else lua_pushnil(L); } From 181c875016a74a2e6161daaad089b45f6f2dd325 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Thu, 14 Jan 2016 12:32:04 -0500 Subject: [PATCH 009/121] SDL: config.h.in is pre source tree, config.h for each cmake build --- src/sdl/i_system.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sdl/i_system.c b/src/sdl/i_system.c index 4b45c373c..da4111538 100644 --- a/src/sdl/i_system.c +++ b/src/sdl/i_system.c @@ -21,7 +21,7 @@ /// \brief SRB2 system stuff for SDL #ifdef CMAKECONFIG -#include "../config.h" +#include "config.h" #else #include "../config.h.in" #endif From 80fb282334435ff7ee566e4ff08e46d4833b2b2a Mon Sep 17 00:00:00 2001 From: Monster Iestyn Date: Sat, 23 Jan 2016 18:59:17 +0000 Subject: [PATCH 010/121] Fixed math for calculating current texture in texture animations --- src/p_spec.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/p_spec.c b/src/p_spec.c index cac822ac8..81994d46c 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -4671,11 +4671,11 @@ void P_UpdateSpecials(void) // ANIMATE TEXTURES for (anim = anims; anim < lastanim; anim++) { - for (i = anim->basepic; i < anim->basepic + anim->numpics; i++) + for (i = 0; i < anim->numpics; i++) { pic = anim->basepic + ((leveltime/anim->speed + i) % anim->numpics); if (anim->istexture) - texturetranslation[i] = pic; + texturetranslation[anim->basepic+i] = pic; } } From 3db1a1fe9f6a93bf6b1f37439c73bb28c9903fb4 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Tue, 26 Jan 2016 23:30:53 -0500 Subject: [PATCH 011/121] add/test appveyor build --- appveyor.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 appveyor.yml diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 000000000..cf7fb8507 --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,4 @@ +version: 1.0.{build} +os: MinGW +build_script: +- cmd: make -C src MINGW=1 \ No newline at end of file From b8cafea40aebd5680d0d3808dc8f9f2e05277efc Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Tue, 26 Jan 2016 23:56:22 -0500 Subject: [PATCH 012/121] appveyor: full path to make binary and no asm or png support --- appveyor.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index cf7fb8507..871e13195 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,5 @@ version: 1.0.{build} os: MinGW build_script: -- cmd: make -C src MINGW=1 \ No newline at end of file +- cmd: C:\MinGW\bin\make.exe -C src MINGW=1 NOASM=1 NOPNG=1 + From 21c30a396c692915cea33d1b964bd9b3c250560c Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Wed, 27 Jan 2016 00:11:54 -0500 Subject: [PATCH 013/121] appveyor: allow one to RDP to system to debug build system --- .gitattributes | 2 ++ appveyor.yml | 3 +++ 2 files changed, 5 insertions(+) diff --git a/.gitattributes b/.gitattributes index 777bf189a..ef775b912 100644 --- a/.gitattributes +++ b/.gitattributes @@ -29,4 +29,6 @@ /libs/zlib/nintendods/README -whitespace /libs/zlib/watcom/watcom_f.mak -crlf -whitespace /libs/zlib/watcom/watcom_l.mak -crlf -whitespace +#Appveyor +/appveyor.yml -crlf -whitespace # Other diff --git a/appveyor.yml b/appveyor.yml index 871e13195..ee6e3e97f 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,5 +1,8 @@ version: 1.0.{build} os: MinGW + build_script: - cmd: C:\MinGW\bin\make.exe -C src MINGW=1 NOASM=1 NOPNG=1 +on_finish: +-ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) From 289b5506bff6b1a45aa8e54a044204e9c2e04d16 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Wed, 27 Jan 2016 00:15:09 -0500 Subject: [PATCH 014/121] appveyor: whitespace? --- appveyor.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/appveyor.yml b/appveyor.yml index ee6e3e97f..cf84de502 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -6,3 +6,4 @@ build_script: on_finish: -ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) + From cbd85e6baff8608ad1a9044ce3d95bf91c47f7e2 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Wed, 27 Jan 2016 00:27:28 -0500 Subject: [PATCH 015/121] appveyor: spacing --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index cf84de502..e871bb3e8 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -5,5 +5,5 @@ build_script: - cmd: C:\MinGW\bin\make.exe -C src MINGW=1 NOASM=1 NOPNG=1 on_finish: --ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) +- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) From 8ad8533880232163d96d7ed34593035717ad6c3c Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Wed, 27 Jan 2016 01:09:51 -0500 Subject: [PATCH 016/121] appveyor: found mingw64 32-bit target, do not build with UPX --- appveyor.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index e871bb3e8..6c5317987 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,9 +1,14 @@ version: 1.0.{build} os: MinGW +install: +- set PATH=C:\mingw64\bin;%PATH% +- set CC=i686-w64-mingw32-gcc +- set WINDRES=windres + build_script: -- cmd: C:\MinGW\bin\make.exe -C src MINGW=1 NOASM=1 NOPNG=1 +- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 on_finish: -- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) +#- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) From 113a3cd6fc53736ddb90960a88ee71ecc51ddb1e Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Wed, 27 Jan 2016 01:16:42 -0500 Subject: [PATCH 017/121] appveyor: try again --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 6c5317987..b965a1130 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,12 +1,12 @@ -version: 1.0.{build} +version: 2.1.14.{branch}-{build} os: MinGW install: -- set PATH=C:\mingw64\bin;%PATH% - set CC=i686-w64-mingw32-gcc - set WINDRES=windres build_script: +- set Path=C:\mingw64\bin;%Path% - cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 on_finish: From 85de668d1a4ea54f9fcb0c183206f562f8c80419 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Wed, 27 Jan 2016 01:21:29 -0500 Subject: [PATCH 018/121] appveyor: move set to before_build, and drop gcc and make version --- appveyor.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index b965a1130..69d4be7e4 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -5,8 +5,12 @@ install: - set CC=i686-w64-mingw32-gcc - set WINDRES=windres +before_build: +- set Path=c:\mingw64\bin;%Path% +- i686-w64-mingw32-gcc --version +- mingw32-make --version + build_script: -- set Path=C:\mingw64\bin;%Path% - cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 on_finish: From 6e1b9549fc9739f863d8c70c02df05c9fef5392d Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Wed, 27 Jan 2016 01:24:32 -0500 Subject: [PATCH 019/121] appveyor: fullpath to binaries --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 69d4be7e4..81f71cc8c 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -7,8 +7,8 @@ install: before_build: - set Path=c:\mingw64\bin;%Path% -- i686-w64-mingw32-gcc --version -- mingw32-make --version +- c:\mingw64\bin\i686-w64-mingw32-gcc --version +- c:\mingw64\bin\mingw32-make --version build_script: - cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 From 443562c3c01cfb96f3fa10e29f125e81e5b3954a Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Wed, 27 Jan 2016 01:26:36 -0500 Subject: [PATCH 020/121] appveyor: why is this failing --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 81f71cc8c..20644c556 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -14,5 +14,5 @@ build_script: - cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 on_finish: -#- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) +- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) From 1a72f2f1db9220e21fafd38114e0864056065008 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Wed, 27 Jan 2016 01:32:53 -0500 Subject: [PATCH 021/121] appveyor: wrong path... --- appveyor.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 20644c556..a0cbfae47 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -6,13 +6,13 @@ install: - set WINDRES=windres before_build: -- set Path=c:\mingw64\bin;%Path% -- c:\mingw64\bin\i686-w64-mingw32-gcc --version -- c:\mingw64\bin\mingw32-make --version +- set Path=c:\msys64\mingw32\bin;%Path% +- i686-w64-mingw32-gcc --version +- mingw32-make --version build_script: - cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 on_finish: -- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) +#- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) From d0ce9170da8b6b4b2598883ec3938fb8016fd6d2 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Wed, 27 Jan 2016 01:39:12 -0500 Subject: [PATCH 022/121] appveyor: build for GCC 5.2 --- appveyor.yml | 2 +- src/Makefile.cfg | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index a0cbfae47..6c727568b 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -11,7 +11,7 @@ before_build: - mingw32-make --version build_script: -- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 +- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 on_finish: #- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) diff --git a/src/Makefile.cfg b/src/Makefile.cfg index 1ea96df92..d6af0d8a7 100644 --- a/src/Makefile.cfg +++ b/src/Makefile.cfg @@ -7,6 +7,22 @@ # and other things # +ifdef GCC53 +GCC52=1 +endif + +ifdef GCC52 +GCC51=1 +endif + +ifdef GCC51 +GCC49=1 +endif + +ifdef GCC49 +GCC48=1 +endif + ifdef GCC48 GCC47=1 endif From 5bf43171aeaec30e2ff4b2f6b697e2c4051d44d4 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Thu, 28 Jan 2016 10:29:02 -0500 Subject: [PATCH 023/121] appveyor: let try SDL2 builds --- appveyor.yml | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 6c727568b..ccd9d5770 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,18 +1,36 @@ version: 2.1.14.{branch}-{build} os: MinGW +cache: + SDL2-devel-2.0.4-mingw.tar.gz + +environment: + CC=i686-w64-mingw32-gcc + WINDRES=windres + MINGW_SDK=c:\msys64\mingw32 + SDL2_URL=http://libsdl.org/release/SDL2-devel-2.0.4-mingw.tar.gz + SDL2_ARCHIVE=SDL2-devel-2.0.4-mingw.tar.gz + SDL2_MOVE=SDL2-2.0.4\i686-w64-mingw32 + install: -- set CC=i686-w64-mingw32-gcc -- set WINDRES=windres +- if not exist "%SDL2_ARCHIVE%" appveyor DownloadFile "%SDL2_URL%" -FileName "%SDL2_ARCHIVE%" +- 7z x -y "%MINGW_ARCHIVE%" -o%TMP% > nul +- robocopy /S %TMP%\%SDL2_MOVE% %MINGW_SDK% +- ps: (Get-Content %TMP%\%SDL2_MOVE%\bin\sdl2-config) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", "%MINGW_SDK%" } | Set-Content %MINGW_SDK%\bin\sdl2-config +- ps: (Get-Content %TMP%\%SDL2_MOVE%\lib\cmake\SDL2\sdl2-config.cmake) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", "%MINGW_SDK%" } | Set-Content %MINGW_SDK%\lib\cmake\SDL2\sdl2-config.cmake +- ps: (Get-Content %TMP%\%SDL2_MOVE%\lib\pkgconfig\sdl2.pc) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", "%MINGW_SDK%" } | Set-Content %MINGW_SDK%\lib\pkgconfig\sdl2.pc before_build: -- set Path=c:\msys64\mingw32\bin;%Path% +- set Path=%MINGW_SDK%\bin;%Path% - i686-w64-mingw32-gcc --version - mingw32-make --version build_script: -- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 +#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 +#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 DEBUGMODE=1 +- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOMIXER=1 +#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOMIXER=1 DEBUGMODE=1 on_finish: -#- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) +- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) From 9422b994e4b0fc4612c3b6d8d05ce4f3f21eaf80 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Thu, 28 Jan 2016 10:30:35 -0500 Subject: [PATCH 024/121] appveyor: fixup env block --- appveyor.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index ccd9d5770..0236459ab 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -5,12 +5,12 @@ cache: SDL2-devel-2.0.4-mingw.tar.gz environment: - CC=i686-w64-mingw32-gcc - WINDRES=windres - MINGW_SDK=c:\msys64\mingw32 - SDL2_URL=http://libsdl.org/release/SDL2-devel-2.0.4-mingw.tar.gz - SDL2_ARCHIVE=SDL2-devel-2.0.4-mingw.tar.gz - SDL2_MOVE=SDL2-2.0.4\i686-w64-mingw32 + CC: i686-w64-mingw32-gcc + WINDRES: windres + MINGW_SDK: c:\msys64\mingw32 + SDL2_URL: http://libsdl.org/release/SDL2-devel-2.0.4-mingw.tar.gz + SDL2_ARCHIVE: SDL2-devel-2.0.4-mingw.tar.gz + SDL2_MOVE: SDL2-2.0.4\i686-w64-mingw32 install: - if not exist "%SDL2_ARCHIVE%" appveyor DownloadFile "%SDL2_URL%" -FileName "%SDL2_ARCHIVE%" From e5dbd3cb9dc5cf2f8bbcb0e4ae291343c60ec717 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Thu, 28 Jan 2016 10:40:28 -0500 Subject: [PATCH 025/121] appveyor: copy and paste mistake on extracting archive comannd --- appveyor.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 0236459ab..a8eb76a2d 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -14,7 +14,7 @@ environment: install: - if not exist "%SDL2_ARCHIVE%" appveyor DownloadFile "%SDL2_URL%" -FileName "%SDL2_ARCHIVE%" -- 7z x -y "%MINGW_ARCHIVE%" -o%TMP% > nul +- 7z x -y "%SDL2_ARCHIVE%" -o%TMP% >null - robocopy /S %TMP%\%SDL2_MOVE% %MINGW_SDK% - ps: (Get-Content %TMP%\%SDL2_MOVE%\bin\sdl2-config) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", "%MINGW_SDK%" } | Set-Content %MINGW_SDK%\bin\sdl2-config - ps: (Get-Content %TMP%\%SDL2_MOVE%\lib\cmake\SDL2\sdl2-config.cmake) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", "%MINGW_SDK%" } | Set-Content %MINGW_SDK%\lib\cmake\SDL2\sdl2-config.cmake @@ -32,5 +32,6 @@ build_script: #- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOMIXER=1 DEBUGMODE=1 on_finish: +- cmd: echo xfreerdp /u:appveyor /cert-ignore +clipboard /v:: - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) From 9e1ba2e972057f6032c629dff4e6762b4f93d938 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Thu, 28 Jan 2016 10:44:52 -0500 Subject: [PATCH 026/121] appvenyor: self note only --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index a8eb76a2d..5c596d40a 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -32,6 +32,6 @@ build_script: #- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOMIXER=1 DEBUGMODE=1 on_finish: -- cmd: echo xfreerdp /u:appveyor /cert-ignore +clipboard /v:: +#- cmd: echo xfreerdp /u:appveyor /cert-ignore +clipboard /v:: - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) From 46f9e4a9615807084e5657ea638f5e69c4c0f0fa Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Thu, 28 Jan 2016 10:52:40 -0500 Subject: [PATCH 027/121] appveyor: we need to run 7zip twice --- appveyor.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 5c596d40a..c4fcb64ed 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -9,12 +9,13 @@ environment: WINDRES: windres MINGW_SDK: c:\msys64\mingw32 SDL2_URL: http://libsdl.org/release/SDL2-devel-2.0.4-mingw.tar.gz - SDL2_ARCHIVE: SDL2-devel-2.0.4-mingw.tar.gz + SDL2_ARCHIVE: SDL2-devel-2.0.4-mingw.tar SDL2_MOVE: SDL2-2.0.4\i686-w64-mingw32 install: -- if not exist "%SDL2_ARCHIVE%" appveyor DownloadFile "%SDL2_URL%" -FileName "%SDL2_ARCHIVE%" -- 7z x -y "%SDL2_ARCHIVE%" -o%TMP% >null +- if not exist "%SDL2_ARCHIVE%.gz" appveyor DownloadFile "%SDL2_URL%" -FileName "%SDL2_ARCHIVE%.gz" +- 7z x -y "%SDL2_ARCHIVE%,gz" -o%TMP% >null +- 7z x -y "%TMP%\%SDL2_ARCHIVE%" -o%TMP% >null - robocopy /S %TMP%\%SDL2_MOVE% %MINGW_SDK% - ps: (Get-Content %TMP%\%SDL2_MOVE%\bin\sdl2-config) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", "%MINGW_SDK%" } | Set-Content %MINGW_SDK%\bin\sdl2-config - ps: (Get-Content %TMP%\%SDL2_MOVE%\lib\cmake\SDL2\sdl2-config.cmake) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", "%MINGW_SDK%" } | Set-Content %MINGW_SDK%\lib\cmake\SDL2\sdl2-config.cmake From ffe193ca3ead0af14f87695b4a4bdd5a193a94ff Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Thu, 28 Jan 2016 10:55:38 -0500 Subject: [PATCH 028/121] appveyor: mistakes are easy to make --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index c4fcb64ed..766894ba5 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -14,7 +14,7 @@ environment: install: - if not exist "%SDL2_ARCHIVE%.gz" appveyor DownloadFile "%SDL2_URL%" -FileName "%SDL2_ARCHIVE%.gz" -- 7z x -y "%SDL2_ARCHIVE%,gz" -o%TMP% >null +- 7z x -y "%SDL2_ARCHIVE%.gz" -o%TMP% >null - 7z x -y "%TMP%\%SDL2_ARCHIVE%" -o%TMP% >null - robocopy /S %TMP%\%SDL2_MOVE% %MINGW_SDK% - ps: (Get-Content %TMP%\%SDL2_MOVE%\bin\sdl2-config) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", "%MINGW_SDK%" } | Set-Content %MINGW_SDK%\bin\sdl2-config From 53aa9322071bedd59876ed3870e4e99a68f54a36 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Thu, 28 Jan 2016 11:03:08 -0500 Subject: [PATCH 029/121] appveyor: ingore robocopy errorcode --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 766894ba5..001b14a89 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -16,7 +16,7 @@ install: - if not exist "%SDL2_ARCHIVE%.gz" appveyor DownloadFile "%SDL2_URL%" -FileName "%SDL2_ARCHIVE%.gz" - 7z x -y "%SDL2_ARCHIVE%.gz" -o%TMP% >null - 7z x -y "%TMP%\%SDL2_ARCHIVE%" -o%TMP% >null -- robocopy /S %TMP%\%SDL2_MOVE% %MINGW_SDK% +- robocopy /S /xx /ns /nc /nfl /ndl /np %TMP%\%SDL2_MOVE% %MINGW_SDK% && exit 0 - ps: (Get-Content %TMP%\%SDL2_MOVE%\bin\sdl2-config) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", "%MINGW_SDK%" } | Set-Content %MINGW_SDK%\bin\sdl2-config - ps: (Get-Content %TMP%\%SDL2_MOVE%\lib\cmake\SDL2\sdl2-config.cmake) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", "%MINGW_SDK%" } | Set-Content %MINGW_SDK%\lib\cmake\SDL2\sdl2-config.cmake - ps: (Get-Content %TMP%\%SDL2_MOVE%\lib\pkgconfig\sdl2.pc) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", "%MINGW_SDK%" } | Set-Content %MINGW_SDK%\lib\pkgconfig\sdl2.pc From e0f373381938d957c65598ae24556eb71815ab99 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Thu, 28 Jan 2016 11:05:09 -0500 Subject: [PATCH 030/121] appveyor: hehe, OR --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 001b14a89..db27725da 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -16,7 +16,7 @@ install: - if not exist "%SDL2_ARCHIVE%.gz" appveyor DownloadFile "%SDL2_URL%" -FileName "%SDL2_ARCHIVE%.gz" - 7z x -y "%SDL2_ARCHIVE%.gz" -o%TMP% >null - 7z x -y "%TMP%\%SDL2_ARCHIVE%" -o%TMP% >null -- robocopy /S /xx /ns /nc /nfl /ndl /np %TMP%\%SDL2_MOVE% %MINGW_SDK% && exit 0 +- robocopy /S /xx /ns /nc /nfl /ndl /np %TMP%\%SDL2_MOVE% %MINGW_SDK% || exit 0 - ps: (Get-Content %TMP%\%SDL2_MOVE%\bin\sdl2-config) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", "%MINGW_SDK%" } | Set-Content %MINGW_SDK%\bin\sdl2-config - ps: (Get-Content %TMP%\%SDL2_MOVE%\lib\cmake\SDL2\sdl2-config.cmake) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", "%MINGW_SDK%" } | Set-Content %MINGW_SDK%\lib\cmake\SDL2\sdl2-config.cmake - ps: (Get-Content %TMP%\%SDL2_MOVE%\lib\pkgconfig\sdl2.pc) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", "%MINGW_SDK%" } | Set-Content %MINGW_SDK%\lib\pkgconfig\sdl2.pc From d76e21b54660c2efec99384538ed90b28eb513e3 Mon Sep 17 00:00:00 2001 From: Inuyasha Date: Thu, 28 Jan 2016 08:15:34 -0800 Subject: [PATCH 031/121] fix bind out of bounds / keystring misreading --- src/console.c | 2 +- src/g_input.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/console.c b/src/console.c index e77c400b3..fcac0e6de 100644 --- a/src/console.c +++ b/src/console.c @@ -202,7 +202,7 @@ static void CONS_Bind_f(void) } key = G_KeyStringtoNum(COM_Argv(1)); - if (!key) + if (key <= 0 || key >= NUMINPUTS) { CONS_Alert(CONS_NOTICE, M_GetText("Invalid key name\n")); return; diff --git a/src/g_input.c b/src/g_input.c index f12ddb711..79e6fb94b 100644 --- a/src/g_input.c +++ b/src/g_input.c @@ -1042,13 +1042,13 @@ INT32 G_KeyStringtoNum(const char *keystr) if (!keystr[1] && keystr[0] > ' ' && keystr[0] <= 'z') return keystr[0]; + if (!strncmp(keystr, "KEY", 3) && keystr[3] >= '0' && keystr[3] <= '9') + return atoi(&keystr[3]); + for (j = 0; j < NUMKEYNAMES; j++) if (!stricmp(keynames[j].name, keystr)) return keynames[j].keynum; - if (strlen(keystr) > 3) - return atoi(&keystr[3]); - return 0; } From 5ace352e71fcbb95eb55fd398b250b515916f88b Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Thu, 28 Jan 2016 11:16:24 -0500 Subject: [PATCH 032/121] appveyor: manually set SDL flags --- appveyor.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index db27725da..c1e5e1082 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -16,12 +16,14 @@ install: - if not exist "%SDL2_ARCHIVE%.gz" appveyor DownloadFile "%SDL2_URL%" -FileName "%SDL2_ARCHIVE%.gz" - 7z x -y "%SDL2_ARCHIVE%.gz" -o%TMP% >null - 7z x -y "%TMP%\%SDL2_ARCHIVE%" -o%TMP% >null -- robocopy /S /xx /ns /nc /nfl /ndl /np %TMP%\%SDL2_MOVE% %MINGW_SDK% || exit 0 -- ps: (Get-Content %TMP%\%SDL2_MOVE%\bin\sdl2-config) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", "%MINGW_SDK%" } | Set-Content %MINGW_SDK%\bin\sdl2-config -- ps: (Get-Content %TMP%\%SDL2_MOVE%\lib\cmake\SDL2\sdl2-config.cmake) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", "%MINGW_SDK%" } | Set-Content %MINGW_SDK%\lib\cmake\SDL2\sdl2-config.cmake -- ps: (Get-Content %TMP%\%SDL2_MOVE%\lib\pkgconfig\sdl2.pc) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", "%MINGW_SDK%" } | Set-Content %MINGW_SDK%\lib\pkgconfig\sdl2.pc +#- robocopy /S /xx /ns /nc /nfl /ndl /np %TMP%\%SDL2_MOVE% %MINGW_SDK% || exit 0 +#- ps: (Get-Content [System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MOVE%\bin\sdl2-config")) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%") } | Set-Content [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\bin\sdl2-config") +#- ps: (Get-Content [System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MOVE%\lib\cmake\SDL2\sdl2-config.cmake")) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%") } | Set-Content [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\lib\cmake\SDL2\sdl2-config.cmake") +#- ps: (Get-Content [System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MOVE%\lib\pkgconfig\sdl2.pc")) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%") } | Set-Content [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\lib\pkgconfig\sdl2.pc") before_build: +- set SDL_CFLAGS=-I%TMP%\%SDL2_MOVE%\include\SDL2 -Dmain=SDL_main +- set SDL_LDFLAGS=-L%TMP%\%SDL2_MOVE%\lib -lmingw32 -lSDL2main -lSDL2 -mwindows - set Path=%MINGW_SDK%\bin;%Path% - i686-w64-mingw32-gcc --version - mingw32-make --version From 89786ff7fd396b3fbe37823222bb4a591f19c6da Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Thu, 28 Jan 2016 11:22:46 -0500 Subject: [PATCH 033/121] appveyor: include the SDL header in depend step: --- appveyor.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index c1e5e1082..5bac1b656 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -22,6 +22,7 @@ install: #- ps: (Get-Content [System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MOVE%\lib\pkgconfig\sdl2.pc")) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%") } | Set-Content [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\lib\pkgconfig\sdl2.pc") before_build: +- set CPPFLAGS=-I%TMP%\%SDL2_MOVE%\include\SDL2 - set SDL_CFLAGS=-I%TMP%\%SDL2_MOVE%\include\SDL2 -Dmain=SDL_main - set SDL_LDFLAGS=-L%TMP%\%SDL2_MOVE%\lib -lmingw32 -lSDL2main -lSDL2 -mwindows - set Path=%MINGW_SDK%\bin;%Path% @@ -36,5 +37,5 @@ build_script: on_finish: #- cmd: echo xfreerdp /u:appveyor /cert-ignore +clipboard /v:: -- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) +#- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) From f0842d2200a91d9d1744df70a27da9c4089d2fe6 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Thu, 28 Jan 2016 11:33:36 -0500 Subject: [PATCH 034/121] appveyor: add debug and sdl mixer --- appveyor.yml | 17 ++++++++++++----- src/Makefile | 8 ++++---- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 5bac1b656..848755cb4 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -3,6 +3,7 @@ os: MinGW cache: SDL2-devel-2.0.4-mingw.tar.gz + SDL2_mixer-devel-2.0.1-mingw.tar.gz environment: CC: i686-w64-mingw32-gcc @@ -11,20 +12,26 @@ environment: SDL2_URL: http://libsdl.org/release/SDL2-devel-2.0.4-mingw.tar.gz SDL2_ARCHIVE: SDL2-devel-2.0.4-mingw.tar SDL2_MOVE: SDL2-2.0.4\i686-w64-mingw32 + SDL2_MIXER_URL=https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-devel-2.0.1-mingw.tar.gz + SDL2_MIXER_ARCHIVE: SDL2_mixer-devel-2.0.1-mingw.tar + SDL2_MIXER_MOVE: SDL2_mixer-2.0.1/i686-w64-mingw32 install: - if not exist "%SDL2_ARCHIVE%.gz" appveyor DownloadFile "%SDL2_URL%" -FileName "%SDL2_ARCHIVE%.gz" +- if not exist "%SDL2_MIXER_ARCHIVE%.gz" appveyor DownloadFile "%SDL2_MIXER_URL%" -FileName "%SDL2_MIXER_ARCHIVE%.gz" - 7z x -y "%SDL2_ARCHIVE%.gz" -o%TMP% >null - 7z x -y "%TMP%\%SDL2_ARCHIVE%" -o%TMP% >null +- 7z x -y "%SDL2_MIXER_ARCHIVE%.gz" -o%TMP% >null +- 7z x -y "%TMP%\%SSDL2_MIXER_ARCHIVE%" -o%TMP% >null #- robocopy /S /xx /ns /nc /nfl /ndl /np %TMP%\%SDL2_MOVE% %MINGW_SDK% || exit 0 #- ps: (Get-Content [System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MOVE%\bin\sdl2-config")) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%") } | Set-Content [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\bin\sdl2-config") #- ps: (Get-Content [System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MOVE%\lib\cmake\SDL2\sdl2-config.cmake")) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%") } | Set-Content [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\lib\cmake\SDL2\sdl2-config.cmake") #- ps: (Get-Content [System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MOVE%\lib\pkgconfig\sdl2.pc")) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%") } | Set-Content [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\lib\pkgconfig\sdl2.pc") before_build: -- set CPPFLAGS=-I%TMP%\%SDL2_MOVE%\include\SDL2 -- set SDL_CFLAGS=-I%TMP%\%SDL2_MOVE%\include\SDL2 -Dmain=SDL_main -- set SDL_LDFLAGS=-L%TMP%\%SDL2_MOVE%\lib -lmingw32 -lSDL2main -lSDL2 -mwindows +- set CPPFLAGS=-I%TMP%\%SDL2_MOVE%\include\SDL2 -I%TMP%\%SDL2_MIXER_MOVE%\include\SDL2 +- set SDL_CFLAGS=-I%TMP%\%SDL2_MOVE%\include\SDL2 -Dmain=SDL_main -I%TMP%\%SDL2_MIXER_MOVE%\include\SDL2 +- set SDL_LDFLAGS=-L%TMP%\%SDL2_MOVE%\lib -lmingw32 -lSDL2main -lSDL2 -mwindows -L%TMP%\%SDL2_MIXER_MOVE%\lib - set Path=%MINGW_SDK%\bin;%Path% - i686-w64-mingw32-gcc --version - mingw32-make --version @@ -32,8 +39,8 @@ before_build: build_script: #- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 #- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 DEBUGMODE=1 -- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOMIXER=1 -#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOMIXER=1 DEBUGMODE=1 +- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 +- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 DEBUGMODE=1 on_finish: #- cmd: echo xfreerdp /u:appveyor /cert-ignore +clipboard /v:: diff --git a/src/Makefile b/src/Makefile index d4cc64a4b..8474a7e87 100644 --- a/src/Makefile +++ b/src/Makefile @@ -703,13 +703,13 @@ $(OBJDIR)/depend.dep: @echo "Creating dependency file, depend.dep" @echo > comptime.h -$(MKDIR) $(OBJDIR) - $(CC) $(CFLAGS) -MM *.c > $(OBJDIR)/depend.ped - $(CC) $(CFLAGS) -MM $(INTERFACE)/*.c >> $(OBJDIR)/depend.ped + $(CC) $(CPPFLAGS) $(CFLAGS) -MM *.c > $(OBJDIR)/depend.ped + $(CC) $(CPPFLAGS) $(CFLAGS) -MM $(INTERFACE)/*.c >> $(OBJDIR)/depend.ped ifndef NOHW - $(CC) $(CFLAGS) -MM hardware/*.c >> $(OBJDIR)/depend.ped + $(CC) $(CPPFLAGS) $(CFLAGS) -MM hardware/*.c >> $(OBJDIR)/depend.ped endif ifndef NO_LUA - $(CC) $(CFLAGS) -MM blua/*.c >> $(OBJDIR)/depend.ped + $(CC) $(CPPFLAGS) $(CFLAGS) -MM blua/*.c >> $(OBJDIR)/depend.ped endif @sed -e 's,\(.*\)\.o: ,$(subst /,\/,$(OBJDIR))\/&,g' < $(OBJDIR)/depend.ped > $(OBJDIR)/depend.dep $(REMOVE) $(OBJDIR)/depend.ped From 50846880a61e4f6392bb4444bbf00fa9a1cd6497 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Thu, 28 Jan 2016 11:34:19 -0500 Subject: [PATCH 035/121] appveyor: not = for envs --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 848755cb4..f55741afe 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -12,7 +12,7 @@ environment: SDL2_URL: http://libsdl.org/release/SDL2-devel-2.0.4-mingw.tar.gz SDL2_ARCHIVE: SDL2-devel-2.0.4-mingw.tar SDL2_MOVE: SDL2-2.0.4\i686-w64-mingw32 - SDL2_MIXER_URL=https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-devel-2.0.1-mingw.tar.gz + SDL2_MIXER_URL: https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-devel-2.0.1-mingw.tar.gz SDL2_MIXER_ARCHIVE: SDL2_mixer-devel-2.0.1-mingw.tar SDL2_MIXER_MOVE: SDL2_mixer-2.0.1/i686-w64-mingw32 From 4230225a0c570b239c4f128940f3d53e49987cfa Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Thu, 28 Jan 2016 11:36:51 -0500 Subject: [PATCH 036/121] appveor: SDL, not SSDL --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index f55741afe..81f27df45 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -22,7 +22,7 @@ install: - 7z x -y "%SDL2_ARCHIVE%.gz" -o%TMP% >null - 7z x -y "%TMP%\%SDL2_ARCHIVE%" -o%TMP% >null - 7z x -y "%SDL2_MIXER_ARCHIVE%.gz" -o%TMP% >null -- 7z x -y "%TMP%\%SSDL2_MIXER_ARCHIVE%" -o%TMP% >null +- 7z x -y "%TMP%\%SDL2_MIXER_ARCHIVE%" -o%TMP% >null #- robocopy /S /xx /ns /nc /nfl /ndl /np %TMP%\%SDL2_MOVE% %MINGW_SDK% || exit 0 #- ps: (Get-Content [System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MOVE%\bin\sdl2-config")) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%") } | Set-Content [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\bin\sdl2-config") #- ps: (Get-Content [System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MOVE%\lib\cmake\SDL2\sdl2-config.cmake")) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%") } | Set-Content [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\lib\cmake\SDL2\sdl2-config.cmake") From 7a09a82489c1e8c292ef456cbfb83c1e6d362c63 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Thu, 28 Jan 2016 11:41:02 -0500 Subject: [PATCH 037/121] new flags: DEPFLAGS, to tell the depend step where are the headers --- appveyor.yml | 2 +- src/Makefile | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 81f27df45..f7af70272 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -29,7 +29,7 @@ install: #- ps: (Get-Content [System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MOVE%\lib\pkgconfig\sdl2.pc")) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%") } | Set-Content [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\lib\pkgconfig\sdl2.pc") before_build: -- set CPPFLAGS=-I%TMP%\%SDL2_MOVE%\include\SDL2 -I%TMP%\%SDL2_MIXER_MOVE%\include\SDL2 +- set DEPFLAGS=-I%TMP%\%SDL2_MOVE%\include\SDL2 -I%TMP%\%SDL2_MIXER_MOVE%\include\SDL2 - set SDL_CFLAGS=-I%TMP%\%SDL2_MOVE%\include\SDL2 -Dmain=SDL_main -I%TMP%\%SDL2_MIXER_MOVE%\include\SDL2 - set SDL_LDFLAGS=-L%TMP%\%SDL2_MOVE%\lib -lmingw32 -lSDL2main -lSDL2 -mwindows -L%TMP%\%SDL2_MIXER_MOVE%\lib - set Path=%MINGW_SDK%\bin;%Path% diff --git a/src/Makefile b/src/Makefile index 8474a7e87..2c1de64d5 100644 --- a/src/Makefile +++ b/src/Makefile @@ -703,13 +703,13 @@ $(OBJDIR)/depend.dep: @echo "Creating dependency file, depend.dep" @echo > comptime.h -$(MKDIR) $(OBJDIR) - $(CC) $(CPPFLAGS) $(CFLAGS) -MM *.c > $(OBJDIR)/depend.ped - $(CC) $(CPPFLAGS) $(CFLAGS) -MM $(INTERFACE)/*.c >> $(OBJDIR)/depend.ped + $(CC) $(DEPFLAGS) $(CFLAGS) -MM *.c > $(OBJDIR)/depend.ped + $(CC) $(DEPFLAGS) $(CFLAGS) -MM $(INTERFACE)/*.c >> $(OBJDIR)/depend.ped ifndef NOHW - $(CC) $(CPPFLAGS) $(CFLAGS) -MM hardware/*.c >> $(OBJDIR)/depend.ped + $(CC) $(DEPFLAGS) $(CFLAGS) -MM hardware/*.c >> $(OBJDIR)/depend.ped endif ifndef NO_LUA - $(CC) $(CPPFLAGS) $(CFLAGS) -MM blua/*.c >> $(OBJDIR)/depend.ped + $(CC) $(DEPFLAGS) $(CFLAGS) -MM blua/*.c >> $(OBJDIR)/depend.ped endif @sed -e 's,\(.*\)\.o: ,$(subst /,\/,$(OBJDIR))\/&,g' < $(OBJDIR)/depend.ped > $(OBJDIR)/depend.dep $(REMOVE) $(OBJDIR)/depend.ped From 2176b21e62f0fd82ada5f4fb4d5e7afbea749b89 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Thu, 28 Jan 2016 11:49:23 -0500 Subject: [PATCH 038/121] ignore noreturns --- src/Makefile.cfg | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Makefile.cfg b/src/Makefile.cfg index d6af0d8a7..0e38a05c0 100644 --- a/src/Makefile.cfg +++ b/src/Makefile.cfg @@ -159,6 +159,9 @@ ifndef MINGW ifdef GCC45 WFLAGS+=-Wunsuffixed-float-constants endif +ifdef GCC46 +WFLAGS+=-Wno-suggest-attribute=noreturn +endif endif ifdef NOLDWARNING LDFLAGS+=-Wl,--as-needed @@ -171,6 +174,7 @@ ifdef GCC43 endif WFLAGS+=$(OLDWFLAGS) + #indicate platform and what interface use with ifndef WINCE ifndef XBOX From d762c4023ed4b1b1127c0960313c03c61c54b201 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Thu, 28 Jan 2016 11:52:33 -0500 Subject: [PATCH 039/121] appveyor: show us all the commands --- appveyor.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index f7af70272..9f37a5f12 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -37,10 +37,10 @@ before_build: - mingw32-make --version build_script: -#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 -#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 DEBUGMODE=1 -- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 -- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 DEBUGMODE=1 +#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 ECHO=1 +#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 DEBUGMODE=1 ECHO=1 +- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 ECHO=1 +- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 DEBUGMODE=1 ECHO=1 on_finish: #- cmd: echo xfreerdp /u:appveyor /cert-ignore +clipboard /v:: From 3c35ed60d3d9310077c3ebbde9e1595f025d7bb3 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Thu, 28 Jan 2016 12:03:56 -0500 Subject: [PATCH 040/121] appveyor: fixup cache list --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 9f37a5f12..eb2db8b86 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -2,8 +2,8 @@ version: 2.1.14.{branch}-{build} os: MinGW cache: - SDL2-devel-2.0.4-mingw.tar.gz - SDL2_mixer-devel-2.0.1-mingw.tar.gz +- SDL2-devel-2.0.4-mingw.tar.gz +- SDL2_mixer-devel-2.0.1-mingw.tar.gz environment: CC: i686-w64-mingw32-gcc From 7fdb5cfcfb045e6bfc2c3e4421adcdeca589bc82 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Thu, 28 Jan 2016 12:06:00 -0500 Subject: [PATCH 041/121] move disabled warning out of mingw --- src/Makefile.cfg | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Makefile.cfg b/src/Makefile.cfg index 0e38a05c0..fa8896a7c 100644 --- a/src/Makefile.cfg +++ b/src/Makefile.cfg @@ -155,13 +155,14 @@ WFLAGS+=-Wformat-security ifndef GCC29 #WFLAGS+=-Winit-self endif +ifdef GCC46 +WFLAGS+=-Wno-suggest-attribute=noreturn +endif + ifndef MINGW ifdef GCC45 WFLAGS+=-Wunsuffixed-float-constants endif -ifdef GCC46 -WFLAGS+=-Wno-suggest-attribute=noreturn -endif endif ifdef NOLDWARNING LDFLAGS+=-Wl,--as-needed From 10e1aaaf856c40282d646d04c3b9d3c61cd91b26 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Thu, 28 Jan 2016 12:08:08 -0500 Subject: [PATCH 042/121] appveyor: no need for DEPFLAGS --- appveyor.yml | 1 - src/Makefile | 8 ++++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index eb2db8b86..51411d45e 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -29,7 +29,6 @@ install: #- ps: (Get-Content [System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MOVE%\lib\pkgconfig\sdl2.pc")) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%") } | Set-Content [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\lib\pkgconfig\sdl2.pc") before_build: -- set DEPFLAGS=-I%TMP%\%SDL2_MOVE%\include\SDL2 -I%TMP%\%SDL2_MIXER_MOVE%\include\SDL2 - set SDL_CFLAGS=-I%TMP%\%SDL2_MOVE%\include\SDL2 -Dmain=SDL_main -I%TMP%\%SDL2_MIXER_MOVE%\include\SDL2 - set SDL_LDFLAGS=-L%TMP%\%SDL2_MOVE%\lib -lmingw32 -lSDL2main -lSDL2 -mwindows -L%TMP%\%SDL2_MIXER_MOVE%\lib - set Path=%MINGW_SDK%\bin;%Path% diff --git a/src/Makefile b/src/Makefile index 2c1de64d5..d4cc64a4b 100644 --- a/src/Makefile +++ b/src/Makefile @@ -703,13 +703,13 @@ $(OBJDIR)/depend.dep: @echo "Creating dependency file, depend.dep" @echo > comptime.h -$(MKDIR) $(OBJDIR) - $(CC) $(DEPFLAGS) $(CFLAGS) -MM *.c > $(OBJDIR)/depend.ped - $(CC) $(DEPFLAGS) $(CFLAGS) -MM $(INTERFACE)/*.c >> $(OBJDIR)/depend.ped + $(CC) $(CFLAGS) -MM *.c > $(OBJDIR)/depend.ped + $(CC) $(CFLAGS) -MM $(INTERFACE)/*.c >> $(OBJDIR)/depend.ped ifndef NOHW - $(CC) $(DEPFLAGS) $(CFLAGS) -MM hardware/*.c >> $(OBJDIR)/depend.ped + $(CC) $(CFLAGS) -MM hardware/*.c >> $(OBJDIR)/depend.ped endif ifndef NO_LUA - $(CC) $(DEPFLAGS) $(CFLAGS) -MM blua/*.c >> $(OBJDIR)/depend.ped + $(CC) $(CFLAGS) -MM blua/*.c >> $(OBJDIR)/depend.ped endif @sed -e 's,\(.*\)\.o: ,$(subst /,\/,$(OBJDIR))\/&,g' < $(OBJDIR)/depend.ped > $(OBJDIR)/depend.dep $(REMOVE) $(OBJDIR)/depend.ped From 4d0e1a8a1c76dfb9aeb9fd7817de3d0bf190540a Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Thu, 28 Jan 2016 12:12:04 -0500 Subject: [PATCH 043/121] appveyor: do not echo the full command --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 51411d45e..f58a242d5 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -38,8 +38,8 @@ before_build: build_script: #- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 ECHO=1 #- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 DEBUGMODE=1 ECHO=1 -- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 ECHO=1 -- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 DEBUGMODE=1 ECHO=1 +- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 +- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 DEBUGMODE=1 on_finish: #- cmd: echo xfreerdp /u:appveyor /cert-ignore +clipboard /v:: From 67b6d618a48e40082e40d04b12fdfa84710f79d1 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Thu, 28 Jan 2016 12:15:42 -0500 Subject: [PATCH 044/121] appveyor: build with/without the mixer and with/without OpenGL --- appveyor.yml | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index f58a242d5..a9dae4fb4 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -36,10 +36,23 @@ before_build: - mingw32-make --version build_script: -#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 ECHO=1 -#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 DEBUGMODE=1 ECHO=1 +- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 clean +- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 DEBUGMODE=1 clean - cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 - cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 DEBUGMODE=1 +- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 clean +- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 DEBUGMODE=1 clean +- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOMIXER=1 +- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 DEBUGMODE=1 NOMIXER=1 +- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 clean +- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 DEBUGMODE=1 clean +- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 +- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 DEBUGMODE=1 +- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 clean +- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 DEBUGMODE=1 clean +- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 NOMIXER=1 +- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 DEBUGMODE=1 NOMIXER=1 + on_finish: #- cmd: echo xfreerdp /u:appveyor /cert-ignore +clipboard /v:: From 0d327c7c16a0d4a8521911d4a16f10dfd2d00a6a Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Thu, 28 Jan 2016 21:15:51 -0500 Subject: [PATCH 045/121] kill logical-not-parentheses warning in g_game.c g_game.c: In function 'G_CheckDemoStatus': g_game.c:5588:22: warning: logical not is only applied to the left hand side of comparison [-Wlogical-not-parentheses] if (!modeattacking == ATTACKING_RECORD) ^ --- src/g_game.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/g_game.c b/src/g_game.c index c59f23c07..de3b26f0a 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -5585,7 +5585,7 @@ boolean G_CheckDemoStatus(void) free(demobuffer); demorecording = false; - if (!modeattacking == ATTACKING_RECORD) + if (modeattacking != ATTACKING_RECORD) { if (saved) CONS_Printf(M_GetText("Demo %s recorded\n"), demoname); From 050ce857c439bf0726de978e43a2dce2496f3d0e Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Thu, 28 Jan 2016 21:31:18 -0500 Subject: [PATCH 046/121] let not care for main() being noreturn --- src/sdl/i_main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sdl/i_main.c b/src/sdl/i_main.c index 976f7eb35..489ee4c06 100644 --- a/src/sdl/i_main.c +++ b/src/sdl/i_main.c @@ -240,8 +240,8 @@ int main(int argc, char **argv) #endif // return to OS -#ifndef __GNUC__ +//#ifndef __GNUC__ return 0; -#endif +//#endif } #endif From c47ff7b3c6f22710e1478d789bd9399b6026690a Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Thu, 28 Jan 2016 21:37:41 -0500 Subject: [PATCH 047/121] let make the main() entry point noreturns --- src/sdl/i_main.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/sdl/i_main.c b/src/sdl/i_main.c index 489ee4c06..d3f94f13d 100644 --- a/src/sdl/i_main.c +++ b/src/sdl/i_main.c @@ -141,8 +141,10 @@ void XBoxStartup() myargv = NULL; #else #ifdef FORCESDLMAIN +FUNCNORETURN int SDL_main(int argc, char **argv) #else +FUNCNORETURN int main(int argc, char **argv) #endif { @@ -240,8 +242,8 @@ int main(int argc, char **argv) #endif // return to OS -//#ifndef __GNUC__ +#ifndef __GNUC__ return 0; -//#endif +#endif } #endif From e8cf4cdaac49f81adc420cf25e1db0a8ec4ef556 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 29 Jan 2016 00:33:11 -0500 Subject: [PATCH 048/121] SDL2: compile SDL with SDL_main for Win32 --- src/sdl/i_main.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/sdl/i_main.c b/src/sdl/i_main.c index d3f94f13d..c157a6be7 100644 --- a/src/sdl/i_main.c +++ b/src/sdl/i_main.c @@ -55,6 +55,10 @@ PSP_MAIN_THREAD_STACK_SIZE_KB(256); #include "i_ttf.h" #endif +#if defined (_WIN32) && !defined (main) +#define SDLMAIN +#endif + #ifdef SDLMAIN #include "SDL_main.h" #elif defined(FORCESDLMAIN) @@ -132,7 +136,6 @@ static inline VOID MakeCodeWritable(VOID) \return int */ -FUNCNORETURN #if defined (_XBOX) && defined (__GNUC__) void XBoxStartup() { From b5af756c22e2c74daead4fb81c18bfb0a1be1f95 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 29 Jan 2016 00:53:34 -0500 Subject: [PATCH 049/121] appveyor: let stop build the whole mess --- appveyor.yml | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index a9dae4fb4..b589bc209 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -36,22 +36,22 @@ before_build: - mingw32-make --version build_script: -- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 clean -- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 DEBUGMODE=1 clean +- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 ECHO=1 clean +#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 DEBUGMODE=1 clean - cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 -- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 DEBUGMODE=1 -- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 clean -- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 DEBUGMODE=1 clean -- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOMIXER=1 -- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 DEBUGMODE=1 NOMIXER=1 -- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 clean -- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 DEBUGMODE=1 clean -- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 -- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 DEBUGMODE=1 -- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 clean -- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 DEBUGMODE=1 clean -- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 NOMIXER=1 -- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 DEBUGMODE=1 NOMIXER=1 +#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 DEBUGMODE=1 +#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 clean +#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 DEBUGMODE=1 clean +#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOMIXER=1 +#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 DEBUGMODE=1 NOMIXER=1 +#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 clean +#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 DEBUGMODE=1 clean +#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 +#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 DEBUGMODE=1 +#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 clean +#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 DEBUGMODE=1 clean +#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 NOMIXER=1 +#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 DEBUGMODE=1 NOMIXER=1 on_finish: From 0728bc6de28771014d815e95b3bbe3d82a1d5f60 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 29 Jan 2016 00:58:40 -0500 Subject: [PATCH 050/121] appveyor: errormode for all --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index b589bc209..43275c8b4 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -36,9 +36,9 @@ before_build: - mingw32-make --version build_script: -- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 ECHO=1 clean +- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 ECHO=1 cleandep >nul|| exit 0 #- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 DEBUGMODE=1 clean -- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 +- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 ERRORMODE=1 #- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 DEBUGMODE=1 #- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 clean #- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 DEBUGMODE=1 clean From c7503b35b83bb9daa63758161d8b63ffffcb2462 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 29 Jan 2016 01:05:41 -0500 Subject: [PATCH 051/121] appveyor: need to see what the depend step is not working --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 43275c8b4..41f5fb3d1 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -36,7 +36,7 @@ before_build: - mingw32-make --version build_script: -- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 ECHO=1 cleandep >nul|| exit 0 +- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 ECHO=1 clean #- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 DEBUGMODE=1 clean - cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 ERRORMODE=1 #- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 DEBUGMODE=1 From 13866a5b7ec0b2a02126aff7fa48643d092dcbc7 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 29 Jan 2016 01:23:26 -0500 Subject: [PATCH 052/121] appveyor: fixup SDL2_MIXER_MOVE --- appveyor.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 41f5fb3d1..cd09e2c84 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -14,7 +14,7 @@ environment: SDL2_MOVE: SDL2-2.0.4\i686-w64-mingw32 SDL2_MIXER_URL: https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-devel-2.0.1-mingw.tar.gz SDL2_MIXER_ARCHIVE: SDL2_mixer-devel-2.0.1-mingw.tar - SDL2_MIXER_MOVE: SDL2_mixer-2.0.1/i686-w64-mingw32 + SDL2_MIXER_MOVE: SDL2_mixer-2.0.1\i686-w64-mingw32 install: - if not exist "%SDL2_ARCHIVE%.gz" appveyor DownloadFile "%SDL2_URL%" -FileName "%SDL2_ARCHIVE%.gz" @@ -23,6 +23,7 @@ install: - 7z x -y "%TMP%\%SDL2_ARCHIVE%" -o%TMP% >null - 7z x -y "%SDL2_MIXER_ARCHIVE%.gz" -o%TMP% >null - 7z x -y "%TMP%\%SDL2_MIXER_ARCHIVE%" -o%TMP% >null + #- robocopy /S /xx /ns /nc /nfl /ndl /np %TMP%\%SDL2_MOVE% %MINGW_SDK% || exit 0 #- ps: (Get-Content [System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MOVE%\bin\sdl2-config")) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%") } | Set-Content [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\bin\sdl2-config") #- ps: (Get-Content [System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MOVE%\lib\cmake\SDL2\sdl2-config.cmake")) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%") } | Set-Content [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\lib\cmake\SDL2\sdl2-config.cmake") From f30dae216274e82efddc4151f930a169697e7a52 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 29 Jan 2016 01:33:37 -0500 Subject: [PATCH 053/121] appveyor: need a copy of sed --- appveyor.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index cd09e2c84..054dc0cc6 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -23,15 +23,15 @@ install: - 7z x -y "%TMP%\%SDL2_ARCHIVE%" -o%TMP% >null - 7z x -y "%SDL2_MIXER_ARCHIVE%.gz" -o%TMP% >null - 7z x -y "%TMP%\%SDL2_MIXER_ARCHIVE%" -o%TMP% >null - -#- robocopy /S /xx /ns /nc /nfl /ndl /np %TMP%\%SDL2_MOVE% %MINGW_SDK% || exit 0 +#- robocopy /S /xx /ns /nc /nfl /ndl /np /njh /njs %TMP%\%SDL2_MOVE% %MINGW_SDK% | exit 0 +#- robocopy /S /xx /ns /nc /nfl /ndl /np /njh /njs %TMP%\%SDL2_MIXER_MOVE% %MINGW_SDK% || exit 0 #- ps: (Get-Content [System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MOVE%\bin\sdl2-config")) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%") } | Set-Content [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\bin\sdl2-config") #- ps: (Get-Content [System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MOVE%\lib\cmake\SDL2\sdl2-config.cmake")) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%") } | Set-Content [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\lib\cmake\SDL2\sdl2-config.cmake") #- ps: (Get-Content [System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MOVE%\lib\pkgconfig\sdl2.pc")) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%") } | Set-Content [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\lib\pkgconfig\sdl2.pc") before_build: -- set SDL_CFLAGS=-I%TMP%\%SDL2_MOVE%\include\SDL2 -Dmain=SDL_main -I%TMP%\%SDL2_MIXER_MOVE%\include\SDL2 -- set SDL_LDFLAGS=-L%TMP%\%SDL2_MOVE%\lib -lmingw32 -lSDL2main -lSDL2 -mwindows -L%TMP%\%SDL2_MIXER_MOVE%\lib +#- set SDL_CFLAGS=-I%TMP%\%SDL2_MOVE%\include\SDL2 -Dmain=SDL_main -I%TMP%\%SDL2_MIXER_MOVE%\include\SDL2 +#- set SDL_LDFLAGS=-L%TMP%\%SDL2_MOVE%\lib -lmingw32 -lSDL2main -lSDL2 -mwindows -L%TMP%\%SDL2_MIXER_MOVE%\lib - set Path=%MINGW_SDK%\bin;%Path% - i686-w64-mingw32-gcc --version - mingw32-make --version @@ -57,5 +57,5 @@ build_script: on_finish: #- cmd: echo xfreerdp /u:appveyor /cert-ignore +clipboard /v:: -#- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) +- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) From ca34268a13e9a3157a2f0159923c1274067bf2dd Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 29 Jan 2016 01:52:55 -0500 Subject: [PATCH 054/121] appveyor: let instal the SDL2 and SDL2_mixer to the Mingw toolchain --- appveyor.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 054dc0cc6..9f46a8b2d 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -23,15 +23,15 @@ install: - 7z x -y "%TMP%\%SDL2_ARCHIVE%" -o%TMP% >null - 7z x -y "%SDL2_MIXER_ARCHIVE%.gz" -o%TMP% >null - 7z x -y "%TMP%\%SDL2_MIXER_ARCHIVE%" -o%TMP% >null -#- robocopy /S /xx /ns /nc /nfl /ndl /np /njh /njs %TMP%\%SDL2_MOVE% %MINGW_SDK% | exit 0 -#- robocopy /S /xx /ns /nc /nfl /ndl /np /njh /njs %TMP%\%SDL2_MIXER_MOVE% %MINGW_SDK% || exit 0 -#- ps: (Get-Content [System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MOVE%\bin\sdl2-config")) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%") } | Set-Content [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\bin\sdl2-config") -#- ps: (Get-Content [System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MOVE%\lib\cmake\SDL2\sdl2-config.cmake")) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%") } | Set-Content [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\lib\cmake\SDL2\sdl2-config.cmake") -#- ps: (Get-Content [System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MOVE%\lib\pkgconfig\sdl2.pc")) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%") } | Set-Content [System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\lib\pkgconfig\sdl2.pc") +- robocopy /S /xx /ns /nc /nfl /ndl /np /njh /njs %TMP%\%SDL2_MOVE% %MINGW_SDK% || exit 0 +- robocopy /S /xx /ns /nc /nfl /ndl /np /njh /njs %TMP%\%SDL2_MIXER_MOVE% %MINGW_SDK% || exit 0 +- ps: (Get-Content ([System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MOVE%\bin\sdl2-config"))) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", ([System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%")) } | Set-Content ([System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\bin\sdl2-config")) +- ps: (Get-Content ([System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MOVE%\lib\cmake\SDL2\sdl2-config.cmake"))) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", ([System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%")) } | Set-Content ([System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\lib\cmake\SDL2\sdl2-config.cmake")) +- ps: (Get-Content ([System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MOVE%\lib\pkgconfig\sdl2.pc"))) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", ([System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%")) } | Set-Content ([System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\lib\pkgconfig\sdl2.pc")) +- ps: (Get-Content ([System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MIXER_MOVE%\lib\pkgconfig\SDL2_mixer.pc")))| ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", ([System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%")) } | Set-Content ([System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\lib\pkgconfig\SDL2_mixer.pc")) before_build: -#- set SDL_CFLAGS=-I%TMP%\%SDL2_MOVE%\include\SDL2 -Dmain=SDL_main -I%TMP%\%SDL2_MIXER_MOVE%\include\SDL2 -#- set SDL_LDFLAGS=-L%TMP%\%SDL2_MOVE%\lib -lmingw32 -lSDL2main -lSDL2 -mwindows -L%TMP%\%SDL2_MIXER_MOVE%\lib +- set SDL_PKGCONFIG=sdl2.pc - set Path=%MINGW_SDK%\bin;%Path% - i686-w64-mingw32-gcc --version - mingw32-make --version @@ -57,5 +57,5 @@ build_script: on_finish: #- cmd: echo xfreerdp /u:appveyor /cert-ignore +clipboard /v:: -- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) +#- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) From 0e483fc17b09dfca77941e41d248cd96b9ea910d Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 29 Jan 2016 01:55:39 -0500 Subject: [PATCH 055/121] appveyor: or not? --- appveyor.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 9f46a8b2d..d3747af94 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -31,7 +31,7 @@ install: - ps: (Get-Content ([System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MIXER_MOVE%\lib\pkgconfig\SDL2_mixer.pc")))| ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", ([System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%")) } | Set-Content ([System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\lib\pkgconfig\SDL2_mixer.pc")) before_build: -- set SDL_PKGCONFIG=sdl2.pc +- set SDL_PKGCONFIG=%MINGW_SDK%\lib\pkgconfig\sdl2.pc - set Path=%MINGW_SDK%\bin;%Path% - i686-w64-mingw32-gcc --version - mingw32-make --version @@ -57,5 +57,4 @@ build_script: on_finish: #- cmd: echo xfreerdp /u:appveyor /cert-ignore +clipboard /v:: -#- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) - +- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) From 62702edebe4e42105f066c542b348076538a2e4b Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 29 Jan 2016 01:57:57 -0500 Subject: [PATCH 056/121] appveyor: I hope I do not need to debug this build xml again --- appveyor.yml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index d3747af94..858794439 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -18,16 +18,17 @@ environment: install: - if not exist "%SDL2_ARCHIVE%.gz" appveyor DownloadFile "%SDL2_URL%" -FileName "%SDL2_ARCHIVE%.gz" -- if not exist "%SDL2_MIXER_ARCHIVE%.gz" appveyor DownloadFile "%SDL2_MIXER_URL%" -FileName "%SDL2_MIXER_ARCHIVE%.gz" - 7z x -y "%SDL2_ARCHIVE%.gz" -o%TMP% >null - 7z x -y "%TMP%\%SDL2_ARCHIVE%" -o%TMP% >null -- 7z x -y "%SDL2_MIXER_ARCHIVE%.gz" -o%TMP% >null -- 7z x -y "%TMP%\%SDL2_MIXER_ARCHIVE%" -o%TMP% >null - robocopy /S /xx /ns /nc /nfl /ndl /np /njh /njs %TMP%\%SDL2_MOVE% %MINGW_SDK% || exit 0 -- robocopy /S /xx /ns /nc /nfl /ndl /np /njh /njs %TMP%\%SDL2_MIXER_MOVE% %MINGW_SDK% || exit 0 - ps: (Get-Content ([System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MOVE%\bin\sdl2-config"))) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", ([System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%")) } | Set-Content ([System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\bin\sdl2-config")) - ps: (Get-Content ([System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MOVE%\lib\cmake\SDL2\sdl2-config.cmake"))) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", ([System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%")) } | Set-Content ([System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\lib\cmake\SDL2\sdl2-config.cmake")) - ps: (Get-Content ([System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MOVE%\lib\pkgconfig\sdl2.pc"))) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", ([System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%")) } | Set-Content ([System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\lib\pkgconfig\sdl2.pc")) + +- if not exist "%SDL2_MIXER_ARCHIVE%.gz" appveyor DownloadFile "%SDL2_MIXER_URL%" -FileName "%SDL2_MIXER_ARCHIVE%.gz" +- 7z x -y "%SDL2_MIXER_ARCHIVE%.gz" -o%TMP% >null +- 7z x -y "%TMP%\%SDL2_MIXER_ARCHIVE%" -o%TMP% >null +- robocopy /S /xx /ns /nc /nfl /ndl /np /njh /njs %TMP%\%SDL2_MIXER_MOVE% %MINGW_SDK% || exit 0 - ps: (Get-Content ([System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MIXER_MOVE%\lib\pkgconfig\SDL2_mixer.pc")))| ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", ([System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%")) } | Set-Content ([System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\lib\pkgconfig\SDL2_mixer.pc")) before_build: @@ -37,7 +38,7 @@ before_build: - mingw32-make --version build_script: -- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 ECHO=1 clean +- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 clean #- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 DEBUGMODE=1 clean - cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 ERRORMODE=1 #- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 DEBUGMODE=1 @@ -57,4 +58,4 @@ build_script: on_finish: #- cmd: echo xfreerdp /u:appveyor /cert-ignore +clipboard /v:: -- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) +#- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) From 94d36fbe5bf017663d048504661f2bba0e0f817c Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 29 Jan 2016 02:07:36 -0500 Subject: [PATCH 057/121] apveyor: no debug dump --- appveyor.yml | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 858794439..cfc9edf32 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -39,21 +39,7 @@ before_build: build_script: - cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 clean -#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 DEBUGMODE=1 clean -- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 ERRORMODE=1 -#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 DEBUGMODE=1 -#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 clean -#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 DEBUGMODE=1 clean -#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOMIXER=1 -#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 DEBUGMODE=1 NOMIXER=1 -#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 clean -#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 DEBUGMODE=1 clean -#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 -#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 DEBUGMODE=1 -#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 clean -#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 DEBUGMODE=1 clean -#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 NOMIXER=1 -#- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOHW=1 DEBUGMODE=1 NOMIXER=1 +- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOOBJDUMP=1 ERRORMODE=1 on_finish: From d7925104b95a196aa14a6b1e7c3218fd4a87bb55 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 29 Jan 2016 11:09:46 -0500 Subject: [PATCH 058/121] appveyor: push build to FTP server --- appveyor.yml | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index cfc9edf32..74add4148 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,10 +1,6 @@ version: 2.1.14.{branch}-{build} os: MinGW -cache: -- SDL2-devel-2.0.4-mingw.tar.gz -- SDL2_mixer-devel-2.0.1-mingw.tar.gz - environment: CC: i686-w64-mingw32-gcc WINDRES: windres @@ -16,7 +12,12 @@ environment: SDL2_MIXER_ARCHIVE: SDL2_mixer-devel-2.0.1-mingw.tar SDL2_MIXER_MOVE: SDL2_mixer-2.0.1\i686-w64-mingw32 +cache: +- SDL2-devel-2.0.4-mingw.tar.gz +- SDL2_mixer-devel-2.0.1-mingw.tar.gz + install: +#Download SDL2 - if not exist "%SDL2_ARCHIVE%.gz" appveyor DownloadFile "%SDL2_URL%" -FileName "%SDL2_ARCHIVE%.gz" - 7z x -y "%SDL2_ARCHIVE%.gz" -o%TMP% >null - 7z x -y "%TMP%\%SDL2_ARCHIVE%" -o%TMP% >null @@ -24,7 +25,7 @@ install: - ps: (Get-Content ([System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MOVE%\bin\sdl2-config"))) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", ([System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%")) } | Set-Content ([System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\bin\sdl2-config")) - ps: (Get-Content ([System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MOVE%\lib\cmake\SDL2\sdl2-config.cmake"))) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", ([System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%")) } | Set-Content ([System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\lib\cmake\SDL2\sdl2-config.cmake")) - ps: (Get-Content ([System.Environment]::ExpandEnvironmentVariables("%TMP%\%SDL2_MOVE%\lib\pkgconfig\sdl2.pc"))) | ForEach-Object { $_ -replace "/usr/local/cross-tools/i686-w64-mingw32", ([System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%")) } | Set-Content ([System.Environment]::ExpandEnvironmentVariables("%MINGW_SDK%\lib\pkgconfig\sdl2.pc")) - +#Download SDL2_Mixer - if not exist "%SDL2_MIXER_ARCHIVE%.gz" appveyor DownloadFile "%SDL2_MIXER_URL%" -FileName "%SDL2_MIXER_ARCHIVE%.gz" - 7z x -y "%SDL2_MIXER_ARCHIVE%.gz" -o%TMP% >null - 7z x -y "%TMP%\%SDL2_MIXER_ARCHIVE%" -o%TMP% >null @@ -39,7 +40,25 @@ before_build: build_script: - cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 clean -- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 NOOBJDUMP=1 ERRORMODE=1 +- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 ERRORMODE=1 + +test: off + +artifacts: + - path: bin\Mingw\$(configuration) + +deploy: + - provider: FTP + protocol: ftps + host: + secure: NsLJEPIBvmwCOj8Tg8RoRQ== + username: + secure: z/r81kkL3Mm6wxjuN0sW1w== + password: + secure: Hbn6Uy3lT0YZ88yFJ3aW4w== + folder: + application: + active_mode: false on_finish: From 4b8167d823ed180af310d3db05e0733fe5a200cb Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 29 Jan 2016 11:27:33 -0500 Subject: [PATCH 059/121] appveyor: let push a 7z in the after build step --- appveyor.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 74add4148..ad0ca9e13 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -42,10 +42,11 @@ build_script: - cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 clean - cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 ERRORMODE=1 -test: off +after_build: +- cmd: 7z a Build.7z -w bin\Mingw\Release +- appveyor PushArtifact Build.7z -artifacts: - - path: bin\Mingw\$(configuration) +test: off deploy: - provider: FTP From 5582d715d49e340512b19ce5fcfba4e8496820cf Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 29 Jan 2016 11:39:16 -0500 Subject: [PATCH 060/121] appveyor: let have the build bot have the right username --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index ad0ca9e13..a26082484 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -54,7 +54,7 @@ deploy: host: secure: NsLJEPIBvmwCOj8Tg8RoRQ== username: - secure: z/r81kkL3Mm6wxjuN0sW1w== + secure: ejxi5mvk7oLYu7QtbYojajEPigMy0mokaKhuEVuDZcA= password: secure: Hbn6Uy3lT0YZ88yFJ3aW4w== folder: From ba1cb80ff7b610bcb5c12ae34f1eefad2d8d13da Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 29 Jan 2016 11:42:40 -0500 Subject: [PATCH 061/121] appveyor: name each 7z by version" --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index a26082484..09ea7cec6 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -43,8 +43,8 @@ build_script: - cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 ERRORMODE=1 after_build: -- cmd: 7z a Build.7z -w bin\Mingw\Release -- appveyor PushArtifact Build.7z +- cmd: 7z a $(appveyor_build_version).7z bin\Mingw\Release -x!.gitignore +- appveyor PushArtifact $(appveyor_build_version).7z test: off From 343c8a949857bb20d5cffb7f012688dae374cced Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 29 Jan 2016 11:55:00 -0500 Subject: [PATCH 062/121] appveyor: or not, let try this naming --- appveyor.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 09ea7cec6..7105a64bc 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -43,8 +43,8 @@ build_script: - cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 ERRORMODE=1 after_build: -- cmd: 7z a $(appveyor_build_version).7z bin\Mingw\Release -x!.gitignore -- appveyor PushArtifact $(appveyor_build_version).7z +- cmd: 7z a Build-{build}.7z bin\Mingw\Release -x!.gitignore +- appveyor PushArtifact Build-{build}.7z test: off @@ -57,7 +57,7 @@ deploy: secure: ejxi5mvk7oLYu7QtbYojajEPigMy0mokaKhuEVuDZcA= password: secure: Hbn6Uy3lT0YZ88yFJ3aW4w== - folder: + folder: {branch} application: active_mode: false From 38952028612041228141f511c75489de012ba04a Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 29 Jan 2016 12:00:05 -0500 Subject: [PATCH 063/121] appveyor: let include the commit id --- appveyor.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 7105a64bc..2f35afadc 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -43,8 +43,8 @@ build_script: - cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 ERRORMODE=1 after_build: -- cmd: 7z a Build-{build}.7z bin\Mingw\Release -x!.gitignore -- appveyor PushArtifact Build-{build}.7z +- cmd: 7z a %APPVEYOR_REPO_BRANCH%-%APPVEYOR_REPO_COMMIT%.7z bin\Mingw\Release -x!.gitignore +- appveyor PushArtifact %APPVEYOR_REPO_BRANCH%-%APPVEYOR_REPO_COMMIT%.7z test: off @@ -57,7 +57,7 @@ deploy: secure: ejxi5mvk7oLYu7QtbYojajEPigMy0mokaKhuEVuDZcA= password: secure: Hbn6Uy3lT0YZ88yFJ3aW4w== - folder: {branch} + folder: appveyor application: active_mode: false From 01f2f4d444f0276e9c62991dd24e962043e2de31 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 29 Jan 2016 12:08:41 -0500 Subject: [PATCH 064/121] appveyor: move naming of 7z to env block --- appveyor.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 2f35afadc..581c628fb 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -11,6 +11,7 @@ environment: SDL2_MIXER_URL: https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-devel-2.0.1-mingw.tar.gz SDL2_MIXER_ARCHIVE: SDL2_mixer-devel-2.0.1-mingw.tar SDL2_MIXER_MOVE: SDL2_mixer-2.0.1\i686-w64-mingw32 + BUILD_ARCHIVE: %APPVEYOR_REPO_BRANCH%-%APPVEYOR_REPO_COMMIT%.7z cache: - SDL2-devel-2.0.4-mingw.tar.gz @@ -43,8 +44,8 @@ build_script: - cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 ERRORMODE=1 after_build: -- cmd: 7z a %APPVEYOR_REPO_BRANCH%-%APPVEYOR_REPO_COMMIT%.7z bin\Mingw\Release -x!.gitignore -- appveyor PushArtifact %APPVEYOR_REPO_BRANCH%-%APPVEYOR_REPO_COMMIT%.7z +- cmd: 7z a %BUILD_ARCHIVE% bin\Mingw\Release -x!.gitignore +- appveyor PushArtifact %BUILD_ARCHIVE% test: off From b3ee8591f2e3afd6a67594706207eddca1066ada Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 29 Jan 2016 12:36:48 -0500 Subject: [PATCH 065/121] appveyor: ok, let set the var in after build step --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 581c628fb..bd695fdea 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -11,7 +11,6 @@ environment: SDL2_MIXER_URL: https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-devel-2.0.1-mingw.tar.gz SDL2_MIXER_ARCHIVE: SDL2_mixer-devel-2.0.1-mingw.tar SDL2_MIXER_MOVE: SDL2_mixer-2.0.1\i686-w64-mingw32 - BUILD_ARCHIVE: %APPVEYOR_REPO_BRANCH%-%APPVEYOR_REPO_COMMIT%.7z cache: - SDL2-devel-2.0.4-mingw.tar.gz @@ -44,6 +43,7 @@ build_script: - cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 ERRORMODE=1 after_build: +- set BUILD_ARCHIVE=%APPVEYOR_REPO_BRANCH%-%APPVEYOR_REPO_COMMIT%.7 - cmd: 7z a %BUILD_ARCHIVE% bin\Mingw\Release -x!.gitignore - appveyor PushArtifact %BUILD_ARCHIVE% From 0f83c2aeb521f1d2fc0cffe289d14c49379535f1 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 29 Jan 2016 12:53:39 -0500 Subject: [PATCH 066/121] appveyor: 7z, not 7 --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index bd695fdea..adc57d483 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -43,7 +43,7 @@ build_script: - cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 ERRORMODE=1 after_build: -- set BUILD_ARCHIVE=%APPVEYOR_REPO_BRANCH%-%APPVEYOR_REPO_COMMIT%.7 +- set BUILD_ARCHIVE=%APPVEYOR_REPO_BRANCH%-%APPVEYOR_REPO_COMMIT%.7z - cmd: 7z a %BUILD_ARCHIVE% bin\Mingw\Release -x!.gitignore - appveyor PushArtifact %BUILD_ARCHIVE% From deca16f923a0cd801c32b59e1d977906e66ad876 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 29 Jan 2016 18:38:41 -0500 Subject: [PATCH 067/121] appveyor: let use short commits --- appveyor.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index adc57d483..70f186667 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -43,8 +43,10 @@ build_script: - cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 ERRORMODE=1 after_build: -- set BUILD_ARCHIVE=%APPVEYOR_REPO_BRANCH%-%APPVEYOR_REPO_COMMIT%.7z -- cmd: 7z a %BUILD_ARCHIVE% bin\Mingw\Release -x!.gitignore +- cmd: git rev-parse --short %APPVEYOR_REPO_COMMIT%>%TMP%/gitshort.txt +- cmd: set /P GITSHORT=<%TMP%/gitshort.txt +- set BUILD_ARCHIVE=%APPVEYOR_REPO_BRANCH%-%GITSHORT%.7z +- cmd: 7z a %BUILD_ARCHIVE% bin\Mingw\Release -xr!.gitignore - appveyor PushArtifact %BUILD_ARCHIVE% test: off From f50098669278de89d00198916a16717e53117f3d Mon Sep 17 00:00:00 2001 From: Inuyasha Date: Fri, 29 Jan 2016 16:01:05 -0800 Subject: [PATCH 068/121] use RGB for screen texture, not RGBA the screen texture does not need an alpha channel. the fact that it had one made OGL copy the topmost pixel of the screen texture's alpha channel. which, naturally results in the screen becoming partially transparent and letting you see the working texture in the background. --- src/hardware/r_opengl/r_opengl.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hardware/r_opengl/r_opengl.c b/src/hardware/r_opengl/r_opengl.c index 76543e259..a407a9e45 100644 --- a/src/hardware/r_opengl/r_opengl.c +++ b/src/hardware/r_opengl/r_opengl.c @@ -2364,7 +2364,7 @@ EXPORT void HWRAPI(MakeScreenTexture) (void) Clamp2D(GL_TEXTURE_WRAP_S); Clamp2D(GL_TEXTURE_WRAP_T); #ifndef KOS_GL_COMPATIBILITY - pglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, texsize, texsize, 0); + pglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, texsize, texsize, 0); #endif tex_downloaded = 0; // 0 so it knows it doesn't have any of the cached patches downloaded right now @@ -2392,7 +2392,7 @@ EXPORT void HWRAPI(MakeScreenFinalTexture) (void) Clamp2D(GL_TEXTURE_WRAP_S); Clamp2D(GL_TEXTURE_WRAP_T); #ifndef KOS_GL_COMPATIBILITY - pglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, texsize, texsize, 0); + pglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, texsize, texsize, 0); #endif tex_downloaded = 0; // 0 so it knows it doesn't have any of the cached patches downloaded right now From 8b56cd76c747e8fb2b708755d39a302d95ad7ec6 Mon Sep 17 00:00:00 2001 From: Monster Iestyn Date: Sun, 31 Jan 2016 15:08:16 +0000 Subject: [PATCH 069/121] doomtype.h tweaks some of the mess in here really bothers me (cherry-picking this commit of mine from next since it only fixes a small oversight with compiling and adds a comment) --- src/doomtype.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/doomtype.h b/src/doomtype.h index ff4199775..8e7da6881 100644 --- a/src/doomtype.h +++ b/src/doomtype.h @@ -100,11 +100,13 @@ typedef long ssize_t; #if defined (_MSC_VER) || defined (__OS2__) // Microsoft VisualC++ +#ifdef _MSC_VER #if (_MSC_VER <= 1800) // MSVC 2013 and back #define snprintf _snprintf #if (_MSC_VER <= 1200) // MSVC 2012 and back #define vsnprintf _vsnprintf #endif +#endif #endif #define strncasecmp strnicmp #define strcasecmp stricmp @@ -177,6 +179,8 @@ size_t strlcpy(char *dst, const char *src, size_t siz); // not the number of bytes in the buffer. #define STRBUFCPY(dst,src) strlcpy(dst, src, sizeof dst) +// \note __BYTEBOOL__ used to be set above if "macintosh" was defined, +// if macintosh's version of boolean type isn't needed anymore, then isn't this macro pointless now? #ifndef __BYTEBOOL__ #define __BYTEBOOL__ @@ -193,7 +197,6 @@ size_t strlcpy(char *dst, const char *src, size_t siz); #else typedef enum {false, true} boolean; #endif - //#endif // __cplusplus #endif // __BYTEBOOL__ /* 7.18.2.1 Limits of exact-width integer types */ From 9e29b69a290841205c75680c4cc92e2fe670272b Mon Sep 17 00:00:00 2001 From: Monster Iestyn Date: Sun, 31 Jan 2016 16:49:04 +0000 Subject: [PATCH 070/121] Remove unused "firstnewseg" variable --- src/r_bsp.c | 1 - src/r_bsp.h | 1 - src/r_segs.c | 2 -- 3 files changed, 4 deletions(-) diff --git a/src/r_bsp.c b/src/r_bsp.c index e967e28ce..acb0630c3 100644 --- a/src/r_bsp.c +++ b/src/r_bsp.c @@ -31,7 +31,6 @@ sector_t *backsector; // 896 drawsegs! So too bad here's a limit removal a-la-Boom drawseg_t *drawsegs = NULL; drawseg_t *ds_p = NULL; -drawseg_t *firstnewseg = NULL; // indicates doors closed wrt automap bugfix: INT32 doorclosed; diff --git a/src/r_bsp.h b/src/r_bsp.h index 20a80d89a..14b11ea77 100644 --- a/src/r_bsp.h +++ b/src/r_bsp.h @@ -30,7 +30,6 @@ extern INT32 checkcoord[12][4]; extern drawseg_t *drawsegs; extern drawseg_t *ds_p; -extern drawseg_t *firstnewseg; extern INT32 doorclosed; typedef void (*drawfunc_t)(INT32 start, INT32 stop); diff --git a/src/r_segs.c b/src/r_segs.c index 7467f5324..3171bced6 100644 --- a/src/r_segs.c +++ b/src/r_segs.c @@ -1407,13 +1407,11 @@ void R_StoreWallRange(INT32 start, INT32 stop) if (ds_p == drawsegs+maxdrawsegs) { size_t pos = ds_p - drawsegs; - size_t pos2 = firstnewseg - drawsegs; size_t newmax = maxdrawsegs ? maxdrawsegs*2 : 128; if (firstseg) firstseg = (drawseg_t *)(firstseg - drawsegs); drawsegs = Z_Realloc(drawsegs, newmax*sizeof (*drawsegs), PU_STATIC, NULL); ds_p = drawsegs + pos; - firstnewseg = drawsegs + pos2; maxdrawsegs = newmax; if (firstseg) firstseg = drawsegs + (size_t)firstseg; From deb958a79632840fba16ee1fc590ba9164210d5f Mon Sep 17 00:00:00 2001 From: Monster Iestyn Date: Sun, 31 Jan 2016 17:06:03 +0000 Subject: [PATCH 071/121] Remove unused "INVERSECOLORMAP" macro --- src/p_user.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/p_user.c b/src/p_user.c index 6844d2cba..d527c29c9 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -51,9 +51,6 @@ #include "hardware/hw_main.h" #endif -// Index of the special effects (INVUL inverse) map. -#define INVERSECOLORMAP 32 - #if 0 static void P_NukeAllPlayers(player_t *player); #endif From 2d94b2a85fd3def4d70140f068f898a9981a132b Mon Sep 17 00:00:00 2001 From: Monster Iestyn Date: Sun, 31 Jan 2016 17:10:57 +0000 Subject: [PATCH 072/121] keys.h doesn't need to be included twice here lol --- src/g_input.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/g_input.c b/src/g_input.c index f12ddb711..fd6354b26 100644 --- a/src/g_input.c +++ b/src/g_input.c @@ -16,7 +16,6 @@ #include "g_input.h" #include "keys.h" #include "hu_stuff.h" // need HUFONT start & end -#include "keys.h" #include "d_net.h" #include "console.h" From 2e58f6c4d9728569b8e66ac04444fc225fe4ec3a Mon Sep 17 00:00:00 2001 From: Monster Iestyn Date: Sat, 23 Jan 2016 19:58:57 +0000 Subject: [PATCH 073/121] Fixed that odd bug where PolyObjects sometimes leave a vertex or two in their control sectors Turns out the seg-searching code falsely assumed it'd find frontfacing segs first, who knew? --- src/p_polyobj.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/p_polyobj.c b/src/p_polyobj.c index f790fa768..23e7092be 100644 --- a/src/p_polyobj.c +++ b/src/p_polyobj.c @@ -427,6 +427,8 @@ newseg: // seg's ending vertex. for (i = 0; i < numsegs; ++i) { + if (segs[i].side != 0) // needs to be frontfacing + continue; if (segs[i].v1->x == seg->v2->x && segs[i].v1->y == seg->v2->y) { // Make sure you didn't already add this seg... @@ -593,6 +595,9 @@ static void Polyobj_spawnPolyObj(INT32 num, mobj_t *spawnSpot, INT32 id) seg_t *seg = &segs[i]; INT32 polyID, parentID; + if (seg->side != 0) // needs to be frontfacing + continue; + if (seg->linedef->special != POLYOBJ_START_LINE) continue; From 937c8f936b3dadd94568e2c4d496a5516c4695e2 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Sun, 31 Jan 2016 20:15:10 -0500 Subject: [PATCH 074/121] appveyor: updated to GCC 5.3 --- appveyor.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 70f186667..1ce41a817 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -37,10 +37,11 @@ before_build: - set Path=%MINGW_SDK%\bin;%Path% - i686-w64-mingw32-gcc --version - mingw32-make --version +- set SRB2_MFLAGS="-C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC53=1" build_script: -- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 clean -- cmd: mingw32-make.exe -C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC52=1 SDL=1 ERRORMODE=1 +- cmd: mingw32-make.exe %SRB2_MFLAGS% SDL=1 clean +- cmd: mingw32-make.exe %SRB2_MFLAGS% SDL=1 ERRORMODE=1 after_build: - cmd: git rev-parse --short %APPVEYOR_REPO_COMMIT%>%TMP%/gitshort.txt From 2b41a40076492cb31962ca8b4b2de4fa3edf446f Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Sun, 31 Jan 2016 20:25:32 -0500 Subject: [PATCH 075/121] appveyor: no quote? --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 1ce41a817..4edcd7a7f 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -37,7 +37,7 @@ before_build: - set Path=%MINGW_SDK%\bin;%Path% - i686-w64-mingw32-gcc --version - mingw32-make --version -- set SRB2_MFLAGS="-C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC53=1" +- set SRB2_MFLAGS=-C src MINGW=1 WARNINGMODE=1 NOASM=1 NOUPX=1 GCC53=1 build_script: - cmd: mingw32-make.exe %SRB2_MFLAGS% SDL=1 clean From 0455b572dc456331ad9bd397664773966f412d52 Mon Sep 17 00:00:00 2001 From: Monster Iestyn Date: Thu, 28 Jan 2016 18:06:20 +0000 Subject: [PATCH 076/121] Removed weird test for water planes in HWR_Subsector It crashes when you try to test it anyway, lol --- src/hardware/hw_main.c | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index db812c0df..b0186049a 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -2856,7 +2856,6 @@ static void HWR_AddPolyObjectPlanes(void) // : Draw one or more line segments. // Notes : Sets gr_cursectorlight to the light of the parent sector, to modulate wall textures // -----------------+ -static lumpnum_t doomwaterflat; //set by R_InitFlats hack static void HWR_Subsector(size_t num) { INT16 count; @@ -2867,7 +2866,6 @@ static void HWR_Subsector(size_t num) INT32 ceilinglightlevel; INT32 locFloorHeight, locCeilingHeight; INT32 light = 0; - fixed_t wh; extracolormap_t *floorcolormap; extracolormap_t *ceilingcolormap; @@ -3193,26 +3191,6 @@ static void HWR_Subsector(size_t num) } } -//20/08/99: Changed by Hurdler (taken from faB's code) -#ifdef DOPLANES - // -------------------- WATER IN DEV. TEST ------------------------ - //dck hack : use abs(tag) for waterheight - //ilag : Since we changed to UINT16 for sector tags, simulate INT16 - if (gr_frontsector->tag > 32767) - { - wh = ((65535-gr_frontsector->tag) < gr_frontsector->floorheight && - wh < gr_frontsector->ceilingheight) - { - HWR_GetFlat(doomwaterflat); - HWR_RenderPlane(gr_frontsector, - &extrasubsectors[num], wh, PF_Translucent, - gr_frontsector->lightlevel, doomwaterflat, - NULL, 255, false, gr_frontsector->lightlist[light].extra_colormap); - } - } - // -------------------- WATER IN DEV. TEST ------------------------ -#endif sub->validcount = validcount; } @@ -5513,11 +5491,6 @@ void HWR_Startup(void) HWR_AddEngineCommands(); HWR_InitTextureCache(); - // for test water translucent surface - doomwaterflat = W_CheckNumForName("FWATER1"); - if (doomwaterflat == LUMPERROR) // if FWATER1 not found (in doom shareware) - doomwaterflat = W_GetNumForName("WATER0"); - HWR_InitMD2(); #ifdef ALAM_LIGHTING From 662d40511d56fe1514524547376a86647bc2c0a5 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 5 Feb 2016 18:02:36 -0500 Subject: [PATCH 077/121] travis: let start building with travis --- .travis.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..e69de29bb From 69937b41d25decffa67850ec5ff82881e44d0898 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 5 Feb 2016 18:39:06 -0500 Subject: [PATCH 078/121] travis: simple build config --- .travis.yml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/.travis.yml b/.travis.yml index e69de29bb..a1052d7db 100644 --- a/.travis.yml +++ b/.travis.yml @@ -0,0 +1,25 @@ +language: c + +os: + - linux + #- osx + +compiler: + - gcc + - clang + +addons: + apt: + packages: + - libsdl-mixer2-dev + - libpng-dev + - libglu1-dev + +before_install: + - $(CC) --version + - cmake --version + +before_script: + - mkdir build + - cd build + - cmake .. From 0003cea547eb9f47e81c1c236c0ab82acd05b597 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 5 Feb 2016 18:43:18 -0500 Subject: [PATCH 079/121] travis-ci: we need sudo --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index a1052d7db..b1cd1f401 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,7 @@ language: c +sudo: required + os: - linux #- osx From 14440675608a10518293d080deca55a2ab0e78b0 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 5 Feb 2016 18:50:02 -0500 Subject: [PATCH 080/121] travis: use the correct packages --- .travis.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index b1cd1f401..f25a67cc5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,12 +13,11 @@ compiler: addons: apt: packages: - - libsdl-mixer2-dev + - libsdl2-mixer-dev - libpng-dev - - libglu1-dev + - ibgl1-mesa-dev before_install: - - $(CC) --version - cmake --version before_script: From 522d2049de962411e29d171fe29987f7ed40804b Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 5 Feb 2016 19:08:02 -0500 Subject: [PATCH 081/121] travis: add cmake 3.x package --- .travis.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.travis.yml b/.travis.yml index f25a67cc5..f8052143f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,7 +12,11 @@ compiler: addons: apt: + sources: + - george-edison55-precise-backports packages: + - cmake + - cmake-data - libsdl2-mixer-dev - libpng-dev - ibgl1-mesa-dev From 45b181f889fe750b3c84772e2b93368d8f79cc66 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 5 Feb 2016 19:26:59 -0500 Subject: [PATCH 082/121] travis: switch to trusty for linux os --- .travis.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index f8052143f..4711df7d4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,10 @@ language: c -sudo: required +matrix: + include: + - os: linux + dist: trusty + sudo: required os: - linux @@ -19,7 +23,7 @@ addons: - cmake-data - libsdl2-mixer-dev - libpng-dev - - ibgl1-mesa-dev + - libgl1-mesa-dev before_install: - cmake --version From 0bd16a5a0c6cdbfc011f098ea609f95038b09657 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 5 Feb 2016 19:30:03 -0500 Subject: [PATCH 083/121] travis: drop osx --- .travis.yml | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4711df7d4..524c44720 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,14 +1,5 @@ -language: c - -matrix: - include: - - os: linux - dist: trusty - sudo: required - -os: - - linux - #- osx +sudo: required +dist: trusty compiler: - gcc From 5e5c73fe18a8a30c97b9b54e0f3119dae18d3a6b Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 5 Feb 2016 20:50:35 -0500 Subject: [PATCH 084/121] travis: add SRB2 2.1.14 files --- .travis.yml | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 524c44720..6ce5cb083 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,19 +7,25 @@ compiler: addons: apt: - sources: - - george-edison55-precise-backports packages: - - cmake - - cmake-data - libsdl2-mixer-dev - libpng-dev - libgl1-mesa-dev + - p7zip before_install: - cmake --version before_script: + - curl http://rosenthalcastle.org/srb2/SRB2-v2114-Installer.exe -o cache/SRB2-v2114-Installer.exe + - 7z x cache/SRB2-v2114-Installer.exe -o assets - mkdir build - cd build - cmake .. + +install: false + +cache: + - ccache + directories: + - cache From a743f155ac62663d333f8a3ddfee3af0e943885b Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 5 Feb 2016 21:00:46 -0500 Subject: [PATCH 085/121] travis: addd libgme to list --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 6ce5cb083..e077597ee 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,6 +11,7 @@ addons: - libsdl2-mixer-dev - libpng-dev - libgl1-mesa-dev + - libgme-dev - p7zip before_install: From b6cc13fd2e8955a248985061b11901a3b70c5edd Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 5 Feb 2016 21:07:46 -0500 Subject: [PATCH 086/121] travis: drop test --- .travis.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index e077597ee..cf3a03f7c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -24,8 +24,6 @@ before_script: - cd build - cmake .. -install: false - cache: - ccache directories: From 152c106cbda0db3fa9381a643539e568ba1e882e Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 5 Feb 2016 21:09:14 -0500 Subject: [PATCH 087/121] travis: restore language --- .travis.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.travis.yml b/.travis.yml index cf3a03f7c..ab5cdea9a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,5 @@ +language: c + sudo: required dist: trusty @@ -24,6 +26,8 @@ before_script: - cd build - cmake .. +install: false + cache: - ccache directories: From 59d111b17d443b3be5cc4bc8534cf4b327b930e8 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 5 Feb 2016 21:11:00 -0500 Subject: [PATCH 088/121] travis: restore missing config? --- .travis.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index ab5cdea9a..8feb76d79 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,9 +26,3 @@ before_script: - cd build - cmake .. -install: false - -cache: - - ccache - directories: - - cache From e913ca0ca6ea332177a83aa4af8f14ab54e16690 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 5 Feb 2016 21:15:32 -0500 Subject: [PATCH 089/121] travis: use wget and create cache folder --- .travis.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 8feb76d79..987565745 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,13 +14,14 @@ addons: - libpng-dev - libgl1-mesa-dev - libgme-dev - - p7zip + - p7zip-full before_install: - cmake --version before_script: - - curl http://rosenthalcastle.org/srb2/SRB2-v2114-Installer.exe -o cache/SRB2-v2114-Installer.exe + - make cache + - wget http://rosenthalcastle.org/srb2/SRB2-v2114-Installer.exe -c -O cache/SRB2-v2114-Installer.exe - 7z x cache/SRB2-v2114-Installer.exe -o assets - mkdir build - cd build From ae75e3ee61922527f778adde2b6650e64e11212e Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 5 Feb 2016 21:21:28 -0500 Subject: [PATCH 090/121] travis: mkdir , not make and cache the cccahe --- .travis.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 987565745..fdcb52477 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,10 +20,14 @@ before_install: - cmake --version before_script: - - make cache + - mkdir cache - wget http://rosenthalcastle.org/srb2/SRB2-v2114-Installer.exe -c -O cache/SRB2-v2114-Installer.exe - 7z x cache/SRB2-v2114-Installer.exe -o assets - mkdir build - cd build - cmake .. +cache: + directories: + - $HOME/.ccache + - cache From a979e37586e083ac987e9ecfcdfa36b525ac9340 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 5 Feb 2016 21:28:19 -0500 Subject: [PATCH 091/121] travis: no space on 7z command --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index fdcb52477..264429170 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,7 +22,7 @@ before_install: before_script: - mkdir cache - wget http://rosenthalcastle.org/srb2/SRB2-v2114-Installer.exe -c -O cache/SRB2-v2114-Installer.exe - - 7z x cache/SRB2-v2114-Installer.exe -o assets + - 7z x cache/SRB2-v2114-Installer.exe -oassets - mkdir build - cd build - cmake .. From 4d5f16330acbd98d17dbaf21a146be2ebe5f9691 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 5 Feb 2016 21:33:00 -0500 Subject: [PATCH 092/121] travis: just run make --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 264429170..896b7a786 100644 --- a/.travis.yml +++ b/.travis.yml @@ -27,6 +27,8 @@ before_script: - cd build - cmake .. +script: make + cache: directories: - $HOME/.ccache From 864baeda050c9f8650b2e0b0fe27c831aad24529 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 5 Feb 2016 21:49:24 -0500 Subject: [PATCH 093/121] cmake: fixed up to handle Clang and AppleClang --- src/CMakeLists.txt | 6 +++--- src/sdl/CMakeLists.txt | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6859e27c3..3405e85d4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -166,7 +166,7 @@ set(SRB2_CORE_GAME_SOURCES p_tick.h ) -if(NOT CLANG) +if(NOT (CMAKE_CXX_COMPILER_ID MATCHES "Clang")) set(SRB2_CORE_SOURCES ${SRB2_CORE_SOURCES} string.c) endif() @@ -404,7 +404,7 @@ endif() # Compatibility flag with later versions of GCC # We should really fix our code to not need this -if(NOT CLANG AND NOT MSVC) +if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} -mno-ms-bitfields) endif() @@ -429,4 +429,4 @@ endif() if(NOT ${SRB2_SDL2_AVAILABLE} AND NOT ${SRB2_WIN32_AVAILABLE}) message(FATAL_ERROR "There are no targets available to build an SRB2 executable. :(") -endif() \ No newline at end of file +endif() diff --git a/src/sdl/CMakeLists.txt b/src/sdl/CMakeLists.txt index b3fa5390c..eb832797e 100644 --- a/src/sdl/CMakeLists.txt +++ b/src/sdl/CMakeLists.txt @@ -117,7 +117,7 @@ if(${SDL2_FOUND}) add_executable(SRB2SDL2 MACOSX_BUNDLE WIN32 ${SRB2_SDL2_TOTAL_SOURCES}) set_target_properties(SRB2SDL2 PROPERTIES OUTPUT_NAME ${SRB2_SDL2_EXE_NAME}) - if(CLANG) + if((CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")) add_framework(CoreFoundation SRB2SDL2) add_framework(SDL2 SRB2SDL2) add_framework(SDL2_mixer SRB2SDL2) @@ -224,7 +224,7 @@ if(${SDL2_FOUND}) endif() #### Installation #### - if (CLANG) + if (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") install(TARGETS SRB2SDL2 BUNDLE DESTINATION . ) @@ -265,7 +265,7 @@ if(${SDL2_FOUND}) # Mac bundle fixup - if(CLANG) + if (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") install(CODE " include(BundleUtilities) fixup_bundle(\"${CMAKE_INSTALL_PREFIX}/Sonic Robo Blast 2.app\" @@ -279,4 +279,4 @@ if(${SDL2_FOUND}) else() message(WARNING "SDL2 was not found, so the SDL2 target will not be available.") set(SRB2_SDL2_AVAILABLE NO PARENT_SCOPE) -endif() \ No newline at end of file +endif() From f4886657c1e4cbbe29b472c4a088ec71e3ade6d7 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 5 Feb 2016 22:12:12 -0500 Subject: [PATCH 094/121] clang: fixup a few clang warnings --- src/info.c | 2 +- src/m_menu.c | 2 +- src/p_enemy.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/info.c b/src/info.c index fb30258c3..17384086a 100644 --- a/src/info.c +++ b/src/info.c @@ -4225,7 +4225,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = MT_GOOP, // painchance sfx_dmpain, // painsound S_EGGMOBILE2_PAIN2, // meleestate - MT_EGGMOBILE2_POGO, // missilestate + (mobjtype_t)MT_EGGMOBILE2_POGO, // missilestate S_EGGMOBILE2_DIE1, // deathstate S_EGGMOBILE2_FLEE1,// xdeathstate sfx_cybdth, // deathsound diff --git a/src/m_menu.c b/src/m_menu.c index c7a9fcc16..1e7745535 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -6071,7 +6071,7 @@ static void M_RoomMenu(INT32 choice) for (i = 0; room_list[i].header.buffer[0]; i++) { - if(room_list[i].name != '\0') + if(*room_list[i].name != '\0') { MP_RoomMenu[i+1].text = room_list[i].name; roomIds[i] = room_list[i].id; diff --git a/src/p_enemy.c b/src/p_enemy.c index 18a4ec5ff..6ac4e8968 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -6352,7 +6352,7 @@ void A_Boss2PogoTarget(mobj_t *actor) if (actor->info->missilestate) // spawn the pogo stick collision box { - mobj_t *pogo = P_SpawnMobj(actor->x, actor->y, actor->z - mobjinfo[actor->info->missilestate].height, actor->info->missilestate); + mobj_t *pogo = P_SpawnMobj(actor->x, actor->y, actor->z - mobjinfo[actor->info->missilestate].height, (mobjtype_t)actor->info->missilestate); pogo->target = actor; } From 68054a49e344af2e4854da344408c8daf08f675f Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 5 Feb 2016 22:32:14 -0500 Subject: [PATCH 095/121] clang: cleanup --- src/f_finale.c | 2 +- src/info.c | 2 +- src/m_misc.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/f_finale.c b/src/f_finale.c index f541995d4..466e208a5 100644 --- a/src/f_finale.c +++ b/src/f_finale.c @@ -603,7 +603,7 @@ static void F_IntroDrawScene(void) if (finalecount-84 < 58) { // Pure Fat is driving up! int ftime = (finalecount-84); - x = (-189<lvlttl) + if (gamestate == GS_LEVEL && mapheaderinfo[gamemap-1]->lvlttl[0] != '\0') snprintf(lvlttltext, 48, "%s%s%s", mapheaderinfo[gamemap-1]->lvlttl, (mapheaderinfo[gamemap-1]->levelflags & LF_NOZONE) ? "" : " ZONE", From 07fc74eaf50ce8ce47e0b48bc522f5ab0a3c4639 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 5 Feb 2016 22:38:40 -0500 Subject: [PATCH 096/121] clang: fixup a few clang warnings --- CMakeLists.txt | 3 --- src/CMakeLists.txt | 4 ++++ src/b_bot.c | 2 +- src/p_map.c | 4 ++-- src/p_user.c | 4 ++-- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0fb5cb28f..8deeb37e5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -80,10 +80,7 @@ endif() if(${CMAKE_SYSTEM} MATCHES "Darwin") add_definitions(-DMACOSX) - if(${CMAKE_C_COMPILER_ID} MATCHES "Clang") - set(CLANG ON) endif() -endif() set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") set(CMAKE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3405e85d4..d9e25dbb8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -408,6 +408,10 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} -mno-ms-bitfields) endif() +if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") + set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} -Wno-absolute-value) +endif() + add_definitions(-DCMAKECONFIG) #add_library(SRB2Core STATIC diff --git a/src/b_bot.c b/src/b_bot.c index 5e62e58e6..3072b1d75 100644 --- a/src/b_bot.c +++ b/src/b_bot.c @@ -49,7 +49,7 @@ static inline void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cm if (sonic->player->pflags & (PF_MACESPIN|PF_ITEMHANG)) { cmd->forwardmove = sonic->player->cmd.forwardmove; - cmd->angleturn = abs(tails->angle - sonic->angle)>>16; + cmd->angleturn = abs((tails->angle - sonic->angle))>>16; if (sonic->angle < tails->angle) cmd->angleturn = -cmd->angleturn; } else if (dist > FixedMul(512*FRACUNIT, tails->scale)) diff --git a/src/p_map.c b/src/p_map.c index 62cbf7b77..1aa8bc391 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -2507,8 +2507,8 @@ isblocking: climbangle += (ANGLE_90 * (whichside ? -1 : 1)); - if (((!slidemo->player->climbing && abs(slidemo->angle - ANGLE_90 - climbline) < ANGLE_45) - || (slidemo->player->climbing == 1 && abs(slidemo->angle - climbline) < ANGLE_135)) + if (((!slidemo->player->climbing && abs((slidemo->angle - ANGLE_90 - climbline)) < ANGLE_45) + || (slidemo->player->climbing == 1 && abs((slidemo->angle - climbline)) < ANGLE_135)) && P_IsClimbingValid(slidemo->player, climbangle)) { slidemo->angle = climbangle; diff --git a/src/p_user.c b/src/p_user.c index 6844d2cba..dacef733b 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -7902,9 +7902,9 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall if (player == &players[consoleplayer]) { if (focusangle >= localangle) - localangle += abs(focusangle - localangle)>>5; + localangle += abs((focusangle - localangle))>>5; else - localangle -= abs(focusangle - localangle)>>5; + localangle -= abs((focusangle - localangle))>>5; } } else if (P_AnalogMove(player)) // Analog From 7c1f1d9c8e52b80500221ec8e0cf28b55a8abb16 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 5 Feb 2016 22:54:50 -0500 Subject: [PATCH 097/121] travis: compile with warnings as errors, skip absolute-value warnings --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index 896b7a786..dfc1aef89 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,6 +3,9 @@ language: c sudo: required dist: trusty +env: +- CFLAGS=-Wno-absolute-value -Werror + compiler: - gcc - clang From 6d26a60cbefc20b53cc0daf65181ac998cd27582 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 5 Feb 2016 23:19:38 -0500 Subject: [PATCH 098/121] travis: cache 7z SFX --- .travis.yml | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/.travis.yml b/.travis.yml index dfc1aef89..7a9c7c372 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,4 @@ language: c - sudo: required dist: trusty @@ -10,6 +9,10 @@ compiler: - gcc - clang +cache: + directories: + - $HOME/srb2_cache + addons: apt: packages: @@ -19,20 +22,12 @@ addons: - libgme-dev - p7zip-full -before_install: - - cmake --version - before_script: - mkdir cache - - wget http://rosenthalcastle.org/srb2/SRB2-v2114-Installer.exe -c -O cache/SRB2-v2114-Installer.exe - - 7z x cache/SRB2-v2114-Installer.exe -oassets + - wget http://rosenthalcastle.org/srb2/SRB2-v2114-Installer.exe -c -O $HOME/srb2_cache/SRB2-v2114-Installer.exe + - 7z x $HOME/srb2_cache/SRB2-v2114-Installer.exe -oassets - mkdir build - cd build - cmake .. script: make - -cache: - directories: - - $HOME/.ccache - - cache From e9048aec4845c9e2d7c30cf93977c38ecf629ada Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Fri, 5 Feb 2016 23:22:06 -0500 Subject: [PATCH 099/121] travis: premake the cache folder --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 7a9c7c372..c6a3ce799 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,7 +23,7 @@ addons: - p7zip-full before_script: - - mkdir cache + - mkdir $HOME/srb2_cache - wget http://rosenthalcastle.org/srb2/SRB2-v2114-Installer.exe -c -O $HOME/srb2_cache/SRB2-v2114-Installer.exe - 7z x $HOME/srb2_cache/SRB2-v2114-Installer.exe -oassets - mkdir build From bac39b1bc037d4075ee0c0fc687f2980f6d223ee Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Sat, 6 Feb 2016 12:31:37 -0500 Subject: [PATCH 100/121] debian: untested update for Debian packages --- {bin/Resources => assets}/debian/README.Debian | 0 {bin/Resources => assets}/debian/README.source | 0 {bin/Resources => assets}/debian/changelog | 6 ++++++ {bin/Resources => assets}/debian/compat | 0 {bin/Resources => assets}/debian/control | 0 {bin/Resources => assets}/debian/copyright | 0 {bin/Resources => assets}/debian/rules | 4 ++-- {bin/Resources => assets}/debian/source/format | 0 debian/control | 14 ++++++++++---- debian/rules | 2 +- 10 files changed, 19 insertions(+), 7 deletions(-) rename {bin/Resources => assets}/debian/README.Debian (100%) rename {bin/Resources => assets}/debian/README.source (100%) rename {bin/Resources => assets}/debian/changelog (51%) rename {bin/Resources => assets}/debian/compat (100%) rename {bin/Resources => assets}/debian/control (100%) rename {bin/Resources => assets}/debian/copyright (100%) rename {bin/Resources => assets}/debian/rules (95%) rename {bin/Resources => assets}/debian/source/format (100%) diff --git a/bin/Resources/debian/README.Debian b/assets/debian/README.Debian similarity index 100% rename from bin/Resources/debian/README.Debian rename to assets/debian/README.Debian diff --git a/bin/Resources/debian/README.source b/assets/debian/README.source similarity index 100% rename from bin/Resources/debian/README.source rename to assets/debian/README.source diff --git a/bin/Resources/debian/changelog b/assets/debian/changelog similarity index 51% rename from bin/Resources/debian/changelog rename to assets/debian/changelog index 0c514d4d2..05c29fffe 100644 --- a/bin/Resources/debian/changelog +++ b/assets/debian/changelog @@ -1,3 +1,9 @@ +srb2-data (2.1.14~1) unstable; urgency=low + + * Updated for SRB2 v2.1.14 + + -- Alam Arias Sat, 06 Feb 2016 11:00:00 +0500 + srb2-data (2.0.6-2) maverick; urgency=high * Initial proper release.. diff --git a/bin/Resources/debian/compat b/assets/debian/compat similarity index 100% rename from bin/Resources/debian/compat rename to assets/debian/compat diff --git a/bin/Resources/debian/control b/assets/debian/control similarity index 100% rename from bin/Resources/debian/control rename to assets/debian/control diff --git a/bin/Resources/debian/copyright b/assets/debian/copyright similarity index 100% rename from bin/Resources/debian/copyright rename to assets/debian/copyright diff --git a/bin/Resources/debian/rules b/assets/debian/rules similarity index 95% rename from bin/Resources/debian/rules rename to assets/debian/rules index 514d8e07c..d86f92af2 100755 --- a/bin/Resources/debian/rules +++ b/assets/debian/rules @@ -37,7 +37,7 @@ RM := rm -rf DIR := $(shell pwd) PACKAGE := $(shell cat $(DIR)/debian/control | grep 'Package:' | sed -e 's/Package: //g') -DATAFILES := drill.dta music.dta soar.dta zones.dta player.dta rings.wpn srb2.wad +DATAFILES := srb2.srb zones.dta player.dta rings.dta music.dta DATADIR := usr/games/SRB2 RESOURCEDIR := . @@ -48,7 +48,7 @@ build: # This will need to be updated every time SRB2 official version is # Copy data files to their install locations, and add data files to include-binaries for file in $(DATAFILES); do \ - $(WGET) http://alam.srb2.org/SRB2/2.0.6-Final/Resources/$$file; \ + $(WGET) http://alam.srb2.org/SRB2/2.1.14-Final/Resources/$$file; \ if test "$$file" = "srb2.wad"; then \ $(INSTALL) $(RESOURCEDIR)/$$file $(DIR)/debian/tmp/$(DATADIR)/srb2.srb; \ else \ diff --git a/bin/Resources/debian/source/format b/assets/debian/source/format similarity index 100% rename from bin/Resources/debian/source/format rename to assets/debian/source/format diff --git a/debian/control b/debian/control index c64a85c48..b3e95b587 100644 --- a/debian/control +++ b/debian/control @@ -4,13 +4,19 @@ Source: srb2 Section: games Priority: extra Maintainer: Callum Dickinson -Build-Depends: debhelper (>= 7.0.50~), libsdl1.2-dev (>= 1.2.7), libsdl-mixer1.2-dev (>= 1.2.7), libpng12-dev (>= 1.2.7), libglu1-dev | libglu-dev, libosmesa6-dev | libgl-dev, nasm [i386] +Build-Depends: debhelper (>= 7.0.50~), + libsdl2-dev, + libsdl2-mixer-dev, + libpng12-dev (>= 1.2.7), + libglu1-dev | libglu-dev, + libosmesa6-dev | libgl-dev, + nasm [i386] Standards-Version: 3.8.4 Homepage: http://www.srb2.org Package: srb2 Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends}, srb2-data (= 2.0.6) +Depends: ${shlibs:Depends}, ${misc:Depends}, srb2-data (= 2.1.4) Description: A cross-platform 3D Sonic fangame Sonic Robo Blast 2 is a 3D open-source Sonic the Hedgehog fangame built using a modified version of the Doom Legacy @@ -22,8 +28,8 @@ Description: A cross-platform 3D Sonic fangame Package: srb2-dbg Architecture: any -# FIXME: should be Depends: ${shlibs:Depends}, ${misc:Depends}, srb2-data (= 2.0.6), srb2 but dh_shlibdeps is being an asshat -Depends: libc6, ${misc:Depends}, srb2-data (= 2.0.6), srb2 +# FIXME: should be Depends: ${shlibs:Depends}, ${misc:Depends}, srb2-data (= 2.1.4), srb2 but dh_shlibdeps is being an asshat +Depends: libc6, ${misc:Depends}, srb2-data (= 2.1.4), srb2 Description: A cross-platform 3D Sonic fangame Sonic Robo Blast 2 is a 3D open-source Sonic the Hedgehog fangame built using a modified version of the Doom Legacy diff --git a/debian/rules b/debian/rules index 33ade54c8..50572f1da 100755 --- a/debian/rules +++ b/debian/rules @@ -62,7 +62,7 @@ DBGDIR = usr/lib/debug/$(PKGDIR) PREFIX = $(shell test "$(CROSS_COMPILE_BUILD)" != "$(CROSS_COMPILE_HOST)" && echo "PREFIX=$(CROSS_COMPILE_HOST)") OS = LINUX=1 NONX86 = $(shell test "`echo $(CROSS_COMPILE_HOST) | grep 'i[3-6]86'`" || echo "NONX86=1") -MAKEARGS = $(OS) $(NONX86) $(PREFIX) EXENAME=$(EXENAME) DBGNAME=$(DBGNAME) SDL_PKGCONFIG=sdl PNG_PKGCONFIG=libpng NOOBJDUMP=1 +MAKEARGS = $(OS) $(NONX86) $(PREFIX) EXENAME=$(EXENAME) DBGNAME=$(DBGNAME) SDL_PKGCONFIG=sdl2 PNG_PKGCONFIG=libpng NOOBJDUMP=1 MENUFILE1 = ?package($(PACKAGE)):needs="X11" section="$(SECTION)" MENUFILE2 = title="$(TITLE)" command="/$(PKGDIR)/$(PACKAGE)" # FIXME pkg-config dir hacks From 5d5956b650e8779a32da839170d06ff08eeb294e Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Sat, 6 Feb 2016 14:42:02 -0500 Subject: [PATCH 101/121] debian: depend on srb2-data 2.1.14, not 2.1.4 --- debian/control | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/debian/control b/debian/control index b3e95b587..63b075f17 100644 --- a/debian/control +++ b/debian/control @@ -16,7 +16,7 @@ Homepage: http://www.srb2.org Package: srb2 Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends}, srb2-data (= 2.1.4) +Depends: ${shlibs:Depends}, ${misc:Depends}, srb2-data (= 2.1.14) Description: A cross-platform 3D Sonic fangame Sonic Robo Blast 2 is a 3D open-source Sonic the Hedgehog fangame built using a modified version of the Doom Legacy @@ -28,8 +28,8 @@ Description: A cross-platform 3D Sonic fangame Package: srb2-dbg Architecture: any -# FIXME: should be Depends: ${shlibs:Depends}, ${misc:Depends}, srb2-data (= 2.1.4), srb2 but dh_shlibdeps is being an asshat -Depends: libc6, ${misc:Depends}, srb2-data (= 2.1.4), srb2 +# FIXME: should be Depends: ${shlibs:Depends}, ${misc:Depends}, srb2-data (= 2.1.14), srb2 but dh_shlibdeps is being an asshat +Depends: libc6, ${misc:Depends}, srb2-data (= 2.1.14), srb2 Description: A cross-platform 3D Sonic fangame Sonic Robo Blast 2 is a 3D open-source Sonic the Hedgehog fangame built using a modified version of the Doom Legacy From 5c09c31584a1b7355652da288a8fe8bd726c3ba2 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Sat, 6 Feb 2016 14:56:16 -0500 Subject: [PATCH 102/121] Debian: only just make srb2 depend on srb2-data (2.1.14-1)) --- debian/control | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/debian/control b/debian/control index 63b075f17..ecc4829cf 100644 --- a/debian/control +++ b/debian/control @@ -16,7 +16,7 @@ Homepage: http://www.srb2.org Package: srb2 Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends}, srb2-data (= 2.1.14) +Depends: ${shlibs:Depends}, ${misc:Depends}, srb2-data (= 2.1.14-1) Description: A cross-platform 3D Sonic fangame Sonic Robo Blast 2 is a 3D open-source Sonic the Hedgehog fangame built using a modified version of the Doom Legacy @@ -28,8 +28,8 @@ Description: A cross-platform 3D Sonic fangame Package: srb2-dbg Architecture: any -# FIXME: should be Depends: ${shlibs:Depends}, ${misc:Depends}, srb2-data (= 2.1.14), srb2 but dh_shlibdeps is being an asshat -Depends: libc6, ${misc:Depends}, srb2-data (= 2.1.14), srb2 +# FIXME: should be Depends: ${shlibs:Depends}, ${misc:Depends}, srb2-data (= 2.1.14-1), srb2 but dh_shlibdeps is being an asshat +Depends: libc6, ${misc:Depends}, srb2-data (= 2.1.14-1), srb2 Description: A cross-platform 3D Sonic fangame Sonic Robo Blast 2 is a 3D open-source Sonic the Hedgehog fangame built using a modified version of the Doom Legacy From f9d23370b6b3a763d0ed1cc41389088257aa293f Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Sat, 6 Feb 2016 17:10:55 -0500 Subject: [PATCH 103/121] debian: the data package should be native --- assets/debian/changelog | 3 ++- assets/debian/source/format | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/assets/debian/changelog b/assets/debian/changelog index 05c29fffe..f9ba9b5ed 100644 --- a/assets/debian/changelog +++ b/assets/debian/changelog @@ -2,7 +2,8 @@ srb2-data (2.1.14~1) unstable; urgency=low * Updated for SRB2 v2.1.14 - -- Alam Arias Sat, 06 Feb 2016 11:00:00 +0500 + -- Alam Arias Sat, 6 Jan 2016 11:00:00 -0500 + srb2-data (2.0.6-2) maverick; urgency=high diff --git a/assets/debian/source/format b/assets/debian/source/format index 163aaf8d8..89ae9db8f 100644 --- a/assets/debian/source/format +++ b/assets/debian/source/format @@ -1 +1 @@ -3.0 (quilt) +3.0 (native) From 5d32ccffcfa80bd70272b4a4340a868a58efb57c Mon Sep 17 00:00:00 2001 From: mikeyd Date: Sat, 6 Feb 2016 17:25:27 -0500 Subject: [PATCH 104/121] fix pkgconfig path for Debian Jessie --- debian/rules | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/rules b/debian/rules index 50572f1da..59d9a954e 100755 --- a/debian/rules +++ b/debian/rules @@ -66,9 +66,9 @@ MAKEARGS = $(OS) $(NONX86) $(PREFIX) EXENAME=$(EXENAME) DBGNAME=$(DBGNAME) SDL_P MENUFILE1 = ?package($(PACKAGE)):needs="X11" section="$(SECTION)" MENUFILE2 = title="$(TITLE)" command="/$(PKGDIR)/$(PACKAGE)" # FIXME pkg-config dir hacks -export PKG_CONFIG_LIBDIR = /usr/$(CROSS_COMPILE_HOST)/lib/pkgconfig +export PKG_CONFIG_LIBDIR = /usr/lib/$(CROSS_COMPILE_HOST)/pkgconfig BINDIR := $(DIR)/bin/Linux/Release -LDFLAGS += "-Wl,-rpath=/usr/$(CROSS_COMPILE_HOST)/lib/" +LDFLAGS += "-Wl,-rpath=/usr/lib/$(CROSS_COMPILE_HOST)" build: $(MKDIR) $(BINDIR)/debug From b6203d0412ae5a0953de91915ddc644e7d7f535f Mon Sep 17 00:00:00 2001 From: mikeyd Date: Sat, 6 Feb 2016 17:26:09 -0500 Subject: [PATCH 105/121] Create srb2 --- debian/srb2 | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 debian/srb2 diff --git a/debian/srb2 b/debian/srb2 new file mode 100644 index 000000000..26928ee99 --- /dev/null +++ b/debian/srb2 @@ -0,0 +1,7 @@ +Name=Sonic Robo Blast 2 +Exec=srb2 +Comment=SRB2 +Icon=/usr/share/pixmaps/srb2.png +Terminal=false +Type=Application +Categories=games;application; From c8e7cffa1d31d8d393a577511597201cf8109a4d Mon Sep 17 00:00:00 2001 From: mikeyd Date: Sat, 6 Feb 2016 17:33:27 -0500 Subject: [PATCH 106/121] try install of banner image --- debian/rules | 1 + 1 file changed, 1 insertion(+) diff --git a/debian/rules b/debian/rules index 59d9a954e..996d19d4b 100755 --- a/debian/rules +++ b/debian/rules @@ -100,6 +100,7 @@ binary: binary-arch dh_installdocs # dh_installexamples dh_install --sourcedir=$(DIR)/debian/tmp + dh_install --sourcedir=$(DIR)/srb2.png /usr/share/pixmaps/ dh_installmenu # dh_installdebconf # dh_installlogrotate From 4f59bf53033b380d1b1a382a60dbae3cb344cbe8 Mon Sep 17 00:00:00 2001 From: ProfessorKaos64 Date: Sat, 6 Feb 2016 17:36:21 -0500 Subject: [PATCH 107/121] add artwork for BPM --- srb2.png | Bin 0 -> 156839 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 srb2.png diff --git a/srb2.png b/srb2.png new file mode 100644 index 0000000000000000000000000000000000000000..9c13eae9a5d1ca26167abfe56486e2e7a642cd6c GIT binary patch literal 156839 zcmXt;Ra9Hu7KMRQ+=>==EgoEpyHniV-QC?iNYLQ!QlPlITY=)miaXr=4|ill&UrXF zvi9C{errZ6D@vgv5gi>pFGK~F+{uOPrdJ~O+GZ6IH8CUR2ZP#^!j3cAZu zA$t&=q_th4ppdctdqYEI=YECkgm;rskbwXF2?2)!yU*F(vJHFrm(}54JBR?;1e$Kq;T|F=t z5NomqHjC~cdw6`V1W za=3e*&%;`D#m>3{z}SpTnc6%WlD1RtKBHvK6&g4?3`pj9tRrpqvAUXFVWEC5LdGJV zq#%FeY{nl^b1a=xS@BCwF3dHBdDZL!MsDZociVdVzTtD|t;4=1HOy(D z-`^4H8T;Nn2H!oxmJjttNGkt)Mw3ZvYT?_Njb^wa8@OWZ4;Wq_haxZNhR@vI`mP0I z-1jV-A26b4TJgu}RvoAJ%;lv8ttBGzT#F8@rHc=BxEYy{Nsmn&(VdnTpG2iWhiFMs zW7>tQ6|!{)EsC(-#TH<+kcH}XupkC{$>wdcLX$H?6l*yQm(dh z?%xieIvAcS=b)|jV7cz9<_T!pZQ;+`9_jh42sjIaR}|N_(Z&D@9fvMf9U;rvTT@96 zfIep?MNn0fPw_}Wrt9t)eLd`(hA5`Y`U@KX`LhjbK0miF%1erCBKN8uDiFl-2j1x% z%$33P?^Di`n8a(yKue~MR>IKko;ebAjD*j5aqG>A%h@L# zFxm`j?VMyY*zp}fkS%Kp$So%$pqmz)gDPktT-c1Zy6n^a%`cI`(7F;4HbBIY>+ctH zZ!mfPj6vOZ$4KJSF4C4)?>rH=w0EgR_80u$h5c5FiojLsotSJOtn(OE8+%R0TEh5 zGEPiPFf!vlzF!7LXd2d-Zoq7`IupUKxF5Uaa-ZQ6UiyVx@w!>b*?tK%5Tzsf_PJ(mJy(D?x&5-$bv(*6e8z`cW2|6=zBhad=t(n7SWX(w<`}O~he;q}6Y0D9o7=TNyGi17 zlg=gj9ehac8h(yow<0O)B$y+Rjsm~KbJ+bHKM=SA>;ErG4AWv%U8S~5ogk=DOZQ~K znzn$Pjt5&7O_d?WoD^s&O%D|w#VKnYMomMDXTsrpE5ZsdlCeKHkXu|JlpIYIAm4IJq8C8uwfA$Kd zQDSfYBx|EL!{;0DCnH+Y?SneW7=mL``5U(m+t}R3hywT&6xX#vV?(YUTc+ zgC&Y_r}|fogxlcMl)v7uRMvFZ(xYN@JzmJWG)gS`bYs6m@*7Po9IAB|);(ZZ6FX5* zx3rry)f}mY{4ZGA8phCle4uga@Boh}ZP87a-e89;tYcet%Jiw5)8J{5B)l<{v|YUn zc8+YI6;{^fk8)@bC2iH2J<8ffg0>#BN@eF+ZDiO0ig3NvCGZIQo_*N?tz4l);5Ea$ zHn2AOR2xn#q_Gwwur&{kM%N37EPqV3sjS3M5oIOyu zXKsN@<(osULRZ1zmmsKa>e;Pe>G>Vge6dvES{+M@*H?EhepICX zW6MIc;==XWB=kN&p5SP+XMM;8791mIKWw=w*Wq6?0URkC+sj>c7(8Wh7a1^h1WMYj zZXjuQ;X7ZQ@Bsi^GInfMV09${*}~l~l_Yigy+dntPa|mrN9_#@hr>qk_GL1?$#Zsx zue*@}87|%+n>(rm*Y}>G?nd_gJyOS%(wz2-!2Rn3lA9Ze!$XE#o`%tr1$UvxzG8VL zJl=p;gq2#Rh0|zmR5I1K2Y8rV*^Hbw5TkZmMbPM$*xt z zUzjGb)G;1CoL`V8`mJ2)Wq$M+6FA0Qr)_Giov%lVehSl`GTAn79eJS~|=Nwlw=4;gWw!*}4-t zxKv&_wCt?PpJw)e52AUNf4N!M|nKTQTwUk1|Ij z+Ah*_j)se|LKtck8SOW5IhVDW7f&t2_X(q85#)vxqEAhj2n)D{P=&681|fs^n$y*x z*9fLqc~8PFM2$!WYO`qK4|(j<09U9(|KZ;tld--Vd%c-{=g%O=RB?g{IM(`Q=PCEY z3KNftD2;lj=E3E^K^)1et&!$^lZ7zd8X@OeS{WjRq6l^yRC0M1acS8@#mot|K=IP! z*(|2|CZQ6(AHVKk2SDNoJbp#}7n0Kctx-q1;-PU)WMi&Fkd^B%0H?Nhv7eM$tVs@f zz<_H#2wMiFuNM!T+{XeZhzOz1I-``WB?q040ANH13#d0T2;Ut*I8140} z`=KfHlrJ=OeHH1{7LeKZ8`Z#@&Gb!Uuwj9E+K{2J#ljyfWy@mf^Ly`68}Lxq&Au~; zui!siw*1ffLK;qR>^5X%_W;S7VeO|N8Hwm7cN7~E&K%ThztuUSL`!y4GZoz`B6wnZ zEH?1{=vC%shUc$9L>(!Gtc_b`%*=a4sb0$CyK&5r6mKU_sAqMEJ-<~A6sIiBT`0h0 z&4 zI!bu@SWrSHf)9Z*@c#TqYo{~2hN*9PS!Ab?5#tY;)dBBj$0r#VjDNNI{0I&;83ii~ zxxAl3p{r{HcH^73@orxnL*OJ06BmW$YO)JjXbASrfa10}N6fD@t)yfC30qo<1ghF& z=ZjUGQoNXwWU9>U!(o!xrK+>K0sbBevUn-D+pRe8JiYh7lmMs5nADQEAAenYUR8)hZudT;_xiyc<_x@s%7@N{Evzdy%qgdUm8-R| zWw~mpX z`Qv8Q=6Q%7=k+d(&~#FfonK3=;POjh9YH-q%roJKN0cIvgAJid87!otTZi12xhzBs z(b>zAGlwv()x&=$j@Vk>C%`D3%P^&xBx38MDO@GWjbvun}9Pf@=*#WMRoVDj)BTBOh7sm9%`a&uHQ)88*$HRU;s<+b@%0fJI)oW6#dk@ zhGcdeUeI@&sWDe-f$h>2nP{=G`piG=G%EJzBhnRF`i%2gi0!V$k&`$wb~mF31lklG zR~zU{C zNeAoaEvB7=Xxq1>`2t09*siYnrcZb**@Cw2I1vNBa|_VVzD`N0m=2pe%sTh)D{Ek3 z(;lBx0j%3~dTSHsSF4;dlIKt3;pE%~HkeW=YeVdEH~Mx`Dbz7{I0OHzP?ho(=8D5i zrcUN;Z5v@L$4x8r#PJkhXtM?T$x$ee(PJnF%SP4FD{$B&<$dVBV4$g{O`f!HN-5#d zY3il00%Safz{+ksZ%(Mxs8vmEyi`Q{WUz0ohp%7)*$~6}wGAZei$Mfq%=iwmzT?e^ zH-yL-ECBO{En@r{6tY4uG6(Yz_e)1*s_|1FaQP4)*e6_W3B}FTF z@L_s%-7gf7n9=dCIkbLfdI?Pi7X$nAfI-Y8&QQ!l#L%4)l9@}5Xb=oA)Z97^mR%-8 z=U9(Du$<#rH&cY${B$~~Vl9YjTuS?%Fe@J(gH|>^sbsk%deHeZ`xviFk?5+@+E2iD zi}eEKnIf&$Xff~08%!8MzF?WbJJ>5oP1jJ@G93@5tQgp-RIjGll7MZ#gP~X6O}?8S zUcBmW-^4M>?fA5=#W6xEQAKuPJ^1K-8RgAD(h?$hgT1nLAMXYC_yW=rY?EnXtg?2V za3MC-`!Z19VpWc|InEs7x7a<)M{n(dJpd%}f`f&F4NNvozeWC-i}a>qpkg1fC^UFs zulrt6nMR8NGM4EEq)nsubS8-z8U-simP!R)i?a)?KtO`I5s+i@QH%jUSj&UQyKwwM zL%h%^g%^Cgf5|8}yRLvB%O$0#0Wp-CLR*8#j2Saa<%*vnQxRxZr;89#=UdvM7VbV! zhU4{@2*N@W0>R;j|gFeY*$dJzwcaKYk1E z9M2`HBB&}Fv=8^b^}bUJ-zGaA41DaAS)ILoVfnbP3k{lJ$s#zsUr+iLIA^vB;FJgN zKFcw=RA}>Q6fGkhH=DF-L|WNj^xes8lgV-FtYJ@}4N#fgZv^D#zj60MZNIQF>p#=c zk^nzo%(3H_uNAOPd;gyPejtK1o@k`QCA88n(-E9LJL}?c+3#B2e1+Y9Ki{5mok8__ zKDpc*2{`+d`b0Vs!W!21U0&-OIf@CC@P4 zwXE^LYA6Zyv+JVP3K{gvj=*l8t1Qk!skW8K!DL8f@jBNkGIO@oxhq6dru@8nLq_RB z%%EP~Ksn)1fFO#pz-hHMJZKgc*A=7A9{ZmgwCg6HzEYo+CdValdcPu zByrxhI`r~oVg~n2#vgGJp*-Uk{SoRbC!hV z5hvEv#1ipd0|Y)^g%9uo-YKP@Uw1z4NgoG=U&wH2_%SkApP}I!^%TCw$>39JYGo8C zyFkuklKP5_syrXu)Ez14nKm;WkhJ}@Z|KynxnJY>#^l#43zB+JsR+#b{+NHtDb%)1 zu;IbubL*{``zX79uKRj%`HnIp_<;5L3*8TS`!U|}==wmrwawNHD6`reF%xjVqm}=% zx%F)~wuTaE{9ULu-L?ISVP^V+bw=Q(VioJt`i$AEGiryXrAfYPtbJy6p8m+dZ%xy|jC1=HL;WgvBRA2- zxyCc~?6sC`OfdxtP}H1F)$_4q44LWpn^85$7s>Zw?>zS{vC+qh(NXdt*GfU-qpKNApS`akD| zZD{(c6TX*6z`IJxo;ilK_sC^fNLSR`InS`ws1UC<8qX@$2MtUJRjv3oNAMEQMcEC`PC8P~jc4~hO$dBLn1mQ3$_Fn3LC6LUIFGdiMtCJDPXHdht zeC&Tsh9vG0um!1RKdb+`(_H5`gdrLsmqYDGgPDrggr8)>an|EStcNUImh%Wv&-mJv z5R6IzE8ypyJ%t0nvjsqBm=B8VO?u3x<_Z{^uFkakw}cwHY4NCv8a3LCw9ut-Kolnd zgqRkzWEvqBKW=QtthO(eX}Lg_r|G=YPk(l;`j7#M#8R6$b~qVMUe|f39^7KfnkXST z`Y1eZKl{(C^dX>CH4lx)xiI0o)7}A%cB$1QEJSabTL_sR$VPI6A#Yy`CqY2Smm4@K zEeo`ox`F$90jb1yR`5J(z|Mg1*hv#9#p;W{qLPAXbSA`o1I|hz;KbBNs6c2>>FYLzxV+PM2s*LM|*oXcyy zUZx5>>NpAr>odwk4}8q@y6DI+nxkvze5Pah=@bnaNlncW+#Mx`ZM-#Tx3+RAItU#Zs5=^eo#}q~lF&L~(%0(@LRC4med1X63Npb4^r)?A@zP>=!F=I%L+p@R=4HydV zk~mVdGRWi#_1en01X@=j3tSG-GNGoH*OP1p2GAMd^Z`Owth6&!-lbL-rHsUpl(Z9e zHTP>9F+8r;8KQj@(bQcz`hS#NuKhm8Pfbf&VOJ>t;1*nCs3!6672?_AUFKP(jLJ_$ zl)hlQ5CEWcZ2lma!Sudd1`^inz#7bX>REF906A>(s5-^`nnP!fhk^%M=rC#j^i%cNnBMLbO65 zhf_xCz}iH1d^S>D7lr^0h!whtj33uM$WH%8++VncH~wR`n9Ad45A8DyhfEq)cuavA zpiS!+3&C;$L@C^}{{@iTNKH_Q$*d|_UwpNwh0I@mKLwy!J!{>gBQU9Vqdl219=S58 zkKHjLu$a#LK5x%5PT8TF{_DM~TEr+SfYvqMNj`6>al}Y!TaDdSFxG*^^g=m!iO@fn zg~iFc_xLFO_D~C7}TRmYh8x&uUy;W*9J2hJq`p2*r6%SPHe1F9!G9*=+a(JKg z{tK+mp7x!{0+!k{WQPWZ=qmh_Sm*SMp@UWY73VN{M8x>iWnzBC!X?$u*Q1xmU< zUR2A1ynFiI9mIQ66>&W?@bP`!$1QvXOO!b{2N+eXz}f;j77$bb4DYAflQ)gW%hIu~ zuycJ`58_E^jowohxo3-D^iP-d4`RC8*&D1r@PX@dngRFU_=+a|n?5o-(!> zT#^OVXDWnQSSh&D(nM2BDXM#2cLcTM2y$t{Th-8K5dZuo3DvDA%9BR*1v`dopLr@T z%79-Cf$qoThvzaSfh&oUkS47h4q@AiTedwxlMnzoBE`V)B$YbFRcX424SVgkhcp2_ z$S;5dfB1DnxH~)zufB#Gj*(5prIfz9j{oe^@NiB_slM|W;Ac}i2=EMuRGcU{;Fz{P z&&~*41H;Hk!2&K{jC(#J0|*}Oa4n}_ZDWQ$+im2Lwe&U*oyrMVWxpuzdxuPTtJ~VS1!EHZRZe3!( z*EfNZ#BKV~e2O&yoF*5y`tBn#hKE@(OYqdKGVr17U~mD#f-9wYQ$OtKJHpj6(II-e zbW!fI;^b|J5<%4$R3^yC3)$)OecpZy;w_cjE{F5ooBG`}d)vpow~kHe;HPIRA8Fxg zKZ%`{%{lz}nR^iK91R_Bz2(9s9g?{dk-w6}!FQnLR-nJ5G#RJ-u`0cS zoFtK?RRP!eRcmjH+27Jrv25Qj&S}YI1ieN|HX{9e$09y}p*b(i>|eBBJunZ^Go#?~ zAstQv^D_1kCQW@0ZdV&M8Y7~pAd-4|EtrY<)J`W`VT+oaOY;9`0cP1!8~HSkp6b4( z9zkRauB?rjL&yTplh+8N&HSUH>3fPSy(ecN6Yydzp1>UeTP|N zh=krwBuKpX^Ji_|1V~-kryl|%CuX>lRBxUQo1Ns`V@600$0uJN!Iv+bzwf3E!3M$! zX=8#kFoCHU2Y4(HJ*}g0O`BXZizdCyB;N!d%eu+ZL12B1s<|qJBOgEuiU*SMcP&E&L6dfQN2_YRY+*U zn487p?18+I1=KAGZUF+($B1)99({4q@*!s2s>HOs(%d8&3Q?WPZhxh#ko+qzh*-NRL7hnWQCw*K0F~s6pJ)I>&Q` ztR|0c?h{Vz{zdE&)Q?g+$1uX@+U$ufG&yTKn6E0a(p{8<9 znB=r(aMtfDuq?NfapX>@?P~KhAR(w(_ z9)aGAAD%JdA68P8y~E{HI$Ajwz8Csh$E!1B0K@?lccZ6g$C_`5i-{4Bv7IJ;OHp$^x#>~vV}UH4PjrHw>rI3^J*;XtFOg*nSQHBnP8Nq zh2R-B^Sb}#pKTl+$8XR2Ihu@RDWhp{@Ywdo@$u68{I%tp!tjN&H)1(OAd%KT@q_y3 zusH_38X9ru;GaK^*QdSjz5-AC+&Aaj?~1K~ZveZWNUjrTwdRDzv5<~9BDm(xt z`>IsD48EbbXR^|uxk8Mh>WxC$YyHAL(W-j6do6FqIB}gG8BmjiP*PTlY%*obsKw$6OL7K2576=Yb9)j zOIKt&{99tvvQ?)J=5ORsHV_%q?5gkAdQ8{FY!;Zym!+?}}J%o$ir>Y!k- zSNhs6(v)4mU}m6d+q}mIE41u3^~_sZcT5%lzPI-Nq$q6)SkMY&V$KBWGR)f#n{|ZR ze{0U*k&$=h&xIA7;T(o)#T6HmupL>97?%A;{RDIEMkAPqu3Ar%?0p@c5_>A^V8F)Z z)Q<}}MFP2T_r#%acIT{=!JW^zFF9WZ0wPFxum;l;jztB>V}@5e+v3!}#oOn+*BI~< zs+8ikL@0FFFy^O7yS&)o&9ph|g;H5$%I?dMa{r5pVDm1bLHKlWPP)`8q8jQEVosR8 z_dE^-+YT~%cZwdOlt4-k;!woDccq+@RI6-nuN|n*-+O^S7E9F8AFljGmEqN6EjEYL ztZui-)oMRLlIvY9+Gd^-;=m7P+slb2nMh6@fsRRh=7n@yRZAoPJwEX*xbkk;itQQf zCD#(Fg?(eHJaZuFBUZA1%zd@#DwvdNkYdeRp!li0c#A-R4z6zSEK*sSo zPg~NJJO%`|i)S!A=cPfi5|)BPcjR*Nr^D-tC0fqIbW;nYQWtE%P z){?w}Lr?qepMwrPLNJ`($M_)19+Dh#^UE~>^SsBEFk5gek!6A3v~AGNNSLP`LVwt{xrTjCl3nO!LVYKXKklbLSGF#T6R#15b~52=`x&!?Yc455)?v>{rmf^VaI-7L0$W!W?{B z`Zs^8k}v%6WAKXqQCR5tW9MMzU;MU9_LlG~uamrMU|p)qQK_@NY=k74<)MXShE>Ll z#w@$#-hEIci33?x_FejW-+Li&R5?7zfKa_s#ir!na`uqvXTBGz=; zx~ylmd=StzafTkLq@kk9c3jHgNpZ1xY`lhxECpHHtnK104l!#3dSdG*d1nL-3fG+~ zl%Cpahn{PMbovTXF+Efxwy=E%JL92;vp_A9G|U6Rr7K)<@-4>LJKmM@N>@?-)tp3O z)R3@;Y)+>I_>iqdxnzTV+1uL!Ha$IC$}-Vc-nK_TTsXt~D?4ZWe1H)O^e<5@+_B`` zx0)!blvE>2ZJH)}br{gw_vriKpj}qlF+bcGMD|RoWbNjFIgpu}=L*6$N+lt~bwL~J z45zdLD0^z_j&T9w)Mt^Pbc7{Z6~c+|(=#0@83D?26B0U13gE+8N3_xTPkS(e%yhr0 zVO9T#A4cZrFw*GU+q$W8tiCNkW$@(n+RW zm2)$)9d`?v5(N8i=iHtnA|pve?i~?MGU8kzbLm!nYFsS$Of@SBYU!wwWYa-dFLzE~ z4EqG>EyYl0GNzw7pjbN)s)d?bo}zTpdy}ZpHZ~FJLLoJZ@A8G*8;CZT=!HX= zQ4CHdm1?HbS!-Rr7>l36VuAMkeVM% z|EdXfXPC?a+)o*kqrMPto_-bQZ^N$d;49b|_c|lK$*pJV7a4BJT;B)&frKo>LgUWw zFnW!gpLYq^HL+x?l|ACpLF_OL6A@DznBW3s^~Eyweq%{c|Fc7^f15(fHKH4dXaEWM ztsw!2$R1C~n}6TM1x*IA>5rb^ign%$i>l(z-`n!))-XTg?fDUmDJ5mi>Gx#*y__ny zdV_X4g^s2Jq6{vz1MY=i<$4bNKd{~m-`H?7VA%nud&l(o=Pl%N6V!GiCI@$DI{5k9 z20783hpSvFGR6F>TPRn4u{@K!K8-N_Mcaz)_o{^Cuy^?RK<_=rT;I(GKYI#`x-C`E2t4lxol@7uLra)Qsu$Yi*AyhM;me~C3%M)d3LBncHD zdhe^3RzBLQK`b!ay@K=g3zqqy>x3l(k&yA%E~_M$16QU&X$0?Gp!Q!iL<6Iyt}l(w zzEC=QaFTjjbe%u%{|L#AOhBNlo-6G+qhSPt_J!k4Zx;;@X7Q*>-WZuQ<(ZWiiKuL) zn$Qw`pg4XuwEe~Kldh3vYfy9w}kKsRPX{sgB zh3EspLuxaSs8H6IoIF6E@eQP92!z`B6844yJbAgNc?&wtnx!kAw6mi;Xvgh#koBFp zH8xladGNPN_DX69XyU%s;v}?IcEa#Pu58agTG^v9j{CcK$JodNaqOyNhkxaW?clRF z{=LESg#o4k*qS|2wQ>l6NgpcDufNA(I3tN9_SN>8i`)9*4 z8)o)}{fcb5{1$fTfIFSxg&FRsfw;GGCsDPD%`8?bV?|$K3lB&%LOVx7pN@C4bAIS5 z?&{^>AuSF|jjCeiF|A7IP30p)gVGg7o<)=3=&be|T0W!mRRsg2a}UV}E=5G{X=CYf zu~i!5edDV0FO_Qp{+li4oXw8kfK2sqqvd+eS4dp4HjpKRC#5|3xbKFkU#K*BgZ=uc zKEK|b*23qv>8=xyBY5dl@M7~TYuDF$w`%zm>19V$1o)J;pN>euY|QOfI+@GNKOe-7 zc>J$OuW3Ja5(`r(&ybgEdMp7%ph zR4(4N%Utu8mbNWDA0TM8uDIpT^+8~NG?rm_+6kU-#>)g-asHCcgr3hU?PJUKyYpe@ z_Dtma%jLdsz&>I7D+pi1;55lH=7|!FxM42Knr)SZg>8S|D&|v@riMqz$YiVI`(?v+ z&P*vc`x~T1Yi&2TzCbqVGg~ZZ5=YR?-dsAlG>H25qQpOrk%KaD-9L3ylMv{94YU42 z?-~hn&t=NszPdq#AvH`_qIcu{dS3coo_5%R_b{eP+4}Rg)|*++#z;FPVCAbZ-Dhy+ z#F@#L6MWV$=$~auj5L*R8q0#xw-==TkUIGp~L=_xC0Slt00Rq^!1OU|wn&0B-pYsH8x#0Q8*zC22d za7^joCRlQv3-DuLZ}}U@ZCiTv-V(n7U zOt=ELv0IdTrU_+3i!i1=*!M2Z=<@HDA~=G38gjZVr0)-qc4flnBtIQn-DhhD^~`k0 z$WC2In&750Nvn;$Ylz!&gVh@vh}9nOPY}P}0_;{S0vf&(jLR67E@Pw-S>VNP`qd1a zseS?47LPNnW3_(QVm&ht8^~Qx8yQ2!;c`H3U50B1P0hO`x99IZm9ngQpmSvy&maUV z3bPO0+vMxkc>?trF(O^eD4;~<*q8k~*tvYI6>T+DD_4m~c;EakuoRHY`{q)A5V(GZ zM8D7Mr65_}X`$tU7QBVu@%U)eLn*ulLhEOY$RQ!_nPTFK7zo#}m2yWX?!JQ#Il)#7 z8DFY=*}7YFwM=^qtioQ{b?8P(#jNm{ZbwV@5;enLm z0(&nQ{h|oSH8?W!G%?w?FSciwy_4_nN6=G+VwXpMhAzw0ed21EA`=5&={-DqpA zV9%PjsFxz$OX2oS{3t+>bm>lRkd#x!d|cwYh6k_D;b23ODS* z=(k6ln=!WT#Iqud-ivI50g10(%kXM06MBB%8%l-ni4tw{Kdua!(0|)ceYe@ zMScngBSWDskM%1xL~pPG91jga-+XFv3y!Z^AC!u*OQQeW&9o?YSl{_xd|H@f0V-uf z48X*13p*iJat&;xdw-Lq5|;~5Q{=^dbQf5Dk7zx@tTdP*BP3f~fv zHYvD&Mr)Fxg(Yjb{XJB4-wE8E&T{qmK1ku3d*2D@y!-`d@qrvxf5R1i^?OVb2&%k% z%CKQsxFp!NC}TSX91|F-0qKcmDC8z{^k+b3?VcNo3X{XVzXX4(H1Lx2Qn6>4#Dy{6 z$PHK3Z?I3*2lRo+(t%(G5vWi_d7^kLlfoz||EvI`oCtm7ej)5{o`p(JhbB}L%am=z zynmU(!i&vK3ozCo>@xM)+9LKAKX@TNP--;n^P9&1X;Xc<8GwmlETWHZJ zz96GI{v%QpI;3DU_0ky<<&^?iqs9MStkIXTAErP;{p`4wR2sv<#*x5|*r**8UDAY( zF05v`=aJ8oCO@;WO8En%8YA$ddh5*DszaW63Hq9}<9U(b(6q6?aKBKBz;5#|R(MAR zIe!SGDcVq&a>6O+{dfXQzG~+!OUvG~l!XYDdm;Im7b;3F5qbp$P`%?C-Dgqr)x>7*WDRJ-X2>g^$%(J_ah=yg<4wv_c8+Z%< z@pa|xpOp#%7RPz!92Hr)Nld*p*Hm+13G& zVq+Xa?ja|VEh^+`8C&!=EQG^oe;(LR-nj8kpZe zUN5(1EczYug)7tE*ZQv2TgNKZU(1S4yz?Et?M4^(#?$JcY?dLu)X#ZGDF$S`y(fR@ zxv-1}q*nZ4=x>yYdi({ppNx~O5J5(Ah>UnaVvoPt%%z>~omK~rjoS(;)8pa2$H{&o zXtHqp*res8_;fz-6p6%h6Dfx!ch(9aNEQP!-oD*iJ|3WUC>@N+NKT zCpe`=oEn9Cdrw^M)K&5MCB@)QmaIX!04wGU3n|g|@S*-ulSvaur)xSO&OS#;#2L~c z(Y+qkEkpE`EHLYmV7SZW;gD77-Pv65V7qAesR`wlRtRj@t|ER!z8OPqD+qj0@hG$5qpcyLRDm0$|2b1)JP#G0Er|fhaU=fp2b=uv4abFg{h#$#B@(dTl0HEqN$mB z#u0z>U!gZjxRbc->IH`{7;s2WDG9buY&Ehx@G@*TmAdk78%_G-QClZ)ZAq&6id5$1>t6{6A+RU&H*tQevr^x!u+;khaTn$owIry^4YA83*c;Ypj z2Z3HGy4dqAE^$6aU&nB(rUK5aq9O#P`EvRjKCyp}w-cd~SQz=sIc zGam){S_2qrbhU!72Ojwwh7Ft~eQ1Wpm_}uL!mozKzw8VRtejC|HMZ2@RQnh!xVzTE z+hSdZgFjM(ozoSuB{^2?a4kQNGiENZx)Ah`s_M6D>4uH}deYv(LO!Ef2$M<@XdWggStuCynFnwavIa`>Xjzp;n#Kk?a)qY^D1CG?ZkhT=Qtgby@PM$W z*7Gv(cj%z=a7*06T^wUv>YVU-U4P2(mHp}JS8A{vHF91rU5K!I_Y?VK9r{OZWj)Rd z7Z2`>g9l*$6fVuDh4arEFvhQ)^2jm`XACe)8i zpzxN(NDn)5ll?q?_z*rD9^$JP^MwdQvB?Nu9rA)nX`{Q6Ms*=|4ii7}qNcu2(2LMGqT% zqqY@-Q$UQmptn;PDKrKIe2mY|;+(Bsi87?;!3GasyMWf#h^9&YyZ;i)_>F` zF9*}DWA}=8&EdJkgNx~5gSY-P0KhtGo490xExLZQxPR&)G2Y=TZWW8AF;-CfBs zhyHEln32Teqeqv)xN54ZjIkLV3l-FcP)ogp!9sb7Yya?EvvoLep)RNnN|bgTovQVm zh267rXiYm&aRM?eB-`;y*f$LH$BnHwPF=_`pg4|E%Jd7nS+~0O%qum2`G+2PW3k{66goja$1dkWXodB34U*KNKR zGpL*-`txx^2}Y3&=+~c~;EOjCl7I+VJ2?|Um}D8E^h2-BGUG|w+D>1$vcW2M>1P&x%Qq?Wqs5K;!e2qi`+dwVFfQmE2}a1vRv-&i*YKFoYcQGva9T~`BqBI z6o_C)b8!EImDi3L6xm%9DkHH@W~sE>rY$F#u;ic2w>Aa}rT1V1?LYs%&1k#YMgO4B zG;l$La_l|l`frc3wGNo1*oqpzIZe`Z`tXVLng9K0+dqR}F);k$=Y`VaCFvfU<#FPg zq(EkIE}0o6B&(-)s?>fJv2EhDUlGQpbXvxy9AO-E1Z>uEWn}(6b#@kLr2Xw|%@rX0 z;QFD6QKD^-(f$ztK_lwde#N6Sadt&c@w2_3`d^ZY>P$N|m23U@dX$7z_Nka2J~r>< z@CFIRRl+VO)T{Was`&ohSgi;A{y0FtnaDJl`1>gl1I~l}ud*3Ev=Bp#cq`ehM&_YJ z$VxTeS$DNGLyfXw3$IVzj?@Ec+1IaQ>;j;H2hmaz`zQw$SbDMJZp_54&VIH=iZ3!$ zlrdylnntO6H;o$^={UjeTJXq{h{Uog;`0puzWgC;P{=n)RP2}`OI5R85-(b>MxJ)! zD`VwJp+*opEZgA8u$m+B8YknwkM`$-RQtfgkLVybNeee!kV}5wobSrlZT!R*fnfJ2 z3S-Gx;S$#~5Dvp9$T~dyw@9Kx%F=wUsE4MoOjMOV(oV(Fi$aX6ZjTo_7`^Hn37)=%b7ng3nHmdVPae5TWg0Hp zC@oMEg4ow}irr>GV+r~i09p~NXbe4XBZd2?(&pcwIFQ$#Cq1T2P)yYv9p=0j7J{kg z|FZxVTa-};OK=gl`~JF|!NVNv460KyXi0W+MrNvIt#-z(IA+xSH&jHr&Ct!OVLD{Z zq5_`&h0+2&hFg+`vPt!(yD&j+ip8BauCLORl2WqLG1JT4)HV~iYpM}+|Fi@*M3$(q z6(&8+B_tQj83BVW(otiCO&j8NWFT`Nk?+c=)+_qErq())^2o(IvFMr6qUB85>Y3H6 zCUW0bZ~h1CKoq|vAvxuHVcc>#A7mA6Z12R$f^B-3O;LSca@e5UYY3!hyb%;trqX9n zmwoJJh^j?&+8*hwXkVMH2uWVAz`LD?Tv21{(H3Ldb2MuXDML*Hr(=cm4rz(pU&_#M zYysrzZrWDOLrY2Y59i6|bxs|v37^rl!oX;Tzz znsi=%%=K{ctQ1A0(?PI<6A%A4-aGSWeBe*sgn9diSv&c4)O41~-9^@xEgGv1doJrC ziXxWJc7zCkyn)gcvVqsUIja_yhY@~!cB!hEH4+C;MHTC`)A9&nA$4JXE)oq@m6JJR zyA{woWRNfFsG3S+&8E8KQeAaWRf$45MY$(Mu`kWZBWw7cP#3!F`XS-SBMFZ6{FI=> z<%=rY_LdTbpvIcb+Jb|u#DX9jkg;7QG%2n=H&UUbNMd!tV&9czPCi)MaNR*tgxMXR zOjgD9Lh>b@o%^#aOq-lKW^(ZrI+eaOfgiGP#-iQwsjtAcJq4mL;`FfwwiPirnxl6h zBLeu;D!vC}+p~;q6+G1k?_MPeq0*mXD8{DDPq&#p>7u7JY}uW|FvL2|5xRs?B+#xAg3s4(y3C$7k!8phRQ6rf zj}f;JA>izEhm@g;wuCBXhsB-@vLvowPl@c84b^bhJI`~1II9Fr57AR;w(Kw%+2S)l zZ8CGBNhYreNA-M2wy0vq3#;p!8U_*dHQ0TLhSl+DR2>FJve=fN&`bQ7ySjZ}fs+r_ z7#h!FcYLglPrj_iZIw{8r{l%iGhk5aF*tL)L96a@@pz62U7@*V3r=Ymv2{;YsI$}@ zhQ~A1*4(5GT5QEA7bQ$@PgU&NbP(c|M2&J&)xUjcitL) z%CnwFwz$mL{zLrvUwxZpS7GO~zR$C7xSJh2Hjfy7m>F9bLbV!gNUS74!E>f*R=TKnPM(x#wIqT- zN;rZY`yraGuQ6D>k7r%9$bpG9whg7(GghI$^c4IsA_zh{w$IeE&hSu|gE@tw4E-dU z$;rLQ=Xc|I@8dPE_;X(V%7g6Rm*e=?zs%&ma?;J}&h&EyosmgVG_)ITLfki-9@)G? zc_2-$C=BBrOPHYd4P|3*)rgMib9P$r8HdJ&Si0v1tjw8Mrbie`l>0Mm*_lmfX{V3X z2?JPNgzJ8`KoA2p>#Mc^z(In*4+CLb;aEWur~^N?NR*_6yBQ^td*Yy$WeL{}X;eWs zgh+f>a79*x?PJPN=(Ga@UnnJMxjOS?89YSA#J*~Ej ztcblDMNsS&{P~rI4iZAAng~jLa?E#C=pW6XXbQ3>Q(v*rbeYlZB1meQ%;KzxZYT_m zXA)M#?5P$J5#=6(kx5|~fA&lptL>3Wt8Cd>MAc=!|Lr9LPwdgr$qc1R3g3^gOmH1> zwz;;Cdg|dCvLaC#O0)IiG?EliTQDt$nlr7gHQ9Y1LmrgIvh9Bn9F*)#-xqV*|l zMB;AiB=Dm|W)7ft$e>)&@bik`B}p>1wGJmAs-vf5jI4^<5d+_JPA8K$ z0EgAH4xMH|*p;5Uz=4uZj(G;)ui* z&+HS!>ghI)9mHxvqUsab+PdICJQPe&sonc1%Mf@Gt`(3<3%y;l;Zj|3(R7#EGFk}nBk z=J_)nmS%kpJ)@WEqKRcjLe49`Ig%{IBj!%G*uJlbtcV5K747%^kd&dae6~ZU9k6SE z8P5yEEWrygGJ>v>E9kg!CfZ$7DMO*=h1Ay^G+m}=AjQndCTmMRyDzDr8wzJ0ZQxiw z*@8x?*T8cE96P}7L=?*@q6ijeg}s-eO6f5D1CFeeiFY z*cNj0n^w5-hEogar{>u|VNl5A$Qb2BV$HODq9{aDRgNu$c;Th%5{&LqG;QBc za0V;I6tWz}((mxMpTCncS55PbE3bv-4~QbzaiGHd=_Z}F0NV8QrxSki%3?=woGqFC zR~2JTXo>mLZK4o{wqzL?NyP>P0n;aJg19|9yhS3L*N_z*%M^#R=S0};0N3)@QRkZy ze-ZeixJ?^|!u`atgw>bth$OSV8c`XL>EDq>Rzy(gB1a1qo!)`8nD?(bG-E&5m4$$V z*OmxEA(kzI&Gi+5gD@u#fk{h^%alp z`_nYm>==XMivmQEm^sm+(r+-nt$-{`EYDl9@q|b?oQ}`zl*zzIn!ce7NJ5@-eyUBO ztTVJlm|%C>9*eUUkALgv(qh%w8G$cj@89ZJQIzQnW(HtD4~q&hO8}h zIQX;yoVH7S&0&7ZB%PJnb7_TB57!tR&(f#`0y3W>v104;aaB#Cwrr6v>x_=&Se$7S z2C)C|0B6rMSw3r0D5a8ahiD52?0nA64Bqdt|Kf`;I3L`yWee9m^9-N-k{`<=uI8b9?z)gbIlc|=Xq@^P&x5dS~ zICJJ}%+B74Wd(#`8dqQ0zE@juQ7t`B&@rIUSeBVNeMnh$OKEvW- z3g1^Y?AIu1aYj){wfYvM;1m4PQwqHDhMkP`PA2o9Bx#7hYbu?mP#z}NGsxfEa|h|v zq2zsi{}j4@#ZOczW_=yV7{*ii<~Q5ye9cjEGYbq2R`H!cn2kFTeoXi1K9=shKZ+#5 zSN5Z1-FMHDWG)u1cjE+3A+Ge1sIU4os>JqS>)T${WF~eNnLpE}XCUD8v3l~%w;$*c z#^sWrj+}b99#csquDxkccv;F4v&ZXHSDYBEqcJotf{kbS)Yt6f>n*&=k&2U2d}NLbk@Z8A}+qFhq;qNFWPZD+AWE6M!ZM3 z!K`EBe(9>Vd5-u4v+a?p2?6*<-DBk}grQHqD6Y-60&+zq@e++9DE6c%^%}|E@5G$$ z{Z|hls}e`QyUfx1s)QlzI#5DYg=*96sU}uCV0a6Jeu$n{aNPjk56@TnIj=nvFL0|J z&}pw%dY%itLs_Rd16Q-wcRjVfMGPaw@bEA@_w3^vfBbq*&P~y~dz@@G z13`|H-@6}84anpj%6%!!CRBz>6iYI-C1Jyr$?HiwNQi!i>jY{=zTn~9eRWy^W;0;R z&KzS~3j{$#Pk)+)**3QAV>X2B-@Kk~ z-{!=T2KUe3!9_Rx8ktPyf-T8ZN@45PA5XB{xHi|;z_x3wE&K!d{Lhdx-a#opj_ck_ zv-u%B?=+drbIE331PpWUy%n}?Ytz%?Vi*C6B4%!~9L2M@^O35}<}7#L{ZW>eAH}jf z4C8vT*_Ti(evC>*y+FkazQ4lK(w&?<`6=L0#>OsVZ0r)U*~?g4yM&dMG`1}zbdPS3 zJU6S8BpJ`I^GkvY||%S6kfUYRfkHyLEm6TB;rKqhRhYu8fJ02 z#qkHLY~NSrqRV@Tf{5u84d$jy>Z|bd7l@AC=|>vaosa{Edl=g)g8k8Z#f)}zTaK-J zN=TB#k-Jw3Ln!y@j85i>h*+NMur%keWp^IK3GkX?q@^2zDk#wR0wa^ks3@Aa*!qf% zrYnR}#IF4n)E{QUZ#+0;X`?NexaqB`7)nQBM195GI36I1EGi=v4&PXad*%}DnoYau z5qbg3^PNNvUsl9}DEFmlH(fk8LRK_nS!j=ng&Lu#GKwrGgZFMWw~-%oZlx&NRFRl5 zDiTg7APBq|xvNnurI2D0Q~wgjyto70l}83uw{_pV}ORkC@F-W?fM=S?irCtudd72=txA`u~D zcf|MYDgrfY5tTlTfsqsse0PoB!4#8wN-WK`sV<2=akii*4);VGoKM;wD`zd#ObNd{ z$(~(1F%08^Yu&QivDp2O9xS^7;NE-Tb*~%dp@)8tv9X&`lx&jRXxcV%xfc}d#pL=<`(eaz{mO0_uhf3{58M#qWz?d zEV_{=l`ddp%jiaKLz~2piMB4ce{YW7{;kP9cio53_1*vF;tK-NbtIb8vcqY-lYfvN!)pMz? ztWw#&LiW^`Y1do0mQSPVCN_FQli6ex(`veOn!<$MNNX5rg+f`!YFNWhk8> z=-W+~=@U)iyQ#|zPvl8uR35x*nc<0b?xrjYA$CcE`kF(oWZ=1>K$_~J8tt@vnkyD& z!^O6s)Aoe!t{;*u=w$K{Vc_6cB7w-{R1`IcXNx|XE|box1c8{}cF(9ThShTe8Z}4o zYTXbcEgX%iE5d9+ODT+Q%@9Q}f4Yt93fz6Tt^N3&FVbe zw!uabXGwZu*!;%7jW&RPHfOUDoraqPHdRw7mSxtKEY_B7!5vb?cNw0@(Kno?SkcA4 zQWO*=Vrj0;vK^pk!r)l&gd8C+l{HXgkLt2RYc;~PeI!XnR;2{Jwh=i?qT?uSXq!Zd z$Uv7kY&KjnS&d9i6Pe!`n|8xT)g+oVxcbJvxLvK{*&fShmdVOrr&V|kV`F1XOiWzh zP_|fFTB25~vj2a4nU2|Ec6OHKTAlk&p5^}gbO<$yg;91N+RJ5^UB##Jx2PsI9q-Zp#t+!ZUE!Wo4G;1W2iSPE;3F``b$A{rAQSyZaq7nZsl%Z!zx|4Bq*5vJ*$e~y{q*(qA|_5(enbfNAwKNV76bLljFqMU+b`4Dwcv=Ys_ z!{At!=@SjnMKV;TrW;&zRX7Ie1l&7-Acp@0-b^bU%`K+|MS zA8SzQH|QV9i1Wz}nLXL0P}b=m$soz#*&#FW&&IdslK^`5Oj}Unb`|Iy%;32JbEn1V z#>mJ*-&+E!Bg`yZ0-9^Wpk31yw(rg3y27KkwrZp9++SjC*@}^n9z>9dc`$YiZ*DgN zJa-*E%Q`mZhvtZFq+eVJZ5RgY0H7!q{?+tu1}$a-t+uym_+4LxtDadP@Bm4pe<(w1 zi_6NQ9Sb6dXek-b4Ur_7>XHZ=L*vmCRuGAuX4KXATyMjML4<1~f_Fx^d<3q<+EN>B z^>%Lm_q*7)XD843nP;CTq@7NunV6VJf@u^*1VKO;h6F)C@CUcydmg7wo#MXx?&E*o zbr+xg+BZ3Ka*VODaV94xQJ$uOwT$D0@#1>I2T9ZIt_+hJ%zz}LH4n%!1-myRP5&nR`#jyZMI=JM-G)YfdI$fMks zN)CoD&_|LbG(~`~wqI1Dx?;1s*r9L4pj1iGX?d~tpLhmQY<(ol0(GcrGL=4^g;`U8 zel(daJMzq(Zt>7P9WHMSmtVJw$>21VK7(?Pf$IjGoo;h>x`nJr*rreKV2Vn=LB7Xe?qmbU3Mp1} z_8u$~xDK8harTTwt6GH!4qUgBUBCZL?z!s@zIE@t+_Q2o=5&Ln%6D+(l~;1;XMTYz z4qbt!YbdgerfDdOa^AhMZJX0mXUKSK1PFB>$MzG`=~PC=YPxat7jEb_t!Aw?k#!@Mn zT?fjnE?HP@Kk-Ap=*m76MWVK3u`u0cb;)M;C1tV&jVv0fCb2MMqNdnGeGsM$>MxRC_1$~ zq0gAW(7RG!QT!}rrj9ij9M6!;>nzQi>q$i@zz>a@gJp({Z!h3EA+q)M-^6vIQMQ zkx*1nGd(QVO>C<}xm--Uh9#LcwMGfFML2wU}^l$X`u2CpRR4Tpa zxr8h%EKsYNnC1XsxEob{KJXM2rGzZ&8-jP1o}NEuW#w0BwLVIr@Vdub!yAK)s+N$o zH}l^6?wu!-xoHF7X9`{4^HZW=)V)R(&;3pAYeW=^_u5M|9H^uV2CA4g_!;J4u<2nIm$7g9pXt|PxP_{YryLWJA>NJawJj}@xCs|rr z;(L!OOnl@|IdsJpy!tm@$0z>k(35)Z=bja(PM_w;1K;Nb2llgY4VIjXe6y)RTJMaozdtU%5v)A8ijI-{^1mgE;O1wCuDdcgX;t=%$aDKEV^L` zm!ImgO{X0&wmnPWhb+yTqR<)3an-Yjkbvpqbpk)6++%R~#vzd4q36N-zRp5GBA;Rg=XGvzz718%VfzM^u-M zHE6BaxRy_$Y*45W`=rS%%v#tTKWVROx`fpZ8Jx&4JdwlobYuxs)yK9xh-~Vsax$ar zwn@WKLeVr-NmPEqwAUw-(>4WRHnfi5oD7HyTXJnSs}>43PRorCMo|s5W2fDw!4OhDyE!vK(SIJzOVPD_`|06h-+VH|qJ3)6>&@`y2nkiLw8WFbwJM z@1uBSj(pnS8y|cvYYQPgy%|b{F$NBl$Yx8-eg97Ex<#?1kASUWZS70u~p4 zH+GP)vF+dCMK5xA#VbBRE|*7^WnTKyo0*EBD|3OB4#fv8lRwthEt_F75W6 zV$f8jgd`AZfS zoX?R5;8XM}C%feez%UgV+5$Sk5^^ zSBbMTXQ{R?MNW0AQwiJt7OB+LKUH3ek_3h^${qiHm_u*f$==BUI_5GvoK>aCXy`EKb&E4)@1gy#eu8J^bcnVgOKSHP1;SL`YK#{O$OWaIq^`Pb~B=9Ad9zR zp(qjyXDmSxQDx!#iI6Q-ly$^v6oHXeDfNb^nncI+3A~V0Mj>0&3A~U_Y#{IZAp;{B zp@Hp3%${k+ZdoDwuI#@s=;vI;nvFBeL^3ZV5fBdp@LV6u6ajW*QpPAM8!$gA`I1Vj z>aZ}|K}*RAYE_bFKV;3XElHbMiQ_J)dNOcfISZyEQhj!gZ(O}=9z65AwHC@iea%<^~ zN~;#KZC?>2@Liv;zW>d<^p(HH!)=$hzw=$Z^)0_kI-UMciD*C3-*?}0a&nT%$w>|$ zKD_Do?RJ})nHi?0rWp9p|DsWECKapW*sKKs-~av;-+OpYRFDA#elJmfiaX}}(MK<0 z-^F|Qx$CduAKv_GDm|d(!K$|iUGS_XiYlb@vIUu$<0ktL_j2OFD!oH#(rH*-vJ$YA zo)TG`XF;RtV=rtNk7?eW}B1Uh|ubk57=x<;0jF2JYP@YD2KPaJ-Z55ND7 zJn!eSOm2NT*`W*f$5Ew|jl z&TSLq@BTb9F-T5UgeZ#DbQ94OHYBW)Br2+qFrobg0g2*IS63qI4w8)Wku10z`q(x%zsx=q!S*U8uj zsM$zIITyn2d16+#kyEG+LN+fEcw$qhvk-V8XHJ-jH=9r;fpWh=??9R`Na1@CshrNj zRFituA@l`2S~p~zPRP)B5k>V_oawN-2)YrWDDpbzXCvT3K9`ujnWZjCQKI%E&|_lJ zIJT(7olc17xU4P0MTfMQ;-J!Ld3@)ypCH>m%DmLaFTVHzzVJ7ndrV5hkEeZf;a4t~ zWAEO*?A^O}L;EqnwrwoS!gXC<_KQC+06_8knPwZ?cBodXEG;c@a^RxNN?{T%ggWNna@1M>t6RBcI?=>=>Sy}g>t#ffdiLt^UW`1cJ_;$Jb5XZ z%--`_abf7Oy80##9Xi3wUiN&pZk=RcV31O&M5$Cl*Y#w+wQ*kfc!zEf1O!1qtJR`X z>1FTUDmUIZ$6Ma=0vzX$DHN`aM-mmvkWNTn6F?a5IZ$gsL#vN&s^hG9gf<+8Hq(O4r9?k)B__CrcY$ZU2LxzJj; zP~UwM=w}o4B!2%G^b`7#=pkD+CWG!Eu87B2kS(*AdBxQlq!bsW^@8h z9I2wGL|ZtWR>>AM!Z2iMP5?zRDK>MEIKRTaU~t+1LJEQ~CJx7ybO_C*Im*r)`(Jb& zmmNIFSHJQVwr}75W8X+W>`PG;ve_)zZ1zcR@Rw{rleUUcQfsg9q8$Jk5QddL5~Bi3mX%QFRr~&F1(J<7txrSf)9KEzWBug!^0DdkN0h=;#O8P3Wb+rS@TpXpXVL#_yW6k z@3~;RRR9uFTz&OZc+PXa!$&^yFGSH!BuP!?!R_`J@%`W84R5%apZ(dlF)+~2`1tsy z>hXtNOWoPIqA2wC_EIjFnVp>_lgaYwPrr-XZo7@+$6rCI^s6yP^-|jH&*1x26s7W{ zf{dz;b9DNJ{O@nx!wpwo27yR6o7Eb}W`;rPO}@A19YfRh0?JQKusrvAbiG0*^DaLA z@jv6uZ@%rvS~dPK!P2&EUjO>nbItY7=1OnzzOgipR>~)A&nXesnK*s1UyBN@M7wS5}RYonk*co zoQUR{L*H@3*>Z}Duc+YI zU71ZVO`l5+i|gsMT|z&?$Y~6Y8>G`J)fHP%`_d{yTMRN8m6b(d>E&2KGLl<9EBNJu zTk`C=tcM_oIDM?niK7j|0Crs>gbRB6)6AY~;<|9rL9xC)%SVZk(dr{VsG(^vz9Y}T zGqMRh+N`_66Hqf*INc-&grT&m$++~4^M+2!gC-{ zKvg$L(XmeN*tFrF%=$XVzG~yoH!G|N&qb^4(TYVfQijaVi_7#4WZ1SBjGRVwvBT`? zHg?A+omJ6O3S0MMdw zD_-%cTX@Tx-^6o%=Gl)sulnf#JY0Cw=JWZaVtwB8p10}uGcz+BJ9dl*9(aHUjyyzN ze*yjJenww3!uZ%2nM{^)smypf&8L3lFtRB_sfgZNrl%)Grq`goZ~}=CDT2@oXje_z zbsMt{TlZw>v^=IBZBndgTzc&wXQ!IXovJasZ3`E__H+FDD|Yd@&-rZGvL5i3mQsw2 z3_b4k+IE|A`NF}nR)dEhhWETD#kap*WO#Ulg9rPFqV+bXEX%B}t`deXMALd$Tzn}X z``DY65&;R^kW@qcDYA>EQi|>Ds8*W(S)?5FHfq_B#`}@%} z?E+|8=|>6%ilQ(vF+o0`=g~(W<=yXoGw*-@hj`$DG?~mVB1u{D`CliBOrY{4*N}wi zzKqY^ek<2qx|ftL3>hAtI?KuVeJDyXxxbF{eRO?qLaX^{dv(2gdwO2Yhd=x*-tYz! zUC;i+Tf>b;gZIAg{fv(evh=yPVm3V?Cz%Qo2d9mu0Frdh+K4uAbh`ymEUFO3>Rzf! zBK;@H;!RXtCY@1;AaO_XeUb1+QMAeJ%If&Z8L#QGFka9CvU#0GRm?&6U)9UvtjW=P z>+CyJLRMvTU19cAlXfehz5+vIS-eib{Fyd(C*tBOd*~m|peQoO?ib?gBU`f!3}=yK zm_8vAfl9v~8_~nrnHFX%jBO%g3qn;!N|V?I27ZL+g{0Cdx*=kh)fOE6R^7$56jZ@C z1lI~^uQ}`SOP0tLbSixTYs)s4878hHx*_2?5xt{%F1bc1PlN%Ob%#RPAqqm4=4@nH zie;2!d^f-iRQh63^GptWC!pPQg;;kCf7ViB_UVKX?S{yVqNwX8z8PKDr9Nx~&^{jg zzRUgUYGX=?l~n{Gw5mcxy|&__DBxHwnVib#wgQSQ(LW+u7jq|@bUHp!0JYVCJ(u^< zI}m^rkj`4HEm>p>TB1!DhLFw~q|@MJe2#qLmAv(3Z{;uEb1PHRv%Kb(S8W1V{J-#e zEC53HcjM#ZjE|3RLI-=E$HKw_OG`_Fb9#1~X0yqG*M9`FZPHd%a`_zTbef~bkMQ6R z9w43Vp*+;f@W>FAeOnm2c8Ev+bl?LZ~yKl{_!7u zdU`e|PAe-q>9qcs_uBV;&Yqo1xQrWv<|_<%Eq`R-@hW z&{Ro?GsOFLtt)7f)9D`;-O1&76Dd|H8XV1ITLFu+W}-SbGMT3`kR}WS4bS%kGXLT$ z%ds?Gmux6W=b=u+IJ=OQ^@GFrBEiG4LOQV@BYpft;97B8 z)Q$Frdf@H)tw|ABEg#1T=`@9$oMS=nkV0$CN0t@JJqBk^ zG^wpQLWk9fnAn*|)iv~##L8Kdg@uUfr{2weN$2=?|BYX{^ILrGGoSvctu%ksigaD< zTT24zp+ko*0Jf>oZnx=lINMY5tKzSC+%uQOJl0@rbO${< z2gq(2BN(i(|5-!)$DKzg&A*LzzpF;6bbc$$_T(h3{MF`ug+tefaI)hOd8p zjBIv z@PQA!o*Qm>F1cK8(;E4|u}-@0A4L(BN`+m!cA{x2FMa9Nyz`y!qo?P8Bp{$C?{X3$ z%Q_wR>HPiw`3tVPcq^vm@U`y-WYU*!2$oAol8UO1{y(wKCFv=A;~RgI{zMVsKx?*)uI#bs;KanKD;gUch(7XD-gQSzU0DV)v?nktkm4!iLan1*CHtt)@#R zn_}iflhJJjmS)?in#AIQ#o%NfXk*26urBCl=7jJD-gZ$QJtZ-7La3}&`V9uhG$Foz zs!h*;!QiOacfKDoce+Kss53m#HIVk0JKdyMNeS_FS%|OCofdQ2y$5^96*bJ3M|H)< z_rS=?g6E%7IP+*TDb5_r$G3gjO_#ML7#Netc&vs}`If>kx;NnSK`Sc3NGHNU)?t38% zvn?DeAQh`Qcuq*JsIhuhctvXeKYMQ;Cr4SX{eP>f_wMQGo}QV^WRl6gFN6RIB!KK9 zpa>`;9&o`8f!77}$5A)};t>=%M|^=JF1RZm#0>@H=ur@4OW3m~lgaE`?@M*9zdxR* zYr2yVlAM6(dHeI3%%r-ys=AivdhYAK@9PTLbWAr0NBj-Gdo{HY&!D=Y0BAB-*`UwJ zq?(a%8*se9Hxl#9?<;_}s@qg`(H1am;6C1T$#+;Ve?Gst|9?4&pdA@4xb&x#*%2pTE{25ZDteM@J!* z+P5M>wOVZuI{)>r;gU=IbagGHv$MU1j4U5SoZYvaP1dv z<{10W{NvDcrIk>tyT%Emn{KsTXO`08dGO9vH7_I(PklBpjTX)Q-aMDa-Cvh zfsjTl9+09bNWWqY*LBH{84T`(j&7THLWr*yau!3q;5sHv&BA!RQnWmA_e#Me9P{J% ztE8rca9l`_==5yLf}*hW=r%M>rBpEJ*^p(VugroKNmiefMAe{JFxmQI2A}3rKvtqU zPNVXTqE4Dhd#sZ(S@iIV53sUlHDNt1wr`0o8hG&CZkl0UgQjSu zXk%hxf=_+w)0}D~-@Fj6 zo_2Lz1J~7M)NKNmEF^Jp9D~8Z>1^EiB8MHe>X3uvWX{xK^XAQ5`!Anoh4Kt>wZeF% z;xS>4;|O&vdCWeait7`AXiP7>TLOfee6+TQNssFox{Y2D z{fg~fQH-i1EgoIZDa9Yuh&2ajN(SiPQ6$kO?8!7um2D-$`*QKh6x%msX-Wpjj_b5{ z`9uqg<+A$J4hFX8+5AG9Ig1l4Tb07G9d>OmFxXQfGY%)btyT76rqRnT%a2ZR(%VC* zs=|i#Qha@Ol#||`niOAmA=w&W`RWudLbzbdOL=B2Y+}l^7`Ek5$Ql%K0#x;a(9|_6 zRs-~CKFPQ^(%y02vLyLTm1;#uJcUA<;OG4cfq+InZPT0zg6c@=Ik6#sz{MXBC|aY~HRzfdqugo<1^!k@50^1?(UdzrQY91( z5srYW36bDZ!NliRy(->7P`INMbB-vKiYIyG3v2n)56qrDZLgD%+V=AKJexMbTiz0* zuWvSoAKvaoxvy3PrK&3F^f1BT$A!yH?7vyN_LB!aVE(PZa&MqHbLLEn#UgKe+fh9H z@Xu*!Iq!gut5)gT*7|;KzxV$#G?66Pd}7^%+NDzYFA|CCUYAMY-j3Zgt5mB!nC38= zRwNoVXlfcI66qzCiV+G;5RVsWY7&7(xeVp9i*0MK*|ANGk8|%Yf5Q`xJ<74oqnJB( zv2zrfTSU$v*6cDdQf6#OjF_>wpE-*Y1f>+*_7~GAsxY=*ea3WJQbANrA(t`OwY4B7 zk#Qfh7B+hzr?{|Teby5lUp>2->9a-8bl;8w*>R}|rz$ix2MC5VhI%JRwgoBVs?1%M zq<2eB8gYn%nN)j-YT2S{isvX8(FBE@sY);4TIYp}?YM*@!tC8~Y)>Y&DG?+TvAseg zzh4+y`=ql-xn$wZ1Dn;9BH!!bQR-0aLHon5K#^6cLTGi01Wx-zS@9 zEpMMSMVU$of}u%a1&>Zuc5nWyD*#gV2Cy^;7dRdrA^N{ucT!N2lwrKLJ$uf-%m5C+7m}A47 zJa;F5{>!6$eQb>7OBV3SPk!?Mf#oX&O6!Nf2uKC(#~zBugMlJkUCkP)L^G`;kX zQFTS%Vb;L1T-2IY_im}P+C8kQLP}E8YBHvHGMBC+X;V3t)fhz~mnrDsO3|d4Gx7Nq ze40Yhr{X`hgNbcL9KQ&bRNbahv`Myyz)C@glNY6`h=oxxq@21Op*cA3&0qhor|y8x=H;8+ejHfDu} zshog>V?N?70Tv$7jBVPaN6OL;rz!;GHAT)OgjlZ650w&>3i4qM3F@{cTu@WDaGgo8 zoJ3f+AyTbH!}XML&9hTg@f=Q66{=;+GjKHxaenlQEejivEhq|+sE_gC3YoDg`K%$F zL1LR()@fswf6YYoGraxWcXI1jZesSFIsY%x+-*?#?svaUD0Bl?UDf#h?YG1I_b=e0 zi$22z7rdF4mL#!QgoO*|a__zOzT$Q(l?s_mhGa59JRZij?E^aJx?aLC783|`Q>pxt zbIy75KNLgI+1bg`rAt`3@=t8vzL`j5!9mcB3SCnlLQ$d(sf>L7-)L_Bbc0*cYXL$+ zdaswUv9HtA^a95pKZ~=@I+-uu{I}AuLQhN=1XrxJ4lg z9n)2cnX0ss43caOQ7K!L3nmjI6%whCSI-iQYm5z54y@>>@rH04lD*2FezJ`-G28V3 zqdp9*$r|~5if70S;NZ#x_GHO^A#2js6~Z=zKUzy$*lQ0N*imW_E+`jOR-Kr_G9AKk zL0{xXb^5mDsg#5csz0RS4+Lp$i_tkvWn!d^X*d+KhDS4t-8*Z&JP-JJW*3;5*6FXy6*F4`+C`M)u`{Oxb==f3+s z$^#G7UGp;BaD&Fg#3lUv=l|A_2Zl+JhF3awnM{UkHha(oHsx{=!&o$3Wl&sA*9;!q zEm(ly?yf-t1YO)ExLa^ZaCdiiclW^J?(Xg`-+jKS_Xh<96uZ>So$1rvr;iACdbY|l zPEp2vgikP`)7ur3W_@s+eC8mSNywqwS7Rlzuz^Dx3Or(ncVcecaTdKc6GuiDd+1n( zH;8Fmw@_^;o{;r+T2`*%SO@nT?wOy67DwL|H*biY9r;JQb`teuUdT6CgKUFl?)mZa86j+ zG)Jb#;dn$dhGfUb3`+mtT@;zj3Ef0{Z|Vr~=~+n2jI9Y`X%v$WG(`=Hk~vbQu|;kW zjm{!YX3D)B5sm(sG$OUUn(Lrs%?h@EROQ755_bPNfjx}uyH24EY0Or8VG-0OWn=7L z_(KY_;<5-B!Ax4%DIiC63CS}*vkGeCFi@eBSgw;jmw9l(pIxXs`py->$Hdm?h$Fbg z8EYkDTPkrkg6|_V8m-N+7^~@%L>v42i$xs6(3BKZMCee@>9@;TY!})Q2*TWqi#t3p zz1MJE%tr}24Bzct_17+f%Fp*p7ubsZB+f`oT+Q2t+f8^(H(L$&2 zXnuG)4%b@IUp`YmRBgOmQK$>fDfj z$-D`r?H^xzYr11@15J3K|7iXx4LA4Iz!r>O?<;z?bJyKZb@le=vuz6zdVfL}e9b|% zf4nvk%bogg?$&t8G%_-;?6@c5e=;^Yf05BcKu3C~+j!ll(z|NM3!D<>m`8QN#Kcrj zocojvcg>1~sUBiYz|LiBwAD)imm%+wr#oZEJ=z;kCsi<5W8LS-$)o-iXWD-OBkIG) zdG7XHWMk!yfvd41?o!^1LJSVByAdfuyMNr2TPP=JjC0 zM`Q!+vo+-E9kZe92)VQMDFt3Jd76h@ltvk5p+K`{*aXQuRyz$%RuB%^pW%ErzSFy1 z(M4WS8kfdJnWv1$x!Ko-8fH-oB5%2E_dg(_Q&C*7XIe5 zAXKor#{Ud0_T4IiplT{3bI@{4&Sb@-HCCYrZFZ5X6}1Oaqq4LZft%4nuDQDe`$ZNd zI}$mNF|sS3jrym`R9K!WhufDy87?GS@A>?b7ZnvXVp&u;gaGji82f2 zl()43)*-=eW@<6&%EAb&#q}S6e>ld>y9~AS#=;G2VBCN*~|i7GC)_{5m^PF9Ef|A?s_s+s!Wt zNl9~SYwJ&gQ&Wl~d#q4UP#$81FRq>_t;Br?X)-yNUoX5LR`l*tn~_sHD1bpJ=!P|T zLqx8t1hrI6s*CKl>!PWt-lP3u#31W85*>MT9UIDoXLl$w{6Sdu3Me_tr3;Iz=VI0j z?{MR5(s7=m-T~aKk>v)|^Skzsig8=(u7@>Ok_p?z-hYWnpNodLEj3ZQo>!$GMd5FM zgeZACY`R#%jTLP-qfAjwxu8cP2$+CCcIcV46+{La+<1wQcgo2KV3D`@LgkuAHa z-@bv}a(70&kRdEiUXA9LGuDteVn`3)dalS~RFz7Bhd7`7Y7@5H4U3Tm-_bgJ;quz; z#iGbJtgmy#z3ec}5f4ehoKI$vFxBX%yOWh9m_ty2@cT7PBw4j}IeR3+QIih-qn! z2c2PEv6%C}d_OZuL9>ozHq!k(gr$rrZqI^@xL}V*Fn{tWsW^R#v3a>e=Bscvg;;oL zz-G<5(;AeSTA2GpiWf0GR~ef!StFNZINr;y9Ui(?d{-*k@>PYj{ad}0vVFWnZI`NH zgj%tf4vOlPyHLAobYQ2J5?Ewl>1C2eWZovV85)*4`GuJsMEpL@= zZbt*S&6`BF2VNH*8@gId?^C*58?Qb*_lqwY4HgcC?UuOOJ{=>0$a+f$4^cxqSO_rg z9v=8aLX2b7LqnMiesdoQwv`uih*L2b4xRU*2ISdBJo zBmXtquubrP|Aw&@NMN%GMe^89ph|1MKgv_zbbwDlx7}Luhj)Bg5+R^1c!2SiEKwTs zh;?Vjwy5Ebpz1h6L$5%u1SuB$hIrv74@dGmsZp+8<1hTRUQ*?uDfM#BVb68ljY_`K zBT;$%73cRh9if2Nmz}<}r55Q~ZS`NoKHUIOCfBT_Q_)rQxjA2wD6zt3@IcM{Cr>y^ zuqMhv0D!3OE2+m?@yK0mMwA#+7dhz#OB2jyqlBpAy(D1&>RNFh7kSvM5>mF1S3YYT{FdSp13~lIRiUj;TN`%2}DEKlsYs0{^FkE$?(W@qs@|Mgvn$ak!vN zMS=N%%8suWj|Y*$c6vRIBJp#z*IG4uW20Rt?-2~ct|8;@cQi!S4i$=BSDF+QKHSDl zxL8Z0eArNGzMF95)Owem@F##6ku9?IfcNc-ly-}E{f9LOIecP9&d<2A8Tcm8|l1!mP^rA-s;RLI#> z_nMoWb7e4Re@uN#HzPBt*-|gpWWZanJ z1_is%QqPUXeDR3l+h6!^_I!TrUBT}=e{(ZXMwLmV-wUNBYK>9#I$yIUkxo~*1pgzL@5+TC!%8fc3XEE2f+V4(+uQnI zM4!h=6f|69+lq+zss$zvg;Souar6STA&^+tuwE;ON?)pMCVe;*{W>>E99vpe)Et^z91fZ+9mHhc4Jq%$PFE_ndAE?((OGg}hGARBE0P`%7p^d5WH=yiCbWSBZ` zK~(TlX0s~e8G3j8a9(2B@f?>F~Mk8>ViBZmy_)JuIIeY2*Saz>mJHw7^lKx_}ws9dJ^~7h6{8o_p?b z)w+J+;g~(VcYS+)ym#K#1=jnx{i+5SoSX{ZdzC+4O(&116)MrbDu8h1pd_(Ln}pK) z9k5SpBTGQT1$6BXnH#kwrqO_a;;$itgU;^bzgD+y314!@&{`?;br)(t;zpW-1U#T9 zZl^L@)(dVvMzf~%fE|4*7iXao7F^#3P$$hVWPkLmNxckWk(-iln*Mm86=elBCxR8# z8V0r7RH&TN@7F1c7%R2>_l7AB)Karb3Y19U>1c@6RtfNW7*v}(IV6!D4YY1U1saN< zg9yuU*_spogpJ(72h~DmC|mK;V8WO1KZMbQFH$*fl`_?yGihkUX)gb98nfti)((UV z4ZjDa)KrIv(`nh!Cs{L@QX3;#5h$IJE^X;6Gis^_CL@{Ema5NSO}Vkq_|>P8$?Mer zJvoQ?eK))Z>l(u=H}B6={~XU*CGnXRdpL5}TD4;HTqhPG=_ z5eL0u&9qY4OakOm9nVP!=c8w}nTg8bQ7U6eBU*=6t?`hoD0)DSZW7yj$#=2c(B4J; zn4WdWF=Zv$5Q6aVNMO&d!rG1~%L^ow9lMjWrXY26bnxHJ#__i}haa!f1&j68H#Wxp zi@Gf0>k`gwh?^Y6{)Pch9d)yz*O8dW|9TsFaTCG!o*{GbfgYxoF@jEqdJs$=slPXp z;K4uYBj5e>cHtAGay*po&C7p>rR}yS+WB_2!Rqrai`1uoGGF0=6xrr8q)tEB-Tetw z=#?2L#Q{I2U{+CETUr=nYcStMJFv@p=hXDZNZv2uTHD$lUIQ+Q9AtXn;p1;r*m}_&WVo(F9Q?36 z;p7PLgU}xqA(}Bx3j$vPaxTlj>5};JN*VMYvfL1{QbI@B^!s}c^{#hX))XCfF1`Jw z&?T1?rK4Zte73$PRb2_=sb{sh?^y0* z00mBD*pnOb_6HaPq&I7|srSh}=7xcledAVrT*Y^GP z@TB85Ew{Ez(coZSWFXsa6`zJ)IsD~MhmwqHVQXTA#ns@fUnbd8`M`CaGSUNf3MbW% zk9$ZN)rOk4J*2r(ISY%wO2gZSbBcjTBy+iP6tyo0YT}@nK!fS>b=c*uO*b9X0mu*@wSY62Pw36P&{%l0+J8)d&%tpJkTy(*X zXLg|tu{|E8#$MXhq)$f9(I4v+zY2ht$bjw3Q0V`nB z$jR)4I9BA=k<3w$<^IXVQn+|qdTTDP(pv6b?3|c%0m`W(_<8*=;xV&#E!>=SeeV@9 zY{U3ger4uxOdT2s6XB&4b|Bo3VIZo`2!x;!_WH=ltCe(Fm-XS_U^#z!rN4lx$ssp~ zO{e<%1s@Mj-^wbyC&ys<*ITp|=l3a+?SM?8Q&0QwciH6md6)C|c`l8PV<|!V!6)@C znsU9SNH`MD=(dZ_v=+w$hY^~hYUAP9F2u`nq6M~z@`H5`p&lqy;hN7`k7D5~wjcO6 z2NUt{e|y>84#qP^(|H`DAWmZ>iML$4UWmSb|6Z<97YIBxEJK8Sy#a_RtR_GD1fl#s zWqrIJxb3Hy7OT*{h)*B{WV3pIcp?M{)i~@;zdd`S3f!UrPdKrT=W$7q!^hi07v+H+ zu-gEwaq0Hq0qPPMlo`!;-uwrcR^A5(9<>}mEmjrx@10A zj-ZN^5k5Yw?g>q^8Jae~IUrHMEqWl{%-Qx~)I0o*Vx9B1Aq-YoxjuyRJ3sFal1gzgu zHEH@|cN>voGOF=7zsIlgP@5H#(-zbYLn)Id58!BPUdbaVRWu(`BuI@$2^A}@5gUFz z$+N(&8H4VTLI{9&U_#z}VCrS1`)h>m>5c2!TcFKspU(37j%UIZQq@8sMSo5uplMLt zbO;~v$Lu-_&z|SLoF=|5f=7AWwW~%LGUze zYWvI6GyMMEg>Z-z?epbsoV>%D^Fqvz0`8a7I-ZZ$8;uTkXDG9-80wW}`}UW$kNyjv z3pAwO2(Dgiwbk*hASTOyO25? zzWUvsBib0V?HD3PMz3D&i%h_I>MA(Xr~~Oo!#(a2$$u^I0%HiY;pR12oh>&!dI|zs zYK}s&-wz?Is+)1X2`I2;%(PnPHTL>dr0eh78^87+1sIhCd@5?1KRvOhkG{5O`*wEH z$|UWFNLc5*#?JD*KXTRB=-{St>cCiSK6HI>0#IiA#O31L+VJVLZsK}}lIIfO&=gVOxTCZNbk@{pL_YT=D2IlEtKzJLpdbMa%(vfATUfg{+KLu)|btG+S{ZLyj4?f+Ati zP*b0NIT6@t5&@w_Huj^r34TR8;J!W38hLZ083BCSX9A0`lZ~Y?SxrxBYT7JlRYU-; zSD^AQKE?}G>Nde?G|9VfD_(|fG|c9;6w92!?<+vQgb>M2K{oni6kIyK^xK!&5DNP% zycHaoFs=%m?@xW=WG~+=(Hi)F5Xydc-BbFNaGHPZ{0_SH+uH6fgY&C5nED5?8w6?5 z=QR=yloPfgxBW#HWYZM-*Bmb$bpk!;kln-={7UMK>gxll<$`E*6qodjXX4~29 z1F2lkCnE;?zo{54^CmTL56ex=ik4{(uY@VT-A zrek?|)c;ly=r>q(KdBf^Qv#KA(S zc60OxGxB*w8S%W`&a~_$YBe9`hBd#OxBdUur?ueUw^Nb?uvu!Xwv``zSO`;q{&h1U z)U`3BQG)lkkA~ek-k9~iv@_|+Gt)H7YhJ6-co;(kRG>n;b@SBTTk)Nxdjog}?YGl1 z>ke|5;>LhAmLGU2SG~uP4+@MB!pTlO^9+lIktEwE+5*!H(&V!|vNWXF z3W!J{HVQ<0ZBBu-#3?dDX9u`F?Xk5!{h1qcLM^l5@#F=1Pd`5~8Q+6& zxB}S(W6NL%#pK2vQR>nfeFI-6p%+174<#tdV_(|O>iSl2zkFFB>0uFs*_bg8(Yq?> zqah?HZ9f$eC8JnD^=`WO#Yx5+q0DE*kiv)N3B$$hrDk;RT)RpULhZ0}qCmC2$`V|% z_9A)VOd=wIy)L3Z@sTyH`Pkj-zR-VOPHTIxAv|2~|9m{>$WMiOk43&{sj55;Q@G{6 zo}R7r<3!iFD(qA3>F+tPqA#O8^_Wp z7ovp?T)w>Z8?xXqYCpCr)uhP!b-mv)df(9n4H5t0y9kd16Nz&ZuI{i&5;H17-@+;kjsdf%jNu)lsJ8%2sJVgVgoBFf5f zMN&@GWVb$V3qIEB-T=SNY&lQ=lkbcj77h;8BJHT&&s>!GG1U%n8bN+<05@&QIpO@A zRWK`T!qmPWUGC9yD}X}^1_<`H(JY}X3Yo;qGuw4>N5>n8KilvA1?H*Rj$;kUc?3MI z*69rR*b5m*NQBZ=oMr>Gcd09FY0A_d_+11mNAb_8iGhEn6&63q#(mxWB)-YSDq05F z=8KJSnCcq~J+9GhgprPcksh7J@-3LwVFhQBHm^ThTku=b)2?kvyRg)|7rla!h=jP< za5A(a!M`60+O!KkKgCk9zBQ9Q5X8L%U%=_R8{e%bf_uNXZn%lszAdEpt~mNpB~e{u zcI=T`T61uO))&IlnduMIxs==)l(L$Zn3KsX(DkWe701h#w*FB}80+PXcbJpDd(9PJ z@|~O!`Zd3lwHe0c6Hr$5{B3QG4aFS#!D9SNXfE1kXl~%1ufRu&(pZsmc@(ew)40>@TKHd&z8~=}! z{v;r4#=ZFOp|q@$YtMgC&g7q_1vo|`Fv4ieQZGOgZ(ydb z_60AY`$Z#QbI~|CIT6NEzpZ;*h%Y$XK3(sDrN3cVt+zjAU(_j;2yJB*9yww)Dad_T_YEZS<^`fW-aMM{l$=S=YMxuJi|7oq#UFj$k)5Pp)FBh3Qp@1UzK zhrV}O@i29*T!ntw_GiybL%Z6-P)cZYdl#e^TF5@2muImWf?kI03q2YXLGDK)dtJUV1ok%{Ls0q0Y z-UKVowh5!P6*rwG8=^f2x2ly@Av*_!cvbBM3B~lcXW1I{+xPpIH+C+r8?fFx2Dnze z))?MTc+dssp~gY*p0ARx z{cWEai9%GZ(OexdMAG%Qtm>Wk<0&gFSOT>i&Ai7SW;Bhf%4SsgAuPj9APbok-NNzB zd0~pv8b_IPZ6Gj$KoK+vt}IdjY}6_R8+k^EP)7>=LDmRW>kh-|`4*r6yV-*~YuZrO z5{eUQF+*=fpL#pDOKT88>F0y@;%gs4{Jf*DDd5io6IehWDiq}4{C|% zmJwT1CiSVG5JX{BnfQ{i3ApxcCmk!q6`txv3Rdw9QeppIqqvI{pZs=XS;Im8cuNp4 zTkMZVyYg4W1%-xzM$+;nok@Q(dU#<}h@{3vz{j5R&;oul{3EvGzc^p{Aci``EfvT| zYc?)5@kz_j+mGRRyXTeioSso|1vKRhow=zd$$ z_dlEBunETO?|d8}h~`XwXmZ7h=5+U=Zgj7#!L%)9T&S!I9OTz z&3{S^7n&>4<2;?33dtxdW7_(>te_6Nt=1Sxem9~2+!Q1HRT!uMQVWSxzO@+*xinhK zU_?;rRUM^s-QxugI!;iick;`anqqft{MsAYdp&p60!r?ar$H_op3RT}KP>e(1~D|i z&%5!q{xFOiS{`C;ICJ^apVUB#B=l1#-OJ#>6^wssFf&MenJF~AP^cK=b4X-hDn>Nj zSeh3^g0RA&npWX)3Om%}pD%vd)f=oxD>LwF90obT4$07|{?Okr)fq)9Xvuj%5`k`F z7nL+O!Dkq&gS!A<%+>P!T~HU&SkY!9cC$rHB0QzFxL)4I5w;p67zd%B5l&Bz@rezC z@P&ez5jr#Gq-girMjBDlw}n+xoc4{nD%MElUZqLR1*|czoX8lbVgfbRg6roO$ZnpI zLUW!uYZf62ayh9|N$4oKm48;5SI)bmqrs@>FsIp>{g#z3P223U(~>F!a-H*BJm7 zyjRrJ()v*I`*qf~?ta3M?tc8Kg^pLm7~Vu&DJhC zX;n`g$ogo9*U=NEzjxnAigO#o)sxLG)c`84$yM#mznJS_9oLRDM8-z}fNogcxN}tY zIh7ZBV|V@7q{8A91j;f`jHvg=1LNuH`*4(~oRhU!@}zltouvIlw6G|vxP%VI6B%ez9_6S2E#gOE45u0V5 z@Rcy`wuH=2DM45(=92(D#1vKD0u6??H9ky}l)jL*O&QWCFdsH%)sUv-VAJuPZ7D)3 zZN?a=`=3MpGuC}Q$n&+-Xa6SajU6CXKicB!`P9EmId9>1J$_+o|D^ZMO0T!xIP~xi zFj*r@rdea=MHv!b(aiAl*Wb=v^QaLP^n3&k(j8Gw7OILgD{{@hFfcFxH7!u7gPj+2 zhGHpX%q%S}|B=p`BWFUCP&_qaFfjq^=-81;K^Z$fBEP9cifVcTnR+I`9Po&x-Bq- z?gEkk&04EC1OjyEC_dIrp<10`8cLuQDm||351uKQP42j?8TN!9Q`eerufB?nb~;_q z9jekgiF+H?4#Gr9J0-LbGL5Le_3@KV&Q}>oj()VxmV*6$#!MYC=ROWGWwmI|CKm^& zIcS-Sfhx)Kz?xAe5oCHVi$Vs_vhjegDF?fJ?}Of_05jv%dyW`tztLGWL$X+r?6(rb61iO$j<{ zLxL$q1)PX0fK!KZq{#n+^U!q?OxYL?^^C8F7U*7>$D^>>`ah$zRq1G&n_%YpRY z+tMGFx!|_*XX1k_rfbU*ELmA3PL(!5i1hH_ThR4jNYeA>aRsPL;`KyaZ951xJueQb zEKk-#bHkNJwSPDLnDTbBijwxd@Ko)Fy0lpnbzUznI1HNgdP9}wf+};uilSHuD2XO# zj&EXQHELfj5A&k-^W%Qth-#i8yrPSiLSxWavet!h+U(q~pd|Aip)c)9S6wB-;Q zk;AI-M;L@!-#E&DM6XgTm?ut^(TRAeSMDTbark}fq>!u+?zb7&cdBlej92@YO3(Kz z)b7lt`oTde>ICT?=L_|?#hk&&>}Lka!29%!eWbwWioi4OMwxbs{&4Y-Ktn?1CcJYx zx0c>zy6Ih`DMjmb2N-ITGNe;_&d+qopdh247wPndvAr-xeb^Rd=7I@*^ZAzn?5LBD zMkcJ7flWV|k9TGfi}GY(JcsP@mo&PWiBv!aR@J>%2jkhyx_4w#auc$j$<5s8i#p2s zEa{FmQcaDk=?4;ZeldkOKBkFge%mnf2_a%S6I0x*zP4?7NRozy3u@l*NT9^EhtuqG zz->jK{H6BkeUQMm-&qHs%ZH5}x~k-B)HjdIxBqMBT73ruWT_ImcXT1OWko_OsKvr$at@%C|Z?^(5RK(Sz{Mh$u2!+lKKB zjn@CbSNJ%@#8jD=evkv{!;xcd+5{>j?Rx@5SZuiz##Y7sfN2!6U+cA;mxd-`S{t}| z@J|`Q^V|t><3HUh9R75O4+fQGVs9^VHT~upjXA^QzDI&*Nhiy-}IxWyx}JgR#o{?T}NtdW|M;=)U!J?{B`Q zBn6RY`6x&bijdrVU9d$Sf=qA$X2pT}KyKP-E|5PvxBC%|Ugs>-Vg|N=WUF8CpDfN5 zHG=U_P5}pfY)_l1n^jT`gcoW-mO_7&E_)5~(05s|T{2$DKicwP=ar%WYLn8qj+oNk zLxq%(oMYn&3I)be*({y4Fgw5XuiDWTs2=D=VbpeC2xd?IBC=~1iT(9s&!uUO<{B=N zBh_YxEeN44u)+rU0o^9i932;CE5SPnz8Z53v=l30`CuN*EY739N{q?5qG~WJUk=Jk z(jL!@u&0+GanpTtp#mPGB&NJiw1oD)lN^&%{z(FrZ7y4qYs4X!@_&!X0+1%IV$vDol?Z z>&qEx_TN4Tt2Q9=ojuXS%^HCNl(E)hx>Rd&dwcsE%+z{FhQfDR{oO@}XedXs;=JZG zF6%X4O}gEq>$nrvfd&4FyYv}eBl%&l`2%Z!BI}{f;CuQW*inoO<>nx3e4)#mfGXXN zb#1NgoslvO;Hlw=-IJO0JZPFWUMV=eAO1A^eJV9P9iE+1e^4Z7i+9IFp6F8BA0?t} zFia_bGAn+wqk@;X=vc$+g&ng6#6md5Zx8alMIL|@44|R39z+#k;H_68}6SnPBy*V0! zK+ktnfmwx3We?!W36ApICI4?h%XQik0cg2~S>z1}1b|rxK)P1|b_HiI;iPd| zZ{NMo{!krkF*DRLn-OCc^TkhV#0H+q| zb!F_UuP#=C`5m^9G#OhCn}PC7Csd{0fhvN{*SL&C+!{tQ$+tv$gq>7`nF0b6Ublge zD%g9t2n~j-p%FvP`)9@Xh`;%^VXTJYkhyeCdYBvvCQhj_E9Y_OztGfa$k!?H{cI{$ z8fk>$qNj`*no6X7ttGKAd8*{5CVG%lBlJsvQ_0q{tSa1uYhrX*!-+_tqc`GsEH>Y_ z^`zOEec~L7rdZJVn$rHtp|z6E0g6M!6$Db?5Z`6v$f-b+A5kS}Vfx-A1!kecLQic8 zWVE?gn3bg7CZD1$Wz*v81x)d6nQugruEpV2PsC}dLc;|~ZzP?!0|ZjvFg}>E&RU(B zSUv9DmzTes?c21%uiq9%*^ST${1x>JEL9g*RBv-(0DufGpoEfNxG%J+xBq4VtXX@L_LuNEO>Vsg%Qp2n$6N+ zmEgd|X51hJrE#y;7?d`&F0WWkt|+8zI@oTn0LnHsLK&l?yhe;N6K6uW7}@G% z6-X1ClKq;`Vp)hPZe9YGya)ed{ABg3RBv2ac)^iI@2u}^ncKJq*Y)7zX?mR~#h^Z0PT3}~Ee zzpPAM6KeKCT_BRHTETuL2F-J{bf3~ z!snv>W_;%w%ydu-W?Z>|P@Q3SIa?N|jN7klJKz38^7=J$=XV8pq4_irZKL<`tj5^& z>Okyut0)NIAID*eq|1gXuQQOyi9X!3KC_gX+5%mt4^`aFL372aHg z>KxKumF|gb?b1V>#PYxX5OO{sGF1areq1mXW$~E0g8_p(WydsW{bwcXV5L3UP#BfU z&|U`Xyc9essY$HtFUpyfBh#k47o!TVAFO`R5G@Bc zDHEfobzol8i;m2<_KO=q+hEfyIfqR@^VYVi-Co3r?G)4ZtH74=w~NZArlkM0Umy*2 zExljowEe}~5Iw5vEV!of!E9U*2T6wtgKh4QTMJCmj)LYnuM*uBCQRRKaQ|5Bk9pcw ziW}##=rNkt;8ak2qT8>@GTI$BqzKU-I-ZxqKr(FJ=13XAllXnx3B=;+5>yKOfk{}b z#i#I})SE|&q%$b_#ij*@L20v53f*(X^O)G1`*eC~v#kvA*bO2BWJA~tMf zVEyc&phaSM#uo>2lkS^byuJMkogMl-0T>#M*5`wb5>8eMhYg-IexQ&!?A8~(YAJXX8fJ;GzGjB^w}wi_H^ zFp_S&(CZ*1yW;TAWTg0_WzQjQMAxx%%QGQ@SeNEQ;TRu5%;hyw&+7%{eWy%sr>pbL z`hCYS%V^+wuQugYH`93I9}~ECsq@X=h5S#!#eVenO~6ToiL3j_QrY=TYhhssg3R`~ z=t#=RAyq9`_cPG|n8U)NA{nH1R(77aPo_Z9?S%Jz-GAq$r=T81<#H0d-S6MYhBg2G zBNzT7832Moy~Yq`Y;4Rdbr1+6loz;Dp(!%cz~Nf8g90?zs+PC=l@N*Ea*utI_Ud<@ z`6{g->lH%pS(fyNPDC@?EO8y3GdkX)wY4?qKO*$tQcdskmIH@=bjefYbEVHwfOG7p z%js{-VPmHc2vM`&sSy$=%;<;l+S-3163|ND*s?Wk&^fvB3{F(jKxKxjZU-f=w?#s` zZxZQA~B1=-H5DsUbh~N|nb+33|VzX|b z>?9LM?nqx^`s@Geb_PtGikjz(nNI796dHjgV6<|`1%+9$869lwI3e#!HndrpK)B8x zzbcL?+SLg{t%&c3duHjE_T7rYW(tfwpNl_a%tSQIW-3MVcBK0JUt%JK&|!kTTZW3C zMfO^cKpba7uJewF=J*;G z(0ui8@tR>DXxE=#rM`=ZxfaVof{+NxsiKl2RU_J|XE3u0V`&3NU)lIv(*@cSiA)S) zCG15);<90=S)1-&pNgSRVD7S_C>srg{uU6+rCcg8#5S5kMqY8C+3hH;#aL4?m>wZc z^p6#3{pc!B!laNS-AcGAO)YfDrybpj5!vjc85zW)43{rzI?mW%#}EOjP7tCH zRSGBsDfSzgs(|jb`AQw|X(4w~*9Wwq%cv;t_;0G5>|w8{j&9eFji3;A*SbsJJnoZG zw&JqiUzd{>{NRZH`NJTVdRnHXr9G_zwvgJ*t*#Hi90sJg8ujl`wL4T#HIYK1`Ud+2 zmu5i+YqH0PDL|2-^p?Yd)$F*tBph${p{EY9B#EEQE8DMSfAZ`Bu>huBHrXw0kRET( zcl@`PdHjI8%WFKxzZL$<&mRu9$szt7zw79 z0UHlO4cCi^pg3I&Iz?<1Xclv*%0ymjQzMj+N(EM()a2GHJQQcO;R zw}jUw?bd3u@{EQjOb!U0zW33#%0>)-DK#U6gcy$J7+}V977;bbaQcyL&Z{~_As`q~ zISgr1^r;5=FFC2jF-KvM@z&L0^v{LTFM}lSUoLcO{AUlpulj(qhP|F8&Y$1B`g=*o zJs`qrwDs&Ov}210FAI zLc4AV?nvc1up^L}1DutB>457$EykgRFhmS;!5LuVYYl9_^=<``j2i?I4gTl+0B{EP z`{T|MV8R9VESkSMy#!;D$H0cjhFRcm{_$6yih`5Nd?QuI=_xulgPTte{O(*NZ#Q1r z-UD;=I_(z{IF9?HTYyV}_P@=~=W?n)p3bA~JO=_A(hRe@Yt`v5Yofg3w9kKRUp>Az zO4f!ZxBSlwFkUKtQ%r+Wdoql!*>-%%U%@|N zjy54zCo?N^Z{~(|lY48YH_G#w)RH;Ojb~_|Em~#?uT_>FyB5U_1Xo26Ex$xj2f2W0 zT$mBdP;~HP-U8N1X-C`&Bw?rpTTz$CJ>uzAEJQ9Ns}kJUL8t4UO>#b57Hv{1%D#j9 z_7Vs+b_@g=ggIdgpNp0%L?9$CmI||%HIj(U%Z;mUF8)}8&WWs56v@)${Miy@5&=0a z-B6_p zd`h(z{NiWA6}l7@?#Q9pWEn=NtG}zAIRgrqmHgHC%*7>TJ+&a>!Et8J^u7@p`2o*y zgW(>z`U(5bf06%A9&YeP7`2(TN(i1fbSpM|{bm-4vbXfyi}f|d#!@mowH2-AZ#y@f z2c^2>m1_!_zx9&S_}Q;l+Xc3kBN5gk{*E+bg3Mv*^+4xqJ9y(S!F@Zq=CH-aY%ljGPCk%4>U8h8 z%=P*}s4E1__<|K8<`9KedV${h`^pf9UR{_nuE(AbVC0?#n7n(Q4zlEpjL2i8{^~RT z1JWFUHi?}gp*NcUS{zpztyhX_+A6_7n1$Qx)zAa=&SKWWg3mkd`dwiHG}JNS62@!N zn62sXs%qxa>;#qICF8p1vd7b^sZia-(@;~_+Zn(C;DBpC!~Xe(5t2lISf%|Q>DnGa z#Mddy-+73=zMR^Ac55(l{c+6uS883u=$HIhCb=gbk(FTqfOWHMrSU<68Nkst9S2rvif*{Qc{LJrJ|#n`C~ zG2h0(apT=h zgott8vCeT%Ink11orX28^4GPpL7o757IQVy)d2*4J{mf6f&2(vh_l#&YtN?fNTvUy z=^CRd`~H5DJ=wNxW5UGAHQBap+jVnIHQ6>M+cu}k_H%y!wVoGe-PiZtefHkp50`PO zK^`u;#y%9&cR+5&<%O9J*gYdFUk5o)nnwF0CSXx2f#o$InD-H(}UIbR*+^fMC^ z9|M+kGb^ho9j4)uNp0z3b_T8bkc*4w&izeur&p=z;x14A_5x!NUx%0T!5o_g0pf~_ z+i+cjO6UHI?b`u0_iecF*7&Y<+(9t$3yO0`JFwK$?ASkL9z6Tu#sPsU_KF6vgZ_@| z$1@xj!;^sZGSPKCI_TIFzzwguE`8$xZFD$r)4-d){asd8P*;}-)IKD+|ND=YTdLBo zaO!6srXv^z%3-Vitu-O+Q@-@8)Aj|fc_gIjHu-#X+3#fxAa4z@)mX8`K|cRmw%f1M zOV_r4hax1*vC?}zp4L4S0wTXlb6>Ey?B2lZR^UDd6+{ihpN{8VmDXEqWz6P0V3`rO z#2l~-P*c&X5^A4sz~}}VN-WWl{qrt;?cs)ry!R@`D17~ONg;u1S?%tJrZZSbSEly^ z^R|ynW>gFG);Os~p{N{JlsKtY(g><>!-X-|X(o^&hNh?4K+k={kZ$k2+ zy*5YWDmcG@e7Mrg8+ryi6u$dA`AoJjZ;O#O3W|24%odT&+Aj8H0PD^sgD%n!+1Hu= zIVH5jn$4wyQJlvLB@Wa$6^9xHJ%bc`IxE2MJvV4&^4e@F)s#S(&fsdrpaJR$L2+r! z(s5bO8d)zf3MDziS|-VocBj3vsx+{k#C#qjlmSyM)7#WSMb0S=u+^y>AcVJYZQ7QA zr;u8xC;cPMU)Ef9H_#Ld-xzK6irmx*&;;>LQppKF&9Q{;*&s-BL`3*zkAZw#O<-KN z886c0KV!^#&R$VkaV&~f& z?_Wt1P_oWJyWt^zCnd7?pJ_tt+fzt#%1kR4s*mcK%Vw7uS9l!m%f zDpR5fg9wjFQiOzs^pK@>C8g>-`0h*n_5mUoeMo>#VvX;E9FhN?gpk|TI?rKcyu*=} z`TWd}Pes8yRl7$3u(_R$_f5S&o2E?ElDU zf)6svMSSb-Hs<;M0UbHQ^-lNjQ$nwZ7agBp@Gh6NP_`n?L9H)#vE&%J|1N@c+x5(z z5Ocwmy2P>)WyhEF@$jA-C+v@un{6628yx^`zqU!~ujiK&k=%t4%0J<(`X~Dx$4`cn zfi_LWAo)OJwi zF<4w>0^r#E>@iK>6Y`9!Dn}U(G2R8v?1rHHI=kpTPZ1milwSNxB0bF5A2xGe=yjM~ z#Ob+vmN;*4M+3mfSj*VvIbfmXz(sRP9$;51d+Fc_u;=Ev;?9lmh^*s&jt|5OjO~UK zbxJ)C0{$_rRtHjmx^}W;2o(#gt78QQ`TzdCEd7n%n|Qr=Q+`eO5S1d|w@2d7=%L}f zy_pNGY^U8&fyaOBZvYo~3`}o8u?RBH4p^Mv!wT9?r{0d|eys2j`RnO^m1Tm$0JC4> z!A@{Ga4@_D0+22@f%}FdPFP^|S@DBjm|=o6#ecn9JO>Hl4}7REJ@y^%ZbL8LBTG$} zO^FX%BJ+*}eCE@8eaHGc(dIQI7>EHSMQ70Ms0lrjC}t!vxG`w3e^|j$J->8p$$~3c zl1*Upz6C&S@b$#zy2#i68&Glg7mLh2c06DHOeX%kk{Z1C?7Yo5 zj*!YFPrb*E1>N@237P%r z3Hc@bvZy0})@LVE?m!-}fz}!hNJh0GRw!!A`-&6F%R`q~vI$nrcDXQ>cHf!+aRn9K z<36){QawF^ts|&$P?4129L*ASjM$_ER8rA&bH|3-dS!%$bvtaFdV|h_h~m^3tgw(! zyAhGrqoyD#D1LccQ~|{%==r`Gmw$!P`(Bz*xDqb9ltC^6R~!WEl*u>Oef}hOfpdxh z@-#z7%R*C12B{jnV!|;$6jzTIt39S+=yXHXvM?>6fb^Vl*HR1=&|i=5W3~g53tW~^ zF}_v=`*beRMj%qCc4ti3M|B^n9@UcU%LO}u7QNQ$;in(DqjiE+*F)huAq^%YbvJNB zb%K&G&L$;QXvPq$TULjL-}`3;8H47MC0?4%%kFX>1T6CKOS@SaZv8$!7}chfW@pxJ z^UDO~RID3iy7=1ZhgW_SSoO5UO!W;frB+>s7Y6I@$s34kQ@=xwJB~vw_s%+W(Acz`Ad6JO2sr9=AztAdUSd zv&lMvyO~e6VA@I9ZootFG)R3^XQjq1<^iP8&#$bE$a8NF-raG`S~L!l(IY&WzaW0N zKX0@jdv33mUawb7A0h~M#!EHJvHD+R``#p1K{f~K2D^l)Z1@lSS&@+X5*`;8W`|<| zQp(ia_GgVnDgN0mzYg;}Nv`ctxeZ*@-V?%J+I_nv-yXSaSH~o++y{3x5m@k=YIR@le#w8$6Voy0uH-@Ff>D-+&P6)jY+p)6{Hb; zR1Ik#=VgG+PBi>kxxe3Y2tn+TV()vl=KEpy_IcTMOmqRvv&v-{mwaaeUUu)WRrhd` z`WyY4!UXQm%d54vF|mS*wb!AsjZ?x2i!e0>)(Y6p$CJe+RH8f<$|@=wHZ7alnV{JRJRVHq0=7q}%<)dJ=9CJLPt! zdxQTm3{SBe87q8|&*G}HoTmclm_JiF{QvnuaPaU78yb=U`&P1X9B)`KGM`1wWSBl& z!b|ep!h-WFRN9B@?LP6@MDAt`N>b+H^74N!3;;qLDo)pHpEj;U9LV)O>S%pzf1Fv} z>W$6w=Qj7v;8zMszlL=a@U?(C>V6^2+m$$n*Vs?!vKr z!I~zGV`Xh}@}hFw=(sg%`EfpueLZ*-uaf1%Yb_W!Q(u#-7AU7f7cGl@=NR&V0$Pqb zt`tRg)KUj$ub+H*X}Jw1_6e==ITV(rvesui_{)R*Uvk!eGM&@Y)BpKg{(}U{RHIza za;aOMd_FpD@df`t+U1CEzbiVe7=~Yes8kyOmW9Fn>$yjr;tBuEa6S3?m3CM9p04Mt z>{ZrSGxc8%szM_yDaeD#h%7j4k%JWYN%z;~E(&D^=RwtlK|!5tE|wOv6@@;hv>o3R zj+m<$C61$b!^<2Ibi-}N3Yux9<*U96SQ_B)b!81-Z~O)yW-;aGQ~6>d9e9EcF92bs zyX~|2byT7J{2g7edTAEZfJwt}HVC{?ElL8J^o;*qz(V)WJEz9^_N7q0+A9SPY37Jyr=7@mea=LxA{GI@to}MceKvb-nsW;BA{D*e1FnO- z57G0aoB)C+cM8`v-r-iBshZkjczwHBYJ2!S*V-+)h|6|u zFj-M()V=$b5ZIXR@9zOq$;{^FB!I5~sh?Ot3uv)&93auw)!iIl3bX=AGMOhzV?6K^ z(5E(iQQ#qsv|Xnpv9Pqj}hv6^XQ=y za8NbaZSnyM4pM+lA_9IwDFR1GAW~poqvr*)W!sM*0h<_C+>ErQILOi zs+qz#1bey)7oI3(dI4L%>_o1xFn~6BH?~q@n^A*TR6bPK zHvpu3`8wW#kws7mmW`aM@(%`CX}pMzV!h zNJVw0U8QRNcW0kDfPCR=_0B#S11^tY!|?{{q0U&|c2PGvz1=zrW5l(I~wzRPWbSaEo)D z)1ab|fHMgHDoF`$jAG(%k#Plmy0kc$b~XN*Kb38qFYvhaXtvau_GAPk*{0rt96nktL3t z6`J{$8GGao18BKSj0>PIoSmIT%U@nxbbL82Z2+_w>4HS*K>y`2PNher`pfH16eV=EYpMS0O@|?|14Dj-;Z8mCy zw?EH4oBt6|Dyu|`7-(}%MuL@AYK<9IV2|80n)mQEShORP2FLr~YrNgmq$mF7ZSwNo z&L8lBH|*@St|q1rwXzLajyfVh)|-!!`AJHWcXNTH zbOyUQa!yW8V^b6G^{*8-**s9x=zQ2o^l)!BwcvF-#dHaugIk{Z1S5eCVrOu$!LWksS!=AW5% zPJ@kXSG3lo!th79AW#O157o4R)KH9-) zO6W2C1PR5N7)KK{4&j)}1iy@@%{*&On86GQ0qe?QmZ63{bcl_@<`!mAmEcb_YQ#r# zT>P>9b`*H)>{cTL-zg`dyMp*D;8^~|#7y{P|7ZGjwy3(nVwMbx5!A*tU0<1QYV=Xj z(h{%L@Q~*z_{OrZv^0@nJ;xCXbOO%E(q-3VD8h-U&2O(r01-=8o%Lh_4RE zRl-Lq_S*fd;Y?*{TPgjy{fGSN-C5+9{-Eji9icf_#tAEX#-__TGmN-V(|e@*yNiFv zQF$BFk3zS0gMJ5M`q#Y9f+6HhV6sQkMx*@-mS5FYZPb6ief!h?np}jL8?GK=@3(jU zcFCS+F5u78XYg)^EdyV0`E6ZR?|Sk5s+)%C|d*Io$RWe_G%c z=Q!_^6)h6)@87=wSW22G-D&jW&3vk&=NwQD$lm_5`}uNF+5&ssDX#u3T{Hn5!lZg8 zyvni02&^-vKS4e+K#b`PZN(rN5Eo7tg~o4V6E5Np`wL1LA9i_1)0LcAA;buL#2cTLdg7^qMu{8jqcw_#R!f(- zQ;pp4EP7L-=zf2PhLfrg4*@|xHwy5o8!B20RFKr(Fu5s3x_)!D93oN>X5aK-FH?Oa z=h%PrTNj)-3Qwjd^eT@DrQoD=&Q@XS$&2Stk zW#o{bSxzQnXMAL3CF6Oqoiw3hL{wqBI?rM&p1x>DiG@i)QI4Bt@?vv28zp}3K`dyE z(?CN}qrTH%AU`h?wQa%{dDadnYMlT{^f z0-@R9#B}`DqwV21ZMK-C%^%O(`1^(|do!}L`qoP`E`f({Wo#nc98{7wJk2ie zkxMv@uJG_$Ql53NM+^yO7}fNBD%>W5t!J>3Fi_QuNb3le6=Nmy&X~MPyLZa8In`=S zObqLpY2#;aW3U>T{o}X)@KHGEz??Do?|NFW#&o5l;8)UUU9FI}-@hM`;nVdlndkY9 z*CJyI-5 zOko$N+okNa*(L}XB+^wL6J(%&Q~RQrqIIzF`>$)6s0qB27XEz71XX(T2sY$s3D2`? z*jfq8H3%$@@nlm#H|o*5I)P40BSCr$BJOJ@q6TLISDAg>4u&nbC=#g&(^4~380nW; z7FWcE37H2Jj!54TbLEGQs!q+rZbYK?J({WV#kQ0E&na`}cMj?tk3C^RcrQjRpfb?X z$0w=H`7zH>=o)fiVer8!L1@12-3eWOKH?i0CDqFl0<*)Ex!vB;_%tO3hrW}3j;*VJ z(|(WhtZU2lILyaX6ehjQJGVI`rmG#YW>?f#J!k6ZBM#@@J%y`I?kP`p7dK>utG3IJ zxKWq5hapINK`UIT>TD@rG8vIg6?P#x9ww=(+~HkWKgCOrxF0O#44k(XM_!oCvwF@! zZNmrq+x|lh9&0=xUjjU{?>t3kNH%LOC_sb*N;t9KzccU{Z}fc6++lmaTYNv)SHe#B z)TsxgX_QE)?_4J#MJ002av0y2!ZjT=A;j(n{;eh`!>emHwugPQ1!K=Q)+WOLVAY#T zCHSo7THV;1!66z+%B`Q_h@FD^j;ymDg~Gy_4Irc1cp8;d0d^wwq~BCJm{fGF;^GG7 z35Ll9Pg#WaW`3NxC%Pq;fU95zG$m36VqmqJ_!mqW46sA-*3gi&&IE)geX66 zT{x?ldNc0A38WgNU!aS@1-OLF$ZmeW(y1&|M}CGMF}Jz#45SXq2$O1*B-bJqn@6M? zhCgt2I~8%8CC^2yJ=iIsqgwCqj3UfZUirf|bHL6gmHi`pKSYLvi&OoFqMj3wT=x5= zRgH0=v3|z922Vt(EAG-CC<_WG5hu|^er%8X@ezX(hiB0)=Tk}*&GuGmy|4gnX#tl! zEsK8e!8k7`ula2sIuXQknc0(?Cj1xe|Fr;ln|BaEo+@wTf&TIt*U+(IAf?Z=HIX0R>lbSm~wbDjiEe^IMj zpGA#as}`1*&(%g5s4a39VJeT#^SUzmyS=Ap3zec+qxhn-5=5vGH+ZTn^sW-l%J3@_=sSc9(_GvXRAxiWO^A2g(a1heKYv> zSkL#9-w5{Lt#g++xmaBvsY>+7g<6)&w}UG-mCPKi(dU&vyuQFoJtsvAUf?x#hPp=6 zQkk{=XVX`IPj%ZKFfBB;DzOT&FAZN~I#fNltK+t-)1I3$x+@ZZp(#mLPE9Wpl&(&(s9;M3i#{~aDLw&qX<4}GZxd`iV z!Z>ezMC-{MYfqSw-jKHKx|s<{_>ZnrHrnuJ1zL+Js^FMAbKHw*(h!>#cK`2;)$|dP z#lL#|!=sH6l+lsJ02@4-fCg84wUVJoW3n z6^YzvVl#sNO!zM_p3@qBqxX3}{NaT4D2en_uqa>{3|qHL16o2gvGE_rx_9@-C!l#= zUFCwW)H>)wyfu{dmLB^MANv1v=-zreqX9$wDmV9H*8K2jYr1&-Db!QAr5o zdTjRH0I_>V?vH}fe(%hlmq~EB-M3jM!1$R0cB~fieIG9Q$DoN*Wq_T9T&&iF9*KlW zXf}10Og!eoCsW+EA6lSwTm8ads?mgIe_9xen<+o@D&0h$b#b}6Q198#HgK^D2kG16 zeYS!b%%>0x_FrTSYnq9}cd1pz@K<~^%bFMEJf6H`TQ$(ixEE}d$N9Y?{EpdkawnjA8W;(SrjZH}- zOp{kJH|Y3NK+Tbq<1_}l7b+4QIV%9M4zH%aa}Z(h;1esYYY~sYbB=>iuh%9;ndAuw zhMpT6S1MH3o^?gXD)VDJ)uIZ!1b$h0FC?VBn!fatPv6tf<>?4xY_H(;)guyoy;(&J z?mEmi;WB0S?!L3)2{uouXu&{U%h51vQOA7P;|b>wlX2y^Rv&=pvMrB@3l~mOCF?f0f~tW$$&jdq${eUw@uCm2%oM zjDDKde@iuC8025B203QCa*FCOfBmThZ^zNH7nXvaUXr=81e;j~Lxc4ShCTh=IO979 zV~p{m)5>mp_CM1~oRF!R+PF*`&$+WTO3Ig`CF9!zDs=m{m0{D&REuv z2NX@}B2*GIt={0TaqJw8(H9qkXYgsludCA@Z>Pr=#Ja;bM~+Uk5acLgu=u;rx4AcE zO^2TawSCoumI8__T(HjR6u*8@7j&AW%5dc(viN^5Z1kN*P^njHq}O!QL=VhoBKPJE z@6K&xOvx}e%UCZP^SHo zqHgBOE~()*9twYc*ih(wX+Szw<>-ch?_Euj-Ygpi0T%cp0Q8gQh;eTe3~3T|P6exs zRu1&drT=bgHUMnP!oN(`=FvzgfG#&ryINb-s~tv{6@T1Q}d4OU$Cf zpUAc)!9guovnV5+H5I`gqy|=aa2pg!_}=-HsnYtlnuzJ;MCy4B$mLjEy!VIafPo2r z)TZq4WQPpC_O-j}WDeN9tl-KdA<`Zz?eQ0WFH-S&+1P(z@0JdqRq2%gXqP zqmn79x;d&k2>Wzo_KHkh@r~QRw$X180XduOIBPqX95oqNP z)nXr0?5?ZFkp?{m-D4q=5BBzw<@$Ni-ySo2$zNuUUF$gXLE-eFl)6pt#rJ$5IB%_y z*|HCOF&bq-vJ3n;#}&{>uz_dyFZMxEh{rY|w>0(Hq}F6m8n(!33FbpV@jtD$H-nx{yA=Q9Qp6N)XN%DNxJ#_rgR(wRvZ3XIs|!!a@h+VrkXXg zZ{5FK`a5swmnrr|UMeNXP5thfo~uk2o=E z?yH_W?LpG(P@g^Yyq&#h<|BD~FZ3|Ow>+?^*;&K>-S>`%l2RZ>vx_Q-a(lvXH^~%8 z7B9uYk-vR@BvN!17b}LRQ(M7=hQ;&wyB)V5B93*{S7C3=lSj{4QN1zLLuKYZVKlBD z?OfxXg3l}jJ3N+T15)Hk>b<&!7fXqO)?!}#Vn`#MM52E{AM}Nk%Z@o}S`aMv( z{X=v(h>W%I^NNuhE3RXl=%j?3Ll=eiYB-o<>Z?@{GTmJvYA>j>P!n8jlrLnOZiMe! zizCUJt7Rl4B_WuVF@Z+vuLA>J?C{o$_0|cb8U-25BseE2Xc^ERydCh}2zX$2MRIm+ zz*inP6~RFzLC`JmRt3zc(yIx*+h`!xXn)E40mfA=Ql?myUaF(crXQ#-#;WAZ%~Gwg zyY@ZRngQ(bckLy5RG=9~u&-E^_NW|U>f;^$4`yY#Cau^_^D#J*fHuWSg{&`#^r^LC zv@5nF#Wbvn-&ZN|B}NGJNWcmrzBf{dP!${P_Z~=hL(0uL=oS@Fk`a30iG>(Z0We32 zITa3G0+`Wy{h*B(c$}v!Qd|xVFN*xX31C}HKU{79<;8|rVRfF-XVdj9bsYUye1zDD zG9Is_A}7}ptQ2@gN%R>|vxAq}XtVaWjJo&Y&{Zy`edP~$Xy<@|K6HT5R*|zIQk|yA zAui-|W-^P0;gUv4((bEZT@xB z=e^a9*Q&3#e~1AMiO{ULwm1LiHzd7Kx+QK){Tab@TYeX&_FdfW>yK0ytOiIj*M)^< zw8&*+$bO5xCXM;D2V$1zz8WI3WabsO!j2JPE*nye zOvN(%ASx6+a!^O*!jddHRlhFu7I;WER1BfT8jS@LIQoE%k;O^zJY5>)bk}j9AtcX5 zD>^UmJda_r2nqEAhW$PuJ9D66+RntAxwEw`V1~b}EHfTAqWr2VaOPEXTa3XC@^Q=i zzQQk0_2LZB`yPLFe^1;NcEl#`yaE4kIy;6XUisEd`i<3cPfio#UZ6ke{!Ejo{k*{2 z05-6|Iz}F2#x*wV2sSYz((v1Aryrhf_yPrkFokHn!colpJl48?HWO}5jX-(mf&&pL zWHA4nTrAd%e2$j$-h}o~1Thv~brY-3AAcp$Wg)*Wghnj?{kF%({C7Glx5DO;V@7^e zQ{)KkSh>0ekv{E&&fyl3vR6#g3$RP}eLh)H;YP;l|>&EaXO zAq@O)tjn!vkbf|)n(0Lzw8|?U^h+OdR6ZZe_KTWREg>7&jDD6QsUqBX;uu6%dhrDJ=h+D_ztfJ&+r_;A_ye0EjizZZIQb zW!do(P5}vNGTUWNoA>lr3t7l;v#qukkj@w{&>pGn|1A3gjb~}6ElZ;cvjS@jaOdF7 z_Q~(U?)LW&(_qCMQnkV9VtZ}+0Dq?QA8|hqyx*}NV`+Zu*4Yo zn%1?1vApEG@ZsFa{w^^eAQB|LRu!zijL3o`?#Tz1l;F(j@#i^rgk&zyr0kVuSs_zn zOkEf8VHOSo{E$O;p2YQ#e&~VsRb`q^TZQazx+t47fXB7!jJmj|ny~`IY&!Xv6YVR@ zLVEwLkLy_o+JQ}x4mqys$sSGq?QL2P{6Ve?*ipyL6EvjdA07SQVBC3Xe3&~{^!c}< z-WA|SN=;qcZZ?|ldDSD9OR6lphD|jw;Qwe-@$Y42K@}7h`3ZHh&kDpRZ~NY6yTy<;DpND%rTgyi`VV4yur;9>@MnGt9Ku=NYyA z#ySY(S@8qT6#8QD4{kgMP)QR^w8yip9^dx6RZz*XCkN+Ja&%Z5(1$l#O3m}$x=4|A zWC$%*%wnq+q5fs^b=wQ4l%Os}wx%bmN1!M0P&QpPu#Py_*3#0ZiY!2%|E>#G;T*lz|neI-vAprA=q2b_EuSz#gR^A zYUM%C{15OZTHxn6CzCLsJ5bF+`4l{Nf;3~9FdNq;YOiG;O^~y5J)p(&AI(L zV9PPOx31y0HQemo3GC`9S)nL(y-@5-K>?P_baBQ_#6qa_0<@#KR2?HwkP7}MMxOQ3 z-~{iK7C|wEaPsYkO|f~UVm3vV3#|#EgvqzERKwVMhDF!d(HMk6(J!X}F`85ic$GVM|)y0e3Mn$22q7ro4KXD#1zl80CG_?=1M-7g8! zWA(PPCr*Vm^!YfLwj@`3rClwaMpnU z8oaP+7EoVpRg2rE8_UhyrOEih>luf9R2vB<7ZxHcLD@HlJ=aC?#DgG8c@HrIZBI#PJra&pMPFHN(#4pkLk{rQ zm$h2kglXSPcY^j`$;^HtxQ41>Mvp5k`GEL^wJ}x9F6zh3PLwwH%!~^vEDR|DhdCo? zSs8q2vm?wR1vAa5oxM*N_JOolo_U-OA~3EtVFUN#v$Tg7v%Xua#a3i8dl$>+XCJk0N%#Enr>jzv}6M5Ym$A{TZp;TlXIvntl(1FC@NOVcmj%e*e3I6CN8>qJZenh zYlu}-Zq_7Kv@IyhUxsf6R>Z<&1mnfFNHO4yw1Yq)k~~CYS@jtN^m{zu^9ww8Pi7p1 zmDvLh{&8E3^)`T75f0jQ)f+=gz3_}pQ9EflN-(c7lur0s;MtHvoLbeo{_Nq5w-4I9 zGu)s5T{Vr+k06}b4M#VJuu`WjNt5BBT&}a`p!h6d9Jg~;UkD#DT%19xIa~4b@m42| z$!Td87-WTvM%4>BV%Cukoz5L@cwYj|(A$DKo{NvC+s%=h|B7B2 z4`}bvHX9?cxjRQbKkn@}?oVuW?*1UOR$Q6`-9%Q6IOxn~85fg9FdTo6hG7>$7^MVc zlcGa<(nXdtt&Pz9X9;<=to_iZ-2%DiiMVuVm8_$2nvFy$CSKmi%QqtjI#HG|w zha9jLjU`=5gll6&*hExt>PJx~r{z(!Rwou77z#ctp^d&&#>n?OjzYV@Bg0~g<;ogM zsp8Fef>-R+KR;sxlEhpDarac9lGEUu-Pz`t)iR4S?T@rik>tCU5p07~R?^Z1tP8Tu zRBM`q)F<{0!2ckp`*xP@%|Qd*svBq^{@p{x?rWMdB3sqNV>bMx=_ zVx4pa8O6VFKVOIkO1d{~)xTOSoU!laq4VYZz5h^|fWtv-%g{?qA!?Rq5DmH-yLZOM zNegK>O|l!96Ai-TewxF;Nqh)9+Y?bOtL46aEah5Xc&7bq;M62CG1eYJZtmk63`>9n zhf^4VRKQ`P;N7JP+<<^`3LNTVHQmCtY={5Wl@ zk6xCv7`rKJ#xMme$%hrL_u}z2B~xl&YM9V0;S0VR=9|?@M;cl*g6JfE+0#gsNlm)1 z-zS8ga^0r}P$+0+e{a2>GIX_Z96K#SIw~z({5OvCvk6QdeUr4Kx+ZVm^^iYuZMGQA zq%w{Y8Qn#N8WG(^JZC&Gk-(9xti}UUFUS&@sjw{7!5O5CueY}crtMb675Mv(x9|P9 zgdXFco~VTfhOSXBTKACw1E$;5O2y|tZH&X^HcG)$>#I^&kR`}Si%LV+llSuZM#(Hq z*Y7g4!=fs?q|OPtbVj^-rlNPA$)qSWMt<#PrQR`ux$9N!?GMbwE`+{MMq(YDmp5Ie znM%=Swe#B(E&QM5>o`RzpR=7(kI7r=)gEg^?jOIR-F$P^eUZm$jaDV(=)+C1Yn>zz z>EmY*LsH_`3v#Wu$}NMuKmNM+ElkVMqr&RKWTJV=gV#hZSMN2YeNV=bpLdjtWhUeq z_5K(z^tdbjRaW}bd-Q?&c;uEscsUhQRDb&^-qknv{b}94C%K}gJ1yS-%^2uuIQ}je ze(VXnid`H2+mAGu<39d>wQc;CV2z7ByU{-IOR|dU4$xoW+N+cZYEeM>ELIIqA`lh7 z=RwyfAQ5iPJrXE+gLEV(2(0mVuF-q#6l!Oj<~Xf|G9qjArlgoBYMK}xoaQhp5{%u8oG` z7o>|Y*i{R-!$NqZue(qL>Gl57D{&FcuGBWgxaEa>Gr|1H3z1C$!EKJ@X~xx|Xad%h zqUMv6k~BrowqMO2pX7CCPNF$U*Qcy*s$g=y#F|2>r~ly7RQYEuv4UcCdf=b=DCoI3 zxl2LNJ4Z_$38fHmu*PdqfFnp5YO-yO&XrgXTO472O@?t*%1cd0}Dax!~0&wDjrdM<3(Qg!k9 z3UmjtCCB87AY~ii2KK+S1%(<~F)({HYNHP9BXHQndRtv=<3?E z_ox7CvJ&x?V0D5ZesgOqAHXouZI2pJhEeb7t&oKOUP-{yPeQ7}lK5NQxp>&b#yWB& zT`tcik&2c+n%29zIzVoepS7WMZJ{CxEP*+Yz1;Y&grl5D53H2fGbHxIF}G>8zswhY z8Lz;7oU!w^W_uiPCAe=q*y!CAV$ZIxzvk&Vy5;gC%IXenCPS>9(3Ww`b4V<6HruTa zVI$`rJ#9RCjO%K!{FuG^N&j?C7n{nS;g+jY2Q73FMp;sUvKTZS ztn%zLF89Or2t1)gHl-nED>#|VMLZQXZE;AsV4z%7CyGGr(oLN~dyVgV2^5ius}mCQ z9CG4UUq2la9=B9TCg0&p%*>2aoAmO9r=Ayi6oot=-LCS1lDg5nk$ae#ZQ+qk_nyC< z%de|h!~4VWx7|Iy#0U+t8`m5BPmfQ*HdQv{|8Af4?okAjCCXveDagpMP^a=k?GP#r zE%M;Ygi4NP&O=c;j96M*CH^5w+_r;oYBaP;-s_232Slgs8j$+_4E&2%Je|w3t9R%|kBauqe{$|E~q0 zY)1O$6t_1-;0%tem?kQ6wUP2x#2I94yOtKmy9uq5{|XnPH6@i)y_(_5a1Ol;rk}Fe z!kvZ7WESA*h2(HsQ%$`T*@xSNBQrIgHDu@YK^oaD~DPOXfY1vrxOs?g!PK}X%L5|O^x-JID zd{0DyLamaFF%;P;!)jK?DfB!fb|`=HU8~{}g9RLMnz*=Tj~AOj5Jc)*i@Acq(L!Mg znI_*2OTS0TLqScl@Tx&PsPFSQWD!AJ=R^JNN%G5#hy#)*eC>AC{J9j7?FO(xEEeSRPmTd!=%U@)aBs@p z{o`TG9$8u5qBB5?T_30V}m@hh7lvcwGzAd9WM1k739=mGHheLJiZJ)1? z^Lkd!i-T%DlWzjT(mgVMy+fzmj>qEt>T*9~Ehb+uq-yzukk)w!}HZ6QD+rcNH}1)9K${!6qoky5^k zLSQMwzcjO5Pxsh4og28WR(eAvxtaU(Nq`zWHmR#>-kqwp&|+slA7Mk0@i#Y#+@V8I z2sG`$EXS&u$=pb!hDCe>lS!p2jpJZpK&mM-%Xix{I4kyjs)DU4*zhf+p^Q9e4@tR| zR#<-T+-F%}&EjUfhnl}np^>&+6lajq*sUz;da9z*e!Qz^*=G|zqZM9*NfAl>%KK8sS2=~0)?v5`W&B7(X zA@N^5jL~gR&k=urd)MWzb+sqfu37tr2GG~H=5HN5v5l&R$4)F?!cXK6L~UPsgUEr{PouV(R5AGk!{_& zJKeEu+qRRA&5mu`wr$(CZB=Y^Y}>ca9pithdZ~I^d+xbDYHMnhP#%Y^X!7!DBM*fe z)nDDdUen*F=9>RgzA`cLqBlRwe(b;!;tr8^$s6Aj0Wkheg^10`f#$bySFbY#4Eau& zuC)j2kL~RdjmF^aQ|rD$;eRfQVPxX$`gVO=cO5CwlU`yQl5>|YoxL>jVPkc^KA!7L zvzzqH+~Vi-@q5JuGMDND*xU9Zs1by2g6X~d&ud;VH8hVnIK73e(ZsA-2NwleSpr0* zuUkL_W!CnK?IV8N1+q!R?LB0ewTOBW=5gc@SBbqehi&?a$j6@GIuod%k}J+<+(K?Z zw(~`DNS8;U-=u;V(U@mB*;A20!!J|XjxpAiMr~OtdRK|K8`exFG*4D^$RLk@1j0Hg z5vxJG{H51-(}k}wRPuV_c&~xNSY@6L2MnjVNAK%G#f3|(M#Ys2B2fmWmu*Qvq)#7Z z6a5-d1hWaO;`%jhs-ipU`?RrU$ZfreTqZrGs_Jet<7fTzMFFfPJ1GfE@_lVCIA=zu zcCco^9R2zmkOZTqxjhUtDG)hmP3{uwA>M=%-O-mX;EJJ^V)@!rWp?_Wc1?Bg%>b zA%yEyC~-ej*~}iN!m#^dokyM!3JHXs>;|d0aAL-Yysf#id1^!+w-i0S0yf~#Of5zh zhYTh<)9o^?kG1Uq^KYH+_ZKu6`^vfVe{qGtP>YxO)UUws9WQE~j0Q!TLi2#VW-|EE zgq&pK?eDMW1v8faZ{RZJe^+O--JUu)AOSX5U2JuxDwaQRpl9MAFYoM#HNPGBxDJNM zRvwp=gOExL{1f0myi@5q{q{}@m0NNfc5I#d>k!60A5|qoG#kf63bj5qc6hJ|>2t0< zNyD-eW#|(;+2Rv$%)hXEmYryY*O`=mtGQyCP!L4#d(7~CH;jLC&CfF}Kxn-3C*1TB zw?wfid@qS4`M4^hDCwkQX1pD2hpSB*p%?|Hzp)m>uxyktO4T_hgpR>Ey9E2Da9_&n zTs{%-S=Z;ZFZnj=111BJFy!rZ(zGaG>1U76)PqTQNe-G}-Z6!I!0!0ZZ)8%p=azgq zLE94s93JnW&;M6dRaISGou59&=2O-N#=7Qi4mjVa?`z-ISjk{rYoI1sF2IXR%CJ0~ zVb^~Y&hGMY>dH(N~uN}G1D+B=$vw9{w+>UC2^b@_Z^IED+E$FcLI4#z8JW-QcNAH zA#BEw0?5AmfGSM5GC@aczz+lMIA!9fgz!!TMc(xRs>~rDNkGXa*J-#q3&ZE{XE*G| zyh3n!tW4uWyQ$?|ZrHvtR>VUYPFY`P#LC%NU3y}c@y%!2iwLR3nmRAL3>Fu0!{{fi z1b=1lvCXP%jR~s$ZJ5leZ4LL6q8=; zVQE}z1W-u(qi7Bu1wAjN9%zE>*WIpMr|Ju?#z~fZXfEx#ahlvFR?8TkPTWGu)o1NT zF^Cgwj;)dhoxv6Hta7)Id zQge+hp5$K5zrwQb7dcIFd6QNYlkKkMbI!UVYlOYW3tLeBH4{g88?)I^Bfc@Vcg>6s z$|&YLo9RBG7dT7KV^t(O z(aGu09oJkWlk4_%4~YalEU?t8wL#w4>6^ZA{5$mCmelG((g6-$G1)RvDy6TNz*5fo z4-bz!U%-Y>=@@|joHNODB9AkVJ8oz!uY6r%4d-rc$r&hT>= z*z#+&gu6#@)0cJO1sonjhmMxOLp}c20adV2Dy>-(9SUHHn@QY=H^Np_+`34hNyf~= zimQ)kEdsDqAYpubE*C?*qh@lH?}_oM_uD5WC8Z;w63+7jcw77-{7ZO~MhK7bl$wq21U$9`QivZK7E-}>xec4xRih3^uJg@KnzBNlo`g8M(NOpf9Ph zAZ{peDaJ>K)T<{1<07bTnlNyu)px)QuD+%?lKsrNZmPtBnlA1EDcV~cz#t8~wS1G3 z?80S5-RMe;PpAaTT#MWuP?r3UZg^3at&SS>E|4;~o=SBt&($-`#LP_!FVpr~_=Ipf zK?Dn)qA?r*ZG=>K$~GAq65j2@#hC21Tpwds|IN>onZ5w+a1J z@n!!hnrE1ncN$R48EY_ZwBG_1QoX+ng0hW+9wG571c?e1=Jwafk9-IUohmsn;2xPh5^d3kLC0tg5oKoUsu*Q^}& zh9H48?Y535vxI!WvRYu`9p?7ia%+R{x6gkL{{I4ZTWoiL4!}NSkk$2P;CCIq2g2x; z-mg9M9tTXPEnf{#Q)+mP?C@|%)e4cTx5?|fr&QgM>Az9`KyNz${cNm!Ue}OUo~&$?JNP6MsGdrGh}p?@2mXC-=yj*5 z#L}H+i?1~z*7Ex#MTeMX)~Dl zOvZ9cFUQSuI9-8$0pY-a^NUTwQ_R!rT8vGQNQq|=jhZvIY?i9Z!_SZf$8!GD4RdV;M zGIZj8p8vywluY`0V4~_=bc)6B^uwR<@C^e|Cb6hIuYUd~%rKnwlF-sq_|hI7%lJtO z&&sB1NzXsRMtI@}m7ev@r1!Q66-ob^NE<0tm;T$T*CS4}BImMf_Z1fs%#0qaq>8Ck z;f!dE$z{w8ihrG4`8z}7=D_#ZY?Vm5Lj6dKl&4BeajL<(#^38=b4%8gJ0f)GNA8Lr zNKw{Ikbz0Bn1?tA2Qcf?X}~l@(0>fj-<8XG1E=XYw5lFD7aZa5nEihoaEg*|Z*OT?SqCMVHfMYz&)#V0=s+gf z)BPkrv<>*l>GQ!+Dwk_wXBT(5(b{MVzyo$jXR_Ox0P}r;alll`P{RiG(94q}Oy*&Q)HSIpXvOz@X|T{HU?+RV2`TX%)Yu;aP9N zd7xUmwb~PzwB@f5)(8YDPx&kWPd;)nDalDJp)o#5s?k2Iy}u)Pi+92%sN%-D^^NyE zWSB6dJ&x;l&5{KVF#DV5<7NrPc%Wzw(?GYyRD%D}zHS z)9`E1ViF>1~$3u;Eo8<=iiLwTWGv3^c|5 zq?bn_n3ex2s@!KpB$@bhRshyIDA8WXi z``j>jIi4DVNm)fd)Hg~65Njls?UdS4Eb_C9)ar3RoAzkCio&z`IRAR7~ z#iblD!(4<)r7VkRJlJY4)Sk3cepCdxgjJ5~?5rwKQqzYO5%KMXN zG{`O$wycUpf@Cz_Zl9GYts46-^kXJ^j-6ELs@6KCpYv20DnB~PDFbB7=wcLWWg5XU zauiROFmP6sTQn1bbItVEV?O;8S&=KMHav|=cq@FKKepu6)0IXuXaH{zu$w0Hk6la4X=F})?#T*8 zf3_s5ysRBTvnj;mB&0F0e(Ox#dG(Q|J~Mh&h}0Y0&Vqku@qab*A3pltgmzs5b_Qm& zJHJ}JjR1eMxnc%GV6oj^fi~^7TyViY;NeJ1PuDjw2_Y7XvD@)}b`BTU#{hQhQ6@`j zd7KurWO~2&BsOx0pjWZf^x}PeU0Wtiip)peE4`ODn=P=A<^t@24c#{@&p1XscsCoZ zl*j?fl6>!5<{_b?FDv}-Dsfy5w%7x9s;+{Tk7AatV(4#Pis3LsRHUJuzNeyBU&)zn z&sxdsUGFf&e`DUMHlOw{hr%5L^_`{zNQPyK*vEKM~vMTTTW}( zadweT?QTmXgf~dOt*}|)i70)Df)Kk0!j|3fg+?OCAE*&{!6)K*f9MvI!ZG7fI9u<~ z^Qw&x9;=-mR6mo(@renjXwg86W=Ry0wwg&GzQD}POhZG%kjmMv>#}D2-`#M-rZc+R z^Vvna#%J^V+kje&@HcRS>)M6i5!j^~Plex-0)!x`#!4(Imi&Uk$$-%*IUpTo3>^rI zZpAQ2hG9{fXbowmJbw2Wc`4<55h7F4 z0$CCm<##dCP%|@+hAW}vp><4Pb2aB${OQ<|YAr&*tQ^x_P?3B~xR4+ccv6Vf9cki- zq&N<#_-}=@f1QxS5#tA>sKc_;QSe8l8;hyQ_JXF$mDpJJU81$_Dfazqj+*&D%Lyd% z)C2SFaVcerqRgr&o-9x(9OnO-{Uo$Y(h?y}fo-RO8M>vFZ}zI_Za7*||Os;a8$_Od(Z z^*RY`OOPYdKV8<`wYJsNpG<)z8D9XX^&k^?kI!g(9px|JWV-u(e`)@mcOvewuj}{x zJ}^GOfmY8^)}ve)WuD+3Lj;ctq2l-m=R*%?B7`9F@QnC4JooW8H02xhhA)kRO9H@l z`3zkGI-*vx()O#rKX7Z-T|o&bP$W^Him#^VV}y8mWg1_#*Duo;s1|I}gY5a+2XyX+ zwaqdDlk|`9D+zDn-q;2C;0dem156OI4(6o*QWfBOCZdRrI`z8 zWDnPLb3B)GIk01}YE8$#21J8w%n#mZH;3aUQb3p_!vj&KQGl$CEoI->sT(z-s^BP1 z+1Uc`sUnW!jck)Wy2{M$!x7KjI**Bt>FdPTl(vlBbpgC4%SG~!(y|3Z0ZYyzE(H_2 z8RHfM!$-9?(#&GK#5_c$N|LZyp()UaQbi{5fFu^_+Z5rh!#Mvf;{c1G1yd7TasMkb zwG6?FVhm2$biduQVD3Al0E$UeU_ib&HHD5EG2cFvBVlZD zq{-QcDxG&}B5JLXiUqV=_g|}_v05LMW2>PS0mqKCl9To2yt4Z7n(V;PQ5r=;6E&pzu}1<+3VHI>iFy`bGp%ZE_7L);yAa< zFj3k9(^>r;8IccFak|>ZhJTGL*ZJol3-fF4D*QIQMQW-bv%$x`)tUd~HgYMS0;NJM| zl__stwSZ#i{#ad$XJ#*5&XDW<tRP+`9;h0T`*#xF<&pmZ9zT-(Zep0tP_6vNok`uPpXi4&LiIjF1XF{%8< zsmxnwZ4}3n3efmtZWxn?Req*~e(+9{L9Qif2xlLcr-|jVMxX}CsS=%x@A_jv3i!aR zVo#C~lXg}1w>odG{ZN$nOp~hFAv!MQ_(W6SR;^Yfq=?~8bI*SA67ZQNdqTb&WUEi5 z`g~PvvxrNSbnpi1Zmg>s{MBbs%dkK?4d!(qAT%Lc$ihB?vh?#YD}LA?dm+fP9R5X}RR6RR z`HT9b5yg_VtRNdcBj5tGQX6lsGc~c!X!5Lq$dvqBP_lf~z(5mpVLq%dX&?Tty=LXl zdA&UjArWs#e`yu&w!s0`2lA9Psqz`Anlb@8T^5W?npx(o z<+~r3HQU~8=sW_K`xDT+DRy%_Re=Rs|4ME2Zj8`p=i(7fOi95@D?jcdZGW%}SO^s_ zRiTpBT22<#IlvfPkNW;n7{~^+M{H&C0j3OynMwJcKU5(4zrD7gIlg>-;(~`s!QS5K z?7AUf28S4=ameL#ZSfUQm{}jSOXR##9KI(hlAcXN$pkV*&UQi%&K#NAw4Z%yI?e`i zpS_>^!TH_L0|S4d%RIcA>s)6Ws_W<+CD(e9_P%S@9s%$?P?;FV;HjYj!T3wS!`PU& zPZxp$e6tp^U1@!=8{z`QCTrFghgdzwASQE`TQNlELtVuM9FQW z==I;4C6)zj$6OJsdB0g2CIGAP>yc0UYI?6rzaz}(kBA}+v;HDN zTJJas4KDm9TAk*&WXC}YYiE7TLUa<+4swvc#wztEnV=crlg85lYEIEZ+5S-ps z@fw2%A*_pnE^(jCTB+n8VUOGjc zWv)l|dO|2VR1PNYfw1qVY>Da7OZQ553pUlK69|g-N_y6&Y`0I4U;9Jz$hCPjE9B=Ait z0>oBK=KAcMjEKy$Z&f0lDM_qI%}NL$6+PIFfzV8R_>i`89+D^IVKk@7b?uz1L^z2! z#0F%yCUhFanTd?F!6$<`7~imwmc4#Ld^)6KO^XKGJ*xrA}5p?O(tHF$T3(yLnuw= z@_5n*v*F96HCRe`pn!Q}?LW4bfmo3gJS$M7l{AV=MBiTZ{D9+#tma&vay)_#x?YX*3Z?-p(9MG~o zrEONBPOL;K9Bvq%xDt+xOQ<;Et~4%><~7^kU!PmofMEaWC?<|9aZ(;9`=zDNS`I&y*on8VO94_DGhsoE97-rLRsZ%4Sv^ zd9|&1Dn8Uwyl>ocOJ;`ZR%q{6CLEvSscG!p2zzhx->;Echu6bYe%gxZ=33u1;}yGq zeTd5l_PKQvT~}Nf*p_?lh$+RlPTiD%&9Ft=n@U%mU;16^gpitbPGMIf>uabkrZD{e z_t>O7&+4A9Tdlr0UF0Ujx}K*dI-ddFUFS;Rs}0T@iElWGe{S)Bt)7ZJwZjh&qvb1a z0y}c$$CwcJKOv|IsJE7@j;HPKr$_0rzZoS_tO^@M1!8@weEJkJi-D77p{Zp~9@+xW zr9##iB8!1hfks0}H8Pv>Wb>~gRrTf)P4(mwO{_;Hx{yMJwWQHH){jGkN`nGp`{0Pb zgyB3Yw~yBJdoXHkjz3K#rm-#~BpgRdIjoS|8K=!-`@4;U@`-v`ln`2!jkC@h%W@rV z&lxi)8=7US*2zt(&9~;qp3{P=F&fRvTq;AjL?K1X{OWnp^*Az!0y-+Rvw|p-X+fs~ zVpWIWUMqPR%%=M6-w(^wLKyT0fXC746c4v7qjMBF^bso^uO@j^COr|#z9;(7ZQ#ZUg-c&5!7~i zS&$bQmw-Z>f}Bw&cuB~g0*H$xf7)jvPG?N~#NALXP-DWxurGVSoXWCM&<$^}kZrK< zgjxp^#35U(+^u+2gCfShD=H^}LP{VRcCzYn85*$`krp#GA1Us^nYR&vi9S5VZ=rmo z2p_)-Xqbxx0bM<8IPq9hO$CY5Qwzx93nh_dq|Fwk6+p&9-k4nF6y*72=&W4@bi?Nq zwea-PW$&KWy)0U=!r^_u0KATd0gMYMcpl<*4`%Sg1@}$RqdJ;``23v1)ILv4Ige3N zahPRQDRQRWrZQD)5??_91+dwHVx|mE(U+Q{E4`tO_?3_~oleO7UJn>zGmGWQ6I+}| z!yu*e#Th_ePl;|gj%Q?Gli17zagd2{ZISegmhOw&)@^Wft(BhZn&R0~_m|8&sZGb} zQz@>RB&GX8=5|mk5>xZ(&y2!G4wIa+_`MZkCne!Vm`~@vkas+_EKIL z&C+Z{GX#*%q9U}AYW-vx3$cwjNg)1rK)PxixaS7PTne+cpq7ALSC(rhLA=CC4YT(9 z5uRkF-#3VD$zO9z^{R*ChJW*aOJLKp40tC;aLbaJX{!E@Jq~=t+1OIGVd0vpX zbRi2U*a%rPn80>=kPIxRM{lH?vRW>8@nEnb1O8@vx~yJ`_6qTd}GR56ilQA@MubQHquK&M74 zDc(Qmvqv$M#00CFU|cp;i)b90upE zNPBTVJ;`4+Lwu&0@D?n|hfHK31o?E8XlSvzT+f5!SeWJmGc!1dfVd%6QpWv6FN4%~gO_j}H`|1Wg@Q4}GSYxXUa zx-Ko>E}4yma#Cm-TH2d)S02OcD#NY*tZRce36)#>3ERzB!7zlb zZ#kWb^o3E#!JAR8*6cs|Litl8(S;XVzx2;Pn>KQP-g^?LaI>X$rfS-l>)x~jgJ|1! zLo{<;8c%_sjLyvmdL6Kk$jxd`(`|o}!#y+)52$oAqM3t1-B{|aOiC|bNgnrD>#Hr_ zBYaZalmDr%KSs7wyVo}rP-7CMBXmHP4#r5WHUQiQcIkqLbcB3{MzZ1Ss7r|UivCsq zd9WH+!fBq9j?P1i$8U%aFJdf)S*@8n?{Jvs;Q`BAgvN3>G8O%D-IL7>Z(;N z>k6vFLu64lzMv~}u~}7Ivj0qqygE@6$fG`!2}brS*0t(+}Zj&BnRIoU!ddqd-T0$|V#xxz z+=sLE67x8t5jguK#agk89$;DP6^4n?<_N>@X^)|SB&k9y7t_29x*6ulq;ri{MGKb7 ze+RH+Y!I?M%SLa15<{rWH#LPVw6t}ptn#hT8jRAD6k9s`AAK4H>IPjnx|+^$*! z^gSmcS?TGVrC^Vx-7he(unRlBykfC@m;`>*HGZ(z8bOu=vAH&_CXK^a<3GVXBjvV^ z{z$UHqOb88-9-Ny1xS3U!)H*MY##xxedt1Can3E!bEn>Qd+nFT4xwP+{o{KgUEXWO zn-kr(aaMGF{b&@fvU2Sa1e&>KfKjKPNj6u@mQAF(9mi6eF6Y)CQ}nunof_Z4>c2zFPS%Ygjq?5ZY0FnSw;&L z*&{MtyN^=5b3=T*HY4MGN5I>Hc6b(q8@vButi!7w4n!Y~=XUa;`JE2CHe#}xr9os) zLP*|nWK-lzN98EI`dOa zz4kC>#AF-VeUY!d`^DTx9eYN(ZMt*$dybf`#sCFXk5fRSzyt#UarQ|ZJycfLkgMUI zc(YldfI0qBg)JkGJ~K-^0D_8g`p|DSQauA&4V#bXXXjK#pI$v&EI_5Yrc(-e3xjcC zS=`WHUy@~uL0d=nCUf?#C9jDpC+^PqvmXX1 z0VR`Ge8ipin(0t)Ar2>84-ceM*;e%&$B3Z`hwg2sub`Wvt4sPWqKeu3ms$@-_ZpLo zH(MB`dI&F)wpgH$HQ0^&4SX$E5)uPRZxM2hB@XP|^=6i^2wd0N+2qcp*CR>qRv#`A z=1?WFXGhI{=`HM2U$QNl2dJ029AA$8fY~xWyX%yAzvz zV7Yn{hZ9M@{2({QZ_TWw?Xw~JB;#pOr61|8o#&mN@;(`#X9S?teh3-P6U6A+d*ktS zde3iUqaVN9|IN$Ra1I76rXJY&qWze|_f7+N6B0uC4H1w|(@|}Ks@1tZGI2cCn9j1`#%3z;GLbIWV%Q3|F3Z@6NU#L@B z%8u=0Dpe}JoXWCd$#9vf_RMdtXl4M=qVPK#8Dik=N=ko`kX;W*MUI#QH+-CSL1DT7l7!~^nw2oH@j^^#d�IrtfIllM)_D963UEmlCzjBsFx)fw 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 bk8A!v$wO)E=fNMA00000NkvXXu0mjfyU|>T literal 0 HcmV?d00001 From 5c1dff79748681e118bf76b9e053e670f4309d58 Mon Sep 17 00:00:00 2001 From: mikeyd Date: Sat, 6 Feb 2016 17:41:53 -0500 Subject: [PATCH 108/121] Next attempt at install banner/desktop shortcut --- debian/rules | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/debian/rules b/debian/rules index 996d19d4b..95140ce10 100755 --- a/debian/rules +++ b/debian/rules @@ -83,6 +83,9 @@ binary-arch: $(MKDIR) $(DIR)/debian/tmp/$(PKGDIR) $(DIR)/debian/tmp/$(DBGDIR) $(INSTALL) $(BINDIR)/$(EXENAME) $(DIR)/debian/tmp/$(PKGDIR)/$(PACKAGE) $(INSTALL) $(BINDIR)/$(DBGNAME) $(DIR)/debian/tmp/$(DBGDIR)/$(PACKAGE) + # Install desktop file and banner image + $(INSTALL) $(DIR)/srb2.png $(DIR)/debian/tmp/usr/share/pixmaps + $(INSTALL) $(DIR)/debian/srb2.desktop $(DIR)/debian/tmp/usr/share/applications # add compiled binaries to include-binaries echo $(BINDIR)/$(EXENAME) >> $(DIR)/debian/source/include-binaries echo $(BINDIR)/$(EXENAME) >> $(DIR)/debian/source/include-binaries @@ -100,7 +103,6 @@ binary: binary-arch dh_installdocs # dh_installexamples dh_install --sourcedir=$(DIR)/debian/tmp - dh_install --sourcedir=$(DIR)/srb2.png /usr/share/pixmaps/ dh_installmenu # dh_installdebconf # dh_installlogrotate From 7768ec821adba9971caf6242fe483d241f3fa048 Mon Sep 17 00:00:00 2001 From: mikeyd Date: Sat, 6 Feb 2016 18:08:53 -0500 Subject: [PATCH 109/121] add missing dirs --- debian/rules | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/rules b/debian/rules index 95140ce10..30315e4f8 100755 --- a/debian/rules +++ b/debian/rules @@ -59,6 +59,8 @@ DBGNAME = debug/$(EXENAME) PKGDIR = usr/games DBGDIR = usr/lib/debug/$(PKGDIR) +PIXMAPS_DIR = usr/share/pixmaps +DESKTOP_DIR = usr/share/applications PREFIX = $(shell test "$(CROSS_COMPILE_BUILD)" != "$(CROSS_COMPILE_HOST)" && echo "PREFIX=$(CROSS_COMPILE_HOST)") OS = LINUX=1 NONX86 = $(shell test "`echo $(CROSS_COMPILE_HOST) | grep 'i[3-6]86'`" || echo "NONX86=1") @@ -80,7 +82,11 @@ binary-indep: echo "no need to do any arch-independent stuff" binary-arch: + # create ddirs $(MKDIR) $(DIR)/debian/tmp/$(PKGDIR) $(DIR)/debian/tmp/$(DBGDIR) + $(MKDIR) $(DIR)/debian/tmp/$(PKGDIR) $(DIR)/debian/tmp/$(DESKTOP_DIR) + $(MKDIR) $(DIR)/debian/tmp/$(PKGDIR) $(DIR)/debian/tmp/$(PIXMAPS_DIR) + # install main binaries $(INSTALL) $(BINDIR)/$(EXENAME) $(DIR)/debian/tmp/$(PKGDIR)/$(PACKAGE) $(INSTALL) $(BINDIR)/$(DBGNAME) $(DIR)/debian/tmp/$(DBGDIR)/$(PACKAGE) # Install desktop file and banner image From d213791054cfa50ca3adf57b0b8f7d0628e110ed Mon Sep 17 00:00:00 2001 From: mikeyd Date: Sat, 6 Feb 2016 18:13:14 -0500 Subject: [PATCH 110/121] Rename srb2 to srb2.desktop --- debian/{srb2 => srb2.desktop} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename debian/{srb2 => srb2.desktop} (100%) diff --git a/debian/srb2 b/debian/srb2.desktop similarity index 100% rename from debian/srb2 rename to debian/srb2.desktop From 40dff2c123f746eb765f40609af31fd97dc908df Mon Sep 17 00:00:00 2001 From: mikeyd Date: Sat, 6 Feb 2016 22:00:59 -0500 Subject: [PATCH 111/121] missing space for "proper" Debian formatting --- assets/debian/changelog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/debian/changelog b/assets/debian/changelog index f9ba9b5ed..a316b7df7 100644 --- a/assets/debian/changelog +++ b/assets/debian/changelog @@ -9,4 +9,4 @@ srb2-data (2.0.6-2) maverick; urgency=high * Initial proper release.. - -- Callum Dickinson Sat, 29 Jan 2011 01:18:42 +1300 + -- Callum Dickinson Sat, 29 Jan 2011 01:18:42 +1300 From 3ae9892064744ee715e27ee6aa243d020f8df843 Mon Sep 17 00:00:00 2001 From: mikeyd Date: Sat, 6 Feb 2016 22:08:32 -0500 Subject: [PATCH 112/121] missing install section for new desktop/png file --- debian/rules | 2 ++ 1 file changed, 2 insertions(+) diff --git a/debian/rules b/debian/rules index 30315e4f8..97ec70c55 100755 --- a/debian/rules +++ b/debian/rules @@ -97,6 +97,8 @@ binary-arch: echo $(BINDIR)/$(EXENAME) >> $(DIR)/debian/source/include-binaries # Generate install folder files echo $(PKGDIR) > $(DIR)/debian/$(PACKAGE).install + echo $(DESKTOP_DIR) > $(DIR)/debian/$(PACKAGE).install + echo $(PIXMAPS_DIR) > $(DIR)/debian/$(PACKAGE).install echo $(DBGDIR) > $(DIR)/debian/$(DBGPKG).install binary: binary-arch From 1082ae6ba5f811b5bb09d43eeae2a7c99e55e2ee Mon Sep 17 00:00:00 2001 From: mikeyd Date: Sat, 6 Feb 2016 22:17:14 -0500 Subject: [PATCH 113/121] Missing append, --- debian/rules | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/rules b/debian/rules index 97ec70c55..e49784a0f 100755 --- a/debian/rules +++ b/debian/rules @@ -97,8 +97,8 @@ binary-arch: echo $(BINDIR)/$(EXENAME) >> $(DIR)/debian/source/include-binaries # Generate install folder files echo $(PKGDIR) > $(DIR)/debian/$(PACKAGE).install - echo $(DESKTOP_DIR) > $(DIR)/debian/$(PACKAGE).install - echo $(PIXMAPS_DIR) > $(DIR)/debian/$(PACKAGE).install + echo $(DESKTOP_DIR) >> $(DIR)/debian/$(PACKAGE).install + echo $(PIXMAPS_DIR) >> $(DIR)/debian/$(PACKAGE).install echo $(DBGDIR) > $(DIR)/debian/$(DBGPKG).install binary: binary-arch From c8ae630dfe98e921a8590a57af0ef61fdbba5ea0 Mon Sep 17 00:00:00 2001 From: mikeyd Date: Sat, 6 Feb 2016 22:29:01 -0500 Subject: [PATCH 114/121] Fix desktop file --- debian/srb2.desktop | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/debian/srb2.desktop b/debian/srb2.desktop index 26928ee99..661832b93 100644 --- a/debian/srb2.desktop +++ b/debian/srb2.desktop @@ -1,7 +1,10 @@ +[Desktop Entry] Name=Sonic Robo Blast 2 +Comment=A free 3D Sonic the Hedgehog fan-game built using a modified ver. of the Doom Legacy source port +Encoding=UTF-8 Exec=srb2 -Comment=SRB2 Icon=/usr/share/pixmaps/srb2.png Terminal=false Type=Application -Categories=games;application; +StartupNotify=false +Categories=Application;Game; From 865676d34183268330e03aee28ec9a88baf4359e Mon Sep 17 00:00:00 2001 From: mikeyd Date: Sat, 6 Feb 2016 22:46:52 -0500 Subject: [PATCH 115/121] loose the revision, pkgs switched to native format --- debian/control | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/debian/control b/debian/control index ecc4829cf..63b075f17 100644 --- a/debian/control +++ b/debian/control @@ -16,7 +16,7 @@ Homepage: http://www.srb2.org Package: srb2 Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends}, srb2-data (= 2.1.14-1) +Depends: ${shlibs:Depends}, ${misc:Depends}, srb2-data (= 2.1.14) Description: A cross-platform 3D Sonic fangame Sonic Robo Blast 2 is a 3D open-source Sonic the Hedgehog fangame built using a modified version of the Doom Legacy @@ -28,8 +28,8 @@ Description: A cross-platform 3D Sonic fangame Package: srb2-dbg Architecture: any -# FIXME: should be Depends: ${shlibs:Depends}, ${misc:Depends}, srb2-data (= 2.1.14-1), srb2 but dh_shlibdeps is being an asshat -Depends: libc6, ${misc:Depends}, srb2-data (= 2.1.14-1), srb2 +# FIXME: should be Depends: ${shlibs:Depends}, ${misc:Depends}, srb2-data (= 2.1.14), srb2 but dh_shlibdeps is being an asshat +Depends: libc6, ${misc:Depends}, srb2-data (= 2.1.14), srb2 Description: A cross-platform 3D Sonic fangame Sonic Robo Blast 2 is a 3D open-source Sonic the Hedgehog fangame built using a modified version of the Doom Legacy From 6b626f1b27162d6d553a3e8053d56e13bac70f60 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Sun, 7 Feb 2016 20:53:27 -0500 Subject: [PATCH 116/121] build: cmake is messly --- src/sdl/Makefile.cfg | 6 ++++++ src/sdl/i_main.c | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/sdl/Makefile.cfg b/src/sdl/Makefile.cfg index 3b92a9fb8..b54f7057c 100644 --- a/src/sdl/Makefile.cfg +++ b/src/sdl/Makefile.cfg @@ -119,6 +119,12 @@ ifdef SDL_NET SDL_LDFLAGS+=-lSDL2_net endif +ifdef MINGW +ifndef NOSDLMAIN + SDLMAIN=1 +endif +endif + ifdef SDLMAIN OPTS+=-DSDLMAIN else diff --git a/src/sdl/i_main.c b/src/sdl/i_main.c index c157a6be7..74b61339b 100644 --- a/src/sdl/i_main.c +++ b/src/sdl/i_main.c @@ -56,7 +56,7 @@ PSP_MAIN_THREAD_STACK_SIZE_KB(256); #endif #if defined (_WIN32) && !defined (main) -#define SDLMAIN +//#define SDLMAIN #endif #ifdef SDLMAIN From 914c6c9d9807569be1d33e48ec3c3837e3132c3b Mon Sep 17 00:00:00 2001 From: Yukita Mayako Date: Sun, 7 Feb 2016 21:45:16 -0500 Subject: [PATCH 117/121] Whitespace cleanup. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8deeb37e5..59557ef42 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -80,7 +80,7 @@ endif() if(${CMAKE_SYSTEM} MATCHES "Darwin") add_definitions(-DMACOSX) - endif() +endif() set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") set(CMAKE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") From 31deecc51c0c920ee00dc98b5a1ba952622a9a98 Mon Sep 17 00:00:00 2001 From: Sryder13 Date: Sun, 26 Jul 2015 20:14:47 +0100 Subject: [PATCH 118/121] Colour Changing MD2s I don't know how I can move my old branch over so I've just created a new one. --- src/hardware/hw_md2.c | 314 +++++++++++++++++++++++++++++++++++++++++- src/hardware/hw_md2.h | 1 + 2 files changed, 312 insertions(+), 3 deletions(-) diff --git a/src/hardware/hw_md2.c b/src/hardware/hw_md2.c index 77795ccc0..e15af506f 100644 --- a/src/hardware/hw_md2.c +++ b/src/hardware/hw_md2.c @@ -41,6 +41,7 @@ #include "../r_things.h" #include "hw_main.h" +#include "../v_video.h" #ifdef HAVE_PNG #ifndef _MSC_VER @@ -881,6 +882,59 @@ static void md2_loadTexture(md2_t *model) HWR_UnlockCachedPatch(grpatch); } +// -----------------+ +// md2_loadBlendTexture : Download a pcx or png texture for blending MD2 models +// -----------------+ +static void md2_loadBlendTexture(md2_t *model) +{ + GLPatch_t *grpatch; + char *filename = Z_Malloc(strlen(model->filename)+7, PU_STATIC, NULL); + strcpy(filename, model->filename); + + FIL_ForceExtension(filename, "_blend.png"); + + if (model->blendgrpatch) + { + grpatch = model->blendgrpatch; + Z_Free(grpatch->mipmap.grInfo.data); + } + else + grpatch = Z_Calloc(sizeof *grpatch, PU_HWRPATCHINFO, + &(model->blendgrpatch)); + + if (!grpatch->mipmap.downloaded && !grpatch->mipmap.grInfo.data) + { + int w = 0, h = 0; +#ifdef HAVE_PNG + grpatch->mipmap.grInfo.format = PNG_Load(filename, &w, &h, grpatch); + if (grpatch->mipmap.grInfo.format == 0) +#endif + grpatch->mipmap.grInfo.format = PCX_Load(filename, &w, &h, grpatch); + if (grpatch->mipmap.grInfo.format == 0) + { + Z_Free(filename); + return; + } + + grpatch->mipmap.downloaded = 0; + grpatch->mipmap.flags = 0; + + grpatch->width = (INT16)w; + grpatch->height = (INT16)h; + grpatch->mipmap.width = (UINT16)w; + grpatch->mipmap.height = (UINT16)h; + + // not correct! + grpatch->mipmap.grInfo.smallLodLog2 = GR_LOD_LOG2_256; + grpatch->mipmap.grInfo.largeLodLog2 = GR_LOD_LOG2_256; + grpatch->mipmap.grInfo.aspectRatioLog2 = GR_ASPECT_LOG2_1x1; + } + HWD.pfnSetTexture(&grpatch->mipmap); // We do need to do this so that it can be cleared and knows to recreate it when necessary + HWR_UnlockCachedPatch(grpatch); + + Z_Free(filename); +} + // Don't spam the console, or the OS with fopen requests! static boolean nomd2s = false; @@ -1050,6 +1104,248 @@ spritemd2found: fclose(f); } +static void HWR_CreateBlendedTexture(GLPatch_t *gpatch, GLPatch_t *blendgpatch, GLMipmap_t *grmip, skincolors_t color) +{ + UINT16 w = gpatch->width, h = gpatch->height; + UINT32 size = w*h; + RGBA_t *image, *blendimage, *cur, blendcolor; + + if (grmip->width == 0) + { + + grmip->width = gpatch->width; + grmip->height = gpatch->height; + + // no wrap around, no chroma key + grmip->flags = 0; + // setup the texture info + grmip->grInfo.format = GR_RGBA; + } + + Z_Free(grmip->grInfo.data); + grmip->grInfo.data = NULL; + + cur = Z_Malloc(size*4, PU_HWRCACHE, &grmip->grInfo.data); + memset(cur, 0x00, size*4); + + image = gpatch->mipmap.grInfo.data; + blendimage = blendgpatch->mipmap.grInfo.data; + + switch (color) + { + case SKINCOLOR_WHITE: + blendcolor = V_GetColor(3); + break; + case SKINCOLOR_SILVER: + blendcolor = V_GetColor(11); + break; + case SKINCOLOR_GREY: + blendcolor = V_GetColor(23); + break; + case SKINCOLOR_BLACK: + blendcolor = V_GetColor(27); + break; + case SKINCOLOR_CYAN: + blendcolor = V_GetColor(216); + break; + case SKINCOLOR_TEAL: + blendcolor = V_GetColor(220); + break; + case SKINCOLOR_STEELBLUE: + blendcolor = V_GetColor(204); + break; + case SKINCOLOR_BLUE: + blendcolor = V_GetColor(234); + break; + case SKINCOLOR_PEACH: + blendcolor = V_GetColor(73); + break; + case SKINCOLOR_TAN: + blendcolor = V_GetColor(49); + break; + case SKINCOLOR_PINK: + blendcolor = V_GetColor(146); + break; + case SKINCOLOR_LAVENDER: + blendcolor = V_GetColor(252); + break; + case SKINCOLOR_PURPLE: + blendcolor = V_GetColor(195); + break; + case SKINCOLOR_ORANGE: + blendcolor = V_GetColor(87); + break; + case SKINCOLOR_ROSEWOOD: + blendcolor = V_GetColor(94); + break; + case SKINCOLOR_BEIGE: + blendcolor = V_GetColor(40); + break; + case SKINCOLOR_BROWN: + blendcolor = V_GetColor(57); + break; + case SKINCOLOR_RED: + blendcolor = V_GetColor(130); + break; + case SKINCOLOR_DARKRED: + blendcolor = V_GetColor(139); + break; + case SKINCOLOR_NEONGREEN: + blendcolor = V_GetColor(184); + break; + case SKINCOLOR_GREEN: + blendcolor = V_GetColor(170); + break; + case SKINCOLOR_ZIM: + blendcolor = V_GetColor(180); + break; + case SKINCOLOR_OLIVE: + blendcolor = V_GetColor(108); + break; + case SKINCOLOR_YELLOW: + blendcolor = V_GetColor(104); + break; + case SKINCOLOR_GOLD: + blendcolor = V_GetColor(115); + break; + + case SKINCOLOR_SUPER1: + blendcolor = V_GetColor(101); + break; + case SKINCOLOR_SUPER2: + blendcolor = V_GetColor(113); + break; + case SKINCOLOR_SUPER3: + blendcolor = V_GetColor(114); + break; + case SKINCOLOR_SUPER4: + blendcolor = V_GetColor(116); + break; + case SKINCOLOR_SUPER5: + blendcolor = V_GetColor(119); + break; + + case SKINCOLOR_TSUPER1: + blendcolor = V_GetColor(80); + break; + case SKINCOLOR_TSUPER2: + blendcolor = V_GetColor(82); + break; + case SKINCOLOR_TSUPER3: + blendcolor = V_GetColor(84); + break; + case SKINCOLOR_TSUPER4: + blendcolor = V_GetColor(85); + break; + case SKINCOLOR_TSUPER5: + blendcolor = V_GetColor(87); + break; + + case SKINCOLOR_KSUPER1: + blendcolor = V_GetColor(122); + break; + case SKINCOLOR_KSUPER2: + blendcolor = V_GetColor(123); + break; + case SKINCOLOR_KSUPER3: + blendcolor = V_GetColor(124); + break; + case SKINCOLOR_KSUPER4: + blendcolor = V_GetColor(125); + break; + case SKINCOLOR_KSUPER5: + blendcolor = V_GetColor(126); + break; + default: + blendcolor = V_GetColor(247); + break; + } + + while (size--) + { + if (blendimage->s.alpha == 0) + { + // Don't bother with blending the pixel if the alpha of the blend pixel is 0 + cur->rgba = image->rgba; + } + else + { + INT32 tempcolor; + INT16 tempmult, tempalpha; + tempalpha = -(abs(blendimage->s.red-127)-127)*2; + if (tempalpha > 255) + tempalpha = 255; + else if (tempalpha < 0) + tempalpha = 0; + + tempmult = (blendimage->s.red-127)*2; + if (tempmult > 255) + tempmult = 255; + else if (tempmult < 0) + tempmult = 0; + + tempcolor = (image->s.red*(255-blendimage->s.alpha))/255 + ((tempmult + ((tempalpha*blendcolor.s.red)/255)) * blendimage->s.alpha)/255; + cur->s.red = (UINT8)tempcolor; + tempcolor = (image->s.green*(255-blendimage->s.alpha))/255 + ((tempmult + ((tempalpha*blendcolor.s.green)/255)) * blendimage->s.alpha)/255; + cur->s.green = (UINT8)tempcolor; + tempcolor = (image->s.blue*(255-blendimage->s.alpha))/255 + ((tempmult + ((tempalpha*blendcolor.s.blue)/255)) * blendimage->s.alpha)/255; + cur->s.blue = (UINT8)tempcolor; + cur->s.alpha = image->s.alpha; + } + + cur++; image++; blendimage++; + } + + return; +} + +static void HWR_GetBlendedTexture(GLPatch_t *gpatch, GLPatch_t *blendgpatch, const UINT8 *colormap, skincolors_t color) +{ + // mostly copied from HWR_GetMappedPatch, hence the similarities and comment + GLMipmap_t *grmip, *newmip; + + if (colormap == colormaps || colormap == NULL) + { + // Don't do any blending + HWD.pfnSetTexture(&gpatch->mipmap); + return; + } + + // search for the mimmap + // skip the first (no colormap translated) + for (grmip = &gpatch->mipmap; grmip->nextcolormap; ) + { + grmip = grmip->nextcolormap; + if (grmip->colormap == colormap) + { + if (grmip->downloaded && grmip->grInfo.data) + { + HWD.pfnSetTexture(grmip); // found the colormap, set it to the correct texture + Z_ChangeTag(grmip->grInfo.data, PU_HWRCACHE_UNLOCKED); + return; + } + } + } + + // If here, the blended texture has not been created + // So we create it + + //BP: WARNING: don't free it manually without clearing the cache of harware renderer + // (it have a liste of mipmap) + // this malloc is cleared in HWR_FreeTextureCache + // (...) unfortunately z_malloc fragment alot the memory :(so malloc is better + newmip = calloc(1, sizeof (*newmip)); + if (newmip == NULL) + I_Error("%s: Out of memory", "HWR_GetMappedPatch"); + grmip->nextcolormap = newmip; + newmip->colormap = colormap; + + HWR_CreateBlendedTexture(gpatch, blendgpatch, newmip, color); + + HWD.pfnSetTexture(newmip); + Z_ChangeTag(newmip->grInfo.data, PU_HWRCACHE_UNLOCKED); +} + // -----------------+ // HWR_DrawMD2 : Draw MD2 @@ -1180,13 +1476,25 @@ void HWR_DrawMD2(gr_vissprite_t *spr) gpatch = md2->grpatch; if (!gpatch || !gpatch->mipmap.grInfo.format || !gpatch->mipmap.downloaded) md2_loadTexture(md2); - gpatch = md2->grpatch; // Load it again, because it isn't being loaded into gpatch after md2_loadtexture... + if ((gpatch && gpatch->mipmap.grInfo.format) // don't load the blend texture if the base texture isn't available + && (!md2->blendgrpatch || !((GLPatch_t *)md2->blendgrpatch)->mipmap.grInfo.format || !((GLPatch_t *)md2->blendgrpatch)->mipmap.downloaded)) + md2_loadBlendTexture(md2); + if (gpatch && gpatch->mipmap.grInfo.format) // else if meant that if a texture couldn't be loaded, it would just end up using something else's texture { - // This is safe, since we know the texture has been downloaded - HWD.pfnSetTexture(&gpatch->mipmap); + if ((skincolors_t)spr->mobj->color != SKINCOLOR_NONE && + md2->blendgrpatch && ((GLPatch_t *)md2->blendgrpatch)->mipmap.grInfo.format + && gpatch->width == ((GLPatch_t *)md2->blendgrpatch)->width && gpatch->height == ((GLPatch_t *)md2->blendgrpatch)->height) + { + HWR_GetBlendedTexture(gpatch, (GLPatch_t *)md2->blendgrpatch, spr->colormap, (skincolors_t)spr->mobj->color); + } + else + { + // This is safe, since we know the texture has been downloaded + HWD.pfnSetTexture(&gpatch->mipmap); + } } else { diff --git a/src/hardware/hw_md2.h b/src/hardware/hw_md2.h index 0fb486ea0..36078268b 100644 --- a/src/hardware/hw_md2.h +++ b/src/hardware/hw_md2.h @@ -120,6 +120,7 @@ typedef struct float offset; md2_model_t *model; void *grpatch; + void *blendgrpatch; boolean notfound; INT32 skin; } md2_t; From 6b8c438e583ac5d895e0b4004dec4abca1d0ab40 Mon Sep 17 00:00:00 2001 From: Sryder13 Date: Mon, 3 Aug 2015 02:01:56 +0100 Subject: [PATCH 119/121] Change a few colours. --- src/hardware/hw_md2.c | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/hardware/hw_md2.c b/src/hardware/hw_md2.c index e15af506f..c336e7bb3 100644 --- a/src/hardware/hw_md2.c +++ b/src/hardware/hw_md2.c @@ -1137,37 +1137,37 @@ static void HWR_CreateBlendedTexture(GLPatch_t *gpatch, GLPatch_t *blendgpatch, blendcolor = V_GetColor(3); break; case SKINCOLOR_SILVER: - blendcolor = V_GetColor(11); + blendcolor = V_GetColor(10); break; case SKINCOLOR_GREY: - blendcolor = V_GetColor(23); + blendcolor = V_GetColor(15); break; case SKINCOLOR_BLACK: blendcolor = V_GetColor(27); break; case SKINCOLOR_CYAN: - blendcolor = V_GetColor(216); + blendcolor = V_GetColor(215); break; case SKINCOLOR_TEAL: - blendcolor = V_GetColor(220); + blendcolor = V_GetColor(221); break; case SKINCOLOR_STEELBLUE: - blendcolor = V_GetColor(204); + blendcolor = V_GetColor(203); break; case SKINCOLOR_BLUE: - blendcolor = V_GetColor(234); + blendcolor = V_GetColor(232); break; case SKINCOLOR_PEACH: - blendcolor = V_GetColor(73); + blendcolor = V_GetColor(71); break; case SKINCOLOR_TAN: - blendcolor = V_GetColor(49); + blendcolor = V_GetColor(79); break; case SKINCOLOR_PINK: - blendcolor = V_GetColor(146); + blendcolor = V_GetColor(147); break; case SKINCOLOR_LAVENDER: - blendcolor = V_GetColor(252); + blendcolor = V_GetColor(251); break; case SKINCOLOR_PURPLE: blendcolor = V_GetColor(195); @@ -1194,7 +1194,7 @@ static void HWR_CreateBlendedTexture(GLPatch_t *gpatch, GLPatch_t *blendgpatch, blendcolor = V_GetColor(184); break; case SKINCOLOR_GREEN: - blendcolor = V_GetColor(170); + blendcolor = V_GetColor(166); break; case SKINCOLOR_ZIM: blendcolor = V_GetColor(180); @@ -1210,23 +1210,23 @@ static void HWR_CreateBlendedTexture(GLPatch_t *gpatch, GLPatch_t *blendgpatch, break; case SKINCOLOR_SUPER1: - blendcolor = V_GetColor(101); + blendcolor = V_GetColor(97); break; case SKINCOLOR_SUPER2: - blendcolor = V_GetColor(113); + blendcolor = V_GetColor(100); break; case SKINCOLOR_SUPER3: - blendcolor = V_GetColor(114); + blendcolor = V_GetColor(103); break; case SKINCOLOR_SUPER4: - blendcolor = V_GetColor(116); + blendcolor = V_GetColor(113); break; case SKINCOLOR_SUPER5: - blendcolor = V_GetColor(119); + blendcolor = V_GetColor(116); break; case SKINCOLOR_TSUPER1: - blendcolor = V_GetColor(80); + blendcolor = V_GetColor(81); break; case SKINCOLOR_TSUPER2: blendcolor = V_GetColor(82); From ddb5652ab63c7d8720e1544af364b3252e0c1a9f Mon Sep 17 00:00:00 2001 From: Sean Ryder Date: Wed, 20 Jan 2016 15:55:32 +0000 Subject: [PATCH 120/121] Tabbing --- src/hardware/hw_md2.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hardware/hw_md2.c b/src/hardware/hw_md2.c index c336e7bb3..6a315d881 100644 --- a/src/hardware/hw_md2.c +++ b/src/hardware/hw_md2.c @@ -1107,8 +1107,8 @@ spritemd2found: static void HWR_CreateBlendedTexture(GLPatch_t *gpatch, GLPatch_t *blendgpatch, GLMipmap_t *grmip, skincolors_t color) { UINT16 w = gpatch->width, h = gpatch->height; - UINT32 size = w*h; - RGBA_t *image, *blendimage, *cur, blendcolor; + UINT32 size = w*h; + RGBA_t *image, *blendimage, *cur, blendcolor; if (grmip->width == 0) { From 5d1c8d29685831ac9693f9654a4f135715c1c7fe Mon Sep 17 00:00:00 2001 From: Monster Iestyn Date: Tue, 9 Feb 2016 19:35:04 +0000 Subject: [PATCH 121/121] My cherry picking somehow lead to these functions being doubled ...whoops --- src/hardware/hw_md2.c | 242 ------------------------------------------ 1 file changed, 242 deletions(-) diff --git a/src/hardware/hw_md2.c b/src/hardware/hw_md2.c index b71cfb661..6a315d881 100644 --- a/src/hardware/hw_md2.c +++ b/src/hardware/hw_md2.c @@ -1346,248 +1346,6 @@ static void HWR_GetBlendedTexture(GLPatch_t *gpatch, GLPatch_t *blendgpatch, con Z_ChangeTag(newmip->grInfo.data, PU_HWRCACHE_UNLOCKED); } -static void HWR_CreateBlendedTexture(GLPatch_t *gpatch, GLPatch_t *blendgpatch, GLMipmap_t *grmip, skincolors_t color) -{ - UINT16 w = gpatch->width, h = gpatch->height; - UINT32 size = w*h; - RGBA_t *image, *blendimage, *cur, blendcolor; - - if (grmip->width == 0) - { - - grmip->width = gpatch->width; - grmip->height = gpatch->height; - - // no wrap around, no chroma key - grmip->flags = 0; - // setup the texture info - grmip->grInfo.format = GR_RGBA; - } - - Z_Free(grmip->grInfo.data); - grmip->grInfo.data = NULL; - - cur = Z_Malloc(size*4, PU_HWRCACHE, &grmip->grInfo.data); - memset(cur, 0x00, size*4); - - image = gpatch->mipmap.grInfo.data; - blendimage = blendgpatch->mipmap.grInfo.data; - - switch (color) - { - case SKINCOLOR_WHITE: - blendcolor = V_GetColor(3); - break; - case SKINCOLOR_SILVER: - blendcolor = V_GetColor(10); - break; - case SKINCOLOR_GREY: - blendcolor = V_GetColor(15); - break; - case SKINCOLOR_BLACK: - blendcolor = V_GetColor(27); - break; - case SKINCOLOR_CYAN: - blendcolor = V_GetColor(215); - break; - case SKINCOLOR_TEAL: - blendcolor = V_GetColor(221); - break; - case SKINCOLOR_STEELBLUE: - blendcolor = V_GetColor(203); - break; - case SKINCOLOR_BLUE: - blendcolor = V_GetColor(232); - break; - case SKINCOLOR_PEACH: - blendcolor = V_GetColor(71); - break; - case SKINCOLOR_TAN: - blendcolor = V_GetColor(79); - break; - case SKINCOLOR_PINK: - blendcolor = V_GetColor(147); - break; - case SKINCOLOR_LAVENDER: - blendcolor = V_GetColor(251); - break; - case SKINCOLOR_PURPLE: - blendcolor = V_GetColor(195); - break; - case SKINCOLOR_ORANGE: - blendcolor = V_GetColor(87); - break; - case SKINCOLOR_ROSEWOOD: - blendcolor = V_GetColor(94); - break; - case SKINCOLOR_BEIGE: - blendcolor = V_GetColor(40); - break; - case SKINCOLOR_BROWN: - blendcolor = V_GetColor(57); - break; - case SKINCOLOR_RED: - blendcolor = V_GetColor(130); - break; - case SKINCOLOR_DARKRED: - blendcolor = V_GetColor(139); - break; - case SKINCOLOR_NEONGREEN: - blendcolor = V_GetColor(184); - break; - case SKINCOLOR_GREEN: - blendcolor = V_GetColor(166); - break; - case SKINCOLOR_ZIM: - blendcolor = V_GetColor(180); - break; - case SKINCOLOR_OLIVE: - blendcolor = V_GetColor(108); - break; - case SKINCOLOR_YELLOW: - blendcolor = V_GetColor(104); - break; - case SKINCOLOR_GOLD: - blendcolor = V_GetColor(115); - break; - - case SKINCOLOR_SUPER1: - blendcolor = V_GetColor(97); - break; - case SKINCOLOR_SUPER2: - blendcolor = V_GetColor(100); - break; - case SKINCOLOR_SUPER3: - blendcolor = V_GetColor(103); - break; - case SKINCOLOR_SUPER4: - blendcolor = V_GetColor(113); - break; - case SKINCOLOR_SUPER5: - blendcolor = V_GetColor(116); - break; - - case SKINCOLOR_TSUPER1: - blendcolor = V_GetColor(81); - break; - case SKINCOLOR_TSUPER2: - blendcolor = V_GetColor(82); - break; - case SKINCOLOR_TSUPER3: - blendcolor = V_GetColor(84); - break; - case SKINCOLOR_TSUPER4: - blendcolor = V_GetColor(85); - break; - case SKINCOLOR_TSUPER5: - blendcolor = V_GetColor(87); - break; - - case SKINCOLOR_KSUPER1: - blendcolor = V_GetColor(122); - break; - case SKINCOLOR_KSUPER2: - blendcolor = V_GetColor(123); - break; - case SKINCOLOR_KSUPER3: - blendcolor = V_GetColor(124); - break; - case SKINCOLOR_KSUPER4: - blendcolor = V_GetColor(125); - break; - case SKINCOLOR_KSUPER5: - blendcolor = V_GetColor(126); - break; - default: - blendcolor = V_GetColor(247); - break; - } - - while (size--) - { - if (blendimage->s.alpha == 0) - { - // Don't bother with blending the pixel if the alpha of the blend pixel is 0 - cur->rgba = image->rgba; - } - else - { - INT32 tempcolor; - INT16 tempmult, tempalpha; - tempalpha = -(abs(blendimage->s.red-127)-127)*2; - if (tempalpha > 255) - tempalpha = 255; - else if (tempalpha < 0) - tempalpha = 0; - - tempmult = (blendimage->s.red-127)*2; - if (tempmult > 255) - tempmult = 255; - else if (tempmult < 0) - tempmult = 0; - - tempcolor = (image->s.red*(255-blendimage->s.alpha))/255 + ((tempmult + ((tempalpha*blendcolor.s.red)/255)) * blendimage->s.alpha)/255; - cur->s.red = (UINT8)tempcolor; - tempcolor = (image->s.green*(255-blendimage->s.alpha))/255 + ((tempmult + ((tempalpha*blendcolor.s.green)/255)) * blendimage->s.alpha)/255; - cur->s.green = (UINT8)tempcolor; - tempcolor = (image->s.blue*(255-blendimage->s.alpha))/255 + ((tempmult + ((tempalpha*blendcolor.s.blue)/255)) * blendimage->s.alpha)/255; - cur->s.blue = (UINT8)tempcolor; - cur->s.alpha = image->s.alpha; - } - - cur++; image++; blendimage++; - } - - return; -} - -static void HWR_GetBlendedTexture(GLPatch_t *gpatch, GLPatch_t *blendgpatch, const UINT8 *colormap, skincolors_t color) -{ - // mostly copied from HWR_GetMappedPatch, hence the similarities and comment - GLMipmap_t *grmip, *newmip; - - if (colormap == colormaps || colormap == NULL) - { - // Don't do any blending - HWD.pfnSetTexture(&gpatch->mipmap); - return; - } - - // search for the mimmap - // skip the first (no colormap translated) - for (grmip = &gpatch->mipmap; grmip->nextcolormap; ) - { - grmip = grmip->nextcolormap; - if (grmip->colormap == colormap) - { - if (grmip->downloaded && grmip->grInfo.data) - { - HWD.pfnSetTexture(grmip); // found the colormap, set it to the correct texture - Z_ChangeTag(grmip->grInfo.data, PU_HWRCACHE_UNLOCKED); - return; - } - } - } - - // If here, the blended texture has not been created - // So we create it - - //BP: WARNING: don't free it manually without clearing the cache of harware renderer - // (it have a liste of mipmap) - // this malloc is cleared in HWR_FreeTextureCache - // (...) unfortunately z_malloc fragment alot the memory :(so malloc is better - newmip = calloc(1, sizeof (*newmip)); - if (newmip == NULL) - I_Error("%s: Out of memory", "HWR_GetMappedPatch"); - grmip->nextcolormap = newmip; - newmip->colormap = colormap; - - HWR_CreateBlendedTexture(gpatch, blendgpatch, newmip, color); - - HWD.pfnSetTexture(newmip); - Z_ChangeTag(newmip->grInfo.data, PU_HWRCACHE_UNLOCKED); -} - // -----------------+ // HWR_DrawMD2 : Draw MD2