From 1c99cd647e242ec030b4a4ebf13a4756799320b0 Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Sat, 27 May 2017 21:40:40 +0200 Subject: [PATCH] commited changes from 9.4i and some extra --- cell.cpp | 5 +- conformal.cpp | 38 +- dialogs.cpp | 38 +- fake-mobile.cpp | 4 - game.cpp | 53 +- graph.cpp | 552 +++++++-- hyper.cpp | 60 +- hyper.h | 124 +- hyperweb.cpp | 146 +-- init.cpp | 133 +- landgen.cpp | 21 +- language-pl.cpp | 2 + mapeditor.cpp | 291 ++++- menus.cpp | 149 ++- netgen.cpp | 2 +- nofont.cpp | 275 +++++ polygons.cpp | 73 +- rogueviz.cpp | 3113 +++++++++++++++++++++++++---------------------- rug.cpp | 2 +- shmup.cpp | 65 +- system.cpp | 16 +- tour.cpp | 1443 +++++++++++----------- yendor.cpp | 4 +- 23 files changed, 3899 insertions(+), 2710 deletions(-) create mode 100644 nofont.cpp diff --git a/cell.cpp b/cell.cpp index c71864e0..334e554d 100644 --- a/cell.cpp +++ b/cell.cpp @@ -60,8 +60,6 @@ void merge(cell *c, int d, cell *c2, int d2, bool mirrored = false) { typedef unsigned short eucoord; -#include - struct cdata { int val[4]; int bits; @@ -653,7 +651,6 @@ void clearHexes(heptagon *at) { } } -#include void clearfrom(heptagon *at) { queue q; q.push(at); @@ -767,6 +764,7 @@ int celldist(cell *c) { decodeMaster(c->master, x, y); return eudist(x, y); } + if(sphere) return celldistance(c, currentmap->gamestart()); if(c->type == 7) return c->master->distance; int dx[3]; for(int u=0; u<3; u++) @@ -1100,7 +1098,6 @@ bool randpatternMajority(cell *c, int ival, int iterations) { return memo; } -#include map spins; #define RVAL_MASK 0x10000000 diff --git a/conformal.cpp b/conformal.cpp index 6ca11103..ca12aec9 100644 --- a/conformal.cpp +++ b/conformal.cpp @@ -95,7 +95,7 @@ namespace polygonal { } -#ifndef MOBILE +#ifndef NOSDL namespace spiral { typedef long double ld; @@ -230,7 +230,7 @@ namespace conformal { int lastprogress; void progress(string str) { -#ifndef MOBILE +#ifndef NOSDL int tick = SDL_GetTicks(); if(tick > lastprogress + 250) { lastprogress = tick; @@ -330,18 +330,11 @@ namespace conformal { phase = 0; } - void apply() { - int t = ticks; - phase += (t-llv) * lvspeed / 400.; - llv = t; - - int siz = size(v); - - while(phase < 1) phase += siz - 2; - while(phase >= siz-1) phase -= siz - 2; + void movetophase() { int ph = int(phase); - if(ph<1 || ph >= siz-1) return; + int siz = size(v); + if(ph<0 || ph >= siz-1) return; viewctr.h = v[ph]->base->master; viewctr.spin = 0; @@ -359,6 +352,19 @@ namespace conformal { playermoved = false; } + void apply() { + int t = ticks; + phase += (t-llv) * lvspeed / 400.; + llv = t; + + int siz = size(v); + + while(phase < 1) phase += siz - 2; + while(phase >= siz-1) phase -= siz - 2; + + movetophase(); + } + int measureLength() { int rad = vid.radius; vid.radius = bandhalf; @@ -384,7 +390,7 @@ namespace conformal { void restore(); void restoreBack(); -#ifndef MOBILE +#ifndef NOSDL void createImage(bool dospiral) { int segid = 1; inHighQual = true; @@ -548,7 +554,7 @@ namespace conformal { dialog::addBoolItem(XLAT("prepare the line animation"), (on), 'e'); if(on) dialog::addSelItem(XLAT("animation speed"), fts(lvspeed), 'a'); -#ifndef MOBILE +#ifndef NOSDL dialog::addBoolItem(XLAT("render bands automatically"), (autoband), 'o'); if(autoband) dialog::addBoolItem(XLAT("include history when auto-rendering"), (autobandhistory), 'j'); @@ -645,7 +651,7 @@ namespace conformal { else if(sym == 's') dialog::editNumber(bandsegment, 500, 32000, 500, 16000, XLAT("band segment"), ""); else if(sym == 'g') { dospiral = !dospiral; } -#ifndef MOBILE +#ifndef NOSDL else if(uni == 'f' && pmodel == mdBand && on) createImage(dospiral); #endif else if(sym == 'q' || sym == SDLK_ESCAPE || sym == '0') { cmode = emNormal; } @@ -699,7 +705,7 @@ namespace conformal { } void renderAutoband() { -#ifndef MOBILE +#ifndef NOSDL if(celldist(cwt.c) <= 7) return; if(!autoband) return; eModel spm = pmodel; diff --git a/dialogs.cpp b/dialogs.cpp index 82ffd739..e7ab10ef 100644 --- a/dialogs.cpp +++ b/dialogs.cpp @@ -19,7 +19,7 @@ namespace dialog { }; #ifdef MENU_SCALING -#ifndef MOBILE +#ifndef NOSDL void handleZooming(SDL_Event &ev) { using namespace zoom; if(zoomoff || (cmode != emOverview && cmode != emTactic)) { @@ -109,6 +109,7 @@ namespace dialog { it.color = it.colorv = value >> 8; it.colors = it.color ^ 0x404040; it.colorc = it.color ^ 0x808080; + it.colork = 0x808080; it.scale = 100; items.push_back(it); } @@ -382,6 +383,8 @@ namespace dialog { unsigned int *palette; + int colorp = 0; + void drawColorDialog(int color) { int ash = 8; @@ -410,11 +413,13 @@ namespace dialog { for(int i=0; i<4; i++) { int y = vid.yres / 2 + (2-i) * vid.fsize * 2; + + int col = ((i==colorp) && !mousing) ? 0xFFD500 : 0xFFFFFF; - displayColorButton(vid.xres / 4, y, "(", 0, 16, 0, 0xFFFFFF); + displayColorButton(vid.xres / 4, y, "(", 0, 16, 0, col); string rgt = ") "; rgt += "ABGR" [i]; - displayColorButton(vid.xres * 3/4, y, rgt, 0, 0, 0, 0xFFFFFF); - displayColorButton(vid.xres /4 + vid.xres * ((color >> (8*i)) & 0xFF) / 510, y, "#", 0, 8, 0, 0xFFFFFF); + displayColorButton(vid.xres * 3/4, y, rgt, 0, 0, 0, col); + displayColorButton(vid.xres /4 + vid.xres * ((color >> (8*i)) & 0xFF) / 510, y, "#", 0, 8, 0, col); if(mousey >= y - vid.fsize && mousey < y + vid.fsize) getcstat = 'A' + i, inslider = true; @@ -446,6 +451,20 @@ namespace dialog { else if(palette && uni >= 'a' && uni < 'a'+(int) palette[0]) { color = palette[1 + uni - 'a']; } + else if(sym == SDLK_DOWN || sym == SDLK_KP2) { + colorp = (colorp-1) & 3; + } + else if(sym == SDLK_UP || sym == SDLK_KP8) { + colorp = (colorp+1) & 3; + } + else if(sym == SDLK_LEFT || sym == SDLK_KP4) { + unsigned char* pts = (unsigned char*) &color; + pts[colorp] -= abs(shiftmul) < .6 ? 1 : 17; + } + else if(sym == SDLK_RIGHT || sym == SDLK_KP6) { + unsigned char* pts = (unsigned char*) &color; + pts[colorp] += abs(shiftmul) < .6 ? 1 : 17; + } else if(uni || sym == SDLK_F10) return 2; return 0; } @@ -564,6 +583,8 @@ namespace dialog { *ne.editwhat = fontscale = 50, affect('v'); #endif + // if(ne.editwhat == &whatever) resetGeometry(); + if(ne.intval == &sightrange && sightrange < 4) *ne.editwhat = sightrange = 4, affect('v'); @@ -677,7 +698,12 @@ namespace dialog { affect('v'); } else if(uni == 500) { - ld d = (mousex - vid.xres/4 + .0) / (vid.xres/2); + int sl, sr; + if(sidescreen) + sl = vid.yres + vid.fsize*2, sr = vid.xres - vid.fsize*2; + else + sl = vid.xres/4, sr = vid.xres*3/4; + ld d = (mousex - sl + .0) / (sr-sl); *ne.editwhat = ne.inverse_scale(d * (ne.scale(ne.vmax) - ne.scale(ne.vmin)) + ne.scale(ne.vmin)); affect('v'); @@ -696,7 +722,7 @@ namespace dialog { vid.scale *= d; ne.s = fts(vid.alpha); } - else if(uni) { + else if(doexiton(sym, uni)) { cmode = lastmode; } } diff --git a/fake-mobile.cpp b/fake-mobile.cpp index dda5e65e..e0b9a9e3 100644 --- a/fake-mobile.cpp +++ b/fake-mobile.cpp @@ -21,10 +21,6 @@ const char *conffile = "fakemobile_config.txt"; #undef main -void playSound(cell *, const string &s, int vol) { - printf("play sound: %s vol %d\n", s.c_str(), vol); - } - SDL_Surface *s; int gdpos = 0; diff --git a/game.cpp b/game.cpp index 1649eb8c..61718ed8 100644 --- a/game.cpp +++ b/game.cpp @@ -6013,6 +6013,32 @@ void roundTableMessage(cell *c2) { } } +long long circlesize[100], disksize[100]; + +void computeSizes() { + circlesize[0] = 1; + + if(!purehepta) { + circlesize[1] = 1*7; + circlesize[2] = 2*7; + circlesize[3] = 4*7; + circlesize[4] = 7*7; + for(int i=5; i<100; i++) + circlesize[i] = circlesize[i-1] + circlesize[i-2] + circlesize[i-3] - circlesize[i-4]; + } + else { + // actually these are each second Fibonacci number + circlesize[1] = 1*7; + circlesize[2] = 3*7; + for(int i=3; i<100; i++) + circlesize[i] = 3*circlesize[i-1] - circlesize[i-2]; + } + + disksize[0] = 0; + for(int i=1; i<100; i++) + disksize[i] = disksize[i-1] + circlesize[i-1]; + } + void knightFlavorMessage(cell *c2) { if(!euclid && !c2->master->alt) { @@ -6025,28 +6051,7 @@ void knightFlavorMessage(cell *c2) { return; } - long long tab[100], sum[100]; - tab[0] = 1; - - if(!purehepta) { - tab[1] = 1*7; - tab[2] = 2*7; - tab[3] = 4*7; - tab[4] = 7*7; - for(int i=5; i<100; i++) - tab[i] = tab[i-1] + tab[i-2] + tab[i-3] - tab[i-4]; - } - else { - // actually these are each second Fibonacci number - tab[1] = 1*7; - tab[2] = 3*7; - for(int i=3; i<100; i++) - tab[i] = 3*tab[i-1] - tab[i-2]; - } - - sum[0] = 0; - for(int i=1; i<100; i++) - sum[i] = sum[i-1] + tab[i-1]; + computeSizes(); bool grailfound = grailWasFound(c2); int rad = roundTableRadius(c2); @@ -6083,12 +6088,12 @@ void knightFlavorMessage(cell *c2) { } else if(msgid == 8) { if(rad <= 76) - addMessage(XLAT("\"Our Table seats %1 Knights!\"", llts(tab[rad]))); + addMessage(XLAT("\"Our Table seats %1 Knights!\"", llts(circlesize[rad]))); else addMessage(XLAT("\"By now, you should have your own formula, you know?\"")); } else if(msgid == 9 && rad <= 76) { - addMessage(XLAT("\"There are %1 floor tiles inside our Table!\"", llts(sum[rad]))); + addMessage(XLAT("\"There are %1 floor tiles inside our Table!\"", llts(disksize[rad]))); } else if(msgid == 10 && !items[itPirate] && !items[itWhirlpool]) { addMessage(XLAT("\"Have you tried to take a boat and go into the Ocean? Try it!\"")); diff --git a/graph.cpp b/graph.cpp index bb33773b..4ef1ff0c 100644 --- a/graph.cpp +++ b/graph.cpp @@ -30,34 +30,22 @@ int detaillevel = 0; // #define PANDORA -#ifndef MOBILE -#include - -#ifdef SDLAUDIO -#include -#endif - -#ifndef MAC -#undef main -#endif - -#include -#endif - int colorbar; #define COLORBAR "###" -#ifndef MOBILE +#ifndef NOSDL SDL_Surface *s; -TTF_Font *font[256]; SDL_Joystick* sticks[8]; int numsticks; + +#ifndef NOTTF +TTF_Font *font[256]; +#endif #endif ld shiftmul = 1; bool inHighQual; // taking high quality screenshot -int webdisplay = 0; // R:239, G:208, B:207 @@ -138,6 +126,10 @@ int ZZ; string help; +#ifndef OLDCOMPILE +function help_delegate; +#endif + int andmode = 0; int darken = 0; @@ -155,7 +147,7 @@ bool doHighlight() { return (hiliteclick && darken < 2) ? !mmhigh : mmhigh; } -#ifndef MOBILE +#ifndef NOSDL int& qpixel(SDL_Surface *surf, int x, int y) { if(x<0 || y<0 || x >= surf->w || y >= surf->h) return ZZ; char *p = (char*) surf->pixels; @@ -172,7 +164,10 @@ int qpixel3(SDL_Surface *surf, int x, int y) { int *pi = (int*) (p); return pi[0]; } +#endif +#ifndef EXTERNALFONT +#ifndef NOTTF void loadfont(int siz) { if(!font[siz]) { #ifdef WEB @@ -192,13 +187,14 @@ void loadfont(int siz) { } } } +#endif int gl_width(int size, const char *s); int textwidth(int siz, const string &str) { if(size(str) == 0) return 0; -#ifdef WEB +#ifdef NOTTF return gl_width(siz, str.c_str()); #else @@ -371,7 +367,11 @@ void setGLProjection() { void buildpolys(); -#ifndef MOBILE +#ifdef MOBILE +#define EXTERNALFONT +#endif + +#ifndef EXTERNALFONT struct glfont_t { GLuint * textures; // Holds The Texture Id's @@ -400,6 +400,18 @@ void glError(const char* GLcall, const char* file, const int line) { } #define GLERR(call) glError(call, __FILE__, __LINE__) +#ifdef NOTTF +#define FIXEDSIZE +#endif + +#ifdef CREATEFONT +#define FIXEDSIZE +#endif + +#ifdef FIXEDSIZE +#include "nofont.cpp" +#endif + void init_glfont(int size) { if(glfont[size]) return; DEBB(DF_INIT, (debugfile,"init GL font: %d\n", size)); @@ -412,7 +424,7 @@ void init_glfont(int size) { //f.list_base = glGenLists(128); glGenTextures( 128+NUMEXTRA, f.textures ); -#ifndef WEB +#ifndef NOTTF loadfont(size); if(!font[size]) return; @@ -426,9 +438,10 @@ void init_glfont(int size) { for(int ch=1;ch<128+NUMEXTRA;ch++) { -#ifdef WEB if(ch<32) continue; - int otwidth, otheight, tpix[3000], tpixindex = 0; + +#ifdef NOTTF + int otwidth, otheight, tpix[3000], tpixindex = 0; loadCompressedChar(otwidth, otheight, tpix); #else @@ -442,6 +455,9 @@ void init_glfont(int size) { txt = TTF_RenderUTF8_Blended(font[size], natchars[ch-128], white); } if(txt == NULL) continue; +#ifdef CREATEFONT + generateFont(ch, txt); +#endif int otwidth = txt->w; int otheight = txt->h; @@ -450,14 +466,14 @@ void init_glfont(int size) { int twidth = next_p2( otwidth ); int theight = next_p2( otheight ); -#ifdef WEB +#ifdef NOTTF int expanded_data[twidth * theight]; #else Uint16 expanded_data[twidth * theight]; #endif for(int j=0; j =otwidth || j>=otheight) ? 0 : tpix[tpixindex++]; #else expanded_data[(i+j*twidth)] = @@ -481,7 +497,7 @@ void init_glfont(int size) { glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, twidth, theight, 0, -#ifdef WEB +#ifdef NOTTF GL_RGBA, GL_UNSIGNED_BYTE, #else GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, @@ -515,7 +531,7 @@ void init_glfont(int size) { glEndList(); */ //glPopMatrix(); -#ifndef WEB +#ifndef NOTTF SDL_FreeSurface(txt); #endif } @@ -542,13 +558,13 @@ int gl_width(int size, const char *s) { int gsiz = size; if(size > vid.fsize || size > 72) gsiz = 72; -#ifdef WEB +#ifdef FIXEDSIZE gsiz = 36; #endif init_glfont(gsiz); -#ifndef WEB +#ifndef NOTTF if(!font[gsiz]) return 0; #endif @@ -565,27 +581,16 @@ int gl_width(int size, const char *s) { bool gl_print(int x, int y, int shift, int size, const char *s, int color, int align) { - // printf("gl_print: %s\n", s.c_str()); - - // We Want A Coordinate System Where Distance Is Measured In Window Pixels. - - /* - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - gluOrtho2D(0, 0, vid.xscr, vid.yscr); */ - int gsiz = size; if(size > vid.fsize || size > 72) gsiz = 72; - // if(size >= 36) gsiz = 72; -#ifdef WEB +#ifdef FIXEDSIZE gsiz = 36; #endif init_glfont(gsiz); -#ifndef WEB +#ifndef NOTTF if(!font[gsiz]) return false; #endif @@ -677,13 +682,12 @@ bool gl_print(int x, int y, int shift, int size, const char *s, int color, int a glDisable(GL_TEXTURE_2D); return clicked; - // printf("gl_print ok\n"); } #endif void resetGL() { DEBB(DF_INIT, (debugfile,"reset GL\n")); -#ifndef MOBILE +#ifndef EXTERNALFONT for(int i=0; i<128; i++) if(glfont[i]) { delete glfont[i]; glfont[i] = NULL; @@ -696,20 +700,22 @@ void resetGL() { #ifndef MOBILE bool displaystr(int x, int y, int shift, int size, const char *str, int color, int align) { + if(strlen(str) == 0) return false; if(size < 4 || size > 255) { - // printf("size = %d\n", size); return false; } -#ifdef WEB - return gl_print(x, y, shift, size, str, color, align); -#endif - #ifdef GL if(vid.usingGL) return gl_print(x, y, shift, size, str, color, align); #endif + +#ifdef NOTTF + static bool towarn = true; + if(towarn) towarn = false, printf("WARNING: NOTTF works only with OpenGL!\n"); + return false; +#else SDL_Color col; col.r = (color >> 16) & 255; @@ -753,6 +759,7 @@ bool displaystr(int x, int y, int shift, int size, const char *str, int color, i SDL_FreeSurface(txt); return clicked; +#endif } bool displaystr(int x, int y, int shift, int size, const string &s, int color, int align) { @@ -928,6 +935,14 @@ void ghcheck(hyperpoint &ret, const hyperpoint &H) { } } +void camrotate(ld& hx, ld& hy) { + ld cam = vid.camera_angle * M_PI / 180; + GLfloat cc = cos(cam); + GLfloat ss = sin(cam); + ld ux = hx, uy = hy * cc + ss, uz = cc - ss * hy; + hx = ux / uz, hy = uy / uz; + } + hyperpoint gethyper(ld x, ld y) { ld hx = (x - vid.xcenter) / vid.radius; @@ -940,6 +955,8 @@ hyperpoint gethyper(ld x, ld y) { if(euclid) return hpxy(hx * (EUCSCALE + vid.alphax), hy * (EUCSCALE + vid.alphax)); + + if(vid.camera_angle) camrotate(hx, hy); ld hr = hx*hx+hy*hy; @@ -1033,9 +1050,23 @@ void applymodel(hyperpoint H, hyperpoint& ret) { } if(pmodel == mdDisk) { - ret[0] = H[0] / tz; - ret[1] = H[1] / tz; - ret[2] = (1 - vid.beta / tz); + + if(!vid.camera_angle) { + ret[0] = H[0] / tz; + ret[1] = H[1] / tz; + ret[2] = (1 - vid.beta / tz); + } + else { + ld tx = H[0]; + ld ty = H[1]; + ld cam = vid.camera_angle * M_PI / 180; + GLfloat cc = cos(cam); + GLfloat ss = sin(cam); + ld ux = tx, uy = ty * cc - ss * tz, uz = tz * cc + ss * ty; + ret[0] = ux / uz; + ret[1] = uy / uz; + ret[2] = 1 - vid.beta / uz; + } return; } @@ -1311,7 +1342,7 @@ int displaydir(cell *c, int d) { return S42 - d * S84 / c->type; } -transmatrix ddspin(cell *c, int d, int bonus = 0) { +transmatrix ddspin(cell *c, int d, int bonus) { int hdir = displaydir(c, d) + bonus; return getspinmatrix(hdir); } @@ -2444,7 +2475,7 @@ bool applyAnimation(cell *c, transmatrix& V, double& footphase, int layer) { ld R = hdist0(tC0(a.wherenow)); aspd *= (1+R+(shmup::on?1:0)); - if(R < aspd || isnan(R) || isnan(aspd) || R > 10) { + if(R < aspd || std::isnan(R) || std::isnan(aspd) || R > 10) { animations[layer].erase(c); return false; } @@ -2777,6 +2808,146 @@ cell *straightDownSeek; int keycelldist; +#define AURA 180 + +int aurac[AURA+1][4]; + +bool haveaura() { + return pmodel == mdDisk && !sphere && !euclid && vid.aurastr>0 && + !svg::in && (inHighQual || vid.usingGL); + } + +void clearaura() { + if(!haveaura()) return; + for(int a=0; a>16)&255; + aurac[r][1] += (col>>8)&255; + aurac[r][2] += (col>>0)&255; + } + +void sumaura(int v) { + int auc[AURA]; + for(int t=0; t AURA) vid.aurasmoothen = AURA; + int SMO = vid.aurasmoothen; + for(int t=0; t1) cmul=1; + if(cmul<0) cmul=0; + + ld alpha = AURA * atan2(hx,hy) / (2 * M_PI); + if(alpha<0) alpha += AURA; + if(alpha >= AURA) alpha -= AURA; + + int rm = int(alpha); + double fr = alpha-rm; + + if(rm<0 || rm >= AURA) continue; + + int& p = qpixel(s, x, y); + for(int c=0; c<3; c++) { + double c1 = aurac[rm][2-c] / (aurac[rm][3]+.1); + double c2 = aurac[rm+1][2-c] / (aurac[rm+1][3]+.1); + const ld one = 1; + part(p, c) = int(255 * min(one, cmul * (c1 + fr * (c2-c1)))); + } + } + SDL_UnlockSurface(s); + return; + } +#endif + +#ifdef GL + setcameraangle(true); + + glEnableClientState(GL_COLOR_ARRAY); + float coltab[4][4]; + glColorPointer(4, GL_FLOAT, 0, coltab); + activateGlcoords(); + + float cx[AURA+1][11][5]; + + double facs[11] = {1, 1.01, 1.02, 1.04, 1.08, 1.70, 1.95, 1.5, 2, 6, 10}; + double cmul[11] = {1, .8, .7, .6, .5, .16, .12, .08, .07, .06, 0}; + double d2[11] = {0, 2, 4, 6.5, 7, 7.5, 8, 8.5, 9, 9.5, 10}; + + for(int d=0; d<11; d++) { + double dd = d2[d]; + cmul[d] = (1- dd/10.); + facs[d] = .99999 + .00001 * exp(dd); + } + facs[10] = 10; + + for(int r=0; r<=AURA; r++) for(int z=0; z<11; z++) { + float rr = (M_PI * 2 * r) / AURA; + float rad = vid.radius * facs[z]; + int rm = r % AURA; + cx[r][z][0] = rad * sin(rr); + cx[r][z][1] = rad * cos(rr); + cx[r][z][2] = cmul[z] * aurac[rm][0] / (aurac[rm][3]+.1); + cx[r][z][3] = cmul[z] * aurac[rm][1] / (aurac[rm][3]+.1); + cx[r][z][4] = cmul[z] * aurac[rm][2] / (aurac[rm][3]+.1); + } + + for(int u=0; u<4; u++) glcoords[u][2] = vid.scrdist; + for(int u=0; u<4; u++) coltab[u][3] = 1; + + for(int r=0; r 1500) pts = 1500; for(int r=0; rwall].color; @@ -3738,6 +3911,20 @@ bool allemptynear(cell *c) { return true; } +bool behindsphere(const transmatrix& V) { + if(!sphere) return false; + + if(vid.alpha > 1) { + if(V[2][2] > -1/vid.alpha) return true; + } + + if(vid.alpha <= 1) { + if(V[2][2] < -.8) return true; + } + + return false; + } + void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) { qfi.shape = NULL; qfi.special = false; @@ -3746,17 +3933,10 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) { transmatrix& gm = gmatrix[c]; bool orig = (gm[2][2] == 0 || fabs(gm[2][2]-1) >= fabs(V[2][2]-1) - 1e-8); - if(sphere && vid.alpha > 1) { - long double d = V[2][2]; - if(d > -1/vid.alpha) return; - } - - if(sphere && vid.alpha <= 1) { - if(V[2][2] < -.8) return; - } - if(orig) gm = V; + if(behindsphere(V)) return; + ld dist0 = hdist0(tC0(V)) - 1e-6; if(dist0 < geom3::highdetail) detaillevel = 2; else if(dist0 < geom3::middetail) detaillevel = 1; @@ -3776,30 +3956,6 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) { if(conformal::on || inHighQual) checkTide(c); - if(!euclid) { - // draw a web-like map - if(webdisplay & 1) { - if(c->type == 6) { - for(int a=0; a<3; a++) - queueline(V*Crad[a*S7], V*Crad[a*S7+S42/2], darkena(0xd0d0, 0, 0xFF), 2); - } - else { - for(int a=0; atype != 6) { - queueline(tC0(V), V*ddi0(purehepta?S42:0, tessf), darkena(0xd0d0, 0, 0xFF), 2); - } - - if(webdisplay & 4) if(c->type != 6 && !euclid && c->master->alt) { - for(int i=0; imaster->move[i] && c->master->move[i]->alt == c->master->alt->move[0]) - queueline(tC0(V), V*xspinpush0((purehepta?M_PI:0) -2*M_PI*i/S7, tessf), darkena(0xd000d0, 0, 0xFF), 2); - } - } - // save the player's view center if(isPlayerOn(c) && !shmup::on) { playerfound = true; @@ -3878,6 +4034,8 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) { int wcol, fcol, asciicol; setcolors(c, wcol, fcol); + // addaura(tC0(V), wcol); + int zcol = fcol; if(viewdists) { int cd = celldistance(c, cwt.c); @@ -4502,6 +4660,7 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) { else if(c->wall == waSulphurC) { if(drawstar(c)) { + zcol = wcol; if(wmspatial) queuepolyat(mscale(V, geom3::HELLSPIKE), shGiantStar[ct6], darkena(wcol, 0, 0x40), PPR_HELLSPIKE); else @@ -4522,6 +4681,7 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) { ; else if(c->wall == waRose) { + zcol = wcol; wcol <<= 1; if(c->cpdist > 5) wcol = 0xC0C0C0; @@ -4575,6 +4735,7 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) { } else if(highwall(c)) { + zcol = wcol; int wcol0 = wcol; int starcol = wcol; if(c->wall == waWarpGate) starcol = 0; @@ -4671,9 +4832,11 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) { drawParticle(c, wcol, 75); } - else if(c->wall == waFreshGrave || c->wall == waAncientGrave) + else if(c->wall == waFreshGrave || c->wall == waAncientGrave) { + zcol = wcol; queuepoly(V, shCross, darkena(wcol, 0, 0xFF)); - + } + else if(xch == '+' && c->wall == waGiantRug) { queuepoly(V, shBigCarpet1, darkena(0xC09F00, 0, 0xFF)); queuepoly(V, shBigCarpet2, darkena(0x600000, 0, 0xFF)); @@ -4798,6 +4961,7 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) { it == itKey ? &shKey : it == itRevolver ? &shGun : NULL; + if(c->land == laWhirlwind && c->wall != waBoat) { double footphase = 0; @@ -4829,7 +4993,7 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) { if(c == mapeditor::drawcell && mapeditor::drawcellShapeGroup() == 2) mapeditor::drawtrans = V; #endif - + if(!mmitem && it) error = true; @@ -4926,6 +5090,9 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) { queuepolyat(V, shDisk, 0xC0404040, PPR_SWORDMARK); } + if(c->wall == waChasm) zcol = 0; + addaura(tC0(V), zcol, fd); + int ad = airdist(c); if(ad == 1 || ad == 2) { @@ -5378,6 +5545,11 @@ string buildCredits(); string buildHelpText() { DEBB(DF_GRAPH, (debugfile,"buildHelpText\n")); + +#ifdef ROGUEVIZ + if(rogueviz::on) return rogueviz::help(); +#endif + string h; h += XLAT("Welcome to HyperRogue"); #ifdef ANDROID @@ -5635,6 +5807,46 @@ void buteol(string& s, int current, int req) { string generateHelpForMonster(eMonster m) { string s = helptitle(XLATN(minf[m].name), minf[m].color); + + if(m == moPlayer) { +#ifdef TOUR + if(tour::on) + return s+XLAT( + "A tourist from another world. They mutter something about the 'tutorial', " + "and claim that they are here just to learn, and to leave without any treasures. " + "Do not kill them!" + ); +#endif + s += XLAT( + "This monster has come from another world, presumably to steal our treasures. " + "Not as fast as an Eagle, not as resilient as the guards from the Palace, " + "and not as huge as the Mutant Ivy from the Clearing; however, " + "they are very dangerous because of their intelligence, " + "and access to magical powers.\n\n"); + + if(cheater) + s += XLAT("Actually, their powers appear god-like...\n\n"); + + else if(!hardcore) + s += XLAT( + "Rogues will never make moves which result in their immediate death. " + "Even when cornered, they are able to instantly teleport back to their " + "home world at any moment, taking the treasures forever... but " + "at least they will not steal anything further!\n\n" + ); + + if(!euclid) + s += XLAT( + "Despite this intelligence, Rogues appear extremely surprised " + "by the most basic facts about geometry. They must come from " + "some really strange world.\n\n" + ); + + if(shmup::on) + s += XLAT("In the Shoot'em Up mode, you are armed with thrown Knives."); + + return s; + } s += XLAT(minf[m].help); if(m == moPalace || m == moSkeleton) @@ -5831,6 +6043,11 @@ string generateHelpForLand(eLand l) { bool instat; +string turnstring(int i) { + if(i == 1) return XLAT("1 turn"); + else return XLAT("%1 turns", its(i)); + } + void describeMouseover() { DEBB(DF_GRAPH, (debugfile,"describeMouseover\n")); @@ -5859,9 +6076,9 @@ void describeMouseover() { int t = 1; for(; t < 1000 && b == (c->landparam >= tide[(turncount+t-1) % tidalsize]); t++) ; if(b) - out += " (" + its(t) + " turns to surface)"; + out += " (" + turnstring(t) + XLAT(" to surface") + ")"; else - out += " (" + its(t) + " turns to submerge)"; + out += " (" + turnstring(t) + XLAT(" to submerge") + ")"; } } @@ -5889,7 +6106,8 @@ void describeMouseover() { /* out += " DP=" + its(celldistance(c, cwt.c)); out += " DO=" + its(celldist(c)); out += " PD=" + its(c->pathdist); */ - if(webdisplay & 8) { + + if(false) { out += " LP:" + itsh(c->landparam)+"/"+its(turncount); @@ -5970,10 +6188,10 @@ void describeMouseover() { if(isActivable(c)) out += XLAT(" (touch to activate)"); - if(hasTimeout(c)) out += XLAT(" [%1 turns]", its(c->wparam)); + if(hasTimeout(c)) out += XLAT(" [" + turnstring(c->wparam) + "]"); if(isReptile(c->wall)) - out += XLAT(" [%1 turns]", its((unsigned char) c->wparam)); + out += XLAT(" [" + turnstring((unsigned char) c->wparam) + "]"); if(c->monst) { out += ", "; out += XLAT1(minf[c->monst].name); @@ -5999,7 +6217,7 @@ void describeMouseover() { if(!c->monst) help = generateHelpForItem(c->item); } - if(isPlayerOn(c) && !shmup::on) out += XLAT(", you"); + if(isPlayerOn(c) && !shmup::on) out += XLAT(", you"), help = generateHelpForMonster(moPlayer); if(shmup::mousetarget && intval(mouseh, tC0(shmup::mousetarget->pat)) < .1) { out += ", "; @@ -6012,7 +6230,7 @@ void describeMouseover() { #endif { out += XLAT1(minf[shmup::mousetarget->type].name); - help = XLAT(minf[shmup::mousetarget->type].help); + help = generateHelpForMonster(shmup::mousetarget->type); } /* char buf[64]; sprintf(buf, "%Lf", intval(mouseh, shmup::mousetarget->pat*C0)); @@ -6302,12 +6520,14 @@ void drawthemap() { hsOrigin, ypush(vid.yshift) * sphereflip * View); } + linepatterns::drawAll(); + #ifdef ROGUEVIZ rogueviz::drawExtra(); #endif #ifdef TOUR - if(tour::on) tour::presentation(2); + if(tour::on) tour::presentation(tour::pmFrame); #endif profile_stop(1); @@ -6348,7 +6568,7 @@ void drawthemap() { } } - #ifndef MOBILE + #ifndef NOSDL Uint8 *keystate = SDL_GetKeyState(NULL); lmouseover = mouseover; bool useRangedOrb = (!(vid.shifttarget & 1) && haveRangedOrb() && lmouseover && lmouseover->cpdist > 1) || (keystate[SDLK_RSHIFT] | keystate[SDLK_LSHIFT]); @@ -6620,6 +6840,8 @@ int realradius; bool sidescreen; +bool dronemode; + void calcparam() { DEBB(DF_GRAPH, (debugfile,"calc param\n")); vid.xcenter = vid.xres / 2; @@ -6643,6 +6865,8 @@ void calcparam() { if(viewdists && cmode == emNormal && vid.xres > vid.yres) sidescreen = true; if(sidescreen) vid.xcenter = vid.yres/2; } + + if(dronemode) { vid.ycenter -= vid.radius; vid.ycenter += vid.fsize/2; vid.ycenter += vid.fsize/2; vid.radius *= 2; } ld eye = vid.eye; if(pmodel || rug::rugged) eye = 0; vid.beta = 1 + vid.alpha + eye; @@ -6816,6 +7040,7 @@ void showGameover() { #endif if(intour) { +#ifdef TOUR if(canmove) { dialog::addItem("spherical geometry", '1'); dialog::addItem("Euclidean geometry", '2'); @@ -6828,7 +7053,8 @@ void showGameover() { else dialog::addItem("flash", '4'); if(canmove) { - dialog::addItem("slide-specific command", '5'); + if(tour::slidecommand != "") + dialog::addItem(tour::slidecommand, '5'); dialog::addItem("static mode", '6'); dialog::addItem("enable/disable texts", '7'); dialog::addItem("next slide", SDLK_RETURN); @@ -6837,6 +7063,7 @@ void showGameover() { else dialog::addBreak(200); dialog::addItem("main menu", 'v'); +#endif } else { dialog::addItem(canmove ? "continue" : "see how it ended", SDLK_ESCAPE); @@ -7355,7 +7582,7 @@ XLAT( #endif } -#ifndef MOBILE +#ifndef NOSDL #ifndef NOPNG void IMAGESAVE(SDL_Surface *s, const char *fname) { @@ -7366,10 +7593,11 @@ void IMAGESAVE(SDL_Surface *s, const char *fname) { #endif int pngres = 2000; +int pngformat = 0; -void saveHighQualityShot(const char *fname) { +void saveHighQualityShot(const char *fname, const char *caption, int fade) { -#ifndef GFX +#ifndef SDLGFX addMessage(XLAT("High quality shots not available on this platform")); return; #endif @@ -7384,7 +7612,16 @@ void saveHighQualityShot(const char *fname) { dynamicval v(vid, vid); dynamicval v2(inHighQual, true); dynamicval v4(cheater, 0); + vid.xres = vid.yres = pngres; + if(pngformat == 1) vid.xres = vid.yres * 4/3; + if(pngformat == 2) vid.xres = vid.yres * 16/9; + if(pngformat == 3) { + vid.xres = vid.yres * 22/16; + while(vid.xres & 15) vid.xres++; + } + printf("format = %d, %d x %d\n", pngformat, vid.xres, vid.yres); + vid.usingGL = false; // if(vid.pmodel == 0) vid.scale = 0.99; calcparam(); @@ -7392,14 +7629,30 @@ void saveHighQualityShot(const char *fname) { rogueviz::fixparam(); #endif + printf("format = %d, %d x %d\n", pngformat, vid.xres, vid.yres); + dynamicval v5(s, SDL_CreateRGBSurface(SDL_SWSURFACE,vid.xres,vid.yres,32,0,0,0,0)); darken = 0; - - for(int i=0; i<(fname?1:2); i++) { - SDL_FillRect(s, NULL, fname ? backcolor : i ? 0xFFFFFF : 0); - drawfullmap(); + int numi = (fname?1:2); + + for(int i=0; i> (darken+1)); } */ + clearaura(); drawthemap(); #ifndef NORUG if(!inHighQual) { @@ -7499,6 +7753,7 @@ void drawfullmap() { } #endif profile_start(2); + drawaura(); drawqueue(); profile_stop(2); } @@ -7520,7 +7775,7 @@ void drawscreen() { #endif if(cmode != emHelp) help = "@"; - #ifndef MOBILE + #ifndef NOSDL // SDL_LockSurface(s); // unsigned char *b = (unsigned char*) s->pixels; // int n = vid.xres * vid.yres * 4; @@ -7653,21 +7908,20 @@ void drawscreen() { if(canmove) showGameover(); } - #ifndef MOBILE // SDL_UnlockSurface(s); DEBT("swapbuffers"); +#ifndef NOSDL #ifdef GL if(vid.usingGL) SDL_GL_SwapBuffers(); else #endif SDL_UpdateRect(s, 0, 0, vid.xres, vid.yres); +#endif //printf("\ec"); - - #endif } -#ifndef MOBILE +#ifndef NOSDL bool setfsize = true; void setvideomode() { @@ -7721,7 +7975,7 @@ void restartGraph() { DEBB(DF_INIT, (debugfile,"restartGraph\n")); View = Id; - webdisplay = 0; + linepatterns::clearAll(); if(currentmap) { if(euclid) { centerover = euclideanAtCreate(0,0); @@ -7845,7 +8099,7 @@ void saveConfig() { float(vid.ballangle), float(vid.ballproj) ); - fprintf(f, "%d\n", vid.mobilecompasssize); + fprintf(f, "%d %d %d\n", vid.mobilecompasssize, vid.aurastr, vid.aurasmoothen); } @@ -7974,7 +8228,7 @@ void loadConfig() { readf(f, vid.yshift); readf(f, vid.camera_angle); readf(f, vid.ballangle); readf(f, vid.ballproj); - err=fscanf(f, "%d\n", &vid.mobilecompasssize); + err=fscanf(f, "%d%d%d\n", &vid.mobilecompasssize, &vid.aurastr, &vid.aurasmoothen); fclose(f); DEBB(DF_INIT, (debugfile,"Loaded configuration: %s\n", conffile)); @@ -7987,7 +8241,7 @@ void loadConfig() { } #endif -#ifndef MOBILE +#ifndef NOSDL void initJoysticks() { DEBB(DF_INIT, (debugfile,"init joysticks\n")); numsticks = SDL_NumJoysticks(); @@ -8012,6 +8266,8 @@ void closeJoysticks() { } #endif +bool noGUI = false; + void initgraph() { DEBB(DF_INIT, (debugfile,"initgraph\n")); @@ -8029,6 +8285,8 @@ void initgraph() { vid.yshift = 0; vid.camera_angle = 0; vid.ballproj = 1; + vid.aurastr = 128; + vid.aurasmoothen = 5; #ifdef ANDROID vid.monmode = 2; @@ -8085,8 +8343,15 @@ void initgraph() { initgeo(); buildpolys(); + + if(noGUI) { +#ifdef USE_COMMANDLINE + arg::read(2); +#endif + return; + } - #ifndef MOBILE + #ifndef NOSDL if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) == -1) { printf("Failed to initialize video.\n"); @@ -8114,7 +8379,7 @@ void initgraph() { arg::read(2); #endif - #ifndef MOBILE + #ifndef NOSDL setvideomode(); if(!s) { printf("Failed to initialize graphics.\n"); @@ -8124,10 +8389,12 @@ void initgraph() { SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); SDL_EnableUNICODE(1); +#ifndef NOTTF if(TTF_Init() != 0) { printf("Failed to initialize TTF.\n"); exit(2); } +#endif initJoysticks(); @@ -8170,6 +8437,13 @@ bool didsomething; bool quitmainloop = false; +bool doexiton(int sym, int uni) { + if(sym == SDLK_ESCAPE) return true; + if(sym == SDLK_F10) return true; + if(uni != 0) return true; + return false; + } + void handleKeyQuit(int sym, int uni) { dialog::handleNavigation(sym, uni); // ignore the camera movement keys @@ -8180,7 +8454,7 @@ void handleKeyQuit(int sym, int uni) { sym = 0; #endif - if(sym == SDLK_RETURN || sym == SDLK_F10) quitmainloop = true; + if(sym == SDLK_RETURN || sym == SDLK_KP_ENTER || sym == SDLK_F10) quitmainloop = true; else if(uni == 'r' || sym == SDLK_F5) { restartGame(), cmode = emNormal; msgs.clear(); @@ -8201,7 +8475,7 @@ void handleKeyQuit(int sym, int uni) { } #endif - else if((sym != 0 && sym != SDLK_F12) && !didsomething) { + else if(doexiton(sym, uni) && !didsomething) { cmode = emNormal; msgscroll = 0; msgs.clear(); @@ -8318,7 +8592,7 @@ void handleKeyNormal(int sym, int uni, extra& ev) { } if(!canmove) { - if(sym == SDLK_RETURN) quitmainloop = true; + if(sym == SDLK_RETURN || sym == SDLK_KP_ENTER) quitmainloop = true; else if(uni == 'r') restartGame(); #ifndef NOSAVE else if(uni == 't') { @@ -8354,7 +8628,7 @@ void handleKeyNormal(int sym, int uni, extra& ev) { cmode = emVisual1; } -#ifndef MOBILE +#ifndef NOSDL #ifdef PANDORA if(ev.type == SDL_MOUSEBUTTONUP && sym == 0 && !rightclick) #else @@ -8398,7 +8672,7 @@ void handlekey(int sym, int uni, extra& ev) { if(tour::on && tour::handleKeyTour(sym, uni)) return; #endif - if(((cmode == emNormal && canmove) || (cmode == emQuit && !canmove) || cmode == emDraw || cmode == emMapEditor) && DEFAULTCONTROL && !rug::rugged) { + if(((cmode == emNormal && canmove) || (cmode == emQuit && !canmove) || cmode == emDraw || (cmode == emMapEditor && !mapeditor::subscreen)) && DEFAULTCONTROL && !rug::rugged) { #ifndef PANDORA if(sym == SDLK_RIGHT) { if(conformal::on) @@ -8442,7 +8716,7 @@ void handlekey(int sym, int uni, extra& ev) { if(isGravityLand(cwt.c->land)) playermoved = false; } -#ifndef MOBILE +#ifndef NOSDL if(sym == SDLK_F7 && !vid.usingGL) { time_t timer; @@ -8479,9 +8753,9 @@ void handlekey(int sym, int uni, extra& ev) { #endif #ifndef NOSAVE #ifndef MOBILE - else if(cmode == emScores) handleScoreKeys(sym); + else if(cmode == emScores) handleScoreKeys(sym, uni); #endif - else if(cmode == emPickScores) handlePickScoreKeys(uni); + else if(cmode == emPickScores) handlePickScoreKeys(sym, uni); #endif else if(cmode == emConformal) conformal::handleKey(sym, uni); else if(cmode == emYendor) yendor::handleKey(sym, uni); @@ -8501,9 +8775,12 @@ void handlekey(int sym, int uni, extra& ev) { #ifdef ROGUEVIZ else if(cmode == emRogueviz) rogueviz::handleMenu(sym, uni); #endif + else if(cmode == emLinepattern) linepatterns::handleMenu(sym, uni); } -#ifndef MOBILE +#ifdef NOSDL +void mainloopiter() { printf("(compiled without SDL -- no action)\n"); quitmainloop = true; } +#else // Warning: a very long function! todo: refactor @@ -8702,6 +8979,10 @@ void mainloopiter() { uni = ev.key.keysym.unicode; if(ev.key.keysym.mod & (KMOD_LSHIFT | KMOD_RSHIFT)) shiftmul = -1; if(ev.key.keysym.mod & (KMOD_LCTRL | KMOD_RCTRL)) shiftmul /= 10; + if(sym == SDLK_RETURN && (ev.key.keysym.mod & (KMOD_LALT | KMOD_RALT))) { + sym = 0; uni = 0; + switchFullscreen(); + } } dialog::handleZooming(ev); @@ -8815,10 +9096,10 @@ void mainloopiter() { } } +#endif void mainloop() { lastt = 0; - cmode = emNormal; #ifdef WEB initweb(); emscripten_set_main_loop(mainloopiter, 0, true); @@ -8826,19 +9107,22 @@ void mainloop() { while(!quitmainloop) mainloopiter(); #endif } -#endif -#ifndef MOBILE void cleargraph() { DEBB(DF_INIT, (debugfile,"clear graph\n")); +#ifndef NOTTF for(int i=0; i<256; i++) if(font[i]) TTF_CloseFont(font[i]); +#endif +#ifndef EXTERNALFONT for(int i=0; i<128; i++) if(glfont[i]) delete glfont[i]; +#endif +#ifndef NOSDL #ifndef SIMULATE_JOYSTICK closeJoysticks(); #endif SDL_Quit(); - } #endif + } void cleargraphmemory() { DEBB(DF_INIT, (debugfile,"clear graph memory\n")); diff --git a/hyper.cpp b/hyper.cpp index af190e1a..aa7cda72 100644 --- a/hyper.cpp +++ b/hyper.cpp @@ -93,7 +93,9 @@ int arg::readCommon() { if(argis("-c")) { PHASE(1); shift(); conffile = args(); } else if(argis("-s")) { PHASE(1); shift(); scorefile = args(); } else if(argis("-m")) { PHASE(1); shift(); musicfile = args(); } +#ifdef SDLAUDIO else if(argis("-se")) { PHASE(1); shift(); wheresounds = args(); } +#endif #ifndef NOEDIT else if(argis("-lev")) { shift(); levelfile = args(); } else if(argis("-pic")) { shift(); picfile = args(); } @@ -150,24 +152,32 @@ int arg::readCommon() { exit(0); } - else if(argis("-wm")) { PHASE(2); vid.wallmode = argi(); } - else if(argis("-mm")) { PHASE(2); vid.monmode = argi(); } + else if(argis("-wm")) { PHASEFROM(2); vid.wallmode = argi(); } + else if(argis("-mm")) { PHASEFROM(2); vid.monmode = argi(); } -#define TOGGLE(x, param) \ -else if(args()[0] == '-' && args()[1] == x && !args()[2]) { PHASE(2); param = !param; } \ -else if(args()[0] == '-' && args()[1] == x && args()[2] == '1') { PHASE(2); param = true; } \ -else if(args()[0] == '-' && args()[1] == x && args()[2] == '0') { PHASE(2); param = false; } +#define TOGGLE(x, param, act) \ +else if(args()[0] == '-' && args()[1] == x && !args()[2]) { if(curphase == 3) {act;} else {PHASE(2); param = !param;} } \ +else if(args()[0] == '-' && args()[1] == x && args()[2] == '1') { if(curphase == 3 && !param) {act;} else {PHASE(2); param = true;} } \ +else if(args()[0] == '-' && args()[1] == x && args()[2] == '0') { if(curphase == 3 && param) {act;} else {PHASE(2); param = false;} } - TOGGLE('o', vid.usingGL) - TOGGLE('C', chaosmode) - TOGGLE('7', purehepta) - TOGGLE('f', vid.full) - TOGGLE('T', tactic::on) - TOGGLE('S', shmup::on) - TOGGLE('H', hardcore) - TOGGLE('R', randomPatternsMode) + TOGGLE('o', vid.usingGL, switchGL()) + TOGGLE('C', chaosmode, restartGame('C')) + TOGGLE('7', purehepta, restartGame('7')) + TOGGLE('f', vid.full, switchFullscreen()) + TOGGLE('T', tactic::on, restartGame('t')) + TOGGLE('S', shmup::on, restartGame('s')) + TOGGLE('H', hardcore, switchHardcore()) + TOGGLE('R', randomPatternsMode, restartGame('r')) - else if(argis("-geo")) { PHASE(2); shift(); geometry = targetgeometry = (eGeometry) argi(); } + else if(argis("-geo")) { + if(curphase == 3) { + shift(); targetgeometry = (eGeometry) argi(); + restartGame('g'); + } + else { + PHASE(2); shift(); geometry = targetgeometry = (eGeometry) argi(); + } + } else if(argis("-qs")) { autocheat = true; shift(); fp43.qpaths.push_back(args()); @@ -203,7 +213,7 @@ else if(args()[0] == '-' && args()[1] == x && args()[2] == '0') { PHASE(2); para vid.scfg.players = argi(); } else if(argis("-PM")) { - PHASE(2); shift(); pmodel = eModel(argi()); + PHASEFROM(2); shift(); pmodel = eModel(argi()); } else if(argis("-offline")) offlineMode = true; else if(argis("-debugf")) { @@ -215,18 +225,15 @@ else if(args()[0] == '-' && args()[1] == x && args()[2] == '0') { PHASE(2); para shift(); debugflags = argi(); } else if(argis("-ch")) { autocheat = true; } - else if(argis("-zoom") && curphase == 2) { - PHASE(2); shift(); vid.scale = argf(); - } - else if(argis("-zoom") && curphase == 3) { - PHASE(3); shift(); vid.scale = argf(); + else if(argis("-zoom")) { + PHASEFROM(2); shift(); vid.scale = argf(); } else if(argis("-Y")) { yendor::on = true; shift(); yendor::challenge = argi(); } else if(argis("-r")) { - PHASE(2); + PHASEFROM(2); shift(); int clWidth=0, clHeight=0, clFont=0; sscanf(args(), "%dx%dx%d", &clWidth, &clHeight, &clFont); @@ -266,20 +273,27 @@ else if(args()[0] == '-' && args()[1] == x && args()[2] == '0') { PHASE(2); para setdist(cl.lst[i], 7, NULL); } else if(argis("-sr")) { - if(curphase == 1) PHASE(2); + PHASEFROM(2); shift(); sightrange = argi(); } +#ifndef NOSDL else if(argis("-pngshot")) { PHASE(3); shift(); printf("saving PNG screenshot to %s\n", args()); saveHighQualityShot(args()); } +#endif else if(argis("-svgsize")) { shift(); sscanf(args(), "%d/%d", &svg::svgsize, &svg::divby); } +#ifndef NOPNG else if(argis("-pngsize")) { shift(); sscanf(args(), "%d", &pngres); } + else if(argis("-pngformat")) { + shift(); sscanf(args(), "%d", &pngformat); + } +#endif else if(argis("-svggamma")) { shift(); svg::gamma = argf(); } diff --git a/hyper.h b/hyper.h index 46d881af..3964e329 100644 --- a/hyper.h +++ b/hyper.h @@ -1,32 +1,6 @@ -// definitions - -// disable this if you have no access to SDL_gfx -#ifndef STEAM -#define GFX -#endif - -#define GL - -#define PSEUDOKEY_WHEELDOWN 2501 -#define PSEUDOKEY_WHEELUP 2502 - -#ifdef NOGFX -#undef GFX -#endif - -#ifdef MAC -#define NOPNG -#endif - // scale the Euclidean #define EUCSCALE 2.3 -#ifndef MOBILE -#ifndef NOAUDIO -#define SDLAUDIO -#endif -#endif - #define NUMWITCH 7 // achievements @@ -273,7 +247,6 @@ int darkened(int c); extern int getcstat; bool displaychr(int x, int y, int shift, int size, char chr, int col); bool displayfr(int x, int y, int b, int size, const string &s, int color, int align); -void saveHighQualityShot(const char *fname = NULL); bool outofmap(hyperpoint h); void applymodel(hyperpoint H, hyperpoint& Hscr); @@ -282,35 +255,40 @@ void fixcolor(int& col); int displaydir(cell *c, int d); hyperpoint gethyper(ld x, ld y); void resetview(); extern heptspin viewctr; extern cell *centerover; -#ifndef MOBILE -int& qpixel(SDL_Surface *surf, int x, int y); -#endif void drawthemap(); void drawfullmap(); bool displaystr(int x, int y, int shift, int size, const char *str, int color, int align); extern int darken; -void setvideomode(); void calcparam(); +#ifdef USE_SDL +int& qpixel(SDL_Surface *surf, int x, int y); +void setvideomode(); +void saveHighQualityShot(const char *fname = NULL, const char *caption = NULL, int fade = 255); +#endif + #ifndef NOCONFIG void saveConfig(); #endif extern hyperpoint mouseh; -extern int webdisplay; - extern hyperpoint ccenter; extern ld crad; extern bool mousepressed, anyshiftclick; extern string help; +extern function help_delegate; + +#define HELPFUN(x) (help_delegate = x, "HELPFUN") + struct videopar { ld scale, eye, alpha, sspeed, mspeed, yshift, camera_angle; ld ballangle, ballproj; int mobilecompasssize; + int aurastr, aurasmoothen; bool full; bool goteyes; // for rendering @@ -376,7 +354,8 @@ enum emtype {emNormal, emHelp, emCheatMenu, emLeader, emJoyConfig, emColor, emNumber, - em3D, emRogueviz + em3D, emRogueviz, + emLinepattern }; extern emtype cmode, lastmode; @@ -420,13 +399,18 @@ namespace conformal { extern vector > findhistory; extern vector movehistory; extern bool includeHistory; + extern int rotation; void create(); void clear(); void handleKey(); void show(); void apply(); + void movetophase(); void renderAutoband(); + + extern vector v; + extern double phase; } namespace polygonal { @@ -673,10 +657,6 @@ int getGhostcount(); void raiseBuggyGeneration(cell *c, const char *s); void verifyMutantAround(cell *c); -#ifdef MOBILE -#define NOPNG -#endif - // #define NOPNG #ifdef NOPNG @@ -810,6 +790,7 @@ namespace dialog { void addSelItem(string body, string value, int key); void addBoolItem(string body, bool value, int key); void addColorItem(string body, int value, int key); + void openColorDialog(int& col, unsigned int *pal); void addHelp(string body); void addInfo(string body, int color = 0xC0C0C0); void addItem(string body, int key); @@ -1113,6 +1094,7 @@ namespace arg { // an useful macro #define PHASE(x) { if(arg::curphase > x) phaseerror(x); else if(arg::curphase < x) return 2; } +#define PHASEFROM(x) { if(arg::curphase < x) return 2; } void read(int phase); @@ -1139,14 +1121,74 @@ cell *createMov(cell *c, int d); namespace tour { extern bool on; extern string tourhelp; + extern string slidecommand; bool handleKeyTour(int sym, int uni); - void presentation(int mode); + + enum presmode { + pmStartAll = 0, + pmStart = 1, pmFrame = 2, pmStop = 3, pmKey = 4, pmRestart = 5, + pmGeometry = 11, pmGeometryReset = 13, pmGeometryStart = 15 + }; + + void presentation(presmode mode); void checkGoodLand(eLand l); int getid(); - eLand getNext(eLand old); - bool quickfind(eLand next); + extern function getNext; + extern function quickfind; + extern function showland; + void start(); }; #endif + +namespace rogueviz { + extern bool rog3; + extern bool rvwarp; + }; + +extern bool doCross; +void optimizeview(); + +#ifndef NOPNG +extern int pngres; +extern int pngformat; +#endif + +extern bool noGUI; +extern bool dronemode; + +extern ld whatever; + +namespace linepatterns { + + enum ePattern { + patPalacelike, + patPalace, + patZebraTriangles, + patZebraLines, + patTriNet, + patTriRings, + patHepta, + patRhomb, + patTree, + patAltTree, + patVine, + patPower, + patNormal, + patTrihepta, + patBigTriangles + }; + + void clearAll(); + void setColor(ePattern id, int col); + void drawAll(); + }; + +transmatrix ddspin(cell *c, int d, int bonus = 0); +bool doexiton(int sym, int uni); +void switchFullscreen(); +string turnstring(int i); +int celldistance(cell *c1, cell *c2); +bool behindsphere(const transmatrix& V); diff --git a/hyperweb.cpp b/hyperweb.cpp index d98b77b8..062eb370 100644 --- a/hyperweb.cpp +++ b/hyperweb.cpp @@ -6,6 +6,7 @@ #define NOPNG #define DEMO #define TOUR +#define NOTTF #ifdef FAKEWEB void mainloopiter(); @@ -29,148 +30,3 @@ void initweb() { cmode = emMenu; } -unsigned char fonttable[] = { -43,13,0,255,0,255,0,49, -43,16,0,133,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,236,255,4,235,0,10,206,255,4,205,0,10,176,255,4,175,0,10,146,255,4,145,0,10,116,255,4,115,0,10,86,255,4,85,0,10,55,255,4,55,0,58,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,149, -43,19,0,155,255,4,0,4,255,4,0,7,255,4,0,4,255,4,0,7,255,4,0,4,255,4,0,7,255,4,0,4,255,4,0,7,255,4,0,4,255,4,0,7,255,4,0,4,255,4,0,7,255,4,0,4,255,4,0,7,255,4,0,4,255,4,0,7,255,4,0,4,255,4,0,7,255,4,0,4,255,4,0,255,0,224, -43,30,0,251,152,255,3,72,0,3,28,255,3,188,0,17,223,255,2,247,9,0,3,100,255,3,116,0,16,38,255,3,185,0,4,172,255,3,44,0,16,110,255,3,114,0,3,3,239,255,2,227,0,17,181,255,3,42,0,3,60,255,3,156,0,16,7,245,255,2,227,0,4,132,255,3,84,0,11,255,23,0,7,255,23,0,7,255,23,0,7,255,23,0,11,51,255,3,172,0,4,187,255,3,37,0,16,114,255,3,110,0,3,5,244,255,2,230,0,17,176,255,3,47,0,3,56,255,3,169,0,16,1,237,255,2,239,2,0,3,119,255,3,108,0,16,45,255,3,179,0,4,181,255,3,46,0,11,255,23,0,7,255,23,0,7,255,23,0,7,255,23,0,11,70,255,3,157,0,4,207,255,2,252,12,0,16,131,255,3,95,0,3,15,253,255,2,203,0,17,192,255,3,34,0,3,73,255,3,142,0,16,5,246,255,2,229,0,4,134,255,3,81,0,16,57,255,3,168,0,4,195,255,3,21,0,16,117,255,3,107,0,3,7,248,255,2,215,0,17,178,255,3,46,0,3,61,255,3,154,0,255,0,27, -43,25,0,186,252,255,2,0,22,253,255,2,0,22,254,255,2,0,22,255,3,0,17,24,102,157,193,216,255,3,233,188,130,64,3,0,10,29,169,252,255,11,236,153,51,0,7,58,240,255,16,0,6,21,236,255,17,0,6,137,255,5,238,111,39,255,3,15,46,97,159,238,255,2,0,6,214,255,5,71,0,2,255,3,0,4,5,83,198,0,6,245,255,5,13,0,2,255,3,0,13,244,255,5,85,0,2,255,3,0,13,209,255,5,244,133,59,255,3,0,13,130,255,11,166,119,71,12,0,9,16,227,255,13,249,186,81,2,0,7,38,213,255,15,196,28,0,7,7,106,212,255,14,215,9,0,9,36,105,157,204,255,11,116,0,13,255,3,121,185,255,6,199,0,13,255,3,0,2,106,255,5,238,0,13,255,3,0,2,15,255,5,248,0,4,206,106,18,0,6,255,3,0,2,40,255,5,224,0,4,255,2,252,196,127,79,35,9,0,1,255,3,14,62,204,255,5,158,0,4,255,8,245,255,10,250,44,0,4,255,18,253,97,0,5,255,17,204,60,0,6,21,62,103,145,181,199,215,232,248,255,3,240,215,178,124,49,0,16,4,255,3,0,21,3,255,3,0,21,2,255,3,0,21,1,255,3,0,22,255,3,0,111, -43,36,0,255,0,37,62,163,221,246,246,221,162,62,0,11,11,224,255,2,159,0,10,8,162,255,8,159,7,0,9,141,255,2,235,19,0,10,163,255,10,159,0,8,49,252,255,2,94,0,10,65,255,3,251,109,16,15,109,252,255,3,61,0,6,2,203,255,2,189,0,11,164,255,3,145,0,4,145,255,3,163,0,6,111,255,2,247,37,0,11,223,255,3,47,0,4,48,255,3,222,0,5,28,243,255,2,125,0,12,247,255,3,14,0,4,14,255,3,246,0,5,176,255,2,214,6,0,12,246,255,3,14,0,4,15,255,3,245,0,4,81,255,2,254,61,0,13,222,255,3,48,0,4,49,255,3,221,0,3,13,227,255,2,155,0,14,163,255,3,146,0,4,146,255,3,161,0,3,146,255,2,233,17,0,14,63,255,3,251,108,15,14,107,251,255,3,60,0,2,53,253,255,2,90,0,16,163,255,10,159,0,2,4,207,255,2,185,0,17,8,162,255,8,160,7,0,2,116,255,2,246,35,0,3,60,161,221,245,246,222,163,63,0,8,63,163,222,246,246,222,162,62,0,3,31,244,255,2,121,0,2,7,159,255,8,162,8,0,17,181,255,2,211,5,0,2,160,255,10,162,0,16,86,255,2,254,58,0,2,63,255,3,251,110,16,15,109,252,255,3,64,0,14,15,230,255,2,152,0,3,164,255,3,145,0,4,145,255,3,164,0,14,151,255,2,231,16,0,3,223,255,3,47,0,4,48,255,3,222,0,13,57,254,255,2,87,0,4,247,255,3,14,0,4,14,255,3,246,0,12,5,211,255,2,182,0,5,246,255,3,14,0,4,15,255,3,245,0,12,121,255,2,245,32,0,5,221,255,3,47,0,4,47,255,3,220,0,11,34,246,255,2,117,0,6,161,255,3,144,0,4,141,255,3,161,0,11,185,255,2,208,4,0,6,60,255,3,251,107,15,14,103,250,255,3,59,0,10,91,255,2,253,55,0,8,159,255,10,158,0,10,17,233,255,2,148,0,9,7,159,255,8,160,7,0,10,156,255,2,229,14,0,11,60,161,221,246,246,222,163,62,0,255,0,73, -43,31,0,255,0,2,32,124,187,229,246,251,241,218,186,142,91,30,0,17,6,143,251,255,11,0,16,3,187,255,13,0,16,112,255,14,0,16,209,255,5,186,52,10,14,44,107,197,255,2,0,16,246,255,5,22,0,6,50,187,0,16,239,255,5,43,0,24,179,255,5,184,1,0,23,59,254,255,5,147,0,23,36,228,255,6,146,0,21,86,244,255,8,150,1,0,6,20,255,4,237,0,6,109,254,255,10,155,1,0,5,63,255,4,201,0,5,81,255,13,159,2,0,4,145,255,4,164,0,4,15,235,255,4,241,84,209,255,7,164,3,0,2,21,238,255,4,102,0,4,115,255,5,105,0,1,19,206,255,7,168,4,1,172,255,5,28,0,4,194,255,5,24,0,2,17,204,255,7,172,155,255,5,199,0,5,238,255,5,5,0,3,15,201,255,13,78,0,5,251,255,5,38,0,4,14,198,255,11,202,1,0,5,231,255,5,136,0,5,12,194,255,9,242,37,0,6,190,255,5,250,72,0,5,11,191,255,8,142,0,7,108,255,6,251,131,22,0,2,1,65,200,255,8,244,37,0,6,11,226,255,7,253,224,215,242,255,11,202,4,0,6,67,249,255,22,133,0,7,76,242,255,15,229,227,255,4,253,61,0,7,31,178,254,255,10,249,186,87,4,53,251,255,4,224,15,0,8,36,124,183,224,242,251,238,220,182,137,81,13,0,4,123,255,5,165,0,255,0,25, -43,11,0,91,255,4,0,7,255,4,0,7,255,4,0,7,255,4,0,7,255,4,0,7,255,4,0,7,255,4,0,7,255,4,0,7,255,4,0,7,255,4,0,255,0,24, -43,16,0,119,20,238,255,4,183,0,9,155,255,4,252,42,0,8,45,253,255,4,157,0,9,177,255,4,251,34,0,8,48,255,5,165,0,9,163,255,5,57,0,8,21,250,255,4,211,0,9,111,255,5,121,0,9,199,255,5,38,0,8,20,253,255,4,223,0,9,85,255,5,160,0,9,139,255,5,109,0,9,184,255,5,66,0,9,217,255,5,36,0,9,240,255,5,15,0,9,251,255,5,4,0,9,251,255,5,4,0,9,240,255,5,14,0,9,219,255,5,36,0,9,186,255,5,66,0,9,141,255,5,109,0,9,88,255,5,159,0,9,23,254,255,4,221,0,10,203,255,5,35,0,9,114,255,5,118,0,9,23,251,255,4,208,0,10,165,255,5,54,0,9,50,255,5,163,0,10,178,255,4,250,33,0,9,46,254,255,4,155,0,10,156,255,4,251,41,0,9,21,238,255,4,183,0,66, -43,16,0,114,184,255,4,238,20,0,9,43,252,255,4,153,0,10,157,255,4,253,44,0,9,34,251,255,4,176,0,10,166,255,5,48,0,9,58,255,5,162,0,10,211,255,4,249,20,0,9,122,255,5,109,0,9,39,255,5,198,0,10,224,255,4,253,19,0,9,161,255,5,84,0,9,110,255,5,138,0,9,67,255,5,183,0,9,37,255,5,216,0,9,15,255,5,238,0,9,5,255,5,249,0,9,6,255,5,250,0,9,15,255,5,239,0,9,38,255,5,217,0,9,68,255,5,184,0,9,111,255,5,139,0,9,162,255,5,85,0,9,225,255,4,253,20,0,8,40,255,5,198,0,9,123,255,5,110,0,9,212,255,4,250,21,0,8,59,255,5,162,0,9,167,255,5,48,0,8,35,251,255,4,176,0,9,158,255,4,253,45,0,8,43,252,255,4,154,0,9,184,255,4,238,20,0,71, -43,19,0,160,255,3,0,16,255,3,0,16,255,3,0,9,12,198,83,0,4,255,3,0,4,83,198,12,0,2,126,255,2,196,54,0,2,255,3,0,2,54,196,255,2,125,0,2,173,255,3,254,166,31,255,3,31,166,254,255,3,173,0,3,67,201,255,3,247,255,3,248,255,3,204,69,0,6,82,214,255,7,218,87,1,0,8,8,189,255,5,199,11,0,8,1,86,218,255,7,223,91,1,0,5,69,204,255,3,245,255,3,245,255,3,207,71,0,3,173,255,3,254,161,27,255,3,27,161,254,255,3,174,0,2,126,255,2,193,51,0,2,255,3,0,2,51,193,255,2,125,0,2,12,199,82,0,4,255,3,0,4,83,198,12,0,9,255,3,0,16,255,3,0,16,255,3,0,255,0,95, -43,30,0,255,0,118,255,4,0,26,255,4,0,26,255,4,0,26,255,4,0,26,255,4,0,26,255,4,0,26,255,4,0,26,255,4,0,26,255,4,0,17,255,22,0,8,255,22,0,8,255,22,0,8,255,22,0,17,255,4,0,26,255,4,0,26,255,4,0,26,255,4,0,26,255,4,0,26,255,4,0,26,255,4,0,26,255,4,0,26,255,4,0,255,0,28, -43,14,0,255,0,127,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,7,14,255,5,227,0,7,86,255,5,83,0,7,164,255,4,184,0,7,3,237,255,3,248,36,0,7,63,255,4,130,0,8,140,255,3,222,9,0,8,217,255,3,77,0,63, -43,15,0,255,0,62,255,11,0,4,255,11,0,4,255,11,0,4,255,11,0,4,255,11,0,255,0,2, -43,14,0,255,0,127,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,130, -43,13,0,112,11,247,255,2,216,0,8,81,255,3,138,0,8,159,255,3,60,0,7,2,234,255,2,235,2,0,7,59,255,3,160,0,8,137,255,3,82,0,8,215,255,2,248,11,0,7,36,255,3,181,0,8,115,255,3,103,0,8,193,255,2,254,26,0,7,18,252,255,2,203,0,8,93,255,3,125,0,8,171,255,3,47,0,7,6,242,255,2,224,0,8,71,255,3,147,0,8,149,255,3,68,0,8,226,255,2,240,5,0,7,49,255,3,168,0,8,127,255,3,90,0,8,205,255,2,251,16,0,7,27,255,3,190,0,8,105,255,3,112,0,8,183,255,3,33,0,7,12,248,255,2,211,0,8,83,255,3,133,0,8,161,255,3,55,0,7,3,235,255,2,231,1,0,7,61,255,3,155,0,8,139,255,3,77,0,8,217,255,2,245,9,0,73, -43,25,0,208,47,125,193,222,244,245,222,193,125,47,0,13,35,174,255,10,173,34,0,10,62,241,255,12,240,59,0,8,56,246,255,14,245,53,0,6,9,217,255,16,214,8,0,5,123,255,5,254,151,51,12,11,50,148,253,255,5,120,0,4,2,225,255,5,106,0,6,102,255,5,223,2,0,3,68,255,5,208,0,8,207,255,5,66,0,3,127,255,5,122,0,8,122,255,5,125,0,3,181,255,5,65,0,8,65,255,5,179,0,3,217,255,5,31,0,8,32,255,5,216,0,3,233,255,5,12,0,8,14,255,5,232,0,3,248,255,5,3,0,8,4,255,5,247,0,3,248,255,5,4,0,8,5,255,5,248,0,3,233,255,5,13,0,8,14,255,5,232,0,3,218,255,5,33,0,8,34,255,5,216,0,3,182,255,5,67,0,8,68,255,5,180,0,3,128,255,5,125,0,8,126,255,5,126,0,3,69,255,5,211,1,0,6,1,212,255,5,67,0,3,3,226,255,5,109,0,6,109,255,5,224,2,0,4,125,255,5,254,152,51,11,11,50,152,254,255,5,121,0,5,10,219,255,16,216,8,0,6,58,247,255,14,246,55,0,8,64,242,255,12,241,62,0,10,38,177,255,10,177,36,0,13,48,127,194,223,245,245,224,194,127,48,0,232, -43,25,0,204,21,63,106,149,191,234,255,6,0,13,255,12,0,13,255,12,0,13,255,12,0,13,255,12,0,13,235,192,149,107,64,21,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,13,255,18,0,7,255,18,0,7,255,18,0,7,255,18,0,7,255,18,0,228, -43,25,0,205,1,49,116,165,209,233,248,248,233,208,159,95,12,0,10,48,144,232,255,11,244,123,6,0,8,255,16,196,14,0,7,255,17,183,0,7,255,18,78,0,6,255,3,254,186,109,45,16,7,37,113,233,255,6,170,0,6,255,1,250,150,37,0,7,25,220,255,5,224,0,6,182,39,0,10,78,255,5,248,0,18,12,255,5,241,0,18,21,255,5,222,0,18,90,255,5,183,0,17,14,218,255,5,130,0,16,10,184,255,6,61,0,15,27,199,255,6,207,0,15,75,236,255,6,253,60,0,13,5,141,254,255,7,129,0,13,33,202,255,8,172,2,0,12,84,240,255,8,181,7,0,11,8,151,255,8,251,120,1,0,11,40,209,255,8,225,57,0,12,94,244,255,8,175,17,0,13,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,228, -43,25,0,203,28,84,132,172,204,229,244,252,248,237,218,183,138,66,4,0,10,255,14,222,92,0,9,255,16,140,0,8,255,17,76,0,7,255,17,183,0,7,224,161,111,67,38,15,5,4,22,64,149,251,255,5,233,0,18,85,255,5,246,0,18,9,255,5,217,0,18,81,255,5,162,0,14,4,21,60,139,247,255,4,253,46,0,11,255,11,251,89,0,12,255,10,175,39,0,13,255,10,252,171,34,0,12,255,12,240,60,0,11,255,13,236,20,0,13,7,22,54,113,211,255,6,128,0,17,3,158,255,5,205,0,18,23,255,5,242,0,18,21,255,5,248,0,5,201,92,8,0,9,2,155,255,5,222,0,5,255,2,244,172,106,58,24,8,3,17,49,107,207,255,6,165,0,5,255,19,65,0,5,255,18,154,0,6,255,17,150,4,0,6,55,166,248,255,12,198,69,0,10,12,84,148,195,229,246,252,241,229,201,161,110,34,0,233, -43,25,0,211,7,212,255,7,0,16,139,255,8,0,15,60,253,255,8,0,14,12,221,255,9,0,14,152,255,3,254,255,6,0,13,72,255,4,143,255,6,0,12,17,229,255,3,215,8,255,6,0,12,165,255,3,251,52,0,1,255,6,0,11,84,255,4,129,0,2,255,6,0,10,23,235,255,3,205,5,0,2,255,6,0,10,179,255,3,248,43,0,3,255,6,0,9,98,255,4,116,0,4,255,6,0,8,31,241,255,3,194,2,0,4,255,6,0,7,1,190,255,3,243,34,0,5,255,6,0,7,111,255,4,102,0,6,255,6,0,7,246,255,3,182,0,7,255,6,0,7,255,22,0,3,255,22,0,3,255,22,0,3,255,22,0,3,255,22,0,15,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,230, -43,25,0,204,255,17,0,8,255,17,0,8,255,17,0,8,255,17,0,8,255,17,0,8,255,5,0,20,255,5,0,20,255,5,0,20,255,5,163,214,239,251,237,219,175,120,35,0,11,255,13,254,181,34,0,9,255,15,244,79,0,8,255,16,248,64,0,7,255,17,219,6,0,6,255,2,238,158,93,40,15,4,21,66,150,249,255,6,94,0,6,199,86,5,0,8,45,232,255,5,172,0,18,89,255,5,221,0,18,14,255,5,244,0,18,14,255,5,244,0,18,89,255,5,220,0,5,206,106,17,0,9,43,232,255,5,168,0,5,255,2,251,193,123,74,32,12,3,19,63,146,248,255,6,86,0,5,255,18,206,2,0,5,255,17,239,47,0,6,255,16,230,54,0,7,52,155,242,255,11,246,150,16,0,10,6,66,133,178,217,237,250,247,231,207,158,100,15,0,232, -43,25,0,209,55,128,193,220,241,249,231,192,134,47,0,13,64,200,255,10,199,67,0,9,1,137,255,14,0,9,163,255,15,0,8,112,255,16,0,7,41,249,255,5,232,131,60,20,5,15,47,110,201,255,2,0,7,158,255,5,177,13,0,8,53,188,0,6,22,248,255,4,212,7,0,17,92,255,5,92,14,111,185,232,250,240,218,165,92,6,0,8,151,255,5,119,239,255,8,228,81,0,7,202,255,17,128,0,6,224,255,18,99,0,5,242,255,18,239,18,0,4,251,255,7,179,58,18,9,51,164,255,6,118,0,4,238,255,6,179,0,6,179,255,5,192,0,4,222,255,6,58,0,6,58,255,5,230,0,4,193,255,6,18,0,6,18,255,5,249,0,4,141,255,6,18,0,6,18,255,5,236,0,4,84,255,6,58,0,6,58,255,5,210,0,4,10,239,255,5,179,0,6,179,255,5,147,0,5,145,255,6,178,57,17,8,51,164,255,6,63,0,5,21,234,255,16,187,0,7,80,254,255,14,232,33,0,8,90,250,255,12,228,50,0,10,55,198,255,9,252,165,20,0,13,64,141,203,229,249,243,224,184,121,33,0,232, -43,25,0,202,255,20,0,5,255,20,0,5,255,20,0,5,255,19,253,0,5,255,19,169,0,17,108,255,6,50,0,16,3,223,255,5,187,0,17,90,255,6,68,0,17,208,255,5,205,0,17,73,255,6,86,0,17,192,255,5,219,2,0,16,55,255,6,103,0,17,174,255,5,232,8,0,16,40,253,255,5,121,0,17,157,255,5,242,16,0,16,26,249,255,5,138,0,17,139,255,5,249,26,0,16,16,242,255,5,156,0,17,122,255,5,253,39,0,16,8,232,255,5,174,0,17,104,255,6,55,0,16,3,220,255,5,191,0,17,87,255,6,72,0,17,205,255,5,208,0,17,69,255,6,90,0,17,188,255,5,223,4,0,237, -43,25,0,206,6,73,149,194,229,243,252,243,229,194,149,73,5,0,11,86,225,255,11,223,83,0,9,121,255,15,119,0,7,58,253,255,15,253,57,0,6,167,255,17,166,0,6,228,255,5,234,101,28,7,27,97,232,255,5,227,0,6,250,255,5,70,0,5,69,255,5,249,0,6,239,255,5,13,0,5,13,255,5,238,0,6,191,255,5,69,0,5,70,255,5,189,0,6,94,255,5,232,98,27,6,27,97,232,255,5,91,0,6,2,181,255,15,165,1,0,7,6,143,251,255,11,245,133,2,0,9,18,136,254,255,9,253,129,18,0,9,113,242,255,13,242,113,0,7,142,255,17,142,0,5,68,255,6,158,61,16,4,26,64,164,254,255,5,67,0,4,176,255,5,122,0,7,120,255,5,175,0,4,233,255,5,16,0,7,17,255,5,232,0,4,251,255,5,16,0,7,17,255,5,250,0,4,234,255,5,119,0,7,118,255,5,232,0,4,193,255,5,254,154,59,15,4,24,62,161,254,255,5,192,0,4,109,255,19,109,0,4,8,217,255,17,217,8,0,5,40,225,255,15,226,40,0,7,21,151,251,255,11,252,154,22,0,10,19,98,159,202,231,244,253,244,231,203,161,101,21,0,231, -43,25,0,207,34,121,184,223,242,248,227,201,137,61,0,13,20,165,252,255,9,193,50,0,10,50,228,255,12,248,81,0,8,32,232,255,14,252,74,0,7,187,255,16,230,17,0,5,63,255,6,167,52,9,9,53,170,255,6,140,0,5,147,255,5,181,0,6,170,255,5,237,8,0,4,210,255,5,58,0,6,53,255,6,82,0,4,237,255,5,18,0,6,9,255,6,138,0,4,250,255,5,18,0,6,9,255,6,191,0,4,232,255,5,58,0,6,52,255,6,220,0,4,194,255,5,179,0,6,167,255,6,237,0,4,121,255,6,179,58,18,18,58,181,255,7,251,0,4,21,242,255,18,241,0,5,106,255,18,223,0,6,136,255,17,201,0,7,88,231,255,8,236,115,255,5,150,0,8,7,95,167,220,241,250,232,185,108,11,99,255,5,90,0,17,10,218,255,4,248,21,0,6,186,50,0,8,17,185,255,5,156,0,7,255,2,195,106,44,13,4,20,61,134,235,255,5,248,40,0,7,255,16,110,0,8,255,15,162,0,9,255,14,135,1,0,9,69,203,255,10,198,63,0,13,53,138,196,234,250,241,220,192,127,54,0,234, -43,14,0,200,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,92,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,130, -43,14,0,200,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,92,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,7,14,255,5,227,0,7,86,255,5,83,0,7,164,255,4,184,0,7,3,237,255,3,248,36,0,7,63,255,4,130,0,8,140,255,3,222,9,0,8,217,255,3,77,0,63, -43,30,0,255,0,129,34,122,211,0,24,26,112,201,255,3,0,21,19,102,191,253,255,5,0,18,13,92,181,250,255,8,0,15,8,82,171,246,255,9,203,118,0,12,4,72,161,241,255,9,201,116,32,0,11,1,62,151,235,255,8,254,199,114,30,0,12,52,140,227,255,8,254,197,112,28,0,15,255,8,253,195,110,27,0,18,255,5,253,193,108,25,0,21,255,5,251,184,100,20,0,21,255,8,252,188,103,22,0,18,52,141,228,255,8,252,191,107,25,0,17,1,63,152,235,255,8,253,195,111,28,0,17,4,73,162,241,255,8,254,198,114,30,0,17,8,83,172,246,255,9,202,118,0,18,13,93,182,250,255,8,0,21,19,103,192,253,255,5,0,24,26,113,202,255,3,0,27,35,123,212,0,255,0,78, -43,30,0,255,0,255,0,4,255,23,0,7,255,23,0,7,255,23,0,7,255,23,0,127,255,23,0,7,255,23,0,7,255,23,0,7,255,23,0,255,0,168, -43,30,0,255,0,109,211,122,34,0,27,255,3,200,112,26,0,24,255,5,253,190,102,19,0,21,255,8,250,180,92,13,0,18,118,203,255,9,246,170,82,8,0,17,32,116,201,255,9,241,160,72,4,0,17,30,114,199,254,255,8,235,150,62,1,0,17,28,112,196,254,255,8,227,140,52,0,18,26,110,194,253,255,8,0,21,24,107,192,253,255,5,0,21,19,99,183,250,255,5,0,18,22,103,187,251,255,8,0,15,25,107,191,252,255,8,228,141,52,0,12,27,110,194,253,255,8,235,151,63,1,0,11,31,114,198,254,255,8,241,161,73,4,0,12,118,202,255,9,246,171,83,8,0,15,255,8,250,181,93,13,0,18,255,5,253,191,103,19,0,21,255,3,201,113,26,0,24,212,123,34,0,255,0,98, -43,21,0,170,28,84,133,175,209,235,248,251,238,216,171,103,18,0,8,255,12,242,114,0,7,255,14,145,0,6,255,15,67,0,5,255,15,171,0,5,255,2,223,136,72,26,6,23,88,227,255,5,229,0,5,194,71,1,0,6,59,255,5,249,0,14,12,255,5,231,0,14,85,255,5,181,0,13,36,233,255,5,82,0,12,53,232,255,5,180,0,12,80,246,255,5,209,17,0,11,87,252,255,5,206,23,0,11,51,249,255,5,179,10,0,12,174,255,5,183,4,0,13,236,255,5,38,0,14,255,6,1,0,77,255,6,0,15,255,6,0,15,255,6,0,15,255,6,0,15,255,6,0,15,255,6,0,198, -43,36,0,255,0,45,19,97,161,207,238,251,246,233,201,159,94,22,0,22,37,166,250,255,10,250,171,50,0,18,18,154,251,255,14,254,158,14,0,15,43,220,255,4,204,123,68,28,11,5,21,58,116,195,255,4,221,40,0,13,70,242,255,3,179,46,0,10,44,176,255,3,235,46,0,11,42,242,255,2,237,77,0,14,86,243,255,2,226,24,0,9,17,220,255,2,224,34,0,16,52,239,255,2,181,0,9,154,255,2,236,33,0,18,67,253,255,2,88,0,7,37,251,255,2,73,0,5,41,155,224,248,231,173,57,0,1,255,4,0,3,143,255,2,210,0,7,167,255,2,170,0,5,101,250,255,5,252,93,255,4,0,3,14,243,255,2,62,0,5,20,251,255,2,43,0,4,81,254,255,7,243,255,4,0,4,153,255,2,135,0,5,97,255,2,195,0,4,12,234,255,3,188,45,7,49,194,255,5,0,4,83,255,2,195,0,5,160,255,2,117,0,4,104,255,3,220,8,0,3,11,225,255,4,0,4,31,255,2,227,0,5,205,255,2,61,0,4,179,255,3,107,0,5,111,255,4,0,4,11,255,2,246,0,5,237,255,2,22,0,4,228,255,3,42,0,5,45,255,4,0,4,7,255,2,244,0,5,250,255,2,6,0,4,247,255,3,13,0,5,14,255,4,0,4,28,255,2,222,0,5,250,255,2,11,0,4,248,255,3,14,0,5,16,255,4,0,4,78,255,2,187,0,5,238,255,2,34,0,4,229,255,3,43,0,5,45,255,4,0,4,164,255,2,118,0,5,208,255,2,61,0,4,181,255,3,109,0,5,113,255,4,0,3,46,252,255,1,250,33,0,5,164,255,2,125,0,4,107,255,3,220,8,0,3,10,224,255,4,0,2,29,220,255,2,149,0,6,105,255,2,198,0,4,13,237,255,3,187,45,6,47,192,255,5,30,115,236,255,2,208,13,0,6,27,253,255,1,253,41,0,4,87,255,8,240,255,8,206,26,0,8,184,255,2,171,0,5,107,251,255,5,251,89,255,6,242,133,6,0,9,66,255,2,254,64,0,5,44,158,225,249,232,174,56,0,1,255,2,250,223,168,103,14,0,12,178,255,2,234,30,0,12,23,12,0,17,27,235,255,2,210,28,0,31,67,249,255,2,231,57,0,13,15,165,91,0,15,81,248,255,2,252,158,29,0,9,10,107,227,255,1,241,32,0,15,64,234,255,3,249,185,109,52,28,6,18,41,91,161,236,255,4,188,0,16,25,174,255,16,176,32,0,18,63,184,253,255,10,248,165,59,0,22,27,105,166,209,239,251,245,225,201,147,86,18,0,120, -43,28,0,233,77,255,8,76,0,18,174,255,8,173,0,17,21,250,255,8,250,20,0,16,113,255,10,112,0,16,210,255,10,209,0,15,52,255,12,51,0,14,149,255,5,214,214,255,5,148,0,13,8,238,255,5,117,118,255,5,238,7,0,12,88,255,5,252,24,25,252,255,5,87,0,12,185,255,5,179,0,2,180,255,5,184,0,11,29,253,255,5,81,0,2,82,255,5,253,28,0,10,124,255,5,235,5,0,2,5,235,255,5,123,0,10,220,255,5,143,0,4,144,255,5,219,0,9,63,255,6,46,0,4,47,255,6,62,0,8,160,255,5,205,0,6,206,255,5,159,0,7,13,244,255,5,108,0,6,109,255,5,244,12,0,6,99,255,20,98,0,6,196,255,20,195,0,5,38,255,22,37,0,4,135,255,22,134,0,3,3,229,255,22,228,3,0,2,74,255,6,36,0,10,36,255,6,73,0,2,171,255,5,193,0,12,194,255,5,170,0,1,19,249,255,5,95,0,12,96,255,5,248,18,110,255,5,242,11,0,12,11,243,255,5,109,207,255,5,156,0,14,157,255,5,207,0,252, -43,27,0,219,255,10,253,244,233,209,174,126,55,1,0,9,255,17,211,74,0,8,255,18,254,108,0,7,255,19,250,46,0,6,255,20,151,0,6,255,6,0,5,16,43,123,240,255,5,218,0,6,255,6,0,8,69,255,5,244,0,6,255,6,0,8,7,255,5,239,0,6,255,6,0,8,67,255,5,208,0,6,255,6,0,5,15,42,120,238,255,5,125,0,6,255,19,226,20,0,6,255,18,213,44,0,7,255,18,143,17,0,7,255,19,228,41,0,6,255,20,218,7,0,5,255,6,0,5,4,21,67,159,255,6,104,0,5,255,6,0,9,119,255,5,189,0,5,255,6,0,9,16,255,5,235,0,5,255,6,0,9,17,255,5,251,0,5,255,6,0,9,122,255,5,235,0,5,255,6,0,5,4,21,67,161,255,6,200,0,5,255,21,122,0,5,255,20,231,16,0,5,255,19,240,60,0,6,255,18,180,38,0,7,255,12,248,236,213,171,117,36,0,249, -43,26,0,218,47,110,171,209,228,246,248,233,205,158,99,21,0,11,3,86,203,255,11,253,179,62,0,8,30,197,255,16,0,7,62,237,255,17,0,6,41,239,255,18,0,5,9,221,255,6,252,167,88,33,12,6,21,47,95,155,234,255,2,0,5,118,255,6,211,41,0,9,3,80,197,0,4,11,237,255,5,209,12,0,17,77,255,5,251,37,0,18,149,255,5,162,0,19,202,255,5,83,0,19,224,255,5,30,0,19,245,255,5,9,0,19,246,255,5,8,0,19,225,255,5,29,0,19,203,255,5,81,0,19,150,255,5,161,0,19,78,255,5,251,36,0,18,11,238,255,5,207,11,0,18,119,255,6,208,38,0,9,3,79,197,0,5,9,222,255,6,252,166,86,32,11,5,20,46,94,155,234,255,2,0,6,42,239,255,18,0,7,63,237,255,17,0,8,30,198,255,16,0,9,3,87,204,255,11,253,180,63,0,12,48,111,172,210,229,247,249,234,206,159,99,22,0,238, -43,30,0,243,255,7,250,245,239,224,208,184,152,111,57,4,0,13,255,16,235,147,34,0,11,255,18,251,136,7,0,9,255,20,202,25,0,8,255,21,216,21,0,7,255,6,0,3,9,23,48,96,157,241,255,7,192,2,0,6,255,6,0,8,9,124,247,255,6,104,0,6,255,6,0,10,52,239,255,5,228,5,0,5,255,6,0,11,71,255,6,66,0,5,255,6,0,12,180,255,5,141,0,5,255,6,0,12,92,255,5,199,0,5,255,6,0,12,34,255,5,223,0,5,255,6,0,12,11,255,5,245,0,5,255,6,0,12,12,255,5,244,0,5,255,6,0,12,36,255,5,222,0,5,255,6,0,12,95,255,5,198,0,5,255,6,0,12,184,255,5,140,0,5,255,6,0,11,75,255,6,66,0,5,255,6,0,10,55,241,255,5,228,5,0,5,255,6,0,8,10,126,248,255,6,104,0,6,255,6,0,3,8,22,47,95,158,242,255,7,192,2,0,6,255,21,217,22,0,7,255,20,202,25,0,8,255,18,250,135,7,0,9,255,16,234,145,32,0,11,255,7,252,247,240,225,208,183,152,110,55,3,0,255,0,25, -43,25,0,203,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,6,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,18,0,7,255,18,0,7,255,18,0,7,255,18,0,7,255,18,0,7,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,228, -43,25,0,203,255,18,0,7,255,18,0,7,255,18,0,7,255,18,0,7,255,18,0,7,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,17,0,8,255,17,0,8,255,17,0,8,255,17,0,8,255,17,0,8,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,241, -43,30,0,250,29,92,151,200,220,237,251,243,230,206,166,124,59,4,0,14,66,178,254,255,12,241,155,54,0,10,18,174,255,18,0,9,48,228,255,19,0,8,32,231,255,20,0,7,5,214,255,7,198,110,53,23,6,10,24,48,90,137,205,254,255,2,0,7,110,255,6,223,63,0,11,21,110,207,0,6,9,235,255,5,217,19,0,21,74,255,5,252,43,0,22,147,255,5,165,0,23,201,255,5,84,0,23,224,255,5,30,0,8,255,10,0,5,245,255,5,10,0,8,255,10,0,5,245,255,5,9,0,8,255,10,0,5,224,255,5,31,0,8,255,10,0,5,202,255,5,85,0,8,255,10,0,5,148,255,5,168,0,12,255,6,0,5,76,255,5,253,48,0,11,255,6,0,5,10,236,255,5,222,24,0,10,255,6,0,6,114,255,6,228,72,0,9,255,6,0,6,7,218,255,7,205,115,59,24,8,5,18,45,97,255,6,0,7,37,235,255,21,0,8,55,233,255,20,0,9,24,187,255,17,253,179,0,10,1,79,194,255,13,221,140,35,0,14,40,104,165,207,226,245,251,238,224,194,151,107,41,0,255,0,22, -43,30,0,243,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,24,0,6,255,24,0,6,255,24,0,6,255,24,0,6,255,24,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,255,0,18, -43,13,0,107,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,121, -43,15,0,125,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,8,2,255,5,253,0,8,22,255,5,237,0,8,79,255,5,217,0,7,4,198,255,5,167,0,5,9,60,189,255,6,104,0,4,255,9,240,13,0,4,255,9,115,0,5,255,8,162,0,6,255,6,239,112,0,7,255,1,252,236,215,165,101,12,0,38, -43,29,0,235,255,6,0,9,38,223,255,6,254,115,0,4,255,6,0,8,54,235,255,6,250,91,0,5,255,6,0,7,73,244,255,6,243,70,0,6,255,6,0,6,95,251,255,6,234,52,0,7,255,6,0,5,120,255,7,222,37,0,8,255,6,0,3,1,145,255,7,207,24,0,9,255,6,0,2,6,168,255,7,190,14,0,10,255,6,0,1,14,189,255,7,170,6,0,11,255,6,24,207,255,7,147,2,0,12,255,6,222,255,7,122,0,14,255,12,251,97,0,15,255,11,245,76,0,16,255,11,169,1,0,16,255,12,157,3,0,15,255,13,171,6,0,14,255,6,248,255,7,184,10,0,13,255,6,66,243,255,7,197,16,0,12,255,6,0,1,53,236,255,7,208,23,0,11,255,6,0,2,41,227,255,7,218,31,0,10,255,6,0,3,31,217,255,7,227,40,0,9,255,6,0,4,22,206,255,7,234,50,0,8,255,6,0,5,14,193,255,7,241,61,0,7,255,6,0,6,8,178,255,7,246,74,0,6,255,6,0,7,4,162,255,7,250,88,0,5,255,6,0,8,1,145,255,7,253,103,0,4,255,6,0,10,127,255,8,119,0,255,0,6, -43,23,0,187,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,19,0,4,255,19,0,4,255,19,0,4,255,19,0,4,255,19,0,208, -43,36,0,255,0,36,255,7,121,0,13,121,255,7,0,7,255,7,229,5,0,11,6,230,255,7,0,7,255,8,94,0,11,95,255,8,0,7,255,8,208,0,11,209,255,8,0,7,255,9,68,0,9,69,255,9,0,7,255,9,183,0,9,184,255,9,0,7,255,10,43,0,7,44,255,10,0,7,255,6,197,255,3,157,0,7,158,255,3,196,255,6,0,7,255,6,82,255,3,248,23,0,5,23,248,255,3,81,255,6,0,7,255,6,2,221,255,3,130,0,5,131,255,3,220,2,255,6,0,7,255,6,0,1,109,255,3,235,9,0,3,9,236,255,3,108,0,1,255,6,0,7,255,6,0,1,11,238,255,3,104,0,3,105,255,3,238,11,0,1,255,6,0,7,255,6,0,2,135,255,3,217,1,0,1,2,218,255,3,134,0,2,255,6,0,7,255,6,0,2,26,250,255,3,78,0,1,79,255,3,250,26,0,2,255,6,0,7,255,6,0,3,162,255,3,193,0,1,194,255,3,161,0,3,255,6,0,7,255,6,0,3,47,255,4,105,255,4,47,0,3,255,6,0,7,255,6,0,4,188,255,3,253,255,3,187,0,4,255,6,0,7,255,6,0,4,74,255,7,73,0,4,255,6,0,7,255,6,0,4,1,214,255,5,213,1,0,4,255,6,0,7,255,6,0,5,100,255,5,99,0,5,255,6,0,7,255,6,0,5,8,233,255,3,233,7,0,5,255,6,0,7,255,6,0,17,255,6,0,7,255,6,0,17,255,6,0,7,255,6,0,17,255,6,0,7,255,6,0,17,255,6,0,7,255,6,0,17,255,6,0,255,0,73, -43,30,0,243,255,7,139,0,10,255,6,0,6,255,7,246,26,0,9,255,6,0,6,255,8,152,0,9,255,6,0,6,255,8,251,35,0,8,255,6,0,6,255,9,165,0,8,255,6,0,6,255,9,254,46,0,7,255,6,0,6,255,6,207,255,3,179,0,7,255,6,0,6,255,6,71,255,4,57,0,6,255,6,0,6,255,6,0,1,188,255,3,192,0,6,255,6,0,6,255,6,0,1,51,254,255,3,71,0,5,255,6,0,6,255,6,0,2,168,255,3,204,1,0,4,255,6,0,6,255,6,0,2,35,250,255,3,84,0,4,255,6,0,6,255,6,0,3,147,255,3,215,3,0,3,255,6,0,6,255,6,0,3,22,242,255,3,97,0,3,255,6,0,6,255,6,0,4,127,255,3,225,7,0,2,255,6,0,6,255,6,0,4,12,232,255,3,111,0,2,255,6,0,6,255,6,0,5,106,255,3,233,12,0,1,255,6,0,6,255,6,0,5,4,219,255,3,124,0,1,255,6,0,6,255,6,0,6,85,255,3,240,18,255,6,0,6,255,6,0,7,202,255,3,137,255,6,0,6,255,6,0,7,65,255,3,246,255,6,0,6,255,6,0,8,183,255,9,0,6,255,6,0,8,46,253,255,8,0,6,255,6,0,9,162,255,8,0,6,255,6,0,9,31,248,255,7,0,6,255,6,0,10,141,255,7,0,255,0,18, -43,31,0,255,0,2,9,73,136,193,218,236,251,236,218,194,136,73,10,0,16,17,125,235,255,11,235,125,17,0,13,63,231,255,15,231,62,0,11,101,252,255,17,251,101,0,9,71,252,255,19,252,69,0,7,23,240,255,6,232,126,55,20,5,21,56,127,233,255,6,239,22,0,6,142,255,6,163,10,0,7,11,167,255,6,141,0,5,19,246,255,5,169,0,10,1,173,255,5,246,19,0,4,89,255,5,240,16,0,11,17,242,255,5,87,0,4,156,255,5,143,0,13,145,255,5,154,0,4,206,255,5,73,0,13,75,255,5,204,0,4,226,255,5,26,0,13,28,255,5,225,0,4,246,255,5,8,0,13,10,255,5,245,0,4,246,255,5,8,0,13,8,255,5,246,0,4,227,255,5,26,0,13,27,255,5,225,0,4,206,255,5,72,0,13,74,255,5,205,0,4,158,255,5,142,0,13,144,255,5,156,0,4,90,255,5,239,14,0,11,16,241,255,5,88,0,4,20,247,255,5,166,0,11,170,255,5,247,20,0,5,144,255,6,160,9,0,7,10,164,255,6,143,0,6,24,241,255,6,230,124,54,19,4,19,55,125,232,255,6,240,23,0,7,74,253,255,19,252,73,0,9,105,252,255,17,252,104,0,11,66,233,255,15,233,66,0,13,18,128,236,255,11,236,128,19,0,16,10,75,138,195,219,238,251,238,220,195,138,75,10,0,255,0,33, -43,26,0,211,255,12,243,227,195,144,73,2,0,8,255,17,225,85,0,7,255,19,152,1,0,5,255,20,129,0,5,255,20,249,35,0,4,255,6,0,5,9,38,101,213,255,6,132,0,4,255,6,0,8,7,184,255,5,202,0,4,255,6,0,9,44,255,5,233,0,4,255,6,0,9,7,255,5,250,0,4,255,6,0,9,45,255,5,233,0,4,255,6,0,8,7,185,255,5,202,0,4,255,6,0,5,8,37,100,213,255,6,131,0,4,255,20,249,35,0,4,255,20,129,0,5,255,19,152,1,0,5,255,17,226,87,0,7,255,12,244,229,197,146,73,2,0,8,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,251, -43,31,0,255,0,2,9,73,136,193,218,236,251,237,219,195,139,78,12,0,16,17,125,235,255,11,239,134,23,0,13,63,231,255,15,238,75,0,11,101,252,255,17,254,118,0,9,71,252,255,19,254,85,0,7,23,240,255,6,232,126,55,20,5,21,56,127,233,255,6,246,30,0,6,142,255,6,163,10,0,7,11,167,255,6,153,0,5,19,246,255,5,169,0,10,1,173,255,5,250,24,0,4,88,255,5,240,16,0,11,17,242,255,5,93,0,4,156,255,5,143,0,13,145,255,5,160,0,4,205,255,5,73,0,13,75,255,5,207,0,4,226,255,5,26,0,13,28,255,5,226,0,4,246,255,5,8,0,13,10,255,5,246,0,4,246,255,5,7,0,13,8,255,5,248,0,4,227,255,5,24,0,13,27,255,5,235,0,4,207,255,5,68,0,13,74,255,5,208,0,4,160,255,5,134,0,13,144,255,5,166,0,4,92,255,5,233,9,0,11,16,241,255,5,104,0,4,22,248,255,5,150,0,11,170,255,5,253,28,0,5,148,255,6,142,5,0,7,10,164,255,6,175,0,6,27,243,255,6,223,117,50,18,4,19,55,125,232,255,6,252,49,0,7,79,253,255,20,136,0,9,108,253,255,18,177,3,0,10,67,233,255,16,156,6,0,12,18,126,233,255,12,229,78,0,16,8,71,132,190,217,235,251,255,6,241,36,0,23,78,253,255,5,207,8,0,23,108,255,6,154,0,24,140,255,6,91,0,23,1,170,255,5,244,40,0,23,8,196,255,5,212,10,0,127, -43,28,0,227,255,10,251,240,226,191,147,74,7,0,11,255,16,227,90,0,10,255,18,121,0,9,255,18,252,50,0,8,255,19,154,0,8,255,6,0,3,2,14,49,127,247,255,5,219,0,8,255,6,0,7,93,255,5,244,0,8,255,6,0,7,12,255,5,248,0,8,255,6,0,7,14,255,5,222,0,8,255,6,0,7,97,255,5,162,0,8,255,6,0,3,1,13,49,129,248,255,5,58,0,8,255,18,143,0,9,255,16,248,123,1,0,9,255,15,231,51,0,11,255,16,242,66,0,10,255,17,244,38,0,9,255,6,0,2,7,33,95,208,255,6,186,0,9,255,6,0,5,6,183,255,6,62,0,8,255,6,0,6,19,234,255,5,179,0,8,255,6,0,7,112,255,5,254,37,0,7,255,6,0,7,12,240,255,5,148,0,7,255,6,0,8,140,255,5,244,16,0,6,255,6,0,8,31,252,255,5,117,0,6,255,6,0,9,170,255,5,225,3,0,5,255,6,0,9,57,255,6,86,0,5,255,6,0,10,200,255,5,199,0,254, -43,26,0,215,27,115,172,217,237,250,249,239,221,193,160,115,68,13,0,10,21,159,253,255,12,252,203,0,8,34,224,255,16,0,7,5,212,255,17,0,7,101,255,18,0,7,186,255,5,243,127,51,15,3,12,30,72,121,190,250,255,2,0,7,231,255,5,73,0,9,15,103,205,0,7,250,255,5,11,0,19,236,255,5,97,0,19,188,255,5,253,172,91,34,1,0,15,96,255,9,244,206,166,120,59,6,0,10,3,192,255,13,239,155,42,0,9,16,182,255,14,253,143,5,0,8,1,84,204,255,14,164,0,11,40,111,171,219,253,255,10,71,0,14,9,51,106,174,248,255,6,170,0,18,22,195,255,5,226,0,19,40,255,5,248,0,5,193,67,0,12,12,255,5,241,0,5,255,2,199,97,13,0,9,110,255,5,217,0,5,255,4,245,176,117,61,31,11,3,21,67,159,254,255,5,158,0,5,255,20,70,0,5,255,19,181,0,6,255,18,201,15,0,6,62,145,225,255,13,243,126,8,0,10,33,93,144,181,216,235,247,252,241,227,195,151,85,9,0,240, -43,25,0,200,255,24,0,1,255,24,0,1,255,24,0,1,255,24,0,1,255,24,0,10,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,235, -43,29,0,235,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,250,255,5,4,0,9,4,255,5,249,0,6,233,255,5,20,0,9,21,255,5,232,0,6,213,255,5,63,0,9,65,255,5,212,0,6,164,255,5,146,0,9,149,255,5,162,0,6,101,255,5,249,57,0,7,60,250,255,5,101,0,6,18,244,255,5,247,139,56,15,3,15,57,141,248,255,5,243,18,0,7,139,255,19,138,0,8,9,205,255,17,203,9,0,9,26,201,255,15,201,26,0,11,5,125,234,255,11,233,125,5,0,14,7,84,144,198,226,241,252,241,225,197,144,84,6,0,255,0,14, -43,28,0,224,207,255,5,156,0,14,157,255,5,207,110,255,5,242,10,0,12,11,243,255,5,109,19,249,255,5,94,0,12,95,255,5,249,19,0,1,171,255,5,192,0,12,193,255,5,170,0,2,74,255,5,254,34,0,10,35,254,255,5,73,0,2,3,229,255,5,130,0,10,131,255,5,228,3,0,3,135,255,5,225,2,0,8,2,226,255,5,134,0,4,38,255,6,69,0,8,70,255,6,37,0,5,196,255,5,166,0,8,167,255,5,195,0,6,99,255,5,247,16,0,6,17,247,255,5,98,0,6,13,244,255,5,105,0,6,106,255,5,244,12,0,7,160,255,5,202,0,6,203,255,5,159,0,8,63,255,6,43,0,4,44,255,6,62,0,8,1,220,255,5,141,0,4,142,255,5,220,1,0,9,124,255,5,233,4,0,2,5,234,255,5,123,0,10,29,253,255,5,79,0,2,80,255,5,253,28,0,11,185,255,5,177,0,2,178,255,5,184,0,12,88,255,5,251,23,23,251,255,5,87,0,12,8,238,255,5,115,116,255,5,238,7,0,13,149,255,5,212,213,255,5,148,0,14,52,255,12,51,0,15,210,255,10,209,0,16,113,255,10,112,0,16,21,250,255,8,250,21,0,17,174,255,8,173,0,18,77,255,8,76,0,255,0,6, -43,40,0,255,0,66,225,255,5,75,0,8,103,255,6,114,0,8,75,255,5,225,0,2,163,255,5,137,0,8,165,255,6,176,0,8,137,255,5,163,0,2,101,255,5,199,0,8,226,255,6,236,1,0,7,199,255,5,101,0,2,38,255,5,250,10,0,6,32,255,3,245,240,255,3,44,0,6,10,250,255,5,39,0,3,231,255,5,68,0,6,94,255,3,188,181,255,3,105,0,6,66,255,5,233,0,4,170,255,5,130,0,6,156,255,3,127,119,255,3,167,0,6,128,255,5,172,0,4,107,255,5,192,0,6,217,255,3,65,57,255,3,228,0,6,190,255,5,110,0,4,45,255,5,247,7,0,4,23,255,3,250,9,5,246,255,3,35,0,4,5,246,255,5,49,0,4,1,237,255,5,61,0,4,85,255,3,198,0,2,190,255,3,96,0,4,57,255,5,240,2,0,5,176,255,5,123,0,4,146,255,3,137,0,2,128,255,3,158,0,4,119,255,5,181,0,6,114,255,5,185,0,4,208,255,3,76,0,2,66,255,3,220,0,4,181,255,5,120,0,6,52,255,5,243,4,0,2,16,253,255,2,253,16,0,2,10,250,255,3,26,0,2,2,240,255,5,58,0,6,3,242,255,5,54,0,2,75,255,3,209,0,4,199,255,3,87,0,2,48,255,5,246,6,0,7,183,255,5,116,0,2,137,255,3,147,0,4,137,255,3,149,0,2,110,255,5,191,0,8,121,255,5,178,0,2,199,255,3,86,0,4,75,255,3,211,0,2,172,255,5,129,0,8,59,255,5,238,2,9,250,255,3,24,0,4,15,253,255,2,254,18,0,1,233,255,5,67,0,8,6,246,255,5,47,66,255,3,219,0,6,207,255,3,79,40,255,5,250,10,0,9,190,255,5,109,128,255,3,157,0,6,146,255,3,140,101,255,5,200,0,10,128,255,5,171,189,255,3,96,0,6,84,255,3,202,163,255,5,138,0,10,65,255,5,234,245,255,3,35,0,6,22,255,3,251,230,255,5,76,0,10,9,249,255,8,229,0,8,216,255,8,253,17,0,11,197,255,8,168,0,8,154,255,8,209,0,12,134,255,8,106,0,8,93,255,8,147,0,12,72,255,8,45,0,8,31,255,8,86,0,12,13,252,255,6,237,1,0,9,225,255,7,24,0,13,203,255,6,178,0,10,163,255,6,218,0,255,0,112, -43,28,0,225,167,255,6,168,0,10,169,255,6,166,0,2,17,228,255,6,91,0,8,92,255,6,227,16,0,3,68,254,255,5,240,29,0,6,30,240,255,5,254,67,0,5,144,255,6,190,1,0,4,2,191,255,6,143,0,6,8,213,255,6,115,0,4,116,255,6,212,8,0,7,48,250,255,5,248,44,0,2,45,248,255,5,249,48,0,9,121,255,6,209,6,6,209,255,6,120,0,10,2,195,255,6,138,139,255,6,195,2,0,11,33,242,255,5,253,253,255,5,242,32,0,13,97,255,12,96,0,15,174,255,10,174,0,16,20,232,255,8,231,20,0,17,86,255,8,86,0,18,163,255,8,162,0,17,78,255,10,78,0,15,18,231,255,10,231,18,0,14,165,255,12,164,0,13,80,255,6,218,219,255,6,79,0,11,19,232,255,5,253,60,60,253,255,5,231,18,0,10,167,255,6,142,0,2,143,255,6,166,0,9,82,255,6,217,9,0,2,9,218,255,6,81,0,7,20,233,255,5,253,57,0,4,60,253,255,5,232,19,0,6,169,255,6,139,0,6,142,255,6,168,0,5,84,255,6,215,8,0,6,9,218,255,6,83,0,3,21,234,255,5,252,55,0,8,59,253,255,5,233,20,0,2,170,255,6,137,0,10,141,255,6,170,0,253, -43,26,0,208,171,255,6,136,0,10,137,255,6,170,21,235,255,5,252,53,0,8,54,252,255,5,234,21,0,1,87,255,6,212,6,0,6,7,213,255,6,86,0,3,173,255,6,134,0,6,135,255,6,172,0,4,22,236,255,5,251,51,0,4,52,252,255,5,235,22,0,5,89,255,6,211,6,0,2,6,212,255,6,88,0,7,175,255,6,132,0,2,133,255,6,174,0,8,23,236,255,5,251,50,51,251,255,5,236,23,0,9,90,255,6,210,210,255,6,89,0,11,176,255,12,175,0,12,24,237,255,10,237,23,0,13,92,255,10,91,0,15,178,255,8,177,0,16,25,238,255,6,238,24,0,17,93,255,6,92,0,19,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,244, -43,26,0,210,255,23,0,3,255,23,0,3,255,23,0,3,255,23,0,3,255,22,163,0,16,50,245,255,6,195,6,0,15,27,229,255,6,221,20,0,15,10,205,255,6,239,40,0,15,1,174,255,6,251,67,0,16,136,255,7,101,0,16,95,255,7,140,0,16,61,249,255,6,177,2,0,15,34,235,255,6,206,11,0,15,15,214,255,6,229,27,0,15,4,186,255,6,245,50,0,16,150,255,6,253,80,0,16,110,255,7,117,0,16,73,252,255,6,155,0,16,43,241,255,6,189,5,0,15,22,223,255,6,216,17,0,15,7,197,255,6,236,36,0,16,164,255,22,0,3,255,23,0,3,255,23,0,3,255,23,0,3,255,23,0,235, -43,16,0,115,255,11,0,5,255,11,0,5,255,11,0,5,255,11,0,5,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,11,0,5,255,11,0,5,255,11,0,5,255,11,0,66, -43,13,0,104,217,255,2,245,9,0,8,139,255,3,77,0,8,61,255,3,155,0,8,3,235,255,2,231,1,0,8,161,255,3,55,0,8,83,255,3,133,0,8,12,248,255,2,211,0,9,183,255,3,33,0,8,105,255,3,112,0,8,27,255,3,190,0,9,205,255,2,251,16,0,8,127,255,3,90,0,8,49,255,3,168,0,9,226,255,2,240,5,0,8,149,255,3,68,0,8,71,255,3,147,0,8,6,242,255,2,224,0,9,171,255,3,47,0,8,93,255,3,125,0,8,18,252,255,2,203,0,9,193,255,2,254,26,0,8,115,255,3,103,0,8,37,255,3,181,0,9,215,255,2,248,11,0,8,137,255,3,82,0,8,59,255,3,160,0,8,2,234,255,2,235,2,0,8,159,255,3,60,0,8,81,255,3,138,0,8,11,247,255,2,216,0,65, -43,16,0,114,255,11,0,5,255,11,0,5,255,11,0,5,255,11,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,5,255,11,0,5,255,11,0,5,255,11,0,5,255,11,0,67, -43,30,0,252,50,241,255,3,241,49,0,22,39,234,255,5,234,39,0,20,30,226,255,7,226,30,0,18,22,217,255,9,217,22,0,16,15,207,255,5,200,255,5,206,15,0,14,9,195,255,4,242,88,0,1,87,242,255,4,195,9,0,12,5,182,255,4,207,37,0,3,36,205,255,4,181,5,0,10,2,168,255,4,151,7,0,5,7,148,255,4,167,2,0,9,153,255,3,241,86,0,9,83,240,255,3,152,0,8,137,255,3,206,36,0,11,33,202,255,3,136,0,255,0,255,0,243, -43,18,0,255,0,255,0,192,255,54,0,18, -43,18,0,92,137,255,4,95,0,13,154,255,3,242,34,0,12,2,169,255,3,198,3,0,12,5,182,255,3,129,0,13,9,195,255,2,252,59,0,13,15,207,255,2,223,14,0,13,22,217,255,2,164,0,255,0,255,0,54, -43,24,0,255,0,85,23,71,119,167,202,228,243,252,247,234,216,173,122,36,0,10,255,14,180,31,0,8,255,15,235,39,0,7,255,16,211,2,0,6,255,2,201,117,64,26,10,4,19,57,138,249,255,5,84,0,6,185,47,0,9,90,255,5,161,0,17,8,255,5,216,0,7,10,80,150,192,226,240,251,255,9,238,0,6,107,234,255,15,253,0,5,147,255,18,0,4,71,255,19,0,4,173,255,5,241,119,44,11,0,3,1,255,6,0,4,228,255,5,72,0,6,25,255,6,0,4,249,255,5,9,0,6,108,255,6,0,4,236,255,5,67,0,5,46,239,255,6,0,4,185,255,5,231,93,25,5,35,122,244,255,7,0,4,85,255,19,0,5,174,255,11,124,255,6,0,5,8,160,255,8,238,99,0,1,255,6,0,7,57,158,219,245,247,226,189,115,21,0,2,255,6,0,218, -43,26,0,185,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,2,21,116,194,229,249,232,194,113,14,0,9,255,6,0,1,98,238,255,7,229,73,0,8,255,6,124,255,10,251,84,0,7,255,18,245,38,0,6,255,19,189,0,6,255,7,229,99,26,5,25,96,227,255,6,48,0,5,255,6,234,29,0,5,27,233,255,5,134,0,5,255,6,113,0,7,113,255,5,193,0,5,255,6,38,0,7,38,255,5,228,0,5,255,6,7,0,7,8,255,5,246,0,5,255,6,7,0,7,8,255,5,246,0,5,255,6,38,0,7,38,255,5,228,0,5,255,6,112,0,7,113,255,5,193,0,5,255,6,233,27,0,5,27,233,255,5,134,0,5,255,7,227,98,25,4,24,95,226,255,6,48,0,5,255,19,189,0,6,255,18,245,38,0,6,255,6,125,255,10,251,84,0,7,255,6,0,1,100,240,255,7,230,74,0,8,255,6,0,2,23,120,195,231,250,233,195,114,14,0,240, -43,21,0,255,0,46,6,84,147,202,227,245,246,221,164,79,2,0,8,2,114,231,255,9,219,76,0,6,20,192,255,13,0,5,10,200,255,14,0,5,144,255,15,0,4,31,249,255,6,173,74,23,5,19,64,145,243,255,1,0,4,118,255,5,253,93,0,7,20,169,0,4,188,255,5,151,0,14,224,255,5,51,0,14,245,255,5,10,0,14,245,255,5,10,0,14,224,255,5,51,0,14,188,255,5,150,0,14,118,255,5,253,89,0,7,14,163,0,4,31,249,255,6,170,73,21,4,18,58,134,238,255,1,0,5,144,255,15,0,5,10,201,255,14,0,6,20,193,255,13,0,7,2,116,231,255,9,221,77,0,9,6,85,149,204,229,246,247,222,165,80,3,0,192, -43,26,0,199,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,9,14,113,193,232,249,230,194,116,21,0,2,255,6,0,8,75,230,255,7,238,98,0,1,255,6,0,7,87,251,255,10,123,255,6,0,6,41,247,255,18,0,6,192,255,19,0,5,50,255,6,227,97,25,5,26,98,228,255,7,0,5,136,255,5,233,27,0,5,27,233,255,6,0,5,195,255,5,112,0,7,113,255,6,0,5,230,255,5,37,0,7,38,255,6,0,5,247,255,5,7,0,7,8,255,6,0,5,247,255,5,7,0,7,8,255,6,0,5,230,255,5,37,0,7,38,255,6,0,5,195,255,5,112,0,7,113,255,6,0,5,136,255,5,233,27,0,5,27,233,255,6,0,5,50,255,6,227,96,24,4,24,97,227,255,7,0,6,193,255,19,0,6,41,247,255,18,0,7,87,251,255,10,125,255,6,0,8,76,231,255,7,240,101,0,1,255,6,0,9,14,114,195,233,250,231,196,120,23,0,2,255,6,0,237, -43,24,0,255,0,88,9,92,155,209,231,248,242,221,179,112,24,0,11,3,122,236,255,9,246,140,8,0,8,22,195,255,13,202,25,0,6,10,201,255,15,202,8,0,5,145,255,5,246,129,41,7,14,74,206,255,5,140,0,4,31,249,255,4,252,67,0,5,9,203,255,4,246,24,0,3,118,255,5,146,0,7,69,255,5,112,0,3,188,255,5,60,0,7,11,255,5,179,0,3,225,255,19,221,0,3,246,255,19,242,0,3,246,255,20,0,3,225,255,20,0,3,190,255,5,25,0,17,120,255,5,109,0,17,34,251,255,4,238,45,0,9,15,103,205,0,5,150,255,5,245,137,55,15,3,15,33,75,123,191,251,255,2,0,5,13,206,255,17,0,6,24,198,255,16,0,7,3,120,233,255,14,0,9,6,85,148,202,228,245,253,246,236,216,192,159,122,76,25,0,218, -43,16,0,118,29,129,194,233,249,255,5,0,5,90,245,255,9,0,4,49,252,255,10,0,4,163,255,11,0,4,225,255,5,133,19,0,8,249,255,5,12,0,9,255,6,0,7,255,14,0,2,255,14,0,2,255,14,0,2,255,14,0,2,255,14,0,5,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,150, -43,26,0,255,0,115,11,110,192,232,249,230,196,119,23,0,2,255,6,0,8,67,226,255,7,240,101,0,1,255,6,0,7,78,249,255,10,125,255,6,0,6,35,243,255,18,0,6,186,255,19,0,5,46,255,6,233,103,26,5,27,104,233,255,7,0,5,133,255,5,238,35,0,5,35,239,255,6,0,5,193,255,5,119,0,7,119,255,6,0,5,229,255,5,40,0,7,41,255,6,0,5,247,255,5,8,0,7,9,255,6,0,5,247,255,5,7,0,7,8,255,6,0,5,229,255,5,36,0,7,40,255,6,0,5,192,255,5,108,0,7,118,255,6,0,5,132,255,5,229,23,0,5,33,237,255,6,0,5,45,255,6,224,94,23,4,26,102,232,255,7,0,6,185,255,19,0,6,35,243,255,18,0,7,78,249,255,10,124,255,6,0,8,68,226,255,7,240,100,5,255,5,248,0,9,12,110,193,233,250,231,196,120,23,0,1,26,255,5,227,0,19,79,255,5,198,0,19,183,255,5,129,0,7,189,58,0,9,120,255,5,254,45,0,7,255,2,209,120,61,22,5,10,36,92,193,255,6,160,0,8,255,16,212,19,0,8,255,15,200,24,0,9,255,13,225,110,2,0,10,32,95,146,189,219,241,251,250,236,221,184,133,68,2,0,34, -43,26,0,185,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,2,7,96,177,223,247,240,212,147,40,0,9,255,6,0,1,74,222,255,7,252,119,0,8,255,6,112,253,255,10,104,0,7,255,18,244,18,0,6,255,19,111,0,6,255,7,249,133,40,7,26,121,251,255,5,178,0,6,255,6,254,74,0,5,121,255,5,224,0,6,255,6,160,0,6,42,255,5,242,0,6,255,6,67,0,6,14,255,6,0,6,255,6,19,0,6,4,255,6,0,6,255,6,2,0,6,1,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,237, -43,12,0,87,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,30,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,111, -43,13,0,95,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,33,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,6,6,255,5,246,0,6,27,255,5,229,0,6,86,255,5,186,0,4,8,64,222,255,5,123,0,3,255,8,249,26,0,3,255,8,121,0,4,255,6,254,137,1,0,4,255,3,245,219,157,52,0,19, -43,25,0,178,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,6,38,228,255,6,118,0,4,255,6,0,5,40,230,255,5,252,100,0,5,255,6,0,4,43,232,255,5,249,83,0,6,255,6,0,3,45,234,255,5,243,68,0,7,255,6,0,2,47,235,255,5,236,54,0,8,255,6,0,1,50,237,255,5,228,42,0,9,255,6,53,239,255,5,218,31,0,10,255,6,240,255,5,207,22,0,11,255,11,194,15,0,12,255,11,116,0,13,255,12,110,0,12,255,6,241,255,6,112,0,11,255,6,60,244,255,6,114,0,10,255,6,0,1,66,247,255,6,115,0,9,255,6,0,2,74,249,255,6,117,0,8,255,6,0,3,82,251,255,6,119,0,7,255,6,0,4,89,253,255,6,121,0,6,255,6,0,5,98,254,255,6,123,0,5,255,6,0,6,106,255,7,125,0,4,255,6,0,7,115,255,7,127,0,225, -43,12,0,87,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,111, -43,38,0,255,0,255,0,25,255,6,0,2,30,128,206,237,244,214,156,52,0,5,48,149,212,243,242,216,151,45,0,9,255,6,0,1,109,244,255,7,142,4,0,1,8,147,255,7,253,124,0,8,255,6,130,255,10,149,5,189,255,10,108,0,7,255,17,254,193,255,11,245,19,0,6,255,31,112,0,6,255,7,228,90,18,15,77,233,255,7,229,91,18,16,83,236,255,5,179,0,6,255,6,242,35,0,4,99,255,6,245,37,0,4,93,255,5,224,0,6,255,6,134,0,5,40,255,6,139,0,5,20,255,5,243,0,6,255,6,55,0,5,13,255,6,60,0,6,252,255,5,0,6,255,6,15,0,5,4,255,6,18,0,6,252,255,5,0,6,255,6,2,0,6,255,6,2,0,6,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,255,0,90, -43,26,0,255,0,112,255,6,0,2,7,96,177,223,247,240,212,147,40,0,9,255,6,0,1,74,222,255,7,252,119,0,8,255,6,112,253,255,10,104,0,7,255,18,244,18,0,6,255,19,111,0,6,255,7,249,133,40,7,26,121,251,255,5,178,0,6,255,6,254,74,0,5,121,255,5,224,0,6,255,6,160,0,6,42,255,5,242,0,6,255,6,67,0,6,14,255,6,0,6,255,6,19,0,6,4,255,6,0,6,255,6,2,0,6,1,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,237, -43,25,0,255,0,102,6,86,149,204,228,246,247,229,206,151,89,8,0,11,2,116,232,255,10,233,119,3,0,8,20,192,255,14,194,22,0,6,9,200,255,16,201,9,0,5,144,255,18,145,0,4,31,249,255,5,244,127,44,10,8,42,126,243,255,5,249,31,0,3,118,255,5,243,48,0,6,48,244,255,5,117,0,3,188,255,5,126,0,8,126,255,5,187,0,3,225,255,5,42,0,8,43,255,5,223,0,3,246,255,5,8,0,8,9,255,5,245,0,3,246,255,5,8,0,8,9,255,5,245,0,3,225,255,5,42,0,8,43,255,5,223,0,3,188,255,5,125,0,8,125,255,5,187,0,3,118,255,5,243,46,0,6,45,243,255,5,117,0,3,31,249,255,5,243,125,43,8,8,41,123,242,255,5,249,31,0,4,145,255,18,145,0,5,10,201,255,16,201,10,0,6,20,192,255,14,195,22,0,8,2,117,232,255,10,234,120,3,0,11,7,86,150,205,230,247,248,231,207,153,90,8,0,231, -43,26,0,255,0,112,255,6,0,2,21,116,194,229,249,232,194,113,14,0,9,255,6,0,1,98,238,255,7,229,73,0,8,255,6,124,255,10,251,84,0,7,255,18,245,38,0,6,255,19,189,0,6,255,7,229,99,26,5,25,96,227,255,6,48,0,5,255,6,234,29,0,5,27,233,255,5,134,0,5,255,6,113,0,7,113,255,5,193,0,5,255,6,38,0,7,38,255,5,228,0,5,255,6,7,0,7,8,255,5,246,0,5,255,6,7,0,7,8,255,5,246,0,5,255,6,38,0,7,38,255,5,228,0,5,255,6,112,0,7,113,255,5,193,0,5,255,6,233,27,0,5,27,233,255,5,134,0,5,255,7,227,98,25,4,24,95,226,255,6,48,0,5,255,19,189,0,6,255,18,245,38,0,6,255,6,125,255,10,251,84,0,7,255,6,0,1,100,240,255,7,230,74,0,8,255,6,0,2,23,120,195,231,250,233,195,114,14,0,9,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,43, -43,26,0,255,0,115,14,113,193,232,249,230,196,119,23,0,2,255,6,0,8,75,230,255,7,240,101,0,1,255,6,0,7,87,251,255,10,125,255,6,0,6,41,247,255,18,0,6,193,255,19,0,5,51,255,6,227,97,25,5,26,98,228,255,7,0,5,136,255,5,233,27,0,5,27,233,255,6,0,5,195,255,5,112,0,7,113,255,6,0,5,230,255,5,37,0,7,38,255,6,0,5,247,255,5,7,0,7,8,255,6,0,5,247,255,5,7,0,7,8,255,6,0,5,230,255,5,37,0,7,38,255,6,0,5,194,255,5,112,0,7,113,255,6,0,5,134,255,5,233,27,0,5,27,233,255,6,0,5,50,255,6,227,96,24,4,24,97,227,255,7,0,6,192,255,19,0,6,41,247,255,18,0,7,87,251,255,10,125,255,6,0,8,76,231,255,7,240,101,0,1,255,6,0,9,14,114,195,233,250,231,196,120,23,0,2,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,29, -43,18,0,255,255,6,0,3,57,156,211,239,255,1,252,0,3,255,6,0,1,15,177,255,5,252,0,3,255,6,12,204,255,6,253,0,3,255,6,166,255,7,254,0,3,255,14,254,0,3,255,8,188,77,21,5,27,89,191,0,3,255,7,139,0,10,255,6,204,2,0,10,255,6,97,0,11,255,6,36,0,11,255,6,9,0,11,255,6,0,12,255,6,0,12,255,6,0,12,255,6,0,12,255,6,0,12,255,6,0,12,255,6,0,12,255,6,0,12,255,6,0,171, -43,21,0,255,0,44,44,125,181,218,239,250,250,241,221,196,162,123,76,25,0,5,20,176,255,14,0,4,11,216,255,15,0,4,129,255,16,0,4,212,255,5,212,80,25,5,18,46,98,163,240,255,2,0,4,245,255,5,35,0,7,6,87,200,0,4,244,255,4,254,14,0,14,206,255,5,178,53,6,0,12,118,255,7,251,223,187,148,99,39,0,7,8,198,255,12,215,108,4,0,5,11,136,241,255,12,189,7,0,6,10,81,144,193,231,255,9,117,0,11,10,45,100,211,255,5,206,0,14,31,255,5,244,0,3,199,85,5,0,8,38,255,5,242,0,3,255,2,240,167,104,57,25,9,6,26,85,215,255,5,202,0,3,255,17,108,0,3,255,16,186,3,0,3,255,14,246,138,5,0,4,25,76,122,160,194,218,238,248,253,245,233,204,164,98,21,0,193, -43,17,0,157,255,6,0,11,255,6,0,11,255,6,0,11,255,6,0,11,255,6,0,8,255,15,0,2,255,15,0,2,255,15,0,2,255,15,0,2,255,15,0,5,255,6,0,11,255,6,0,11,255,6,0,11,255,6,0,11,255,6,0,11,255,6,0,11,255,6,0,11,255,6,0,11,247,255,5,23,0,10,232,255,5,153,26,2,0,8,192,255,11,0,5,129,255,11,0,5,31,246,255,10,0,6,89,249,255,9,0,7,38,144,207,240,253,255,5,0,154, -43,26,0,255,0,112,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,5,254,0,8,255,6,0,6,255,5,253,0,8,255,6,0,6,255,5,252,0,8,255,6,0,6,255,5,250,0,8,255,6,0,6,255,5,248,0,8,255,6,0,6,255,5,248,0,8,255,6,0,6,255,5,248,0,7,2,255,6,0,6,255,5,253,0,7,19,255,6,0,6,255,6,9,0,6,66,255,6,0,6,244,255,5,40,0,6,158,255,6,0,6,225,255,5,122,0,5,71,253,255,6,0,6,179,255,5,250,118,25,6,38,130,248,255,7,0,6,112,255,19,0,6,19,244,255,18,0,7,105,255,10,254,113,255,6,0,8,119,252,255,7,225,77,0,1,255,6,0,9,39,146,212,241,248,226,180,101,9,0,2,255,6,0,237, -43,23,0,255,0,68,207,255,5,156,0,8,157,255,5,207,0,1,110,255,5,242,10,0,6,11,243,255,5,109,0,1,19,249,255,5,94,0,6,95,255,5,249,19,0,2,172,255,5,191,0,6,192,255,5,170,0,3,75,255,5,254,33,0,4,34,254,255,5,73,0,3,3,230,255,5,129,0,4,130,255,5,228,3,0,4,136,255,5,224,2,0,2,2,225,255,5,134,0,5,40,255,6,68,0,2,69,255,6,37,0,6,198,255,5,165,0,2,166,255,5,195,0,7,101,255,5,246,15,16,247,255,5,98,0,7,14,245,255,5,103,104,255,5,244,12,0,8,162,255,5,200,201,255,5,159,0,9,65,255,12,62,0,9,1,223,255,10,219,0,11,127,255,10,123,0,11,31,254,255,8,253,28,0,12,188,255,8,184,0,13,91,255,8,87,0,13,9,241,255,6,238,7,0,14,153,255,6,148,0,214, -43,33,0,255,0,208,222,255,5,85,0,5,71,255,5,71,0,5,86,255,5,222,0,2,155,255,5,151,0,5,134,255,5,133,0,5,153,255,5,155,0,2,88,255,5,218,0,5,196,255,5,195,0,5,220,255,5,88,0,2,22,254,255,5,29,0,3,9,249,255,5,249,8,0,3,31,255,5,254,22,0,3,210,255,5,96,0,3,65,255,7,64,0,3,98,255,5,210,0,4,143,255,5,163,0,3,127,255,7,127,0,3,165,255,5,143,0,4,76,255,5,229,0,3,189,255,3,192,255,3,189,0,3,231,255,5,76,0,4,13,251,255,5,40,0,1,5,245,255,3,67,255,3,246,5,0,1,43,255,5,251,13,0,5,198,255,5,107,0,1,58,255,3,227,0,1,227,255,3,58,0,1,110,255,5,198,0,6,131,255,5,174,0,1,120,255,3,165,0,1,165,255,3,121,0,1,177,255,5,131,0,6,64,255,5,238,2,182,255,3,102,0,1,102,255,3,183,3,240,255,5,64,0,6,7,246,255,5,54,241,255,3,40,0,1,40,255,3,242,59,255,5,246,7,0,7,186,255,5,169,255,3,233,0,3,232,255,3,175,255,5,186,0,8,119,255,5,254,255,3,172,0,3,171,255,9,119,0,8,52,255,9,110,0,3,108,255,9,52,0,8,2,238,255,8,47,0,3,46,255,8,238,2,0,9,174,255,7,239,2,0,3,1,237,255,7,174,0,10,107,255,7,179,0,5,177,255,7,107,0,10,40,255,7,117,0,5,114,255,7,40,0,11,229,255,6,55,0,5,51,255,6,229,0,255,0,48, -43,23,0,255,0,68,160,255,6,210,9,0,4,10,213,255,6,160,0,1,11,214,255,6,154,0,4,160,255,6,213,10,0,2,44,246,255,6,89,0,2,96,255,6,245,42,0,4,99,255,6,242,37,42,245,255,6,96,0,6,163,255,6,207,213,255,6,160,0,7,12,216,255,12,213,10,0,8,46,247,255,10,245,42,0,10,102,255,10,96,0,12,166,255,8,160,0,13,13,228,255,6,227,10,0,13,61,252,255,6,253,64,0,12,15,224,255,8,227,17,0,11,167,255,10,170,0,10,94,255,12,97,0,8,34,242,255,6,254,255,5,243,35,0,6,3,198,255,6,150,144,255,6,200,4,0,5,129,255,6,214,9,7,210,255,6,131,0,4,59,252,255,5,248,47,0,2,44,247,255,5,252,60,0,2,14,223,255,6,113,0,4,110,255,6,223,15,0,1,165,255,6,185,1,0,4,1,182,255,6,165,0,207, -43,23,0,255,0,67,203,255,5,176,0,8,147,255,5,209,0,1,98,255,5,252,29,0,6,5,236,255,5,115,0,1,9,238,255,5,132,0,6,80,255,5,252,24,0,2,142,255,5,232,5,0,5,174,255,5,183,0,3,37,254,255,5,88,0,4,18,249,255,5,89,0,4,186,255,5,194,0,4,107,255,5,241,9,0,4,81,255,6,44,0,3,201,255,5,157,0,5,3,227,255,5,150,0,2,39,255,6,63,0,6,125,255,5,242,13,0,1,133,255,5,223,1,0,6,24,250,255,5,105,1,225,255,5,131,0,8,169,255,5,210,66,255,6,37,0,8,64,255,6,210,255,5,199,0,10,213,255,11,105,0,10,108,255,10,249,17,0,10,14,243,255,9,173,0,12,152,255,9,79,0,12,47,255,8,235,5,0,13,197,255,7,147,0,14,91,255,7,53,0,14,6,234,255,5,214,0,15,3,231,255,5,121,0,15,77,255,5,253,29,0,14,2,193,255,5,183,0,13,14,51,169,255,6,72,0,12,228,255,8,194,0,13,228,255,7,244,39,0,13,228,255,6,238,65,0,14,228,255,3,243,207,133,23,0,35, -43,21,0,255,0,41,255,18,0,3,255,18,0,3,255,18,0,3,255,18,0,3,255,17,209,0,11,12,203,255,6,232,30,0,10,5,184,255,6,247,55,0,10,1,163,255,7,88,0,11,140,255,7,128,0,11,115,255,7,167,0,11,91,254,255,6,200,8,0,10,70,250,255,6,225,23,0,10,51,243,255,6,243,46,0,10,36,233,255,6,253,77,0,10,23,221,255,7,115,0,11,206,255,17,0,3,255,18,0,3,255,18,0,3,255,18,0,3,255,18,0,190, -43,26,0,194,13,104,179,225,244,255,4,0,16,54,227,255,8,0,15,20,234,255,9,0,15,127,255,10,0,15,199,255,5,228,85,23,4,0,16,238,255,5,89,0,19,253,255,5,27,0,19,255,6,5,0,19,255,6,0,20,255,6,0,19,3,255,6,0,19,18,255,5,251,0,19,61,255,5,237,0,19,155,255,5,200,0,16,7,42,143,255,6,128,0,15,255,9,217,17,0,15,255,7,234,136,17,0,16,255,7,254,193,52,0,16,255,9,245,41,0,16,8,40,133,252,255,5,156,0,19,138,255,5,217,0,19,47,255,5,245,0,19,11,255,5,254,0,20,255,6,0,20,255,6,0,20,255,6,3,0,19,254,255,5,21,0,19,240,255,5,77,0,19,206,255,5,221,77,21,3,0,16,136,255,10,0,15,25,240,255,9,0,16,62,232,255,8,0,17,16,110,182,226,245,255,4,0,83, -43,13,0,83,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,17, -43,26,0,187,255,4,244,224,179,104,13,0,17,255,8,226,54,0,16,255,9,234,19,0,15,255,10,126,0,16,4,23,85,229,255,5,199,0,19,90,255,5,237,0,19,28,255,5,253,0,19,7,255,6,0,20,255,6,0,20,255,6,0,20,255,6,3,0,19,252,255,5,17,0,19,238,255,5,59,0,19,201,255,5,151,0,19,129,255,5,254,141,42,7,0,16,17,218,255,9,0,16,17,135,234,255,7,0,16,51,192,254,255,7,0,15,41,244,255,9,0,15,157,255,5,252,132,39,8,0,16,218,255,5,135,0,19,246,255,5,46,0,19,255,6,9,0,19,255,6,0,20,255,6,0,19,3,255,6,0,19,22,255,5,254,0,19,78,255,5,239,0,16,3,21,77,221,255,5,206,0,15,255,10,135,0,15,255,9,240,25,0,15,255,8,232,62,0,16,255,4,245,226,182,110,16,0,90, -43,30,0,255,0,255,0,56,33,0,9,20,113,181,228,248,238,212,162,95,25,0,8,10,121,246,0,7,21,150,248,255,8,253,198,124,65,21,4,21,63,136,235,255,2,0,7,241,255,22,0,7,255,22,241,0,7,255,2,249,157,72,25,5,23,65,126,199,253,255,8,249,152,22,0,7,255,1,179,34,0,8,25,96,163,212,239,249,229,184,117,22,0,9,113,0,255,0,255,0,25, -43,22,0,200,255,18,0,4,255,18,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,18,0,4,255,18,0,46, -43,18,0,131,9,116,204,243,243,198,106,6,0,9,31,212,255,6,207,28,0,7,10,213,255,8,208,7,0,6,117,255,2,249,117,24,24,119,250,255,2,108,0,6,205,255,2,117,0,4,120,255,2,199,0,6,245,255,2,24,0,4,25,255,2,243,0,6,245,255,2,22,0,4,23,255,2,243,0,6,208,255,2,111,0,4,114,255,2,201,0,6,123,255,2,247,112,23,23,114,248,255,2,112,0,6,12,219,255,8,213,9,0,7,37,219,255,6,212,32,0,9,12,123,208,245,244,201,111,7,0,255,0,182, -43,24,0,134,95,255,4,136,0,17,34,242,255,3,153,0,17,4,199,255,3,168,2,0,17,130,255,3,182,5,0,17,60,252,255,2,194,9,0,17,15,223,255,2,206,15,0,18,165,255,2,217,21,0,64,9,92,155,209,231,248,242,221,179,112,24,0,11,3,122,236,255,9,246,140,8,0,8,22,195,255,13,202,25,0,6,10,201,255,15,202,8,0,5,145,255,5,246,129,41,7,14,74,206,255,5,140,0,4,31,249,255,4,252,67,0,5,9,203,255,4,246,24,0,3,118,255,5,146,0,7,69,255,5,112,0,3,188,255,5,60,0,7,11,255,5,179,0,3,225,255,19,221,0,3,246,255,19,242,0,3,246,255,20,0,3,225,255,20,0,3,190,255,5,25,0,17,120,255,5,109,0,17,34,251,255,4,238,45,0,9,15,103,205,0,5,150,255,5,245,137,55,15,3,15,33,75,123,191,251,255,2,0,5,13,206,255,17,0,6,24,198,255,16,0,7,3,120,233,255,14,0,9,6,85,148,202,228,245,253,246,236,216,192,159,122,76,25,0,218, -43,24,0,133,95,255,4,136,0,17,34,242,255,3,153,0,17,4,199,255,3,168,2,0,17,130,255,3,182,5,0,17,60,252,255,2,194,9,0,17,15,223,255,2,206,15,0,18,165,255,2,217,21,0,62,23,71,119,167,202,228,243,252,247,234,216,173,122,36,0,10,255,14,180,31,0,8,255,15,235,39,0,7,255,16,211,2,0,6,255,2,201,117,64,26,10,4,19,57,138,249,255,5,84,0,6,185,47,0,9,90,255,5,161,0,17,8,255,5,216,0,7,10,80,150,192,226,240,251,255,9,238,0,6,107,234,255,15,253,0,5,147,255,18,0,4,71,255,19,0,4,173,255,5,241,119,44,11,0,3,1,255,6,0,4,228,255,5,72,0,6,25,255,6,0,4,249,255,5,9,0,6,108,255,6,0,4,236,255,5,67,0,5,46,239,255,6,0,4,185,255,5,231,93,25,5,35,122,244,255,7,0,4,85,255,19,0,5,174,255,11,124,255,6,0,5,8,160,255,8,238,99,0,1,255,6,0,7,57,158,219,245,247,226,189,115,21,0,2,255,6,0,218, -}; - -unsigned char *ftv = fonttable; - -/* fonttable is obtained with: - - if(ch >= 32) { - printf("%d,%d,", txt->h, txt->w); - int rle_last = -1, rle_q = 0; - for(int j=0; j h;j++) { - for(int i=0; i < txt->w; i++) { - int c = (unsigned char) (qpixel(txt, i, j) >> 24); - if(c == rle_last && rle_q < 255) rle_q++; - else { - if(rle_last != -1) printf("%d,%d,", rle_last, rle_q); - if(c == 0 || c == 255) rle_last = c, rle_q = 1; - else { rle_last = -1; printf("%d,", c); } - } - } - } - if(rle_last != -1) printf("%d,%d,", rle_last, rle_q); - printf("\n"); - } - -*/ - -void loadCompressedChar(int &otwidth, int &otheight, int *tpix) { - otheight = *(ftv++); - otwidth = *(ftv++); - int left = otwidth * otheight; - while(left) { - int x = *(ftv++); - if(x == 0 || x == 255) { - x = x * 0x1010101; - int q = *(ftv++); - left -= q; - while(q--) *(tpix++) = x; - } - else { - *(tpix++) = (x << 24) | 0xFFFFFF; - left--; - } - } - } - diff --git a/init.cpp b/init.cpp index d7c069aa..322e3bda 100644 --- a/init.cpp +++ b/init.cpp @@ -1,6 +1,6 @@ -#define VER "9.4g" -#define VERNUM 9407 -#define VERNUM_HEX 0x9407 +#define VER "9.4i" +#define VERNUM 9409 +#define VERNUM_HEX 0x9409 #define GEN_M 0 #define GEN_F 1 @@ -9,6 +9,7 @@ #ifdef MOBILE #define MOBWEB +#define EXTERNALFONT #endif #ifdef WEB @@ -35,12 +36,69 @@ #define NOTRANS #endif +#ifndef STEAM +#define GFX +#endif + +#define GL + +#define PSEUDOKEY_WHEELDOWN 2501 +#define PSEUDOKEY_WHEELUP 2502 + +#ifdef NOGFX +#undef GFX +#endif + +#ifdef MAC +#define NOPNG +#endif + +#ifndef MOBILE +#ifndef NOAUDIO +#define SDLAUDIO +#endif +#endif + +#ifdef MOBILE +#define NOTTF +#endif #ifdef MOBILE #define EXTRALICENSE "\n\nHyperRogue soundtrack by Shawn Parrotte (http://www.shawnparrotte.com), under the Creative Commons BY-SA 3.0 license, http://creativecommons.org/licenses/by-sa/3.0/" #undef XEXTRALICENSE -#ifndef FAKEMOBILE +int fontscale = 100; +bool buttonclicked; +void gdpush(int t); +#endif + +#include + +#ifdef NOSDL +#undef USE_SDL +#endif + +#ifdef USE_SDL +#include + +#ifndef MAC +#undef main +#endif + +#ifdef SDLAUDIO +#include +#endif + +#ifndef NOTTF +#include +#endif + +#ifdef GFX +#define SDLGFX +#include +#endif + +#else #define SDLK_F1 (123001) #define SDLK_F2 (123002) #define SDLK_F3 (123003) @@ -48,6 +106,8 @@ #define SDLK_F5 (123005) #define SDLK_F6 (123006) #define SDLK_F7 (123007) +#define SDLK_F8 (123008) +#define SDLK_F9 (123009) #define SDLK_F10 (123010) #define SDLK_ESCAPE (123099) #define SDLK_F12 (123012) @@ -70,38 +130,68 @@ #define SDLK_KP8 (123038) #define SDLK_KP9 (123039) #define SDLK_KP_PERIOD (123051) +#define SDLK_KP_MINUS (123053) #define SDLK_DELETE (123052) #define SDLK_DELETE (123052) +#define SDLK_KP_ENTER (123054) +#define SDLK_BACKSPACE (123055) +#ifndef FAKEMOBILE +typedef int SDL_Event; +#endif +#define NOSDL +#define NOTTF +#define NOPNG +#undef GFX +#define NOMODEL +#define NORUG +#define NOEDIT +#define NOAUDIO +#undef SDLAUDIO #endif -int fontscale = 100; -bool buttonclicked; -void gdpush(int t); -#endif +#ifdef GL -// desktop +#ifdef WINDOWS + #include +#else + #define GL_GLEXT_PROTOTYPES 1 + #ifndef MOBILE + #ifdef MAC + #include + #include + #else + #include + #include + #endif -#include + #ifdef MAC + #include + #else + #include + #endif + #endif -#ifdef USE_SDL -#include + #ifdef ANDROID + #ifndef FAKE + #include + #include + #include + #endif + #endif + #endif -#ifndef MAC -#undef main -#endif - -#include #endif #include #include #include -#include #include #include #include +#include #include #include +#include #ifdef USE_UNORDERED_MAP #include @@ -182,6 +272,7 @@ void initAll() { eLand f = firstland; // initlanguage(); + cmode = emNormal; initgraph(); #ifndef NOSAVE loadsave(); @@ -474,7 +565,7 @@ void mobile_draw(MOBPAR_FORMAL) { if((cmode == emQuit && !canmove && keyreact && lclicked && !clicked) && !buttonclicked) { cmode = emNormal; printf("back to quit\n"); } - else if(cmode == emScores) handleScoreKeys(0); + else if(cmode == emScores) handleScoreKeys(0, 0); else if(getcstat && keyreact) { if(cmode == (canmove ? emQuit : emNormal)) @@ -542,3 +633,7 @@ void mobile_draw(MOBPAR_FORMAL) { } #endif + +#ifdef NOAUDIO +void playSound(cell*, const string &s, int vol) { printf("play sound: %s vol %d\n", s.c_str(), vol); } +#endif diff --git a/landgen.cpp b/landgen.cpp index 4c8e9242..f929e3e8 100644 --- a/landgen.cpp +++ b/landgen.cpp @@ -1597,12 +1597,21 @@ eLand getNewLand(eLand old) { if(doCross) { whichnow++; eLand tabb[30] = { - laIce, laRedRock, laCaribbean, laWarpCoast, laWhirlwind, laPower, +/* laIce, laRedRock, laCaribbean, laWarpCoast, laWhirlwind, laPower, laMirror, laPalace, laLivefjord, laAlchemist, laCocytus, laHell, laJungle, laCaves, laDesert, laRlyeh, laStorms, laGraveyard, laMotion, laDryForest, laDragon, laZebra, laIvoryTower, laTrollheim, laOvergrown, laBurial, laRose, laHive, laEmerald, - laEmerald + laEmerald */ + laIce, laPalace, laDryForest, laRedRock, laWhirlwind, + laAlchemist, laWarpCoast, laOvergrown, + laEmerald, laWhirlwind, + laIce, laRedRock, laWarpCoast, laPalace, laWhirlwind, + laAlchemist, laDryForest, laOvergrown, + laEmerald, laDesert, + laIce, laRedRock, laWarpCoast, laPalace, laWhirlwind, + laAlchemist, laDryForest, laOvergrown, + laEmerald, laDesert, }; return tabb[whichnow%30]; } @@ -4151,7 +4160,7 @@ void setdist(cell *c, int d, cell *from) { if(k>=4) buildRedWall(c, 20); } } - else if(ishept(c) && hrand(100) < 8 && !c->monst) { + else if(ishept(c) && hrand(100) < (doCross?20:8) && !c->monst) { buildRedWall(c, 80); int i = hrand(7); buildRedWall(createMovR(c, i), 33); @@ -4260,7 +4269,7 @@ void setdist(cell *c, int d, cell *from) { } if(d == 8 && c->land == laOvergrown) { - if(hrand(15000) < 20 + (2 * items[itMutant] + hard) && !safety) { + if(hrand(doCross ?450:15000) < 20 + (2 * items[itMutant] + hard) && !safety) { c->item = itMutant; c->landparam = items[itMutant] + 5 + hrand(11); c->wall = waNone; @@ -4773,7 +4782,7 @@ void setdist(cell *c, int d, cell *from) { c->mondir = NODIR; } if(c->land == laRedRock) { - if(hrand(16000) < 30+items[itRedGem]+hard && !pseudohept(c) && !c->monst && !c->wall) { + if(hrand((doCross && celldist(c) <= 5) ?450:16000) < 30+items[itRedGem]+hard && !pseudohept(c) && !c->monst && !c->wall) { int i = -1; for(int t=0; t<6; t++) if(c->mov[t]->mpdist > c->mpdist && !pseudohept(c->mov[t])) i = t; @@ -4942,7 +4951,7 @@ void setdist(cell *c, int d, cell *from) { if(c->land == laWhirlwind) { if(hrand(4500) < items[itWindstone] + hard) c->monst = moWindCrow; - if(hrand(30000) < items[itWindstone] + hard - 5) + if(hrand(doCross?3000:30000) < items[itWindstone] + hard - 5) c->monst = moAirElemental; } diff --git a/language-pl.cpp b/language-pl.cpp index 7dcbb53f..5ac443fc 100644 --- a/language-pl.cpp +++ b/language-pl.cpp @@ -4940,6 +4940,8 @@ S("field quotient", "przestrzeń ilorazowa ciała") "NEW_ACHIEVEMENT_8_18_DESC" "Defeat a Sandworm in the Zebra Quotient geometry." */ +N("Tortoise", GEN_M, "Żółw", "Żółwie", "Żółwia", "Żółwiem") + #undef Orb diff --git a/mapeditor.cpp b/mapeditor.cpp index 93133d04..ee79901b 100644 --- a/mapeditor.cpp +++ b/mapeditor.cpp @@ -417,6 +417,8 @@ namespace mapeditor { return true; } + int subscreen; //0=normal, 1=config, 2=patterns, 3=predesigned + #ifndef NOEDIT int paintwhat = 0; int painttype = 0; @@ -424,8 +426,6 @@ namespace mapeditor { string paintwhat_str = "clear monster"; cell *copywhat = NULL; int copydir; bool copyflip; - int subscreen; //0=normal, 1=config, 2=patterns, 3=predesigned - bool symRotation, sym01, sym02, sym03; int whichpart; @@ -651,6 +651,7 @@ namespace mapeditor { dialog::addBoolItem(XLAT("display only hexagons"), (whichShape == '6'), '6'); dialog::addBoolItem(XLAT("display only heptagons"), (whichShape == '7'), '7'); dialog::addBoolItem(XLAT("display the triheptagonal grid"), (whichShape == '8'), '8'); + dialog::addItem(XLAT("line patterns"), 'l'); dialog::addItem(XLAT("predesigned patterns"), 'r'); dialog::display(); @@ -1027,7 +1028,7 @@ namespace mapeditor { string& s(cmode == emDraw ? picfile : levelfile); int i = size(s) - (editext?0:4); if(uni > 2000) sym = uni - 2000; - if(sym == SDLK_RETURN || sym == SDLK_ESCAPE) { + if(sym == SDLK_RETURN || sym == SDLK_KP_ENTER || sym == SDLK_ESCAPE) { choosefile = false; return true; } @@ -1076,7 +1077,7 @@ namespace mapeditor { } else if(subscreen == 1) { if(uni >= '1' && uni <= '9') uni = 1000 + uni - '1'; - if(sym == SDLK_RETURN || sym == '-') uni = 1000; + if(sym == SDLK_RETURN || sym == SDLK_KP_ENTER || sym == '-' || sym == SDLK_KP_MINUS) uni = 1000; for(int z=0; z 120) col[j] = 240 - col[j]; if(col[j] < -120) col[j] = -240 - col[j]; @@ -1815,9 +1819,286 @@ namespace mapeditor { col[2] /= 8; return (0x101010 + col[0] + (col[1] << 8) + (col[2] << 16)) >> (err?2:0); } + if(whichCanvas == 'h') { + int col[4]; + bool err = false; + for(int j=0; j<4; j++) { + col[j] = getCdata(c, j); + col[j] *= 6; + col[j] %= 240; + if(col[j] > 120) col[j] = 240 - col[j]; + if(col[j] < -120) col[j] = -240 - col[j]; + } + col[0] /= 4; + col[1] /= 4; + col[2] /= 4; + return (0x202020 + col[0] + (col[1] << 8) + (col[2] << 16)) >> (err?2:0); + } if(whichCanvas == 'F') { return ishept(c) ? 0x202020 : 0xC0C0C0; } return canvasback; } } + +namespace linepatterns { + + int lessalpha(int col, int m) { + part(col, 0) /= m; + return col; + } + + int lessalphaif(int col, bool b) { + return b?lessalpha(col, 4):col; + } + + int lessalphaif(int col, bool b1, bool b2) { + if(b1) col = lessalpha(col, 2); + if(b2) col = lessalpha(col, 2); + return col; + } + + struct { + int id; + const char *lpname; + int color; + } patterns[] = { + + {patTriNet, "triangle grid: not rings", (int) 0xFFFFFF00}, + {patTriRings, "triangle grid: rings", (int) 0xFFFFFF00}, + {patHepta, "heptagonal grid", (int) 0x0000C000}, + {patRhomb, "rhombic tesselation", (int) 0x0000C000}, + {patTrihepta, "triheptagonal tesselation", (int) 0x0000C000}, + {patNormal, "normal tesselation", (int) 0x0000C000}, + {patBigTriangles, "big triangular grid", (int) 0x00606000}, + + {patTree, "underlying tree", (int) 0x00d0d000}, + {patAltTree, "circle/horocycle tree", (int) 0xd000d000}, + + {patZebraTriangles, "zebra triangles", (int) 0x40FF4000}, + {patZebraLines, "zebra lines", (int) 0xFF000000}, + {patVine, "vineyard pattern", (int) 0x8438A400}, + {patPalacelike, "firewall line", (int) 0xFF400000}, + {patPalace, "firewall line: Palace", (int) 0xFFD50000}, + {patPower, "firewall line: Power", (int) 0xFFFF0000}, + {0, NULL, 0} + }; + + void clearAll() { + for(int k=0; patterns[k].lpname; k++) patterns[k].color &= ~255; + } + + bool any() { + for(int k=0; patterns[k].lpname; k++) if(patterns[k].color & 255) return true; + return false; + } + + void setColor(ePattern id, int col) { + for(int k=0; patterns[k].lpname; k++) + if(patterns[k].id == id) patterns[k].color = col; + } + + void switchAlpha(ePattern id, int col) { + for(int k=0; patterns[k].lpname; k++) + if(patterns[k].id == id) patterns[k].color ^= col; + } + + void drawAll() { + + if(any()) for(map::iterator it = gmatrix.begin(); it != gmatrix.end(); it++) { + cell *c = it->first; + transmatrix& V = it->second; + + for(int k=0; patterns[k].lpname; k++) { + int col = patterns[k].color; + if(!(col & 255)) continue; + int id = patterns[k].id; + + switch(id) { + +#define col1 \ + lessalphaif(col, behindsphere(V)) + +#define col2 \ + lessalphaif(col, behindsphere(V), behindsphere(gmatrix[c2])) + + case patZebraTriangles: + if(zebra40(c) / 4 == 10) { + bool all = true; + hyperpoint tri[3]; + for(int i=0; i<3; i++) { + cell *c2 = createMov(c, i*2); + if(!gmatrix.count(c2)) all = false; + else tri[i] = tC0(gmatrix[c2]); + } + + if(all) for(int i=0; i<3; i++) + queueline(tri[i], tri[(i+1)%3], col, 3); + } + break; + + case patZebraLines: + if(!pseudohept(c)) for(int i=0; itype; i+=2) { + cell *c2 = createMov(c, i); + int fv1 = zebra40(c); + if(fv1/4 == 4 || fv1/4 == 6 || fv1/4 == 5 || fv1/4 == 10) fv1 ^= 2; + int fv2 = zebra40(c2); + if(fv2/4 == 4 || fv2/4 == 6 || fv2/4 == 5 || fv2/4 == 10) fv2 ^= 2; + if((fv1&1) == (fv2&1)) continue; + + double x = sphere?.3651:euclid?.2611:.2849; + + queueline(V * ddspin(c,i,-S14) * xpush0(x), + V * ddspin(c,i,+S14) * xpush0(x), + col, 1); + } + break; + + case patNormal: { + double x = sphere?.401:euclid?.3 : .328; + if(euclid || !pseudohept(c)) for(int t=0; ttype; t++) + if(euclid ? c->mov[t]mov[t] < c)) + queueline(V * ddspin(c,t,-S7) * xpush0(x), + V * ddspin(c,t,+S7) * xpush0(x), + col1, 1); + break; + } + + case patTrihepta: + if(!pseudohept(c)) for(int i=0; i<6; i++) { + cell *c2 = c->mov[i]; + if(!c2 || !pseudohept(c2)) continue; + double x = sphere?.3651:euclid?.2611:.2849; + queueline(V * ddspin(c,i,-S14) * xpush0(x), + V * ddspin(c,i,+S14) * xpush0(x), + col2, 1); + } + break; + + case patTriNet: + forCellEx(c2, c) if(c2 > c) if(gmatrix.count(c2)) if(celldist(c) != celldist(c2)) { + queueline(it->second*C0, gmatrix[c2]*C0, + darkena(backcolor ^ 0xFFFFFF, 0, col2), + 2); + } + break; + + case patTriRings: + forCellEx(c2, c) if(c2 > c) if(gmatrix.count(c2) && celldist(c) == celldist(c2)) + queueline(it->second*C0, gmatrix[c2]*C0, + darkena(backcolor ^ 0xFFFFFF, 0, col2), + 2); + break; + + case patHepta: + forCellEx(c2, c) if(c2 > c) if(gmatrix.count(c2) && pseudohept(c) == pseudohept(c2)) + queueline(it->second*C0, gmatrix[c2]*C0, + darkena(backcolor ^ 0xFFFFFF, 0, col2), + 2); + break; + + case patRhomb: + forCellEx(c2, c) if(c2 > c) if(gmatrix.count(c2) && pseudohept(c) != pseudohept(c2)) + queueline(it->second*C0, gmatrix[c2]*C0, + darkena(backcolor ^ 0xFFFFFF, 0, col2), + 2); + break; + + case patPalace: { + int a = polarb50(c); + if(pseudohept(c)) for(int i=0; i<7; i++) { + cell *c1 = createMov(c, (i+3) % 7); + cell *c2 = createMov(c, (i+4) % 7); + if(polarb50(c1) != a && polarb50(c2) != a) + queueline(V * ddspin(c,i,84*5/14) * xpush0(tessf/2), + V * ddspin(c,i,84*9/14) * xpush0(tessf/2), + col, 1); + } + break; + } + + case patPalacelike: + if(pseudohept(c)) for(int i=0; i<7; i++) + queueline(V * ddspin(c,i,84*5/14) * xpush0(tessf/2), + V * ddspin(c,i,84*9/14) * xpush0(tessf/2), + col1, 1); + break; + + case patBigTriangles: { + if(pseudohept(c) && !euclid) for(int i=0; imaster->move[i] < c->master) { + cell *c2 = c->master->move[i]->c7; + queueline(tC0(V), V*xspinpush0((purehepta?M_PI:0) -2*M_PI*i/S7, tessf), col2, 2); + } + break; + } + + case patTree: + if(c->type != 6 && !euclid) + queueline(tC0(V), V*ddi0(purehepta?S42:0, tessf), col1, 2); + break; + + case patAltTree: + if(c->type != 6 && !euclid && c->master->alt) { + for(int i=0; imaster->move[i] && c->master->move[i]->alt == c->master->alt->move[0]) + queueline(tC0(V), V*xspinpush0((purehepta?M_PI:0) -2*M_PI*i/S7, tessf), col, 2); + } + break; + + case patVine: { + int p = emeraldval(c); + double hdist = hdist0(heptmove[0] * heptmove[2] * C0); + if(pseudohept(c) && (p/4 == 10 || p/4 == 8)) + for(int i=0; imov[i] && emeraldval(c->mov[i]) == p-4) { + queueline(tC0(V), V*tC0(heptmove[i]), col, 2); + queueline(tC0(V), V*tC0(spin(-i * ALPHA) * xpush(-hdist/2)), col, 2); + } + break; + } + + case patPower: { + int a = emeraldval(c); + if(pseudohept(c) && a/4 == 8) for(int i=0; i<7; i++) { + heptagon *h1 = c->master->move[(i+1)%7]; + heptagon *h2 = c->master->move[(i+6)%7]; + if(!h1 || !h2) continue; + if(emeraldval(h1->c7)/4 == 8 && emeraldval(h2->c7)/4 == 8) + queueline(V * ddspin(c,i,84*5/14) * xpush0(tessf/2), + V * ddspin(c,i,84*9/14) * xpush0(tessf/2), + col, 1); + } + break; + } + } + } + } + } +#undef col1 +#undef col2 + + int numpat = 0; + + void showMenu() { + dialog::init(XLAT("line patterns")); + + for(numpat=0; patterns[numpat].lpname; numpat++) + dialog::addColorItem(XLAT(patterns[numpat].lpname), patterns[numpat].color, 'a'+numpat); + + dialog::addBreak(50); + dialog::addItem(XLAT("exit menu"), 'v'); + + dialog::addBreak(50); + dialog::addInfo("change the alpha parameter to show the lines"); + + dialog::display(); + } + + void handleMenu(int sym, int uni) { + dialog::handleNavigation(sym, uni); + if(uni >= 'a' && uni < 'a' + numpat) + dialog::openColorDialog(patterns[uni - 'a'].color, NULL); + else if(doexiton(sym,uni)) cmode = emNormal; + } + + }; diff --git a/menus.cpp b/menus.cpp index a50e334f..cc6a5d4a 100644 --- a/menus.cpp +++ b/menus.cpp @@ -6,6 +6,8 @@ #define BLACKISH 0x404040 #define REDDISH 0x400000 +ld whatever = 0; + void showOverview() { DEBB(DF_GRAPH, (debugfile,"show overview\n")); mouseovers = XLAT("world overview"); @@ -166,7 +168,7 @@ void handleOverview(int sym, int uni) { "mousewheel to gain or lose treasures and orbs quickly (Ctrl = precise, Shift = reverse)."; } else if(dialog::handlePageButtons(uni)) ; - else if(uni) cmode = emNormal; + else if(doexiton(sym, uni)) cmode = emNormal; } bool checkHalloweenDate() { @@ -291,7 +293,7 @@ void handleMenuKey(int sym, int uni) { #ifdef ROGUEVIZ else if(uni == 'g') cmode = emRogueviz; #endif - else if(uni || sym == SDLK_F10) { + else if(doexiton(sym, uni)) { cmode = emNormal; msgs.clear(); } @@ -310,6 +312,10 @@ void showVisual1() { dialog::addSelItem(XLAT("movement animation speed"), fts(vid.mspeed), 'r'); dialog::addSelItem(XLAT("projection"), fts(vid.alpha), 'p'); dialog::addSelItem(XLAT("scale factor"), fts(vid.scale), 'z'); + +#ifdef LOCAL + dialog::addSelItem(XLAT("whatever"), fts(whatever), 'j'); +#endif const char *wdmodes[6] = {"ASCII", "black", "plain", "Escher", "plain/3D", "Escher/3D"}; const char *mdmodes[6] = {"ASCII", "items only", "items and monsters", "high contrast", @@ -377,6 +383,54 @@ void projectionDialog() { dialog::sidedialog = true; } +void switchFullscreen() { + vid.full = !vid.full; +#ifdef ANDROID + addMessage(XLAT("Reenter HyperRogue to apply this setting")); + settingsChanged = true; +#endif +#ifndef NOSDL + if(true) { + vid.xres = vid.full ? vid.xscr : 9999; + vid.yres = vid.full ? vid.yscr : 9999; + extern bool setfsize; + setfsize = true; + } + setvideomode(); +#endif + } + +void switchGL() { + vid.usingGL = !vid.usingGL; + if(vid.usingGL) addMessage(XLAT("openGL mode enabled")); + if(!vid.usingGL) addMessage(XLAT("openGL mode disabled")); +#ifndef ANDROID + if(!vid.usingGL) addMessage(XLAT("shift+O to switch anti-aliasing")); +#endif +#ifdef ANDROID + settingsChanged = true; +#else +#ifndef NOSDL + setvideomode(); +#endif +#endif + } + +void switchHardcore() { + if(hardcore && !canmove) { + restartGame(); + hardcore = false; + cmode = emNormal; + } + else if(hardcore && canmove) { hardcore = false; } + else { hardcore = true; canmove = true; hardcoreAt = turncount; } + if(hardcore) + addMessage("One wrong move, and it is game over!"); + else + addMessage("Not so hardcore?"); + if(pureHardcore()) cmode = emNormal; + } + void handleVisual1(int sym, int uni) { dialog::handleNavigation(sym, uni); @@ -388,7 +442,13 @@ void handleVisual1(int sym, int uni) { if(xuni == '6') vid.grid = !vid.grid; if(xuni == 'u') vid.particles = !vid.particles; - + + if(xuni == 'j') { + dialog::editNumber(whatever, -10, 10, 1, 0, XLAT("whatever"), + XLAT("Whatever.")); + dialog::sidedialog = true; + } + if(xuni == 'z') { dialog::editNumber(vid.scale, .001, 1000, .1, 1, XLAT("scale factor"), XLAT("Scale the displayed model.")); @@ -408,22 +468,7 @@ void handleVisual1(int sym, int uni) { glyphsortorder = eGlyphsortorder((glyphsortorder+6+(shiftmul>0?1:-1)) % gsoMAX); } - if(xuni == 'f') { - vid.full = !vid.full; -#ifdef ANDROID - addMessage(XLAT("Reenter HyperRogue to apply this setting")); - settingsChanged = true; -#endif -#ifndef MOBILE - if(true) { - vid.xres = vid.full ? vid.xscr : 9999; - vid.yres = vid.full ? vid.yscr : 9999; - extern bool setfsize; - setfsize = true; - } - setvideomode(); -#endif - } + if(xuni == 'f') switchFullscreen(); if(xuni == 'v') cmode = emNormal; if(sym == SDLK_F2) cmode = emVisual2; @@ -502,7 +547,7 @@ void handleJoystickConfig(int sym, int uni) { cmode = emShmupConfig; if(sym == SDLK_F10) cmode = emNormal; - if(uni) cmode = emShmupConfig; + if(doexiton(sym, uni)) cmode = emShmupConfig; } void show3D() { @@ -672,7 +717,7 @@ void handle3D(int sym, int uni) { else if(uni == 'M') pmodel = (pmodel == mdHyperboloid ? mdDisk : mdHyperboloid); - else if(uni) cmode = emVisual2; + else if(doexiton(sym, uni)) cmode = emVisual2; if(cmode == emNumber) dialog::sidedialog = true; } @@ -717,6 +762,9 @@ void showVisual2() { dialog::addSelItem(XLAT("compass size"), its(vid.mobilecompasssize), 'c'); #endif + dialog::addSelItem(XLAT("aura brightness"), its(vid.aurastr), 'z'); + dialog::addSelItem(XLAT("aura smoothening factor"), its(vid.aurasmoothen), 'x'); + dialog::addBreak(50); dialog::addItem(XLAT("exit configuration"), 'v'); #ifndef NOCONFIG @@ -726,7 +774,6 @@ void showVisual2() { dialog::display(); } - void handleVisual2(int sym, int uni) { dialog::handleNavigation(sym, uni); char xuni = uni; @@ -746,21 +793,7 @@ void handleVisual2(int sym, int uni) { lastmode = cmode, cmode = emHelp; #ifndef ONEGRAPH - if(xuni == 'o' && shiftmul > 0) { - vid.usingGL = !vid.usingGL; - if(vid.usingGL) addMessage(XLAT("openGL mode enabled")); - if(!vid.usingGL) addMessage(XLAT("openGL mode disabled")); -#ifndef ANDROID - if(!vid.usingGL) addMessage(XLAT("shift+O to switch anti-aliasing")); -#endif -#ifdef ANDROID - settingsChanged = true; -#else -#ifndef FAKEMOBILE - setvideomode(); -#endif -#endif - } + if(xuni == 'o' && shiftmul > 0) switchGL(); #ifndef MOBILE if(xuni == 'o' && shiftmul < 0 && !vid.usingGL) { @@ -797,6 +830,11 @@ void handleVisual2(int sym, int uni) { dialog::editNumber(fontscale, 0, 400, 10, 100, XLAT("font scale"), ""); #endif + if(xuni =='z') + dialog::editNumber(vid.aurastr, 0, 256, 10, 128, XLAT("aura brightness"), ""); + if(xuni =='x') + dialog::editNumber(vid.aurasmoothen, 1, 180, 1, 5, XLAT("aura smoothening factor"), ""); + if(xuni == 'e') { dialog::editNumber(vid.eye, -10, 10, 0.01, 0, XLAT("distance between eyes"), XLAT("Watch the Minkowski hyperboloid or the hypersian rug mode with the " @@ -976,26 +1014,14 @@ void handleChangeMode(int sym, int uni) { else if(xuni == 'n') cmode = emNetgen; #endif - else if(xuni == 'h' && !shmup::on) { - if(hardcore && !canmove) { - restartGame(); - hardcore = false; - cmode = emNormal; - } - else if(hardcore && canmove) { hardcore = false; } - else { hardcore = true; canmove = true; hardcoreAt = turncount; } - if(hardcore) - addMessage("One wrong move, and it is game over!"); - else - addMessage("Not so hardcore?"); - if(pureHardcore()) cmode = emNormal; - } + else if(xuni == 'h' && !shmup::on) + switchHardcore(); else if(xuni == 'r') { firstland = laIce; restartGame('r'); cmode = emNormal; } - else if(uni || sym == SDLK_F10) + else if(doexiton(sym, uni)) cmode = emMenu; } @@ -1204,7 +1230,7 @@ void handleEuclidean(int sym, int uni) { cmode = emHelp; lastmode = emPickEuclidean; } - else if(uni || sym == SDLK_F10) cmode = emNormal; + else if(doexiton(sym, uni)) cmode = emNormal; } #ifdef MOBILE @@ -1299,7 +1325,7 @@ void shiftScoreDisplay(int delta) { if(fakescore()) shiftScoreDisplay(delta); } -void handleScoreKeys(int sym) { +void handleScoreKeys(int sym, int uni) { #ifndef MOBILE if(sym == SDLK_LEFT || sym == SDLK_KP4 || sym == 'h' || sym == 'a') shiftScoreDisplay(-1); @@ -1316,7 +1342,7 @@ void handleScoreKeys(int sym) { scorefrom++; else if(sym == 's') sortScores(); else if(sym == 'm') { scoremode++; scoremode %= 3; } - else if(sym != 0) cmode = emNormal; + else if(doexiton(sym, uni)) cmode = emNormal; #else static int scoredragx, scoredragy; extern bool clicked, lclicked; @@ -1356,7 +1382,7 @@ void handleScoreKeys(int sym) { bool monsterpage = false; -void handlePickScoreKeys(int uni) { +void handlePickScoreKeys(int sym, int uni) { extern int andmode; andmode = 2; if(uni == 'm') monsterpage = !monsterpage; else @@ -1366,7 +1392,7 @@ void handlePickScoreKeys(int uni) { scoredisplay = pickscore_options[uni - 1000].second; } else if(mapeditor::editInfix(uni)) ; - else if(uni) cmode = emScores; + else if(doexiton(sym, uni)) cmode = emScores; } void showPickScores() { @@ -1415,6 +1441,12 @@ void showPickScores() { void showHelp() { getcstat = SDLK_ESCAPE; + if(help == "HELPFUN") { + help_delegate(); + dialog::display(); + return; + } + if(help == "@") help = buildHelpText(); string help2; @@ -1440,7 +1472,7 @@ void handleHelp(int sym, int uni) { help = "@"; else if(uni == 'c') help = buildCredits(); - else if(sym != 0 && sym != SDLK_F12) + else if(doexiton(sym, uni)) cmode = lastmode; } @@ -1571,6 +1603,7 @@ void displayMenus() { if(cmode == emVisual2) showVisual2(); if(cmode == emColor) dialog::drawColorDialog(*dialog::colorPointer); if(cmode == emNumber) dialog::drawNumberDialog(); + if(cmode == emLinepattern) linepatterns::showMenu(); #ifndef NOMODEL if(cmode == emNetgen) netgen::show(); diff --git a/netgen.cpp b/netgen.cpp index 0cfceb71..f1542a82 100644 --- a/netgen.cpp +++ b/netgen.cpp @@ -699,7 +699,7 @@ namespace netgen { } else if(uni == 'd') designNet(); else if(uni == 't') mode = 2; - else if(uni || sym == SDLK_F10) + else if(doexiton(sym, uni)) cmode = emNormal; } diff --git a/nofont.cpp b/nofont.cpp new file mode 100644 index 00000000..634e2c6f --- /dev/null +++ b/nofont.cpp @@ -0,0 +1,275 @@ +#ifdef NOTTF +unsigned char fonttable[] = { +43,13,0,255,0,255,0,49, +43,16,0,133,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,236,255,4,235,0,10,206,255,4,205,0,10,176,255,4,175,0,10,146,255,4,145,0,10,116,255,4,115,0,10,86,255,4,85,0,10,55,255,4,55,0,58,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,149, +43,19,0,155,255,4,0,4,255,4,0,7,255,4,0,4,255,4,0,7,255,4,0,4,255,4,0,7,255,4,0,4,255,4,0,7,255,4,0,4,255,4,0,7,255,4,0,4,255,4,0,7,255,4,0,4,255,4,0,7,255,4,0,4,255,4,0,7,255,4,0,4,255,4,0,7,255,4,0,4,255,4,0,255,0,224, +43,30,0,251,152,255,3,72,0,3,28,255,3,188,0,17,223,255,2,247,9,0,3,100,255,3,116,0,16,38,255,3,185,0,4,172,255,3,44,0,16,110,255,3,114,0,3,3,239,255,2,227,0,17,181,255,3,42,0,3,60,255,3,156,0,16,7,245,255,2,227,0,4,132,255,3,84,0,11,255,23,0,7,255,23,0,7,255,23,0,7,255,23,0,11,51,255,3,172,0,4,187,255,3,37,0,16,114,255,3,110,0,3,5,244,255,2,230,0,17,176,255,3,47,0,3,56,255,3,169,0,16,1,237,255,2,239,2,0,3,119,255,3,108,0,16,45,255,3,179,0,4,181,255,3,46,0,11,255,23,0,7,255,23,0,7,255,23,0,7,255,23,0,11,70,255,3,157,0,4,207,255,2,252,12,0,16,131,255,3,95,0,3,15,253,255,2,203,0,17,192,255,3,34,0,3,73,255,3,142,0,16,5,246,255,2,229,0,4,134,255,3,81,0,16,57,255,3,168,0,4,195,255,3,21,0,16,117,255,3,107,0,3,7,248,255,2,215,0,17,178,255,3,46,0,3,61,255,3,154,0,255,0,27, +43,25,0,186,252,255,2,0,22,253,255,2,0,22,254,255,2,0,22,255,3,0,17,24,102,157,193,216,255,3,233,188,130,64,3,0,10,29,169,252,255,11,236,153,51,0,7,58,240,255,16,0,6,21,236,255,17,0,6,137,255,5,238,111,39,255,3,15,46,97,159,238,255,2,0,6,214,255,5,71,0,2,255,3,0,4,5,83,198,0,6,245,255,5,13,0,2,255,3,0,13,244,255,5,85,0,2,255,3,0,13,209,255,5,244,133,59,255,3,0,13,130,255,11,166,119,71,12,0,9,16,227,255,13,249,186,81,2,0,7,38,213,255,15,196,28,0,7,7,106,212,255,14,215,9,0,9,36,105,157,204,255,11,116,0,13,255,3,121,185,255,6,199,0,13,255,3,0,2,106,255,5,238,0,13,255,3,0,2,15,255,5,248,0,4,206,106,18,0,6,255,3,0,2,40,255,5,224,0,4,255,2,252,196,127,79,35,9,0,1,255,3,14,62,204,255,5,158,0,4,255,8,245,255,10,250,44,0,4,255,18,253,97,0,5,255,17,204,60,0,6,21,62,103,145,181,199,215,232,248,255,3,240,215,178,124,49,0,16,4,255,3,0,21,3,255,3,0,21,2,255,3,0,21,1,255,3,0,22,255,3,0,111, +43,36,0,255,0,37,62,163,221,246,246,221,162,62,0,11,11,224,255,2,159,0,10,8,162,255,8,159,7,0,9,141,255,2,235,19,0,10,163,255,10,159,0,8,49,252,255,2,94,0,10,65,255,3,251,109,16,15,109,252,255,3,61,0,6,2,203,255,2,189,0,11,164,255,3,145,0,4,145,255,3,163,0,6,111,255,2,247,37,0,11,223,255,3,47,0,4,48,255,3,222,0,5,28,243,255,2,125,0,12,247,255,3,14,0,4,14,255,3,246,0,5,176,255,2,214,6,0,12,246,255,3,14,0,4,15,255,3,245,0,4,81,255,2,254,61,0,13,222,255,3,48,0,4,49,255,3,221,0,3,13,227,255,2,155,0,14,163,255,3,146,0,4,146,255,3,161,0,3,146,255,2,233,17,0,14,63,255,3,251,108,15,14,107,251,255,3,60,0,2,53,253,255,2,90,0,16,163,255,10,159,0,2,4,207,255,2,185,0,17,8,162,255,8,160,7,0,2,116,255,2,246,35,0,3,60,161,221,245,246,222,163,63,0,8,63,163,222,246,246,222,162,62,0,3,31,244,255,2,121,0,2,7,159,255,8,162,8,0,17,181,255,2,211,5,0,2,160,255,10,162,0,16,86,255,2,254,58,0,2,63,255,3,251,110,16,15,109,252,255,3,64,0,14,15,230,255,2,152,0,3,164,255,3,145,0,4,145,255,3,164,0,14,151,255,2,231,16,0,3,223,255,3,47,0,4,48,255,3,222,0,13,57,254,255,2,87,0,4,247,255,3,14,0,4,14,255,3,246,0,12,5,211,255,2,182,0,5,246,255,3,14,0,4,15,255,3,245,0,12,121,255,2,245,32,0,5,221,255,3,47,0,4,47,255,3,220,0,11,34,246,255,2,117,0,6,161,255,3,144,0,4,141,255,3,161,0,11,185,255,2,208,4,0,6,60,255,3,251,107,15,14,103,250,255,3,59,0,10,91,255,2,253,55,0,8,159,255,10,158,0,10,17,233,255,2,148,0,9,7,159,255,8,160,7,0,10,156,255,2,229,14,0,11,60,161,221,246,246,222,163,62,0,255,0,73, +43,31,0,255,0,2,32,124,187,229,246,251,241,218,186,142,91,30,0,17,6,143,251,255,11,0,16,3,187,255,13,0,16,112,255,14,0,16,209,255,5,186,52,10,14,44,107,197,255,2,0,16,246,255,5,22,0,6,50,187,0,16,239,255,5,43,0,24,179,255,5,184,1,0,23,59,254,255,5,147,0,23,36,228,255,6,146,0,21,86,244,255,8,150,1,0,6,20,255,4,237,0,6,109,254,255,10,155,1,0,5,63,255,4,201,0,5,81,255,13,159,2,0,4,145,255,4,164,0,4,15,235,255,4,241,84,209,255,7,164,3,0,2,21,238,255,4,102,0,4,115,255,5,105,0,1,19,206,255,7,168,4,1,172,255,5,28,0,4,194,255,5,24,0,2,17,204,255,7,172,155,255,5,199,0,5,238,255,5,5,0,3,15,201,255,13,78,0,5,251,255,5,38,0,4,14,198,255,11,202,1,0,5,231,255,5,136,0,5,12,194,255,9,242,37,0,6,190,255,5,250,72,0,5,11,191,255,8,142,0,7,108,255,6,251,131,22,0,2,1,65,200,255,8,244,37,0,6,11,226,255,7,253,224,215,242,255,11,202,4,0,6,67,249,255,22,133,0,7,76,242,255,15,229,227,255,4,253,61,0,7,31,178,254,255,10,249,186,87,4,53,251,255,4,224,15,0,8,36,124,183,224,242,251,238,220,182,137,81,13,0,4,123,255,5,165,0,255,0,25, +43,11,0,91,255,4,0,7,255,4,0,7,255,4,0,7,255,4,0,7,255,4,0,7,255,4,0,7,255,4,0,7,255,4,0,7,255,4,0,7,255,4,0,255,0,24, +43,16,0,119,20,238,255,4,183,0,9,155,255,4,252,42,0,8,45,253,255,4,157,0,9,177,255,4,251,34,0,8,48,255,5,165,0,9,163,255,5,57,0,8,21,250,255,4,211,0,9,111,255,5,121,0,9,199,255,5,38,0,8,20,253,255,4,223,0,9,85,255,5,160,0,9,139,255,5,109,0,9,184,255,5,66,0,9,217,255,5,36,0,9,240,255,5,15,0,9,251,255,5,4,0,9,251,255,5,4,0,9,240,255,5,14,0,9,219,255,5,36,0,9,186,255,5,66,0,9,141,255,5,109,0,9,88,255,5,159,0,9,23,254,255,4,221,0,10,203,255,5,35,0,9,114,255,5,118,0,9,23,251,255,4,208,0,10,165,255,5,54,0,9,50,255,5,163,0,10,178,255,4,250,33,0,9,46,254,255,4,155,0,10,156,255,4,251,41,0,9,21,238,255,4,183,0,66, +43,16,0,114,184,255,4,238,20,0,9,43,252,255,4,153,0,10,157,255,4,253,44,0,9,34,251,255,4,176,0,10,166,255,5,48,0,9,58,255,5,162,0,10,211,255,4,249,20,0,9,122,255,5,109,0,9,39,255,5,198,0,10,224,255,4,253,19,0,9,161,255,5,84,0,9,110,255,5,138,0,9,67,255,5,183,0,9,37,255,5,216,0,9,15,255,5,238,0,9,5,255,5,249,0,9,6,255,5,250,0,9,15,255,5,239,0,9,38,255,5,217,0,9,68,255,5,184,0,9,111,255,5,139,0,9,162,255,5,85,0,9,225,255,4,253,20,0,8,40,255,5,198,0,9,123,255,5,110,0,9,212,255,4,250,21,0,8,59,255,5,162,0,9,167,255,5,48,0,8,35,251,255,4,176,0,9,158,255,4,253,45,0,8,43,252,255,4,154,0,9,184,255,4,238,20,0,71, +43,19,0,160,255,3,0,16,255,3,0,16,255,3,0,9,12,198,83,0,4,255,3,0,4,83,198,12,0,2,126,255,2,196,54,0,2,255,3,0,2,54,196,255,2,125,0,2,173,255,3,254,166,31,255,3,31,166,254,255,3,173,0,3,67,201,255,3,247,255,3,248,255,3,204,69,0,6,82,214,255,7,218,87,1,0,8,8,189,255,5,199,11,0,8,1,86,218,255,7,223,91,1,0,5,69,204,255,3,245,255,3,245,255,3,207,71,0,3,173,255,3,254,161,27,255,3,27,161,254,255,3,174,0,2,126,255,2,193,51,0,2,255,3,0,2,51,193,255,2,125,0,2,12,199,82,0,4,255,3,0,4,83,198,12,0,9,255,3,0,16,255,3,0,16,255,3,0,255,0,95, +43,30,0,255,0,118,255,4,0,26,255,4,0,26,255,4,0,26,255,4,0,26,255,4,0,26,255,4,0,26,255,4,0,26,255,4,0,26,255,4,0,17,255,22,0,8,255,22,0,8,255,22,0,8,255,22,0,17,255,4,0,26,255,4,0,26,255,4,0,26,255,4,0,26,255,4,0,26,255,4,0,26,255,4,0,26,255,4,0,26,255,4,0,255,0,28, +43,14,0,255,0,127,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,7,14,255,5,227,0,7,86,255,5,83,0,7,164,255,4,184,0,7,3,237,255,3,248,36,0,7,63,255,4,130,0,8,140,255,3,222,9,0,8,217,255,3,77,0,63, +43,15,0,255,0,62,255,11,0,4,255,11,0,4,255,11,0,4,255,11,0,4,255,11,0,255,0,2, +43,14,0,255,0,127,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,130, +43,13,0,112,11,247,255,2,216,0,8,81,255,3,138,0,8,159,255,3,60,0,7,2,234,255,2,235,2,0,7,59,255,3,160,0,8,137,255,3,82,0,8,215,255,2,248,11,0,7,36,255,3,181,0,8,115,255,3,103,0,8,193,255,2,254,26,0,7,18,252,255,2,203,0,8,93,255,3,125,0,8,171,255,3,47,0,7,6,242,255,2,224,0,8,71,255,3,147,0,8,149,255,3,68,0,8,226,255,2,240,5,0,7,49,255,3,168,0,8,127,255,3,90,0,8,205,255,2,251,16,0,7,27,255,3,190,0,8,105,255,3,112,0,8,183,255,3,33,0,7,12,248,255,2,211,0,8,83,255,3,133,0,8,161,255,3,55,0,7,3,235,255,2,231,1,0,7,61,255,3,155,0,8,139,255,3,77,0,8,217,255,2,245,9,0,73, +43,25,0,208,47,125,193,222,244,245,222,193,125,47,0,13,35,174,255,10,173,34,0,10,62,241,255,12,240,59,0,8,56,246,255,14,245,53,0,6,9,217,255,16,214,8,0,5,123,255,5,254,151,51,12,11,50,148,253,255,5,120,0,4,2,225,255,5,106,0,6,102,255,5,223,2,0,3,68,255,5,208,0,8,207,255,5,66,0,3,127,255,5,122,0,8,122,255,5,125,0,3,181,255,5,65,0,8,65,255,5,179,0,3,217,255,5,31,0,8,32,255,5,216,0,3,233,255,5,12,0,8,14,255,5,232,0,3,248,255,5,3,0,8,4,255,5,247,0,3,248,255,5,4,0,8,5,255,5,248,0,3,233,255,5,13,0,8,14,255,5,232,0,3,218,255,5,33,0,8,34,255,5,216,0,3,182,255,5,67,0,8,68,255,5,180,0,3,128,255,5,125,0,8,126,255,5,126,0,3,69,255,5,211,1,0,6,1,212,255,5,67,0,3,3,226,255,5,109,0,6,109,255,5,224,2,0,4,125,255,5,254,152,51,11,11,50,152,254,255,5,121,0,5,10,219,255,16,216,8,0,6,58,247,255,14,246,55,0,8,64,242,255,12,241,62,0,10,38,177,255,10,177,36,0,13,48,127,194,223,245,245,224,194,127,48,0,232, +43,25,0,204,21,63,106,149,191,234,255,6,0,13,255,12,0,13,255,12,0,13,255,12,0,13,255,12,0,13,235,192,149,107,64,21,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,13,255,18,0,7,255,18,0,7,255,18,0,7,255,18,0,7,255,18,0,228, +43,25,0,205,1,49,116,165,209,233,248,248,233,208,159,95,12,0,10,48,144,232,255,11,244,123,6,0,8,255,16,196,14,0,7,255,17,183,0,7,255,18,78,0,6,255,3,254,186,109,45,16,7,37,113,233,255,6,170,0,6,255,1,250,150,37,0,7,25,220,255,5,224,0,6,182,39,0,10,78,255,5,248,0,18,12,255,5,241,0,18,21,255,5,222,0,18,90,255,5,183,0,17,14,218,255,5,130,0,16,10,184,255,6,61,0,15,27,199,255,6,207,0,15,75,236,255,6,253,60,0,13,5,141,254,255,7,129,0,13,33,202,255,8,172,2,0,12,84,240,255,8,181,7,0,11,8,151,255,8,251,120,1,0,11,40,209,255,8,225,57,0,12,94,244,255,8,175,17,0,13,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,228, +43,25,0,203,28,84,132,172,204,229,244,252,248,237,218,183,138,66,4,0,10,255,14,222,92,0,9,255,16,140,0,8,255,17,76,0,7,255,17,183,0,7,224,161,111,67,38,15,5,4,22,64,149,251,255,5,233,0,18,85,255,5,246,0,18,9,255,5,217,0,18,81,255,5,162,0,14,4,21,60,139,247,255,4,253,46,0,11,255,11,251,89,0,12,255,10,175,39,0,13,255,10,252,171,34,0,12,255,12,240,60,0,11,255,13,236,20,0,13,7,22,54,113,211,255,6,128,0,17,3,158,255,5,205,0,18,23,255,5,242,0,18,21,255,5,248,0,5,201,92,8,0,9,2,155,255,5,222,0,5,255,2,244,172,106,58,24,8,3,17,49,107,207,255,6,165,0,5,255,19,65,0,5,255,18,154,0,6,255,17,150,4,0,6,55,166,248,255,12,198,69,0,10,12,84,148,195,229,246,252,241,229,201,161,110,34,0,233, +43,25,0,211,7,212,255,7,0,16,139,255,8,0,15,60,253,255,8,0,14,12,221,255,9,0,14,152,255,3,254,255,6,0,13,72,255,4,143,255,6,0,12,17,229,255,3,215,8,255,6,0,12,165,255,3,251,52,0,1,255,6,0,11,84,255,4,129,0,2,255,6,0,10,23,235,255,3,205,5,0,2,255,6,0,10,179,255,3,248,43,0,3,255,6,0,9,98,255,4,116,0,4,255,6,0,8,31,241,255,3,194,2,0,4,255,6,0,7,1,190,255,3,243,34,0,5,255,6,0,7,111,255,4,102,0,6,255,6,0,7,246,255,3,182,0,7,255,6,0,7,255,22,0,3,255,22,0,3,255,22,0,3,255,22,0,3,255,22,0,15,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,230, +43,25,0,204,255,17,0,8,255,17,0,8,255,17,0,8,255,17,0,8,255,17,0,8,255,5,0,20,255,5,0,20,255,5,0,20,255,5,163,214,239,251,237,219,175,120,35,0,11,255,13,254,181,34,0,9,255,15,244,79,0,8,255,16,248,64,0,7,255,17,219,6,0,6,255,2,238,158,93,40,15,4,21,66,150,249,255,6,94,0,6,199,86,5,0,8,45,232,255,5,172,0,18,89,255,5,221,0,18,14,255,5,244,0,18,14,255,5,244,0,18,89,255,5,220,0,5,206,106,17,0,9,43,232,255,5,168,0,5,255,2,251,193,123,74,32,12,3,19,63,146,248,255,6,86,0,5,255,18,206,2,0,5,255,17,239,47,0,6,255,16,230,54,0,7,52,155,242,255,11,246,150,16,0,10,6,66,133,178,217,237,250,247,231,207,158,100,15,0,232, +43,25,0,209,55,128,193,220,241,249,231,192,134,47,0,13,64,200,255,10,199,67,0,9,1,137,255,14,0,9,163,255,15,0,8,112,255,16,0,7,41,249,255,5,232,131,60,20,5,15,47,110,201,255,2,0,7,158,255,5,177,13,0,8,53,188,0,6,22,248,255,4,212,7,0,17,92,255,5,92,14,111,185,232,250,240,218,165,92,6,0,8,151,255,5,119,239,255,8,228,81,0,7,202,255,17,128,0,6,224,255,18,99,0,5,242,255,18,239,18,0,4,251,255,7,179,58,18,9,51,164,255,6,118,0,4,238,255,6,179,0,6,179,255,5,192,0,4,222,255,6,58,0,6,58,255,5,230,0,4,193,255,6,18,0,6,18,255,5,249,0,4,141,255,6,18,0,6,18,255,5,236,0,4,84,255,6,58,0,6,58,255,5,210,0,4,10,239,255,5,179,0,6,179,255,5,147,0,5,145,255,6,178,57,17,8,51,164,255,6,63,0,5,21,234,255,16,187,0,7,80,254,255,14,232,33,0,8,90,250,255,12,228,50,0,10,55,198,255,9,252,165,20,0,13,64,141,203,229,249,243,224,184,121,33,0,232, +43,25,0,202,255,20,0,5,255,20,0,5,255,20,0,5,255,19,253,0,5,255,19,169,0,17,108,255,6,50,0,16,3,223,255,5,187,0,17,90,255,6,68,0,17,208,255,5,205,0,17,73,255,6,86,0,17,192,255,5,219,2,0,16,55,255,6,103,0,17,174,255,5,232,8,0,16,40,253,255,5,121,0,17,157,255,5,242,16,0,16,26,249,255,5,138,0,17,139,255,5,249,26,0,16,16,242,255,5,156,0,17,122,255,5,253,39,0,16,8,232,255,5,174,0,17,104,255,6,55,0,16,3,220,255,5,191,0,17,87,255,6,72,0,17,205,255,5,208,0,17,69,255,6,90,0,17,188,255,5,223,4,0,237, +43,25,0,206,6,73,149,194,229,243,252,243,229,194,149,73,5,0,11,86,225,255,11,223,83,0,9,121,255,15,119,0,7,58,253,255,15,253,57,0,6,167,255,17,166,0,6,228,255,5,234,101,28,7,27,97,232,255,5,227,0,6,250,255,5,70,0,5,69,255,5,249,0,6,239,255,5,13,0,5,13,255,5,238,0,6,191,255,5,69,0,5,70,255,5,189,0,6,94,255,5,232,98,27,6,27,97,232,255,5,91,0,6,2,181,255,15,165,1,0,7,6,143,251,255,11,245,133,2,0,9,18,136,254,255,9,253,129,18,0,9,113,242,255,13,242,113,0,7,142,255,17,142,0,5,68,255,6,158,61,16,4,26,64,164,254,255,5,67,0,4,176,255,5,122,0,7,120,255,5,175,0,4,233,255,5,16,0,7,17,255,5,232,0,4,251,255,5,16,0,7,17,255,5,250,0,4,234,255,5,119,0,7,118,255,5,232,0,4,193,255,5,254,154,59,15,4,24,62,161,254,255,5,192,0,4,109,255,19,109,0,4,8,217,255,17,217,8,0,5,40,225,255,15,226,40,0,7,21,151,251,255,11,252,154,22,0,10,19,98,159,202,231,244,253,244,231,203,161,101,21,0,231, +43,25,0,207,34,121,184,223,242,248,227,201,137,61,0,13,20,165,252,255,9,193,50,0,10,50,228,255,12,248,81,0,8,32,232,255,14,252,74,0,7,187,255,16,230,17,0,5,63,255,6,167,52,9,9,53,170,255,6,140,0,5,147,255,5,181,0,6,170,255,5,237,8,0,4,210,255,5,58,0,6,53,255,6,82,0,4,237,255,5,18,0,6,9,255,6,138,0,4,250,255,5,18,0,6,9,255,6,191,0,4,232,255,5,58,0,6,52,255,6,220,0,4,194,255,5,179,0,6,167,255,6,237,0,4,121,255,6,179,58,18,18,58,181,255,7,251,0,4,21,242,255,18,241,0,5,106,255,18,223,0,6,136,255,17,201,0,7,88,231,255,8,236,115,255,5,150,0,8,7,95,167,220,241,250,232,185,108,11,99,255,5,90,0,17,10,218,255,4,248,21,0,6,186,50,0,8,17,185,255,5,156,0,7,255,2,195,106,44,13,4,20,61,134,235,255,5,248,40,0,7,255,16,110,0,8,255,15,162,0,9,255,14,135,1,0,9,69,203,255,10,198,63,0,13,53,138,196,234,250,241,220,192,127,54,0,234, +43,14,0,200,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,92,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,130, +43,14,0,200,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,92,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,7,14,255,5,227,0,7,86,255,5,83,0,7,164,255,4,184,0,7,3,237,255,3,248,36,0,7,63,255,4,130,0,8,140,255,3,222,9,0,8,217,255,3,77,0,63, +43,30,0,255,0,129,34,122,211,0,24,26,112,201,255,3,0,21,19,102,191,253,255,5,0,18,13,92,181,250,255,8,0,15,8,82,171,246,255,9,203,118,0,12,4,72,161,241,255,9,201,116,32,0,11,1,62,151,235,255,8,254,199,114,30,0,12,52,140,227,255,8,254,197,112,28,0,15,255,8,253,195,110,27,0,18,255,5,253,193,108,25,0,21,255,5,251,184,100,20,0,21,255,8,252,188,103,22,0,18,52,141,228,255,8,252,191,107,25,0,17,1,63,152,235,255,8,253,195,111,28,0,17,4,73,162,241,255,8,254,198,114,30,0,17,8,83,172,246,255,9,202,118,0,18,13,93,182,250,255,8,0,21,19,103,192,253,255,5,0,24,26,113,202,255,3,0,27,35,123,212,0,255,0,78, +43,30,0,255,0,255,0,4,255,23,0,7,255,23,0,7,255,23,0,7,255,23,0,127,255,23,0,7,255,23,0,7,255,23,0,7,255,23,0,255,0,168, +43,30,0,255,0,109,211,122,34,0,27,255,3,200,112,26,0,24,255,5,253,190,102,19,0,21,255,8,250,180,92,13,0,18,118,203,255,9,246,170,82,8,0,17,32,116,201,255,9,241,160,72,4,0,17,30,114,199,254,255,8,235,150,62,1,0,17,28,112,196,254,255,8,227,140,52,0,18,26,110,194,253,255,8,0,21,24,107,192,253,255,5,0,21,19,99,183,250,255,5,0,18,22,103,187,251,255,8,0,15,25,107,191,252,255,8,228,141,52,0,12,27,110,194,253,255,8,235,151,63,1,0,11,31,114,198,254,255,8,241,161,73,4,0,12,118,202,255,9,246,171,83,8,0,15,255,8,250,181,93,13,0,18,255,5,253,191,103,19,0,21,255,3,201,113,26,0,24,212,123,34,0,255,0,98, +43,21,0,170,28,84,133,175,209,235,248,251,238,216,171,103,18,0,8,255,12,242,114,0,7,255,14,145,0,6,255,15,67,0,5,255,15,171,0,5,255,2,223,136,72,26,6,23,88,227,255,5,229,0,5,194,71,1,0,6,59,255,5,249,0,14,12,255,5,231,0,14,85,255,5,181,0,13,36,233,255,5,82,0,12,53,232,255,5,180,0,12,80,246,255,5,209,17,0,11,87,252,255,5,206,23,0,11,51,249,255,5,179,10,0,12,174,255,5,183,4,0,13,236,255,5,38,0,14,255,6,1,0,77,255,6,0,15,255,6,0,15,255,6,0,15,255,6,0,15,255,6,0,15,255,6,0,198, +43,36,0,255,0,45,19,97,161,207,238,251,246,233,201,159,94,22,0,22,37,166,250,255,10,250,171,50,0,18,18,154,251,255,14,254,158,14,0,15,43,220,255,4,204,123,68,28,11,5,21,58,116,195,255,4,221,40,0,13,70,242,255,3,179,46,0,10,44,176,255,3,235,46,0,11,42,242,255,2,237,77,0,14,86,243,255,2,226,24,0,9,17,220,255,2,224,34,0,16,52,239,255,2,181,0,9,154,255,2,236,33,0,18,67,253,255,2,88,0,7,37,251,255,2,73,0,5,41,155,224,248,231,173,57,0,1,255,4,0,3,143,255,2,210,0,7,167,255,2,170,0,5,101,250,255,5,252,93,255,4,0,3,14,243,255,2,62,0,5,20,251,255,2,43,0,4,81,254,255,7,243,255,4,0,4,153,255,2,135,0,5,97,255,2,195,0,4,12,234,255,3,188,45,7,49,194,255,5,0,4,83,255,2,195,0,5,160,255,2,117,0,4,104,255,3,220,8,0,3,11,225,255,4,0,4,31,255,2,227,0,5,205,255,2,61,0,4,179,255,3,107,0,5,111,255,4,0,4,11,255,2,246,0,5,237,255,2,22,0,4,228,255,3,42,0,5,45,255,4,0,4,7,255,2,244,0,5,250,255,2,6,0,4,247,255,3,13,0,5,14,255,4,0,4,28,255,2,222,0,5,250,255,2,11,0,4,248,255,3,14,0,5,16,255,4,0,4,78,255,2,187,0,5,238,255,2,34,0,4,229,255,3,43,0,5,45,255,4,0,4,164,255,2,118,0,5,208,255,2,61,0,4,181,255,3,109,0,5,113,255,4,0,3,46,252,255,1,250,33,0,5,164,255,2,125,0,4,107,255,3,220,8,0,3,10,224,255,4,0,2,29,220,255,2,149,0,6,105,255,2,198,0,4,13,237,255,3,187,45,6,47,192,255,5,30,115,236,255,2,208,13,0,6,27,253,255,1,253,41,0,4,87,255,8,240,255,8,206,26,0,8,184,255,2,171,0,5,107,251,255,5,251,89,255,6,242,133,6,0,9,66,255,2,254,64,0,5,44,158,225,249,232,174,56,0,1,255,2,250,223,168,103,14,0,12,178,255,2,234,30,0,12,23,12,0,17,27,235,255,2,210,28,0,31,67,249,255,2,231,57,0,13,15,165,91,0,15,81,248,255,2,252,158,29,0,9,10,107,227,255,1,241,32,0,15,64,234,255,3,249,185,109,52,28,6,18,41,91,161,236,255,4,188,0,16,25,174,255,16,176,32,0,18,63,184,253,255,10,248,165,59,0,22,27,105,166,209,239,251,245,225,201,147,86,18,0,120, +43,28,0,233,77,255,8,76,0,18,174,255,8,173,0,17,21,250,255,8,250,20,0,16,113,255,10,112,0,16,210,255,10,209,0,15,52,255,12,51,0,14,149,255,5,214,214,255,5,148,0,13,8,238,255,5,117,118,255,5,238,7,0,12,88,255,5,252,24,25,252,255,5,87,0,12,185,255,5,179,0,2,180,255,5,184,0,11,29,253,255,5,81,0,2,82,255,5,253,28,0,10,124,255,5,235,5,0,2,5,235,255,5,123,0,10,220,255,5,143,0,4,144,255,5,219,0,9,63,255,6,46,0,4,47,255,6,62,0,8,160,255,5,205,0,6,206,255,5,159,0,7,13,244,255,5,108,0,6,109,255,5,244,12,0,6,99,255,20,98,0,6,196,255,20,195,0,5,38,255,22,37,0,4,135,255,22,134,0,3,3,229,255,22,228,3,0,2,74,255,6,36,0,10,36,255,6,73,0,2,171,255,5,193,0,12,194,255,5,170,0,1,19,249,255,5,95,0,12,96,255,5,248,18,110,255,5,242,11,0,12,11,243,255,5,109,207,255,5,156,0,14,157,255,5,207,0,252, +43,27,0,219,255,10,253,244,233,209,174,126,55,1,0,9,255,17,211,74,0,8,255,18,254,108,0,7,255,19,250,46,0,6,255,20,151,0,6,255,6,0,5,16,43,123,240,255,5,218,0,6,255,6,0,8,69,255,5,244,0,6,255,6,0,8,7,255,5,239,0,6,255,6,0,8,67,255,5,208,0,6,255,6,0,5,15,42,120,238,255,5,125,0,6,255,19,226,20,0,6,255,18,213,44,0,7,255,18,143,17,0,7,255,19,228,41,0,6,255,20,218,7,0,5,255,6,0,5,4,21,67,159,255,6,104,0,5,255,6,0,9,119,255,5,189,0,5,255,6,0,9,16,255,5,235,0,5,255,6,0,9,17,255,5,251,0,5,255,6,0,9,122,255,5,235,0,5,255,6,0,5,4,21,67,161,255,6,200,0,5,255,21,122,0,5,255,20,231,16,0,5,255,19,240,60,0,6,255,18,180,38,0,7,255,12,248,236,213,171,117,36,0,249, +43,26,0,218,47,110,171,209,228,246,248,233,205,158,99,21,0,11,3,86,203,255,11,253,179,62,0,8,30,197,255,16,0,7,62,237,255,17,0,6,41,239,255,18,0,5,9,221,255,6,252,167,88,33,12,6,21,47,95,155,234,255,2,0,5,118,255,6,211,41,0,9,3,80,197,0,4,11,237,255,5,209,12,0,17,77,255,5,251,37,0,18,149,255,5,162,0,19,202,255,5,83,0,19,224,255,5,30,0,19,245,255,5,9,0,19,246,255,5,8,0,19,225,255,5,29,0,19,203,255,5,81,0,19,150,255,5,161,0,19,78,255,5,251,36,0,18,11,238,255,5,207,11,0,18,119,255,6,208,38,0,9,3,79,197,0,5,9,222,255,6,252,166,86,32,11,5,20,46,94,155,234,255,2,0,6,42,239,255,18,0,7,63,237,255,17,0,8,30,198,255,16,0,9,3,87,204,255,11,253,180,63,0,12,48,111,172,210,229,247,249,234,206,159,99,22,0,238, +43,30,0,243,255,7,250,245,239,224,208,184,152,111,57,4,0,13,255,16,235,147,34,0,11,255,18,251,136,7,0,9,255,20,202,25,0,8,255,21,216,21,0,7,255,6,0,3,9,23,48,96,157,241,255,7,192,2,0,6,255,6,0,8,9,124,247,255,6,104,0,6,255,6,0,10,52,239,255,5,228,5,0,5,255,6,0,11,71,255,6,66,0,5,255,6,0,12,180,255,5,141,0,5,255,6,0,12,92,255,5,199,0,5,255,6,0,12,34,255,5,223,0,5,255,6,0,12,11,255,5,245,0,5,255,6,0,12,12,255,5,244,0,5,255,6,0,12,36,255,5,222,0,5,255,6,0,12,95,255,5,198,0,5,255,6,0,12,184,255,5,140,0,5,255,6,0,11,75,255,6,66,0,5,255,6,0,10,55,241,255,5,228,5,0,5,255,6,0,8,10,126,248,255,6,104,0,6,255,6,0,3,8,22,47,95,158,242,255,7,192,2,0,6,255,21,217,22,0,7,255,20,202,25,0,8,255,18,250,135,7,0,9,255,16,234,145,32,0,11,255,7,252,247,240,225,208,183,152,110,55,3,0,255,0,25, +43,25,0,203,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,6,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,18,0,7,255,18,0,7,255,18,0,7,255,18,0,7,255,18,0,7,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,228, +43,25,0,203,255,18,0,7,255,18,0,7,255,18,0,7,255,18,0,7,255,18,0,7,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,17,0,8,255,17,0,8,255,17,0,8,255,17,0,8,255,17,0,8,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,241, +43,30,0,250,29,92,151,200,220,237,251,243,230,206,166,124,59,4,0,14,66,178,254,255,12,241,155,54,0,10,18,174,255,18,0,9,48,228,255,19,0,8,32,231,255,20,0,7,5,214,255,7,198,110,53,23,6,10,24,48,90,137,205,254,255,2,0,7,110,255,6,223,63,0,11,21,110,207,0,6,9,235,255,5,217,19,0,21,74,255,5,252,43,0,22,147,255,5,165,0,23,201,255,5,84,0,23,224,255,5,30,0,8,255,10,0,5,245,255,5,10,0,8,255,10,0,5,245,255,5,9,0,8,255,10,0,5,224,255,5,31,0,8,255,10,0,5,202,255,5,85,0,8,255,10,0,5,148,255,5,168,0,12,255,6,0,5,76,255,5,253,48,0,11,255,6,0,5,10,236,255,5,222,24,0,10,255,6,0,6,114,255,6,228,72,0,9,255,6,0,6,7,218,255,7,205,115,59,24,8,5,18,45,97,255,6,0,7,37,235,255,21,0,8,55,233,255,20,0,9,24,187,255,17,253,179,0,10,1,79,194,255,13,221,140,35,0,14,40,104,165,207,226,245,251,238,224,194,151,107,41,0,255,0,22, +43,30,0,243,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,24,0,6,255,24,0,6,255,24,0,6,255,24,0,6,255,24,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,255,0,18, +43,13,0,107,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,121, +43,15,0,125,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,9,255,6,0,8,2,255,5,253,0,8,22,255,5,237,0,8,79,255,5,217,0,7,4,198,255,5,167,0,5,9,60,189,255,6,104,0,4,255,9,240,13,0,4,255,9,115,0,5,255,8,162,0,6,255,6,239,112,0,7,255,1,252,236,215,165,101,12,0,38, +43,29,0,235,255,6,0,9,38,223,255,6,254,115,0,4,255,6,0,8,54,235,255,6,250,91,0,5,255,6,0,7,73,244,255,6,243,70,0,6,255,6,0,6,95,251,255,6,234,52,0,7,255,6,0,5,120,255,7,222,37,0,8,255,6,0,3,1,145,255,7,207,24,0,9,255,6,0,2,6,168,255,7,190,14,0,10,255,6,0,1,14,189,255,7,170,6,0,11,255,6,24,207,255,7,147,2,0,12,255,6,222,255,7,122,0,14,255,12,251,97,0,15,255,11,245,76,0,16,255,11,169,1,0,16,255,12,157,3,0,15,255,13,171,6,0,14,255,6,248,255,7,184,10,0,13,255,6,66,243,255,7,197,16,0,12,255,6,0,1,53,236,255,7,208,23,0,11,255,6,0,2,41,227,255,7,218,31,0,10,255,6,0,3,31,217,255,7,227,40,0,9,255,6,0,4,22,206,255,7,234,50,0,8,255,6,0,5,14,193,255,7,241,61,0,7,255,6,0,6,8,178,255,7,246,74,0,6,255,6,0,7,4,162,255,7,250,88,0,5,255,6,0,8,1,145,255,7,253,103,0,4,255,6,0,10,127,255,8,119,0,255,0,6, +43,23,0,187,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,19,0,4,255,19,0,4,255,19,0,4,255,19,0,4,255,19,0,208, +43,36,0,255,0,36,255,7,121,0,13,121,255,7,0,7,255,7,229,5,0,11,6,230,255,7,0,7,255,8,94,0,11,95,255,8,0,7,255,8,208,0,11,209,255,8,0,7,255,9,68,0,9,69,255,9,0,7,255,9,183,0,9,184,255,9,0,7,255,10,43,0,7,44,255,10,0,7,255,6,197,255,3,157,0,7,158,255,3,196,255,6,0,7,255,6,82,255,3,248,23,0,5,23,248,255,3,81,255,6,0,7,255,6,2,221,255,3,130,0,5,131,255,3,220,2,255,6,0,7,255,6,0,1,109,255,3,235,9,0,3,9,236,255,3,108,0,1,255,6,0,7,255,6,0,1,11,238,255,3,104,0,3,105,255,3,238,11,0,1,255,6,0,7,255,6,0,2,135,255,3,217,1,0,1,2,218,255,3,134,0,2,255,6,0,7,255,6,0,2,26,250,255,3,78,0,1,79,255,3,250,26,0,2,255,6,0,7,255,6,0,3,162,255,3,193,0,1,194,255,3,161,0,3,255,6,0,7,255,6,0,3,47,255,4,105,255,4,47,0,3,255,6,0,7,255,6,0,4,188,255,3,253,255,3,187,0,4,255,6,0,7,255,6,0,4,74,255,7,73,0,4,255,6,0,7,255,6,0,4,1,214,255,5,213,1,0,4,255,6,0,7,255,6,0,5,100,255,5,99,0,5,255,6,0,7,255,6,0,5,8,233,255,3,233,7,0,5,255,6,0,7,255,6,0,17,255,6,0,7,255,6,0,17,255,6,0,7,255,6,0,17,255,6,0,7,255,6,0,17,255,6,0,7,255,6,0,17,255,6,0,255,0,73, +43,30,0,243,255,7,139,0,10,255,6,0,6,255,7,246,26,0,9,255,6,0,6,255,8,152,0,9,255,6,0,6,255,8,251,35,0,8,255,6,0,6,255,9,165,0,8,255,6,0,6,255,9,254,46,0,7,255,6,0,6,255,6,207,255,3,179,0,7,255,6,0,6,255,6,71,255,4,57,0,6,255,6,0,6,255,6,0,1,188,255,3,192,0,6,255,6,0,6,255,6,0,1,51,254,255,3,71,0,5,255,6,0,6,255,6,0,2,168,255,3,204,1,0,4,255,6,0,6,255,6,0,2,35,250,255,3,84,0,4,255,6,0,6,255,6,0,3,147,255,3,215,3,0,3,255,6,0,6,255,6,0,3,22,242,255,3,97,0,3,255,6,0,6,255,6,0,4,127,255,3,225,7,0,2,255,6,0,6,255,6,0,4,12,232,255,3,111,0,2,255,6,0,6,255,6,0,5,106,255,3,233,12,0,1,255,6,0,6,255,6,0,5,4,219,255,3,124,0,1,255,6,0,6,255,6,0,6,85,255,3,240,18,255,6,0,6,255,6,0,7,202,255,3,137,255,6,0,6,255,6,0,7,65,255,3,246,255,6,0,6,255,6,0,8,183,255,9,0,6,255,6,0,8,46,253,255,8,0,6,255,6,0,9,162,255,8,0,6,255,6,0,9,31,248,255,7,0,6,255,6,0,10,141,255,7,0,255,0,18, +43,31,0,255,0,2,9,73,136,193,218,236,251,236,218,194,136,73,10,0,16,17,125,235,255,11,235,125,17,0,13,63,231,255,15,231,62,0,11,101,252,255,17,251,101,0,9,71,252,255,19,252,69,0,7,23,240,255,6,232,126,55,20,5,21,56,127,233,255,6,239,22,0,6,142,255,6,163,10,0,7,11,167,255,6,141,0,5,19,246,255,5,169,0,10,1,173,255,5,246,19,0,4,89,255,5,240,16,0,11,17,242,255,5,87,0,4,156,255,5,143,0,13,145,255,5,154,0,4,206,255,5,73,0,13,75,255,5,204,0,4,226,255,5,26,0,13,28,255,5,225,0,4,246,255,5,8,0,13,10,255,5,245,0,4,246,255,5,8,0,13,8,255,5,246,0,4,227,255,5,26,0,13,27,255,5,225,0,4,206,255,5,72,0,13,74,255,5,205,0,4,158,255,5,142,0,13,144,255,5,156,0,4,90,255,5,239,14,0,11,16,241,255,5,88,0,4,20,247,255,5,166,0,11,170,255,5,247,20,0,5,144,255,6,160,9,0,7,10,164,255,6,143,0,6,24,241,255,6,230,124,54,19,4,19,55,125,232,255,6,240,23,0,7,74,253,255,19,252,73,0,9,105,252,255,17,252,104,0,11,66,233,255,15,233,66,0,13,18,128,236,255,11,236,128,19,0,16,10,75,138,195,219,238,251,238,220,195,138,75,10,0,255,0,33, +43,26,0,211,255,12,243,227,195,144,73,2,0,8,255,17,225,85,0,7,255,19,152,1,0,5,255,20,129,0,5,255,20,249,35,0,4,255,6,0,5,9,38,101,213,255,6,132,0,4,255,6,0,8,7,184,255,5,202,0,4,255,6,0,9,44,255,5,233,0,4,255,6,0,9,7,255,5,250,0,4,255,6,0,9,45,255,5,233,0,4,255,6,0,8,7,185,255,5,202,0,4,255,6,0,5,8,37,100,213,255,6,131,0,4,255,20,249,35,0,4,255,20,129,0,5,255,19,152,1,0,5,255,17,226,87,0,7,255,12,244,229,197,146,73,2,0,8,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,251, +43,31,0,255,0,2,9,73,136,193,218,236,251,237,219,195,139,78,12,0,16,17,125,235,255,11,239,134,23,0,13,63,231,255,15,238,75,0,11,101,252,255,17,254,118,0,9,71,252,255,19,254,85,0,7,23,240,255,6,232,126,55,20,5,21,56,127,233,255,6,246,30,0,6,142,255,6,163,10,0,7,11,167,255,6,153,0,5,19,246,255,5,169,0,10,1,173,255,5,250,24,0,4,88,255,5,240,16,0,11,17,242,255,5,93,0,4,156,255,5,143,0,13,145,255,5,160,0,4,205,255,5,73,0,13,75,255,5,207,0,4,226,255,5,26,0,13,28,255,5,226,0,4,246,255,5,8,0,13,10,255,5,246,0,4,246,255,5,7,0,13,8,255,5,248,0,4,227,255,5,24,0,13,27,255,5,235,0,4,207,255,5,68,0,13,74,255,5,208,0,4,160,255,5,134,0,13,144,255,5,166,0,4,92,255,5,233,9,0,11,16,241,255,5,104,0,4,22,248,255,5,150,0,11,170,255,5,253,28,0,5,148,255,6,142,5,0,7,10,164,255,6,175,0,6,27,243,255,6,223,117,50,18,4,19,55,125,232,255,6,252,49,0,7,79,253,255,20,136,0,9,108,253,255,18,177,3,0,10,67,233,255,16,156,6,0,12,18,126,233,255,12,229,78,0,16,8,71,132,190,217,235,251,255,6,241,36,0,23,78,253,255,5,207,8,0,23,108,255,6,154,0,24,140,255,6,91,0,23,1,170,255,5,244,40,0,23,8,196,255,5,212,10,0,127, +43,28,0,227,255,10,251,240,226,191,147,74,7,0,11,255,16,227,90,0,10,255,18,121,0,9,255,18,252,50,0,8,255,19,154,0,8,255,6,0,3,2,14,49,127,247,255,5,219,0,8,255,6,0,7,93,255,5,244,0,8,255,6,0,7,12,255,5,248,0,8,255,6,0,7,14,255,5,222,0,8,255,6,0,7,97,255,5,162,0,8,255,6,0,3,1,13,49,129,248,255,5,58,0,8,255,18,143,0,9,255,16,248,123,1,0,9,255,15,231,51,0,11,255,16,242,66,0,10,255,17,244,38,0,9,255,6,0,2,7,33,95,208,255,6,186,0,9,255,6,0,5,6,183,255,6,62,0,8,255,6,0,6,19,234,255,5,179,0,8,255,6,0,7,112,255,5,254,37,0,7,255,6,0,7,12,240,255,5,148,0,7,255,6,0,8,140,255,5,244,16,0,6,255,6,0,8,31,252,255,5,117,0,6,255,6,0,9,170,255,5,225,3,0,5,255,6,0,9,57,255,6,86,0,5,255,6,0,10,200,255,5,199,0,254, +43,26,0,215,27,115,172,217,237,250,249,239,221,193,160,115,68,13,0,10,21,159,253,255,12,252,203,0,8,34,224,255,16,0,7,5,212,255,17,0,7,101,255,18,0,7,186,255,5,243,127,51,15,3,12,30,72,121,190,250,255,2,0,7,231,255,5,73,0,9,15,103,205,0,7,250,255,5,11,0,19,236,255,5,97,0,19,188,255,5,253,172,91,34,1,0,15,96,255,9,244,206,166,120,59,6,0,10,3,192,255,13,239,155,42,0,9,16,182,255,14,253,143,5,0,8,1,84,204,255,14,164,0,11,40,111,171,219,253,255,10,71,0,14,9,51,106,174,248,255,6,170,0,18,22,195,255,5,226,0,19,40,255,5,248,0,5,193,67,0,12,12,255,5,241,0,5,255,2,199,97,13,0,9,110,255,5,217,0,5,255,4,245,176,117,61,31,11,3,21,67,159,254,255,5,158,0,5,255,20,70,0,5,255,19,181,0,6,255,18,201,15,0,6,62,145,225,255,13,243,126,8,0,10,33,93,144,181,216,235,247,252,241,227,195,151,85,9,0,240, +43,25,0,200,255,24,0,1,255,24,0,1,255,24,0,1,255,24,0,1,255,24,0,10,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,235, +43,29,0,235,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,250,255,5,4,0,9,4,255,5,249,0,6,233,255,5,20,0,9,21,255,5,232,0,6,213,255,5,63,0,9,65,255,5,212,0,6,164,255,5,146,0,9,149,255,5,162,0,6,101,255,5,249,57,0,7,60,250,255,5,101,0,6,18,244,255,5,247,139,56,15,3,15,57,141,248,255,5,243,18,0,7,139,255,19,138,0,8,9,205,255,17,203,9,0,9,26,201,255,15,201,26,0,11,5,125,234,255,11,233,125,5,0,14,7,84,144,198,226,241,252,241,225,197,144,84,6,0,255,0,14, +43,28,0,224,207,255,5,156,0,14,157,255,5,207,110,255,5,242,10,0,12,11,243,255,5,109,19,249,255,5,94,0,12,95,255,5,249,19,0,1,171,255,5,192,0,12,193,255,5,170,0,2,74,255,5,254,34,0,10,35,254,255,5,73,0,2,3,229,255,5,130,0,10,131,255,5,228,3,0,3,135,255,5,225,2,0,8,2,226,255,5,134,0,4,38,255,6,69,0,8,70,255,6,37,0,5,196,255,5,166,0,8,167,255,5,195,0,6,99,255,5,247,16,0,6,17,247,255,5,98,0,6,13,244,255,5,105,0,6,106,255,5,244,12,0,7,160,255,5,202,0,6,203,255,5,159,0,8,63,255,6,43,0,4,44,255,6,62,0,8,1,220,255,5,141,0,4,142,255,5,220,1,0,9,124,255,5,233,4,0,2,5,234,255,5,123,0,10,29,253,255,5,79,0,2,80,255,5,253,28,0,11,185,255,5,177,0,2,178,255,5,184,0,12,88,255,5,251,23,23,251,255,5,87,0,12,8,238,255,5,115,116,255,5,238,7,0,13,149,255,5,212,213,255,5,148,0,14,52,255,12,51,0,15,210,255,10,209,0,16,113,255,10,112,0,16,21,250,255,8,250,21,0,17,174,255,8,173,0,18,77,255,8,76,0,255,0,6, +43,40,0,255,0,66,225,255,5,75,0,8,103,255,6,114,0,8,75,255,5,225,0,2,163,255,5,137,0,8,165,255,6,176,0,8,137,255,5,163,0,2,101,255,5,199,0,8,226,255,6,236,1,0,7,199,255,5,101,0,2,38,255,5,250,10,0,6,32,255,3,245,240,255,3,44,0,6,10,250,255,5,39,0,3,231,255,5,68,0,6,94,255,3,188,181,255,3,105,0,6,66,255,5,233,0,4,170,255,5,130,0,6,156,255,3,127,119,255,3,167,0,6,128,255,5,172,0,4,107,255,5,192,0,6,217,255,3,65,57,255,3,228,0,6,190,255,5,110,0,4,45,255,5,247,7,0,4,23,255,3,250,9,5,246,255,3,35,0,4,5,246,255,5,49,0,4,1,237,255,5,61,0,4,85,255,3,198,0,2,190,255,3,96,0,4,57,255,5,240,2,0,5,176,255,5,123,0,4,146,255,3,137,0,2,128,255,3,158,0,4,119,255,5,181,0,6,114,255,5,185,0,4,208,255,3,76,0,2,66,255,3,220,0,4,181,255,5,120,0,6,52,255,5,243,4,0,2,16,253,255,2,253,16,0,2,10,250,255,3,26,0,2,2,240,255,5,58,0,6,3,242,255,5,54,0,2,75,255,3,209,0,4,199,255,3,87,0,2,48,255,5,246,6,0,7,183,255,5,116,0,2,137,255,3,147,0,4,137,255,3,149,0,2,110,255,5,191,0,8,121,255,5,178,0,2,199,255,3,86,0,4,75,255,3,211,0,2,172,255,5,129,0,8,59,255,5,238,2,9,250,255,3,24,0,4,15,253,255,2,254,18,0,1,233,255,5,67,0,8,6,246,255,5,47,66,255,3,219,0,6,207,255,3,79,40,255,5,250,10,0,9,190,255,5,109,128,255,3,157,0,6,146,255,3,140,101,255,5,200,0,10,128,255,5,171,189,255,3,96,0,6,84,255,3,202,163,255,5,138,0,10,65,255,5,234,245,255,3,35,0,6,22,255,3,251,230,255,5,76,0,10,9,249,255,8,229,0,8,216,255,8,253,17,0,11,197,255,8,168,0,8,154,255,8,209,0,12,134,255,8,106,0,8,93,255,8,147,0,12,72,255,8,45,0,8,31,255,8,86,0,12,13,252,255,6,237,1,0,9,225,255,7,24,0,13,203,255,6,178,0,10,163,255,6,218,0,255,0,112, +43,28,0,225,167,255,6,168,0,10,169,255,6,166,0,2,17,228,255,6,91,0,8,92,255,6,227,16,0,3,68,254,255,5,240,29,0,6,30,240,255,5,254,67,0,5,144,255,6,190,1,0,4,2,191,255,6,143,0,6,8,213,255,6,115,0,4,116,255,6,212,8,0,7,48,250,255,5,248,44,0,2,45,248,255,5,249,48,0,9,121,255,6,209,6,6,209,255,6,120,0,10,2,195,255,6,138,139,255,6,195,2,0,11,33,242,255,5,253,253,255,5,242,32,0,13,97,255,12,96,0,15,174,255,10,174,0,16,20,232,255,8,231,20,0,17,86,255,8,86,0,18,163,255,8,162,0,17,78,255,10,78,0,15,18,231,255,10,231,18,0,14,165,255,12,164,0,13,80,255,6,218,219,255,6,79,0,11,19,232,255,5,253,60,60,253,255,5,231,18,0,10,167,255,6,142,0,2,143,255,6,166,0,9,82,255,6,217,9,0,2,9,218,255,6,81,0,7,20,233,255,5,253,57,0,4,60,253,255,5,232,19,0,6,169,255,6,139,0,6,142,255,6,168,0,5,84,255,6,215,8,0,6,9,218,255,6,83,0,3,21,234,255,5,252,55,0,8,59,253,255,5,233,20,0,2,170,255,6,137,0,10,141,255,6,170,0,253, +43,26,0,208,171,255,6,136,0,10,137,255,6,170,21,235,255,5,252,53,0,8,54,252,255,5,234,21,0,1,87,255,6,212,6,0,6,7,213,255,6,86,0,3,173,255,6,134,0,6,135,255,6,172,0,4,22,236,255,5,251,51,0,4,52,252,255,5,235,22,0,5,89,255,6,211,6,0,2,6,212,255,6,88,0,7,175,255,6,132,0,2,133,255,6,174,0,8,23,236,255,5,251,50,51,251,255,5,236,23,0,9,90,255,6,210,210,255,6,89,0,11,176,255,12,175,0,12,24,237,255,10,237,23,0,13,92,255,10,91,0,15,178,255,8,177,0,16,25,238,255,6,238,24,0,17,93,255,6,92,0,19,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,244, +43,26,0,210,255,23,0,3,255,23,0,3,255,23,0,3,255,23,0,3,255,22,163,0,16,50,245,255,6,195,6,0,15,27,229,255,6,221,20,0,15,10,205,255,6,239,40,0,15,1,174,255,6,251,67,0,16,136,255,7,101,0,16,95,255,7,140,0,16,61,249,255,6,177,2,0,15,34,235,255,6,206,11,0,15,15,214,255,6,229,27,0,15,4,186,255,6,245,50,0,16,150,255,6,253,80,0,16,110,255,7,117,0,16,73,252,255,6,155,0,16,43,241,255,6,189,5,0,15,22,223,255,6,216,17,0,15,7,197,255,6,236,36,0,16,164,255,22,0,3,255,23,0,3,255,23,0,3,255,23,0,3,255,23,0,235, +43,16,0,115,255,11,0,5,255,11,0,5,255,11,0,5,255,11,0,5,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,11,0,5,255,11,0,5,255,11,0,5,255,11,0,66, +43,13,0,104,217,255,2,245,9,0,8,139,255,3,77,0,8,61,255,3,155,0,8,3,235,255,2,231,1,0,8,161,255,3,55,0,8,83,255,3,133,0,8,12,248,255,2,211,0,9,183,255,3,33,0,8,105,255,3,112,0,8,27,255,3,190,0,9,205,255,2,251,16,0,8,127,255,3,90,0,8,49,255,3,168,0,9,226,255,2,240,5,0,8,149,255,3,68,0,8,71,255,3,147,0,8,6,242,255,2,224,0,9,171,255,3,47,0,8,93,255,3,125,0,8,18,252,255,2,203,0,9,193,255,2,254,26,0,8,115,255,3,103,0,8,37,255,3,181,0,9,215,255,2,248,11,0,8,137,255,3,82,0,8,59,255,3,160,0,8,2,234,255,2,235,2,0,8,159,255,3,60,0,8,81,255,3,138,0,8,11,247,255,2,216,0,65, +43,16,0,114,255,11,0,5,255,11,0,5,255,11,0,5,255,11,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,5,255,11,0,5,255,11,0,5,255,11,0,5,255,11,0,67, +43,30,0,252,50,241,255,3,241,49,0,22,39,234,255,5,234,39,0,20,30,226,255,7,226,30,0,18,22,217,255,9,217,22,0,16,15,207,255,5,200,255,5,206,15,0,14,9,195,255,4,242,88,0,1,87,242,255,4,195,9,0,12,5,182,255,4,207,37,0,3,36,205,255,4,181,5,0,10,2,168,255,4,151,7,0,5,7,148,255,4,167,2,0,9,153,255,3,241,86,0,9,83,240,255,3,152,0,8,137,255,3,206,36,0,11,33,202,255,3,136,0,255,0,255,0,243, +43,18,0,255,0,255,0,192,255,54,0,18, +43,18,0,92,137,255,4,95,0,13,154,255,3,242,34,0,12,2,169,255,3,198,3,0,12,5,182,255,3,129,0,13,9,195,255,2,252,59,0,13,15,207,255,2,223,14,0,13,22,217,255,2,164,0,255,0,255,0,54, +43,24,0,255,0,85,23,71,119,167,202,228,243,252,247,234,216,173,122,36,0,10,255,14,180,31,0,8,255,15,235,39,0,7,255,16,211,2,0,6,255,2,201,117,64,26,10,4,19,57,138,249,255,5,84,0,6,185,47,0,9,90,255,5,161,0,17,8,255,5,216,0,7,10,80,150,192,226,240,251,255,9,238,0,6,107,234,255,15,253,0,5,147,255,18,0,4,71,255,19,0,4,173,255,5,241,119,44,11,0,3,1,255,6,0,4,228,255,5,72,0,6,25,255,6,0,4,249,255,5,9,0,6,108,255,6,0,4,236,255,5,67,0,5,46,239,255,6,0,4,185,255,5,231,93,25,5,35,122,244,255,7,0,4,85,255,19,0,5,174,255,11,124,255,6,0,5,8,160,255,8,238,99,0,1,255,6,0,7,57,158,219,245,247,226,189,115,21,0,2,255,6,0,218, +43,26,0,185,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,2,21,116,194,229,249,232,194,113,14,0,9,255,6,0,1,98,238,255,7,229,73,0,8,255,6,124,255,10,251,84,0,7,255,18,245,38,0,6,255,19,189,0,6,255,7,229,99,26,5,25,96,227,255,6,48,0,5,255,6,234,29,0,5,27,233,255,5,134,0,5,255,6,113,0,7,113,255,5,193,0,5,255,6,38,0,7,38,255,5,228,0,5,255,6,7,0,7,8,255,5,246,0,5,255,6,7,0,7,8,255,5,246,0,5,255,6,38,0,7,38,255,5,228,0,5,255,6,112,0,7,113,255,5,193,0,5,255,6,233,27,0,5,27,233,255,5,134,0,5,255,7,227,98,25,4,24,95,226,255,6,48,0,5,255,19,189,0,6,255,18,245,38,0,6,255,6,125,255,10,251,84,0,7,255,6,0,1,100,240,255,7,230,74,0,8,255,6,0,2,23,120,195,231,250,233,195,114,14,0,240, +43,21,0,255,0,46,6,84,147,202,227,245,246,221,164,79,2,0,8,2,114,231,255,9,219,76,0,6,20,192,255,13,0,5,10,200,255,14,0,5,144,255,15,0,4,31,249,255,6,173,74,23,5,19,64,145,243,255,1,0,4,118,255,5,253,93,0,7,20,169,0,4,188,255,5,151,0,14,224,255,5,51,0,14,245,255,5,10,0,14,245,255,5,10,0,14,224,255,5,51,0,14,188,255,5,150,0,14,118,255,5,253,89,0,7,14,163,0,4,31,249,255,6,170,73,21,4,18,58,134,238,255,1,0,5,144,255,15,0,5,10,201,255,14,0,6,20,193,255,13,0,7,2,116,231,255,9,221,77,0,9,6,85,149,204,229,246,247,222,165,80,3,0,192, +43,26,0,199,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,9,14,113,193,232,249,230,194,116,21,0,2,255,6,0,8,75,230,255,7,238,98,0,1,255,6,0,7,87,251,255,10,123,255,6,0,6,41,247,255,18,0,6,192,255,19,0,5,50,255,6,227,97,25,5,26,98,228,255,7,0,5,136,255,5,233,27,0,5,27,233,255,6,0,5,195,255,5,112,0,7,113,255,6,0,5,230,255,5,37,0,7,38,255,6,0,5,247,255,5,7,0,7,8,255,6,0,5,247,255,5,7,0,7,8,255,6,0,5,230,255,5,37,0,7,38,255,6,0,5,195,255,5,112,0,7,113,255,6,0,5,136,255,5,233,27,0,5,27,233,255,6,0,5,50,255,6,227,96,24,4,24,97,227,255,7,0,6,193,255,19,0,6,41,247,255,18,0,7,87,251,255,10,125,255,6,0,8,76,231,255,7,240,101,0,1,255,6,0,9,14,114,195,233,250,231,196,120,23,0,2,255,6,0,237, +43,24,0,255,0,88,9,92,155,209,231,248,242,221,179,112,24,0,11,3,122,236,255,9,246,140,8,0,8,22,195,255,13,202,25,0,6,10,201,255,15,202,8,0,5,145,255,5,246,129,41,7,14,74,206,255,5,140,0,4,31,249,255,4,252,67,0,5,9,203,255,4,246,24,0,3,118,255,5,146,0,7,69,255,5,112,0,3,188,255,5,60,0,7,11,255,5,179,0,3,225,255,19,221,0,3,246,255,19,242,0,3,246,255,20,0,3,225,255,20,0,3,190,255,5,25,0,17,120,255,5,109,0,17,34,251,255,4,238,45,0,9,15,103,205,0,5,150,255,5,245,137,55,15,3,15,33,75,123,191,251,255,2,0,5,13,206,255,17,0,6,24,198,255,16,0,7,3,120,233,255,14,0,9,6,85,148,202,228,245,253,246,236,216,192,159,122,76,25,0,218, +43,16,0,118,29,129,194,233,249,255,5,0,5,90,245,255,9,0,4,49,252,255,10,0,4,163,255,11,0,4,225,255,5,133,19,0,8,249,255,5,12,0,9,255,6,0,7,255,14,0,2,255,14,0,2,255,14,0,2,255,14,0,2,255,14,0,5,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,150, +43,26,0,255,0,115,11,110,192,232,249,230,196,119,23,0,2,255,6,0,8,67,226,255,7,240,101,0,1,255,6,0,7,78,249,255,10,125,255,6,0,6,35,243,255,18,0,6,186,255,19,0,5,46,255,6,233,103,26,5,27,104,233,255,7,0,5,133,255,5,238,35,0,5,35,239,255,6,0,5,193,255,5,119,0,7,119,255,6,0,5,229,255,5,40,0,7,41,255,6,0,5,247,255,5,8,0,7,9,255,6,0,5,247,255,5,7,0,7,8,255,6,0,5,229,255,5,36,0,7,40,255,6,0,5,192,255,5,108,0,7,118,255,6,0,5,132,255,5,229,23,0,5,33,237,255,6,0,5,45,255,6,224,94,23,4,26,102,232,255,7,0,6,185,255,19,0,6,35,243,255,18,0,7,78,249,255,10,124,255,6,0,8,68,226,255,7,240,100,5,255,5,248,0,9,12,110,193,233,250,231,196,120,23,0,1,26,255,5,227,0,19,79,255,5,198,0,19,183,255,5,129,0,7,189,58,0,9,120,255,5,254,45,0,7,255,2,209,120,61,22,5,10,36,92,193,255,6,160,0,8,255,16,212,19,0,8,255,15,200,24,0,9,255,13,225,110,2,0,10,32,95,146,189,219,241,251,250,236,221,184,133,68,2,0,34, +43,26,0,185,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,2,7,96,177,223,247,240,212,147,40,0,9,255,6,0,1,74,222,255,7,252,119,0,8,255,6,112,253,255,10,104,0,7,255,18,244,18,0,6,255,19,111,0,6,255,7,249,133,40,7,26,121,251,255,5,178,0,6,255,6,254,74,0,5,121,255,5,224,0,6,255,6,160,0,6,42,255,5,242,0,6,255,6,67,0,6,14,255,6,0,6,255,6,19,0,6,4,255,6,0,6,255,6,2,0,6,1,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,237, +43,12,0,87,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,30,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,111, +43,13,0,95,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,33,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,6,6,255,5,246,0,6,27,255,5,229,0,6,86,255,5,186,0,4,8,64,222,255,5,123,0,3,255,8,249,26,0,3,255,8,121,0,4,255,6,254,137,1,0,4,255,3,245,219,157,52,0,19, +43,25,0,178,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,6,38,228,255,6,118,0,4,255,6,0,5,40,230,255,5,252,100,0,5,255,6,0,4,43,232,255,5,249,83,0,6,255,6,0,3,45,234,255,5,243,68,0,7,255,6,0,2,47,235,255,5,236,54,0,8,255,6,0,1,50,237,255,5,228,42,0,9,255,6,53,239,255,5,218,31,0,10,255,6,240,255,5,207,22,0,11,255,11,194,15,0,12,255,11,116,0,13,255,12,110,0,12,255,6,241,255,6,112,0,11,255,6,60,244,255,6,114,0,10,255,6,0,1,66,247,255,6,115,0,9,255,6,0,2,74,249,255,6,117,0,8,255,6,0,3,82,251,255,6,119,0,7,255,6,0,4,89,253,255,6,121,0,6,255,6,0,5,98,254,255,6,123,0,5,255,6,0,6,106,255,7,125,0,4,255,6,0,7,115,255,7,127,0,225, +43,12,0,87,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,111, +43,38,0,255,0,255,0,25,255,6,0,2,30,128,206,237,244,214,156,52,0,5,48,149,212,243,242,216,151,45,0,9,255,6,0,1,109,244,255,7,142,4,0,1,8,147,255,7,253,124,0,8,255,6,130,255,10,149,5,189,255,10,108,0,7,255,17,254,193,255,11,245,19,0,6,255,31,112,0,6,255,7,228,90,18,15,77,233,255,7,229,91,18,16,83,236,255,5,179,0,6,255,6,242,35,0,4,99,255,6,245,37,0,4,93,255,5,224,0,6,255,6,134,0,5,40,255,6,139,0,5,20,255,5,243,0,6,255,6,55,0,5,13,255,6,60,0,6,252,255,5,0,6,255,6,15,0,5,4,255,6,18,0,6,252,255,5,0,6,255,6,2,0,6,255,6,2,0,6,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,255,0,90, +43,26,0,255,0,112,255,6,0,2,7,96,177,223,247,240,212,147,40,0,9,255,6,0,1,74,222,255,7,252,119,0,8,255,6,112,253,255,10,104,0,7,255,18,244,18,0,6,255,19,111,0,6,255,7,249,133,40,7,26,121,251,255,5,178,0,6,255,6,254,74,0,5,121,255,5,224,0,6,255,6,160,0,6,42,255,5,242,0,6,255,6,67,0,6,14,255,6,0,6,255,6,19,0,6,4,255,6,0,6,255,6,2,0,6,1,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,237, +43,25,0,255,0,102,6,86,149,204,228,246,247,229,206,151,89,8,0,11,2,116,232,255,10,233,119,3,0,8,20,192,255,14,194,22,0,6,9,200,255,16,201,9,0,5,144,255,18,145,0,4,31,249,255,5,244,127,44,10,8,42,126,243,255,5,249,31,0,3,118,255,5,243,48,0,6,48,244,255,5,117,0,3,188,255,5,126,0,8,126,255,5,187,0,3,225,255,5,42,0,8,43,255,5,223,0,3,246,255,5,8,0,8,9,255,5,245,0,3,246,255,5,8,0,8,9,255,5,245,0,3,225,255,5,42,0,8,43,255,5,223,0,3,188,255,5,125,0,8,125,255,5,187,0,3,118,255,5,243,46,0,6,45,243,255,5,117,0,3,31,249,255,5,243,125,43,8,8,41,123,242,255,5,249,31,0,4,145,255,18,145,0,5,10,201,255,16,201,10,0,6,20,192,255,14,195,22,0,8,2,117,232,255,10,234,120,3,0,11,7,86,150,205,230,247,248,231,207,153,90,8,0,231, +43,26,0,255,0,112,255,6,0,2,21,116,194,229,249,232,194,113,14,0,9,255,6,0,1,98,238,255,7,229,73,0,8,255,6,124,255,10,251,84,0,7,255,18,245,38,0,6,255,19,189,0,6,255,7,229,99,26,5,25,96,227,255,6,48,0,5,255,6,234,29,0,5,27,233,255,5,134,0,5,255,6,113,0,7,113,255,5,193,0,5,255,6,38,0,7,38,255,5,228,0,5,255,6,7,0,7,8,255,5,246,0,5,255,6,7,0,7,8,255,5,246,0,5,255,6,38,0,7,38,255,5,228,0,5,255,6,112,0,7,113,255,5,193,0,5,255,6,233,27,0,5,27,233,255,5,134,0,5,255,7,227,98,25,4,24,95,226,255,6,48,0,5,255,19,189,0,6,255,18,245,38,0,6,255,6,125,255,10,251,84,0,7,255,6,0,1,100,240,255,7,230,74,0,8,255,6,0,2,23,120,195,231,250,233,195,114,14,0,9,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,43, +43,26,0,255,0,115,14,113,193,232,249,230,196,119,23,0,2,255,6,0,8,75,230,255,7,240,101,0,1,255,6,0,7,87,251,255,10,125,255,6,0,6,41,247,255,18,0,6,193,255,19,0,5,51,255,6,227,97,25,5,26,98,228,255,7,0,5,136,255,5,233,27,0,5,27,233,255,6,0,5,195,255,5,112,0,7,113,255,6,0,5,230,255,5,37,0,7,38,255,6,0,5,247,255,5,7,0,7,8,255,6,0,5,247,255,5,7,0,7,8,255,6,0,5,230,255,5,37,0,7,38,255,6,0,5,194,255,5,112,0,7,113,255,6,0,5,134,255,5,233,27,0,5,27,233,255,6,0,5,50,255,6,227,96,24,4,24,97,227,255,7,0,6,192,255,19,0,6,41,247,255,18,0,7,87,251,255,10,125,255,6,0,8,76,231,255,7,240,101,0,1,255,6,0,9,14,114,195,233,250,231,196,120,23,0,2,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,29, +43,18,0,255,255,6,0,3,57,156,211,239,255,1,252,0,3,255,6,0,1,15,177,255,5,252,0,3,255,6,12,204,255,6,253,0,3,255,6,166,255,7,254,0,3,255,14,254,0,3,255,8,188,77,21,5,27,89,191,0,3,255,7,139,0,10,255,6,204,2,0,10,255,6,97,0,11,255,6,36,0,11,255,6,9,0,11,255,6,0,12,255,6,0,12,255,6,0,12,255,6,0,12,255,6,0,12,255,6,0,12,255,6,0,12,255,6,0,12,255,6,0,171, +43,21,0,255,0,44,44,125,181,218,239,250,250,241,221,196,162,123,76,25,0,5,20,176,255,14,0,4,11,216,255,15,0,4,129,255,16,0,4,212,255,5,212,80,25,5,18,46,98,163,240,255,2,0,4,245,255,5,35,0,7,6,87,200,0,4,244,255,4,254,14,0,14,206,255,5,178,53,6,0,12,118,255,7,251,223,187,148,99,39,0,7,8,198,255,12,215,108,4,0,5,11,136,241,255,12,189,7,0,6,10,81,144,193,231,255,9,117,0,11,10,45,100,211,255,5,206,0,14,31,255,5,244,0,3,199,85,5,0,8,38,255,5,242,0,3,255,2,240,167,104,57,25,9,6,26,85,215,255,5,202,0,3,255,17,108,0,3,255,16,186,3,0,3,255,14,246,138,5,0,4,25,76,122,160,194,218,238,248,253,245,233,204,164,98,21,0,193, +43,17,0,157,255,6,0,11,255,6,0,11,255,6,0,11,255,6,0,11,255,6,0,8,255,15,0,2,255,15,0,2,255,15,0,2,255,15,0,2,255,15,0,5,255,6,0,11,255,6,0,11,255,6,0,11,255,6,0,11,255,6,0,11,255,6,0,11,255,6,0,11,255,6,0,11,247,255,5,23,0,10,232,255,5,153,26,2,0,8,192,255,11,0,5,129,255,11,0,5,31,246,255,10,0,6,89,249,255,9,0,7,38,144,207,240,253,255,5,0,154, +43,26,0,255,0,112,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,5,254,0,8,255,6,0,6,255,5,253,0,8,255,6,0,6,255,5,252,0,8,255,6,0,6,255,5,250,0,8,255,6,0,6,255,5,248,0,8,255,6,0,6,255,5,248,0,8,255,6,0,6,255,5,248,0,7,2,255,6,0,6,255,5,253,0,7,19,255,6,0,6,255,6,9,0,6,66,255,6,0,6,244,255,5,40,0,6,158,255,6,0,6,225,255,5,122,0,5,71,253,255,6,0,6,179,255,5,250,118,25,6,38,130,248,255,7,0,6,112,255,19,0,6,19,244,255,18,0,7,105,255,10,254,113,255,6,0,8,119,252,255,7,225,77,0,1,255,6,0,9,39,146,212,241,248,226,180,101,9,0,2,255,6,0,237, +43,23,0,255,0,68,207,255,5,156,0,8,157,255,5,207,0,1,110,255,5,242,10,0,6,11,243,255,5,109,0,1,19,249,255,5,94,0,6,95,255,5,249,19,0,2,172,255,5,191,0,6,192,255,5,170,0,3,75,255,5,254,33,0,4,34,254,255,5,73,0,3,3,230,255,5,129,0,4,130,255,5,228,3,0,4,136,255,5,224,2,0,2,2,225,255,5,134,0,5,40,255,6,68,0,2,69,255,6,37,0,6,198,255,5,165,0,2,166,255,5,195,0,7,101,255,5,246,15,16,247,255,5,98,0,7,14,245,255,5,103,104,255,5,244,12,0,8,162,255,5,200,201,255,5,159,0,9,65,255,12,62,0,9,1,223,255,10,219,0,11,127,255,10,123,0,11,31,254,255,8,253,28,0,12,188,255,8,184,0,13,91,255,8,87,0,13,9,241,255,6,238,7,0,14,153,255,6,148,0,214, +43,33,0,255,0,208,222,255,5,85,0,5,71,255,5,71,0,5,86,255,5,222,0,2,155,255,5,151,0,5,134,255,5,133,0,5,153,255,5,155,0,2,88,255,5,218,0,5,196,255,5,195,0,5,220,255,5,88,0,2,22,254,255,5,29,0,3,9,249,255,5,249,8,0,3,31,255,5,254,22,0,3,210,255,5,96,0,3,65,255,7,64,0,3,98,255,5,210,0,4,143,255,5,163,0,3,127,255,7,127,0,3,165,255,5,143,0,4,76,255,5,229,0,3,189,255,3,192,255,3,189,0,3,231,255,5,76,0,4,13,251,255,5,40,0,1,5,245,255,3,67,255,3,246,5,0,1,43,255,5,251,13,0,5,198,255,5,107,0,1,58,255,3,227,0,1,227,255,3,58,0,1,110,255,5,198,0,6,131,255,5,174,0,1,120,255,3,165,0,1,165,255,3,121,0,1,177,255,5,131,0,6,64,255,5,238,2,182,255,3,102,0,1,102,255,3,183,3,240,255,5,64,0,6,7,246,255,5,54,241,255,3,40,0,1,40,255,3,242,59,255,5,246,7,0,7,186,255,5,169,255,3,233,0,3,232,255,3,175,255,5,186,0,8,119,255,5,254,255,3,172,0,3,171,255,9,119,0,8,52,255,9,110,0,3,108,255,9,52,0,8,2,238,255,8,47,0,3,46,255,8,238,2,0,9,174,255,7,239,2,0,3,1,237,255,7,174,0,10,107,255,7,179,0,5,177,255,7,107,0,10,40,255,7,117,0,5,114,255,7,40,0,11,229,255,6,55,0,5,51,255,6,229,0,255,0,48, +43,23,0,255,0,68,160,255,6,210,9,0,4,10,213,255,6,160,0,1,11,214,255,6,154,0,4,160,255,6,213,10,0,2,44,246,255,6,89,0,2,96,255,6,245,42,0,4,99,255,6,242,37,42,245,255,6,96,0,6,163,255,6,207,213,255,6,160,0,7,12,216,255,12,213,10,0,8,46,247,255,10,245,42,0,10,102,255,10,96,0,12,166,255,8,160,0,13,13,228,255,6,227,10,0,13,61,252,255,6,253,64,0,12,15,224,255,8,227,17,0,11,167,255,10,170,0,10,94,255,12,97,0,8,34,242,255,6,254,255,5,243,35,0,6,3,198,255,6,150,144,255,6,200,4,0,5,129,255,6,214,9,7,210,255,6,131,0,4,59,252,255,5,248,47,0,2,44,247,255,5,252,60,0,2,14,223,255,6,113,0,4,110,255,6,223,15,0,1,165,255,6,185,1,0,4,1,182,255,6,165,0,207, +43,23,0,255,0,67,203,255,5,176,0,8,147,255,5,209,0,1,98,255,5,252,29,0,6,5,236,255,5,115,0,1,9,238,255,5,132,0,6,80,255,5,252,24,0,2,142,255,5,232,5,0,5,174,255,5,183,0,3,37,254,255,5,88,0,4,18,249,255,5,89,0,4,186,255,5,194,0,4,107,255,5,241,9,0,4,81,255,6,44,0,3,201,255,5,157,0,5,3,227,255,5,150,0,2,39,255,6,63,0,6,125,255,5,242,13,0,1,133,255,5,223,1,0,6,24,250,255,5,105,1,225,255,5,131,0,8,169,255,5,210,66,255,6,37,0,8,64,255,6,210,255,5,199,0,10,213,255,11,105,0,10,108,255,10,249,17,0,10,14,243,255,9,173,0,12,152,255,9,79,0,12,47,255,8,235,5,0,13,197,255,7,147,0,14,91,255,7,53,0,14,6,234,255,5,214,0,15,3,231,255,5,121,0,15,77,255,5,253,29,0,14,2,193,255,5,183,0,13,14,51,169,255,6,72,0,12,228,255,8,194,0,13,228,255,7,244,39,0,13,228,255,6,238,65,0,14,228,255,3,243,207,133,23,0,35, +43,21,0,255,0,41,255,18,0,3,255,18,0,3,255,18,0,3,255,18,0,3,255,17,209,0,11,12,203,255,6,232,30,0,10,5,184,255,6,247,55,0,10,1,163,255,7,88,0,11,140,255,7,128,0,11,115,255,7,167,0,11,91,254,255,6,200,8,0,10,70,250,255,6,225,23,0,10,51,243,255,6,243,46,0,10,36,233,255,6,253,77,0,10,23,221,255,7,115,0,11,206,255,17,0,3,255,18,0,3,255,18,0,3,255,18,0,3,255,18,0,190, +43,26,0,194,13,104,179,225,244,255,4,0,16,54,227,255,8,0,15,20,234,255,9,0,15,127,255,10,0,15,199,255,5,228,85,23,4,0,16,238,255,5,89,0,19,253,255,5,27,0,19,255,6,5,0,19,255,6,0,20,255,6,0,19,3,255,6,0,19,18,255,5,251,0,19,61,255,5,237,0,19,155,255,5,200,0,16,7,42,143,255,6,128,0,15,255,9,217,17,0,15,255,7,234,136,17,0,16,255,7,254,193,52,0,16,255,9,245,41,0,16,8,40,133,252,255,5,156,0,19,138,255,5,217,0,19,47,255,5,245,0,19,11,255,5,254,0,20,255,6,0,20,255,6,0,20,255,6,3,0,19,254,255,5,21,0,19,240,255,5,77,0,19,206,255,5,221,77,21,3,0,16,136,255,10,0,15,25,240,255,9,0,16,62,232,255,8,0,17,16,110,182,226,245,255,4,0,83, +43,13,0,83,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,17, +43,26,0,187,255,4,244,224,179,104,13,0,17,255,8,226,54,0,16,255,9,234,19,0,15,255,10,126,0,16,4,23,85,229,255,5,199,0,19,90,255,5,237,0,19,28,255,5,253,0,19,7,255,6,0,20,255,6,0,20,255,6,0,20,255,6,3,0,19,252,255,5,17,0,19,238,255,5,59,0,19,201,255,5,151,0,19,129,255,5,254,141,42,7,0,16,17,218,255,9,0,16,17,135,234,255,7,0,16,51,192,254,255,7,0,15,41,244,255,9,0,15,157,255,5,252,132,39,8,0,16,218,255,5,135,0,19,246,255,5,46,0,19,255,6,9,0,19,255,6,0,20,255,6,0,19,3,255,6,0,19,22,255,5,254,0,19,78,255,5,239,0,16,3,21,77,221,255,5,206,0,15,255,10,135,0,15,255,9,240,25,0,15,255,8,232,62,0,16,255,4,245,226,182,110,16,0,90, +43,30,0,255,0,255,0,56,33,0,9,20,113,181,228,248,238,212,162,95,25,0,8,10,121,246,0,7,21,150,248,255,8,253,198,124,65,21,4,21,63,136,235,255,2,0,7,241,255,22,0,7,255,22,241,0,7,255,2,249,157,72,25,5,23,65,126,199,253,255,8,249,152,22,0,7,255,1,179,34,0,8,25,96,163,212,239,249,229,184,117,22,0,9,113,0,255,0,255,0,25, +43,22,0,200,255,18,0,4,255,18,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,2,0,14,255,2,0,4,255,18,0,4,255,18,0,46, +43,18,0,131,9,116,204,243,243,198,106,6,0,9,31,212,255,6,207,28,0,7,10,213,255,8,208,7,0,6,117,255,2,249,117,24,24,119,250,255,2,108,0,6,205,255,2,117,0,4,120,255,2,199,0,6,245,255,2,24,0,4,25,255,2,243,0,6,245,255,2,22,0,4,23,255,2,243,0,6,208,255,2,111,0,4,114,255,2,201,0,6,123,255,2,247,112,23,23,114,248,255,2,112,0,6,12,219,255,8,213,9,0,7,37,219,255,6,212,32,0,9,12,123,208,245,244,201,111,7,0,255,0,182, +43,18,0,100,95,255,4,136,0,11,34,242,255,3,153,0,11,4,199,255,3,168,2,0,11,130,255,3,182,5,0,11,60,252,255,2,194,9,0,11,15,223,255,2,206,15,0,12,165,255,2,217,21,0,255,0,255,0,55, +43,28,0,13,25,238,255,3,134,0,22,177,255,3,147,0,22,90,255,3,160,1,0,21,22,236,255,2,171,3,0,22,172,255,2,183,6,0,105,77,255,8,76,0,18,174,255,8,173,0,17,21,250,255,8,250,20,0,16,113,255,10,112,0,16,210,255,10,209,0,15,52,255,12,51,0,14,149,255,5,214,214,255,5,148,0,13,8,238,255,5,117,118,255,5,238,7,0,12,88,255,5,252,24,25,252,255,5,87,0,12,185,255,5,179,0,2,180,255,5,184,0,11,29,253,255,5,81,0,2,82,255,5,253,28,0,10,124,255,5,235,5,0,2,5,235,255,5,123,0,10,220,255,5,143,0,4,144,255,5,219,0,9,63,255,6,46,0,4,47,255,6,62,0,8,160,255,5,205,0,6,206,255,5,159,0,7,13,244,255,5,108,0,6,109,255,5,244,12,0,6,99,255,20,98,0,6,196,255,20,195,0,5,38,255,22,37,0,4,135,255,22,134,0,3,3,229,255,22,228,3,0,2,74,255,6,36,0,10,36,255,6,73,0,2,171,255,5,193,0,12,194,255,5,170,0,1,19,249,255,5,95,0,12,96,255,5,248,18,110,255,5,242,11,0,12,11,243,255,5,109,207,255,5,156,0,14,157,255,5,207,0,252, +43,28,0,9,255,4,0,2,255,4,0,18,255,4,0,2,255,4,0,18,255,4,0,2,255,4,0,18,255,4,0,2,255,4,0,130,77,255,8,76,0,18,174,255,8,173,0,17,21,250,255,8,250,20,0,16,113,255,10,112,0,16,210,255,10,209,0,15,52,255,12,51,0,14,149,255,5,214,214,255,5,148,0,13,8,238,255,5,117,118,255,5,238,7,0,12,88,255,5,252,24,25,252,255,5,87,0,12,185,255,5,179,0,2,180,255,5,184,0,11,29,253,255,5,81,0,2,82,255,5,253,28,0,10,124,255,5,235,5,0,2,5,235,255,5,123,0,10,220,255,5,143,0,4,144,255,5,219,0,9,63,255,6,46,0,4,47,255,6,62,0,8,160,255,5,205,0,6,206,255,5,159,0,7,13,244,255,5,108,0,6,109,255,5,244,12,0,6,99,255,20,98,0,6,196,255,20,195,0,5,38,255,22,37,0,4,135,255,22,134,0,3,3,229,255,22,228,3,0,2,74,255,6,36,0,10,36,255,6,73,0,2,171,255,5,193,0,12,194,255,5,170,0,1,19,249,255,5,95,0,12,96,255,5,248,18,110,255,5,242,11,0,12,11,243,255,5,109,207,255,5,156,0,14,157,255,5,207,0,252, +43,26,0,218,47,110,171,209,228,246,248,233,205,158,99,21,0,11,3,86,203,255,11,253,179,62,0,8,30,197,255,16,0,7,62,237,255,17,0,6,41,239,255,18,0,5,9,221,255,6,252,167,88,33,12,6,21,47,95,155,234,255,2,0,5,118,255,6,211,41,0,9,3,80,197,0,4,11,237,255,5,209,12,0,17,77,255,5,251,37,0,18,149,255,5,162,0,19,202,255,5,83,0,19,224,255,5,30,0,19,245,255,5,9,0,19,246,255,5,8,0,19,225,255,5,29,0,19,203,255,5,81,0,19,150,255,5,161,0,19,78,255,5,251,36,0,18,11,238,255,5,207,11,0,18,119,255,6,208,38,0,9,3,79,197,0,5,9,222,255,6,252,166,86,32,11,5,20,46,94,155,234,255,2,0,6,42,239,255,18,0,7,63,237,255,17,0,8,30,198,255,16,0,9,3,87,204,255,11,253,180,63,0,12,48,111,172,210,229,247,249,234,206,159,99,22,0,19,46,245,255,1,97,0,23,115,255,1,250,46,0,22,15,255,2,179,0,21,18,127,255,2,244,0,17,3,255,7,232,0,17,2,255,7,132,0,17,1,255,4,243,202,108,1,0,58, +43,25,0,11,25,238,255,3,134,0,19,177,255,3,147,0,19,90,255,3,160,1,0,18,22,236,255,2,171,3,0,19,172,255,2,183,6,0,89,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,6,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,18,0,7,255,18,0,7,255,18,0,7,255,18,0,7,255,18,0,7,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,228, +43,13,0,5,25,238,255,3,134,0,7,177,255,3,147,0,7,90,255,3,160,1,0,6,22,236,255,2,171,3,0,7,172,255,2,183,6,0,47,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,121, +43,14,0,3,30,236,255,4,236,29,0,5,6,200,255,6,200,6,0,4,148,255,2,252,101,102,252,255,2,147,0,3,89,255,2,245,75,0,2,76,245,255,2,88,0,1,41,244,255,1,234,53,0,4,54,234,255,1,243,41,0,46,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,130, +43,31,0,10,255,4,0,3,255,4,0,20,255,4,0,3,255,4,0,20,255,4,0,3,255,4,0,20,255,4,0,3,255,4,0,143,9,73,136,193,218,236,251,236,218,194,136,73,10,0,16,17,125,235,255,11,235,125,17,0,13,63,231,255,15,231,62,0,11,101,252,255,17,251,101,0,9,71,252,255,19,252,69,0,7,23,240,255,6,232,126,55,20,5,21,56,127,233,255,6,239,22,0,6,142,255,6,163,10,0,7,11,167,255,6,141,0,5,19,246,255,5,169,0,10,1,173,255,5,246,19,0,4,89,255,5,240,16,0,11,17,242,255,5,87,0,4,156,255,5,143,0,13,145,255,5,154,0,4,206,255,5,73,0,13,75,255,5,204,0,4,226,255,5,26,0,13,28,255,5,225,0,4,246,255,5,8,0,13,10,255,5,245,0,4,246,255,5,8,0,13,8,255,5,246,0,4,227,255,5,26,0,13,27,255,5,225,0,4,206,255,5,72,0,13,74,255,5,205,0,4,158,255,5,142,0,13,144,255,5,156,0,4,90,255,5,239,14,0,11,16,241,255,5,88,0,4,20,247,255,5,166,0,11,170,255,5,247,20,0,5,144,255,6,160,9,0,7,10,164,255,6,143,0,6,24,241,255,6,230,124,54,19,4,19,55,125,232,255,6,240,23,0,7,74,253,255,19,252,73,0,9,105,252,255,17,252,104,0,11,66,233,255,15,233,66,0,13,18,128,236,255,11,236,128,19,0,16,10,75,138,195,219,238,251,238,220,195,138,75,10,0,255,0,33, +43,29,0,13,25,238,255,3,134,0,23,177,255,3,147,0,23,90,255,3,160,1,0,22,22,236,255,2,171,3,0,23,172,255,2,183,6,0,103,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,250,255,5,4,0,9,4,255,5,249,0,6,233,255,5,20,0,9,21,255,5,232,0,6,213,255,5,63,0,9,65,255,5,212,0,6,164,255,5,146,0,9,149,255,5,162,0,6,101,255,5,249,57,0,7,60,250,255,5,101,0,6,18,244,255,5,247,139,56,15,3,15,57,141,248,255,5,243,18,0,7,139,255,19,138,0,8,9,205,255,17,203,9,0,9,26,201,255,15,201,26,0,11,5,125,234,255,11,233,125,5,0,14,7,84,144,198,226,241,252,241,225,197,144,84,6,0,255,0,14, +43,29,0,9,255,4,0,3,255,4,0,18,255,4,0,3,255,4,0,18,255,4,0,3,255,4,0,18,255,4,0,3,255,4,0,128,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,250,255,5,4,0,9,4,255,5,249,0,6,233,255,5,20,0,9,21,255,5,232,0,6,213,255,5,63,0,9,65,255,5,212,0,6,164,255,5,146,0,9,149,255,5,162,0,6,101,255,5,249,57,0,7,60,250,255,5,101,0,6,18,244,255,5,247,139,56,15,3,15,57,141,248,255,5,243,18,0,7,139,255,19,138,0,8,9,205,255,17,203,9,0,9,26,201,255,15,201,26,0,11,5,125,234,255,11,233,125,5,0,14,7,84,144,198,226,241,252,241,225,197,144,84,6,0,255,0,14, +43,26,0,189,54,137,187,225,240,252,243,228,190,140,55,0,13,50,201,255,11,200,47,0,10,68,246,255,13,245,63,0,8,17,236,255,15,233,15,0,7,123,255,5,253,147,43,10,30,109,242,255,5,120,0,7,198,255,5,147,0,5,98,255,5,196,0,7,235,255,5,44,0,5,21,255,5,234,0,7,253,255,5,9,0,3,6,105,213,255,5,253,0,7,255,6,0,3,41,213,255,5,254,224,193,0,7,255,6,0,2,27,234,255,4,239,110,21,0,9,255,6,0,2,153,255,5,68,0,11,255,6,0,2,228,255,5,8,0,11,255,6,0,2,249,255,5,89,0,11,255,6,0,2,223,255,5,250,115,2,0,9,255,6,0,2,146,255,7,214,83,0,8,255,6,0,2,25,226,255,8,156,7,0,6,255,6,0,3,36,203,255,8,159,0,6,255,6,0,4,4,109,235,255,7,74,0,5,255,6,0,6,16,150,255,6,176,0,5,255,6,0,8,120,255,5,224,0,5,255,6,0,8,14,255,5,249,0,5,255,6,0,8,48,255,5,235,0,5,255,6,0,2,179,129,49,11,11,67,215,255,5,192,0,5,255,6,0,2,212,255,11,106,0,5,255,6,0,2,212,255,10,205,5,0,5,255,6,0,2,212,255,9,183,20,0,6,255,6,0,2,26,103,178,225,249,249,235,202,149,61,0,239, +43,24,0,133,95,255,4,136,0,17,34,242,255,3,153,0,17,4,199,255,3,168,2,0,17,130,255,3,182,5,0,17,60,252,255,2,194,9,0,17,15,223,255,2,206,15,0,18,165,255,2,217,21,0,62,23,71,119,167,202,228,243,252,247,234,216,173,122,36,0,10,255,14,180,31,0,8,255,15,235,39,0,7,255,16,211,2,0,6,255,2,201,117,64,26,10,4,19,57,138,249,255,5,84,0,6,185,47,0,9,90,255,5,161,0,17,8,255,5,216,0,7,10,80,150,192,226,240,251,255,9,238,0,6,107,234,255,15,253,0,5,147,255,18,0,4,71,255,19,0,4,173,255,5,241,119,44,11,0,3,1,255,6,0,4,228,255,5,72,0,6,25,255,6,0,4,249,255,5,9,0,6,108,255,6,0,4,236,255,5,67,0,5,46,239,255,6,0,4,185,255,5,231,93,25,5,35,122,244,255,7,0,4,85,255,19,0,5,174,255,11,124,255,6,0,5,8,160,255,8,238,99,0,1,255,6,0,7,57,158,219,245,247,226,189,115,21,0,2,255,6,0,218, +43,24,0,128,10,222,255,3,222,10,0,17,138,255,5,137,0,16,47,251,255,2,248,255,2,251,46,0,14,2,201,255,2,220,37,221,255,2,200,2,0,13,109,255,2,242,42,0,1,43,242,255,2,108,0,12,28,242,255,1,253,77,0,3,78,254,255,1,241,27,0,11,175,255,2,121,0,5,121,255,2,175,0,58,23,71,119,167,202,228,243,252,247,234,216,173,122,36,0,10,255,14,180,31,0,8,255,15,235,39,0,7,255,16,211,2,0,6,255,2,201,117,64,26,10,4,19,57,138,249,255,5,84,0,6,185,47,0,9,90,255,5,161,0,17,8,255,5,216,0,7,10,80,150,192,226,240,251,255,9,238,0,6,107,234,255,15,253,0,5,147,255,18,0,4,71,255,19,0,4,173,255,5,241,119,44,11,0,3,1,255,6,0,4,228,255,5,72,0,6,25,255,6,0,4,249,255,5,9,0,6,108,255,6,0,4,236,255,5,67,0,5,46,239,255,6,0,4,185,255,5,231,93,25,5,35,122,244,255,7,0,4,85,255,19,0,5,174,255,11,124,255,6,0,5,8,160,255,8,238,99,0,1,255,6,0,7,57,158,219,245,247,226,189,115,21,0,2,255,6,0,218, +43,24,0,150,255,4,0,3,255,4,0,13,255,4,0,3,255,4,0,13,255,4,0,3,255,4,0,13,255,4,0,3,255,4,0,107,23,71,119,167,202,228,243,252,247,234,216,173,122,36,0,10,255,14,180,31,0,8,255,15,235,39,0,7,255,16,211,2,0,6,255,2,201,117,64,26,10,4,19,57,138,249,255,5,84,0,6,185,47,0,9,90,255,5,161,0,17,8,255,5,216,0,7,10,80,150,192,226,240,251,255,9,238,0,6,107,234,255,15,253,0,5,147,255,18,0,4,71,255,19,0,4,173,255,5,241,119,44,11,0,3,1,255,6,0,4,228,255,5,72,0,6,25,255,6,0,4,249,255,5,9,0,6,108,255,6,0,4,236,255,5,67,0,5,46,239,255,6,0,4,185,255,5,231,93,25,5,35,122,244,255,7,0,4,85,255,19,0,5,174,255,11,124,255,6,0,5,8,160,255,8,238,99,0,1,255,6,0,7,57,158,219,245,247,226,189,115,21,0,2,255,6,0,218, +43,21,0,255,0,46,6,84,147,202,227,245,246,221,164,79,2,0,8,2,114,231,255,9,219,76,0,6,20,192,255,13,0,5,10,200,255,14,0,5,144,255,15,0,4,31,249,255,6,173,74,23,5,19,64,145,243,255,1,0,4,118,255,5,253,93,0,7,20,169,0,4,188,255,5,151,0,14,224,255,5,51,0,14,245,255,5,10,0,14,245,255,5,10,0,14,224,255,5,51,0,14,188,255,5,150,0,14,118,255,5,253,89,0,7,14,163,0,4,31,249,255,6,170,73,21,4,18,58,134,238,255,1,0,5,144,255,15,0,5,10,201,255,14,0,6,20,193,255,13,0,7,2,116,231,255,9,221,77,0,9,6,85,149,204,229,246,247,222,165,80,3,0,14,46,245,255,1,97,0,18,115,255,1,250,46,0,17,15,255,2,179,0,16,18,127,255,2,244,0,12,3,255,7,232,0,12,2,255,7,132,0,12,1,255,4,243,202,108,1,0,47, +43,24,0,126,137,255,4,95,0,19,154,255,3,242,34,0,18,2,169,255,3,198,3,0,18,5,182,255,3,129,0,19,9,195,255,2,252,59,0,19,15,207,255,2,223,14,0,19,22,217,255,2,164,0,63,9,92,155,209,231,248,242,221,179,112,24,0,11,3,122,236,255,9,246,140,8,0,8,22,195,255,13,202,25,0,6,10,201,255,15,202,8,0,5,145,255,5,246,129,41,7,14,74,206,255,5,140,0,4,31,249,255,4,252,67,0,5,9,203,255,4,246,24,0,3,118,255,5,146,0,7,69,255,5,112,0,3,188,255,5,60,0,7,11,255,5,179,0,3,225,255,19,221,0,3,246,255,19,242,0,3,246,255,20,0,3,225,255,20,0,3,190,255,5,25,0,17,120,255,5,109,0,17,34,251,255,4,238,45,0,9,15,103,205,0,5,150,255,5,245,137,55,15,3,15,33,75,123,191,251,255,2,0,5,13,206,255,17,0,6,24,198,255,16,0,7,3,120,233,255,14,0,9,6,85,148,202,228,245,253,246,236,216,192,159,122,76,25,0,218, +43,24,0,134,95,255,4,136,0,17,34,242,255,3,153,0,17,4,199,255,3,168,2,0,17,130,255,3,182,5,0,17,60,252,255,2,194,9,0,17,15,223,255,2,206,15,0,18,165,255,2,217,21,0,64,9,92,155,209,231,248,242,221,179,112,24,0,11,3,122,236,255,9,246,140,8,0,8,22,195,255,13,202,25,0,6,10,201,255,15,202,8,0,5,145,255,5,246,129,41,7,14,74,206,255,5,140,0,4,31,249,255,4,252,67,0,5,9,203,255,4,246,24,0,3,118,255,5,146,0,7,69,255,5,112,0,3,188,255,5,60,0,7,11,255,5,179,0,3,225,255,19,221,0,3,246,255,19,242,0,3,246,255,20,0,3,225,255,20,0,3,190,255,5,25,0,17,120,255,5,109,0,17,34,251,255,4,238,45,0,9,15,103,205,0,5,150,255,5,245,137,55,15,3,15,33,75,123,191,251,255,2,0,5,13,206,255,17,0,6,24,198,255,16,0,7,3,120,233,255,14,0,9,6,85,148,202,228,245,253,246,236,216,192,159,122,76,25,0,218, +43,12,0,60,137,255,4,95,0,7,154,255,3,242,34,0,6,2,169,255,3,198,3,0,6,5,182,255,3,129,0,7,9,195,255,2,252,59,0,7,15,207,255,2,223,14,0,7,22,217,255,2,164,0,29,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,111, +43,14,0,78,95,255,4,136,0,7,34,242,255,3,153,0,7,4,199,255,3,168,2,0,7,130,255,3,182,5,0,7,60,252,255,2,194,9,0,7,15,223,255,2,206,15,0,8,165,255,2,217,21,0,36,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,131, +43,14,0,74,105,255,4,104,0,7,25,240,255,4,240,25,0,6,171,255,2,252,252,255,2,170,0,5,76,255,3,111,112,255,3,75,0,3,11,225,255,2,157,0,2,158,255,2,224,11,0,2,142,255,2,196,6,0,2,6,197,255,2,141,0,1,50,252,255,1,226,22,0,4,23,226,255,1,252,50,0,32,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,8,255,6,0,130, +43,25,0,139,95,255,4,136,0,18,34,242,255,3,153,0,18,4,199,255,3,168,2,0,18,130,255,3,182,5,0,18,60,252,255,2,194,9,0,18,15,223,255,2,206,15,0,19,165,255,2,217,21,0,67,6,86,149,204,228,246,247,229,206,151,89,8,0,11,2,116,232,255,10,233,119,3,0,8,20,192,255,14,194,22,0,6,9,200,255,16,201,9,0,5,144,255,18,145,0,4,31,249,255,5,244,127,44,10,8,42,126,243,255,5,249,31,0,3,118,255,5,243,48,0,6,48,244,255,5,117,0,3,188,255,5,126,0,8,126,255,5,187,0,3,225,255,5,42,0,8,43,255,5,223,0,3,246,255,5,8,0,8,9,255,5,245,0,3,246,255,5,8,0,8,9,255,5,245,0,3,225,255,5,42,0,8,43,255,5,223,0,3,188,255,5,125,0,8,125,255,5,187,0,3,118,255,5,243,46,0,6,45,243,255,5,117,0,3,31,249,255,5,243,125,43,8,8,41,123,242,255,5,249,31,0,4,145,255,18,145,0,5,10,201,255,16,201,10,0,6,20,192,255,14,195,22,0,8,2,117,232,255,10,234,120,3,0,11,7,86,150,205,230,247,248,231,207,153,90,8,0,231, +43,25,0,157,255,4,0,4,255,4,0,13,255,4,0,4,255,4,0,13,255,4,0,4,255,4,0,13,255,4,0,4,255,4,0,113,6,86,149,204,228,246,247,229,206,151,89,8,0,11,2,116,232,255,10,233,119,3,0,8,20,192,255,14,194,22,0,6,9,200,255,16,201,9,0,5,144,255,18,145,0,4,31,249,255,5,244,127,44,10,8,42,126,243,255,5,249,31,0,3,118,255,5,243,48,0,6,48,244,255,5,117,0,3,188,255,5,126,0,8,126,255,5,187,0,3,225,255,5,42,0,8,43,255,5,223,0,3,246,255,5,8,0,8,9,255,5,245,0,3,246,255,5,8,0,8,9,255,5,245,0,3,225,255,5,42,0,8,43,255,5,223,0,3,188,255,5,125,0,8,125,255,5,187,0,3,118,255,5,243,46,0,6,45,243,255,5,117,0,3,31,249,255,5,243,125,43,8,8,41,123,242,255,5,249,31,0,4,145,255,18,145,0,5,10,201,255,16,201,10,0,6,20,192,255,14,195,22,0,8,2,117,232,255,10,234,120,3,0,11,7,86,150,205,230,247,248,231,207,153,90,8,0,231, +43,25,0,255,0,67,12,0,23,79,220,27,0,8,3,75,140,195,225,242,251,237,211,163,92,13,0,1,40,242,255,1,203,0,6,1,106,225,255,10,241,129,216,255,2,86,0,5,18,187,255,16,142,0,5,10,199,255,16,236,6,0,5,146,255,18,114,0,4,36,251,255,5,244,127,44,10,14,46,138,252,255,5,240,12,0,3,123,255,5,243,48,0,4,12,171,255,7,104,0,3,194,255,5,126,0,4,39,214,255,2,254,255,5,171,0,3,228,255,5,42,0,3,81,242,255,2,209,75,255,5,221,0,3,248,255,5,8,0,1,3,135,255,3,162,9,9,255,5,241,0,3,244,255,5,7,20,187,255,2,249,105,0,2,9,255,5,249,0,3,224,255,5,92,225,255,2,226,54,0,3,43,255,5,228,0,3,178,255,8,187,20,0,4,125,255,5,197,0,3,113,255,6,254,133,2,0,4,45,243,255,5,127,0,3,20,247,255,5,248,142,49,15,8,41,123,242,255,5,252,41,0,4,132,255,18,154,0,5,11,245,255,16,206,14,0,5,130,255,16,196,22,0,5,55,252,255,1,242,217,255,11,230,115,2,0,5,10,217,255,1,246,62,0,1,59,132,186,222,242,252,244,228,200,146,82,5,0,7,4,115,236,71,0,23,6,0,196, +43,26,0,136,137,255,4,95,0,21,154,255,3,242,34,0,20,2,169,255,3,198,3,0,20,5,182,255,3,129,0,21,9,195,255,2,252,59,0,21,15,207,255,2,223,14,0,21,22,217,255,2,164,0,65,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,5,254,0,8,255,6,0,6,255,5,253,0,8,255,6,0,6,255,5,252,0,8,255,6,0,6,255,5,250,0,8,255,6,0,6,255,5,248,0,8,255,6,0,6,255,5,248,0,8,255,6,0,6,255,5,248,0,7,2,255,6,0,6,255,5,253,0,7,19,255,6,0,6,255,6,9,0,6,66,255,6,0,6,244,255,5,40,0,6,158,255,6,0,6,225,255,5,122,0,5,71,253,255,6,0,6,179,255,5,250,118,25,6,38,130,248,255,7,0,6,112,255,19,0,6,19,244,255,18,0,7,105,255,10,254,113,255,6,0,8,119,252,255,7,225,77,0,1,255,6,0,9,39,146,212,241,248,226,180,101,9,0,2,255,6,0,237, +43,26,0,144,95,255,4,136,0,19,34,242,255,3,153,0,19,4,199,255,3,168,2,0,19,130,255,3,182,5,0,19,60,252,255,2,194,9,0,19,15,223,255,2,206,15,0,20,165,255,2,217,21,0,66,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,5,254,0,8,255,6,0,6,255,5,253,0,8,255,6,0,6,255,5,252,0,8,255,6,0,6,255,5,250,0,8,255,6,0,6,255,5,248,0,8,255,6,0,6,255,5,248,0,8,255,6,0,6,255,5,248,0,7,2,255,6,0,6,255,5,253,0,7,19,255,6,0,6,255,6,9,0,6,66,255,6,0,6,244,255,5,40,0,6,158,255,6,0,6,225,255,5,122,0,5,71,253,255,6,0,6,179,255,5,250,118,25,6,38,130,248,255,7,0,6,112,255,19,0,6,19,244,255,18,0,7,105,255,10,254,113,255,6,0,8,119,252,255,7,225,77,0,1,255,6,0,9,39,146,212,241,248,226,180,101,9,0,2,255,6,0,237, +43,26,0,163,255,4,0,4,255,4,0,14,255,4,0,4,255,4,0,14,255,4,0,4,255,4,0,14,255,4,0,4,255,4,0,114,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,5,254,0,8,255,6,0,6,255,5,253,0,8,255,6,0,6,255,5,252,0,8,255,6,0,6,255,5,250,0,8,255,6,0,6,255,5,248,0,8,255,6,0,6,255,5,248,0,8,255,6,0,6,255,5,248,0,7,2,255,6,0,6,255,5,253,0,7,19,255,6,0,6,255,6,9,0,6,66,255,6,0,6,244,255,5,40,0,6,158,255,6,0,6,225,255,5,122,0,5,71,253,255,6,0,6,179,255,5,250,118,25,6,38,130,248,255,7,0,6,112,255,19,0,6,19,244,255,18,0,7,105,255,10,254,113,255,6,0,8,119,252,255,7,225,77,0,1,255,6,0,9,39,146,212,241,248,226,180,101,9,0,2,255,6,0,237, +43,23,0,128,95,255,4,136,0,16,34,242,255,3,153,0,16,4,199,255,3,168,2,0,16,130,255,3,182,5,0,16,60,252,255,2,194,9,0,16,15,223,255,2,206,15,0,17,165,255,2,217,21,0,55,203,255,5,176,0,8,147,255,5,209,0,1,98,255,5,252,29,0,6,5,236,255,5,115,0,1,9,238,255,5,132,0,6,80,255,5,252,24,0,2,142,255,5,232,5,0,5,174,255,5,183,0,3,37,254,255,5,88,0,4,18,249,255,5,89,0,4,186,255,5,194,0,4,107,255,5,241,9,0,4,81,255,6,44,0,3,201,255,5,157,0,5,3,227,255,5,150,0,2,39,255,6,63,0,6,125,255,5,242,13,0,1,133,255,5,223,1,0,6,24,250,255,5,105,1,225,255,5,131,0,8,169,255,5,210,66,255,6,37,0,8,64,255,6,210,255,5,199,0,10,213,255,11,105,0,10,108,255,10,249,17,0,10,14,243,255,9,173,0,12,152,255,9,79,0,12,47,255,8,235,5,0,13,197,255,7,147,0,14,91,255,7,53,0,14,6,234,255,5,214,0,15,3,231,255,5,121,0,15,77,255,5,253,29,0,14,2,193,255,5,183,0,13,14,51,169,255,6,72,0,12,228,255,8,194,0,13,228,255,7,244,39,0,13,228,255,6,238,65,0,14,228,255,3,243,207,133,23,0,35, +43,24,0,255,0,85,23,71,119,167,202,228,243,252,247,234,216,173,122,36,0,10,255,14,180,31,0,8,255,15,235,39,0,7,255,16,211,2,0,6,255,2,201,117,64,26,10,4,19,57,138,249,255,5,84,0,6,185,47,0,9,90,255,5,161,0,17,8,255,5,216,0,7,10,80,150,192,226,240,251,255,9,238,0,6,107,234,255,15,253,0,5,147,255,18,0,4,71,255,19,0,4,173,255,5,241,119,44,11,0,3,1,255,6,0,4,228,255,5,72,0,6,25,255,6,0,4,249,255,5,9,0,6,108,255,6,0,4,236,255,5,67,0,5,46,239,255,6,0,4,185,255,5,231,93,25,5,35,122,244,255,7,0,4,85,255,19,0,5,174,255,11,124,255,6,0,5,8,160,255,8,238,99,0,1,255,6,0,7,57,158,219,245,247,226,189,115,21,0,2,255,6,0,16,104,255,1,251,67,0,19,50,251,255,1,121,0,20,179,255,2,15,0,20,242,255,2,130,17,0,19,235,255,7,0,16,129,255,7,0,17,90,191,231,253,255,3,0,51, +43,21,0,119,95,255,4,136,0,14,34,242,255,3,153,0,14,4,199,255,3,168,2,0,14,130,255,3,182,5,0,14,60,252,255,2,194,9,0,14,15,223,255,2,206,15,0,15,165,255,2,217,21,0,55,6,84,147,202,227,245,246,221,164,79,2,0,8,2,114,231,255,9,219,76,0,6,20,192,255,13,0,5,10,200,255,14,0,5,144,255,15,0,4,31,249,255,6,173,74,23,5,19,64,145,243,255,1,0,4,118,255,5,253,93,0,7,20,169,0,4,188,255,5,151,0,14,224,255,5,51,0,14,245,255,5,10,0,14,245,255,5,10,0,14,224,255,5,51,0,14,188,255,5,150,0,14,118,255,5,253,89,0,7,14,163,0,4,31,249,255,6,170,73,21,4,18,58,134,238,255,1,0,5,144,255,15,0,5,10,201,255,14,0,6,20,193,255,13,0,7,2,116,231,255,9,221,77,0,9,6,85,149,204,229,246,247,222,165,80,3,0,192, +43,26,0,8,158,255,2,155,3,0,3,3,155,255,2,157,0,13,9,208,255,2,179,10,0,1,10,180,255,2,207,8,0,14,36,240,255,2,200,42,201,255,2,240,35,0,16,80,255,3,254,255,3,79,0,18,138,255,5,138,0,96,47,110,171,209,228,246,248,233,205,158,99,21,0,11,3,86,203,255,11,253,179,62,0,8,30,197,255,16,0,7,62,237,255,17,0,6,41,239,255,18,0,5,9,221,255,6,252,167,88,33,12,6,21,47,95,155,234,255,2,0,5,118,255,6,211,41,0,9,3,80,197,0,4,11,237,255,5,209,12,0,17,77,255,5,251,37,0,18,149,255,5,162,0,19,202,255,5,83,0,19,224,255,5,30,0,19,245,255,5,9,0,19,246,255,5,8,0,19,225,255,5,29,0,19,203,255,5,81,0,19,150,255,5,161,0,19,78,255,5,251,36,0,18,11,238,255,5,207,11,0,18,119,255,6,208,38,0,9,3,79,197,0,5,9,222,255,6,252,166,86,32,11,5,20,46,94,155,234,255,2,0,6,42,239,255,18,0,7,63,237,255,17,0,8,30,198,255,16,0,9,3,87,204,255,11,253,180,63,0,12,48,111,172,210,229,247,249,234,206,159,99,22,0,238, +43,21,0,111,175,255,2,120,0,5,120,255,2,175,0,8,28,242,255,1,253,74,0,3,75,253,255,1,242,27,0,9,109,255,2,240,39,0,1,40,241,255,2,108,0,10,2,202,255,2,217,32,217,255,2,201,2,0,11,47,251,255,2,246,255,2,251,47,0,13,138,255,5,137,0,14,10,222,255,3,222,10,0,54,6,84,147,202,227,245,246,221,164,79,2,0,8,2,114,231,255,9,219,76,0,6,20,192,255,13,0,5,10,200,255,14,0,5,144,255,15,0,4,31,249,255,6,173,74,23,5,19,64,145,243,255,1,0,4,118,255,5,253,93,0,7,20,169,0,4,188,255,5,151,0,14,224,255,5,51,0,14,245,255,5,10,0,14,245,255,5,10,0,14,224,255,5,51,0,14,188,255,5,150,0,14,118,255,5,253,89,0,7,14,163,0,4,31,249,255,6,170,73,21,4,18,58,134,238,255,1,0,5,144,255,15,0,5,10,201,255,14,0,6,20,193,255,13,0,7,2,116,231,255,9,221,77,0,9,6,85,149,204,229,246,247,222,165,80,3,0,192, +43,30,0,7,158,255,2,155,3,0,3,3,155,255,2,157,0,17,9,208,255,2,179,10,0,1,10,180,255,2,207,8,0,18,36,240,255,2,200,42,201,255,2,240,35,0,20,80,255,3,254,255,3,79,0,22,138,255,5,138,0,106,255,7,250,245,239,224,208,184,152,111,57,4,0,13,255,16,235,147,34,0,11,255,18,251,136,7,0,9,255,20,202,25,0,8,255,21,216,21,0,7,255,6,0,3,9,23,48,96,157,241,255,7,192,2,0,6,255,6,0,8,9,124,247,255,6,104,0,6,255,6,0,10,52,239,255,5,228,5,0,5,255,6,0,11,71,255,6,66,0,5,255,6,0,12,180,255,5,141,0,5,255,6,0,12,92,255,5,199,0,5,255,6,0,12,34,255,5,223,0,5,255,6,0,12,11,255,5,245,0,5,255,6,0,12,12,255,5,244,0,5,255,6,0,12,36,255,5,222,0,5,255,6,0,12,95,255,5,198,0,5,255,6,0,12,184,255,5,140,0,5,255,6,0,11,75,255,6,66,0,5,255,6,0,10,55,241,255,5,228,5,0,5,255,6,0,8,10,126,248,255,6,104,0,6,255,6,0,3,8,22,47,95,158,242,255,7,192,2,0,6,255,21,217,22,0,7,255,20,202,25,0,8,255,18,250,135,7,0,9,255,16,234,145,32,0,11,255,7,252,247,240,225,208,183,152,110,55,3,0,255,0,25, +43,31,0,212,196,255,3,205,0,17,255,6,0,2,1,243,255,3,103,0,17,255,6,0,2,38,255,3,244,13,0,17,255,6,0,2,86,255,3,157,0,18,255,6,0,2,135,255,3,56,0,18,255,6,0,2,183,255,2,211,0,19,255,6,0,2,232,255,2,110,0,19,255,6,0,14,14,113,193,232,249,230,194,116,21,0,2,255,6,0,13,75,230,255,7,238,98,0,1,255,6,0,12,87,251,255,10,123,255,6,0,11,41,247,255,18,0,11,192,255,19,0,10,50,255,6,227,97,25,5,26,98,228,255,7,0,10,136,255,5,233,27,0,5,27,233,255,6,0,10,195,255,5,112,0,7,113,255,6,0,10,230,255,5,37,0,7,38,255,6,0,10,247,255,5,7,0,7,8,255,6,0,10,247,255,5,7,0,7,8,255,6,0,10,230,255,5,37,0,7,38,255,6,0,10,195,255,5,112,0,7,113,255,6,0,10,136,255,5,233,27,0,5,27,233,255,6,0,10,50,255,6,227,96,24,4,24,97,227,255,7,0,11,193,255,19,0,11,41,247,255,18,0,12,87,251,255,10,125,255,6,0,13,76,231,255,7,240,101,0,1,255,6,0,14,14,114,195,233,250,231,196,120,23,0,2,255,6,0,255,0,32, +43,25,0,203,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,6,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,18,0,7,255,18,0,7,255,18,0,7,255,18,0,7,255,18,0,7,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,18,104,255,1,251,67,0,20,50,251,255,1,121,0,21,179,255,2,15,0,21,242,255,2,130,17,0,20,235,255,7,0,17,129,255,7,0,18,90,191,231,253,255,3,0,53, +43,24,0,255,0,88,9,92,155,209,231,248,242,221,179,112,24,0,11,3,122,236,255,9,246,140,8,0,8,22,195,255,13,202,25,0,6,10,201,255,15,202,8,0,5,145,255,5,246,129,41,7,14,74,206,255,5,140,0,4,31,249,255,4,252,67,0,5,9,203,255,4,246,24,0,3,118,255,5,146,0,7,69,255,5,112,0,3,188,255,5,60,0,7,11,255,5,179,0,3,225,255,19,221,0,3,246,255,19,242,0,3,246,255,20,0,3,225,255,20,0,3,190,255,5,25,0,17,120,255,5,109,0,17,34,251,255,4,238,45,0,9,15,103,205,0,5,150,255,5,245,137,55,15,3,15,33,75,123,191,251,255,2,0,5,13,206,255,17,0,6,24,198,255,16,0,7,3,120,233,255,14,0,9,6,85,148,202,228,245,253,246,236,216,192,159,122,76,25,0,16,104,255,1,251,67,0,19,50,251,255,1,121,0,20,179,255,2,15,0,20,242,255,2,130,17,0,19,235,255,7,0,16,129,255,7,0,17,90,191,231,253,255,3,0,51, +43,25,0,6,158,255,2,155,3,0,3,3,155,255,2,157,0,12,9,208,255,2,179,10,0,1,10,180,255,2,207,8,0,13,36,240,255,2,200,42,201,255,2,240,35,0,15,80,255,3,254,255,3,79,0,17,138,255,5,138,0,87,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,6,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,18,0,7,255,18,0,7,255,18,0,7,255,18,0,7,255,18,0,7,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,228, +43,24,0,126,175,255,2,120,0,5,120,255,2,175,0,11,28,242,255,1,253,74,0,3,75,253,255,1,242,27,0,12,109,255,2,240,39,0,1,40,241,255,2,108,0,13,2,202,255,2,217,32,217,255,2,201,2,0,14,47,251,255,2,246,255,2,251,47,0,16,138,255,5,137,0,17,10,222,255,3,222,10,0,63,9,92,155,209,231,248,242,221,179,112,24,0,11,3,122,236,255,9,246,140,8,0,8,22,195,255,13,202,25,0,6,10,201,255,15,202,8,0,5,145,255,5,246,129,41,7,14,74,206,255,5,140,0,4,31,249,255,4,252,67,0,5,9,203,255,4,246,24,0,3,118,255,5,146,0,7,69,255,5,112,0,3,188,255,5,60,0,7,11,255,5,179,0,3,225,255,19,221,0,3,246,255,19,242,0,3,246,255,20,0,3,225,255,20,0,3,190,255,5,25,0,17,120,255,5,109,0,17,34,251,255,4,238,45,0,9,15,103,205,0,5,150,255,5,245,137,55,15,3,15,33,75,123,191,251,255,2,0,5,13,206,255,17,0,6,24,198,255,16,0,7,3,120,233,255,14,0,9,6,85,148,202,228,245,253,246,236,216,192,159,122,76,25,0,218, +43,26,0,163,240,255,2,49,0,4,49,255,2,239,0,14,188,255,2,218,71,14,14,71,218,255,2,187,0,14,81,255,10,79,0,15,136,255,8,133,0,17,62,166,224,248,248,224,166,61,0,93,11,110,192,232,249,230,196,119,23,0,2,255,6,0,8,67,226,255,7,240,101,0,1,255,6,0,7,78,249,255,10,125,255,6,0,6,35,243,255,18,0,6,186,255,19,0,5,46,255,6,233,103,26,5,27,104,233,255,7,0,5,133,255,5,238,35,0,5,35,239,255,6,0,5,193,255,5,119,0,7,119,255,6,0,5,229,255,5,40,0,7,41,255,6,0,5,247,255,5,8,0,7,9,255,6,0,5,247,255,5,7,0,7,8,255,6,0,5,229,255,5,36,0,7,40,255,6,0,5,192,255,5,108,0,7,118,255,6,0,5,132,255,5,229,23,0,5,33,237,255,6,0,5,45,255,6,224,94,23,4,26,102,232,255,7,0,6,185,255,19,0,6,35,243,255,18,0,7,78,249,255,10,124,255,6,0,8,68,226,255,7,240,100,5,255,5,248,0,9,12,110,193,233,250,231,196,120,23,0,1,26,255,5,227,0,19,79,255,5,198,0,19,183,255,5,129,0,7,189,58,0,9,120,255,5,254,45,0,7,255,2,209,120,61,22,5,10,36,92,193,255,6,160,0,8,255,16,212,19,0,8,255,15,200,24,0,9,255,13,225,110,2,0,10,32,95,146,189,219,241,251,250,236,221,184,133,68,2,0,34, +43,13,0,4,255,4,0,9,255,4,0,9,255,4,0,9,255,4,0,60,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,7,255,6,0,121, +43,12,0,171,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,6,255,6,0,111, +43,25,0,205,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,3,64,183,9,0,13,255,6,0,1,5,136,253,255,1,158,0,13,255,6,38,204,255,4,93,0,12,255,6,244,255,5,184,0,12,255,10,247,115,2,0,12,255,9,200,40,0,14,255,7,249,120,3,0,15,255,6,205,44,0,15,15,167,255,6,4,0,15,57,223,255,7,0,14,2,123,251,255,8,0,14,115,255,10,0,14,10,214,255,9,0,15,48,249,246,87,255,6,0,16,97,52,0,1,255,6,0,19,255,6,0,19,255,6,0,19,255,18,0,7,255,18,0,7,255,18,0,7,255,18,0,7,255,18,0,227, +43,16,0,117,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,1,93,118,0,7,255,6,180,255,1,253,63,0,6,255,9,228,12,0,5,255,8,234,83,0,5,6,255,7,173,21,0,5,58,213,255,6,90,0,5,14,150,254,255,7,0,5,66,229,255,9,0,5,35,237,255,2,252,255,6,0,6,66,251,196,47,255,6,0,7,44,1,0,1,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,149, +43,26,0,142,95,255,4,136,0,19,34,242,255,3,153,0,19,4,199,255,3,168,2,0,19,130,255,3,182,5,0,19,60,252,255,2,194,9,0,19,15,223,255,2,206,15,0,20,165,255,2,217,21,0,68,255,6,0,2,7,96,177,223,247,240,212,147,40,0,9,255,6,0,1,74,222,255,7,252,119,0,8,255,6,112,253,255,10,104,0,7,255,18,244,18,0,6,255,19,111,0,6,255,7,249,133,40,7,26,121,251,255,5,178,0,6,255,6,254,74,0,5,121,255,5,224,0,6,255,6,160,0,6,42,255,5,242,0,6,255,6,67,0,6,14,255,6,0,6,255,6,19,0,6,4,255,6,0,6,255,6,2,0,6,1,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,237, +43,26,0,135,175,255,2,120,0,5,120,255,2,175,0,13,28,242,255,1,253,74,0,3,75,253,255,1,242,27,0,14,109,255,2,240,39,0,1,40,241,255,2,108,0,15,2,202,255,2,217,32,217,255,2,201,2,0,16,47,251,255,2,246,255,2,251,47,0,18,138,255,5,137,0,19,10,222,255,3,222,10,0,66,255,6,0,2,7,96,177,223,247,240,212,147,40,0,9,255,6,0,1,74,222,255,7,252,119,0,8,255,6,112,253,255,10,104,0,7,255,18,244,18,0,6,255,19,111,0,6,255,7,249,133,40,7,26,121,251,255,5,178,0,6,255,6,254,74,0,5,121,255,5,224,0,6,255,6,160,0,6,42,255,5,242,0,6,255,6,67,0,6,14,255,6,0,6,255,6,19,0,6,4,255,6,0,6,255,6,2,0,6,1,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,237, +43,28,0,6,158,255,2,155,3,0,3,3,155,255,2,157,0,15,9,208,255,2,179,10,0,1,10,180,255,2,207,8,0,16,36,240,255,2,200,42,201,255,2,240,35,0,18,80,255,3,254,255,3,79,0,20,138,255,5,138,0,99,255,10,251,240,226,191,147,74,7,0,11,255,16,227,90,0,10,255,18,121,0,9,255,18,252,50,0,8,255,19,154,0,8,255,6,0,3,2,14,49,127,247,255,5,219,0,8,255,6,0,7,93,255,5,244,0,8,255,6,0,7,12,255,5,248,0,8,255,6,0,7,14,255,5,222,0,8,255,6,0,7,97,255,5,162,0,8,255,6,0,3,1,13,49,129,248,255,5,58,0,8,255,18,143,0,9,255,16,248,123,1,0,9,255,15,231,51,0,11,255,16,242,66,0,10,255,17,244,38,0,9,255,6,0,2,7,33,95,208,255,6,186,0,9,255,6,0,5,6,183,255,6,62,0,8,255,6,0,6,19,234,255,5,179,0,8,255,6,0,7,112,255,5,254,37,0,7,255,6,0,7,12,240,255,5,148,0,7,255,6,0,8,140,255,5,244,16,0,6,255,6,0,8,31,252,255,5,117,0,6,255,6,0,9,170,255,5,225,3,0,5,255,6,0,9,57,255,6,86,0,5,255,6,0,10,200,255,5,199,0,254, +43,18,0,94,175,255,2,120,0,5,120,255,2,175,0,5,28,242,255,1,253,74,0,3,75,253,255,1,242,27,0,6,109,255,2,240,39,0,1,40,241,255,2,108,0,7,2,202,255,2,217,32,217,255,2,201,2,0,8,47,251,255,2,246,255,2,251,47,0,10,138,255,5,137,0,11,10,222,255,3,222,10,0,43,255,6,0,3,57,156,211,239,255,1,252,0,3,255,6,0,1,15,177,255,5,252,0,3,255,6,12,204,255,6,253,0,3,255,6,166,255,7,254,0,3,255,14,254,0,3,255,8,188,77,21,5,27,89,191,0,3,255,7,139,0,10,255,6,204,2,0,10,255,6,97,0,11,255,6,36,0,11,255,6,9,0,11,255,6,0,12,255,6,0,12,255,6,0,12,255,6,0,12,255,6,0,12,255,6,0,12,255,6,0,12,255,6,0,12,255,6,0,171, +43,26,0,11,25,238,255,3,134,0,20,177,255,3,147,0,20,90,255,3,160,1,0,19,22,236,255,2,171,3,0,20,172,255,2,183,6,0,97,27,115,172,217,237,250,249,239,221,193,160,115,68,13,0,10,21,159,253,255,12,252,203,0,8,34,224,255,16,0,7,5,212,255,17,0,7,101,255,18,0,7,186,255,5,243,127,51,15,3,12,30,72,121,190,250,255,2,0,7,231,255,5,73,0,9,15,103,205,0,7,250,255,5,11,0,19,236,255,5,97,0,19,188,255,5,253,172,91,34,1,0,15,96,255,9,244,206,166,120,59,6,0,10,3,192,255,13,239,155,42,0,9,16,182,255,14,253,143,5,0,8,1,84,204,255,14,164,0,11,40,111,171,219,253,255,10,71,0,14,9,51,106,174,248,255,6,170,0,18,22,195,255,5,226,0,19,40,255,5,248,0,5,193,67,0,12,12,255,5,241,0,5,255,2,199,97,13,0,9,110,255,5,217,0,5,255,4,245,176,117,61,31,11,3,21,67,159,254,255,5,158,0,5,255,20,70,0,5,255,19,181,0,6,255,18,201,15,0,6,62,145,225,255,13,243,126,8,0,10,33,93,144,181,216,235,247,252,241,227,195,151,85,9,0,240, +43,21,0,117,95,255,4,136,0,14,34,242,255,3,153,0,14,4,199,255,3,168,2,0,14,130,255,3,182,5,0,14,60,252,255,2,194,9,0,14,15,223,255,2,206,15,0,15,165,255,2,217,21,0,55,44,125,181,218,239,250,250,241,221,196,162,123,76,25,0,5,20,176,255,14,0,4,11,216,255,15,0,4,129,255,16,0,4,212,255,5,212,80,25,5,18,46,98,163,240,255,2,0,4,245,255,5,35,0,7,6,87,200,0,4,244,255,4,254,14,0,14,206,255,5,178,53,6,0,12,118,255,7,251,223,187,148,99,39,0,7,8,198,255,12,215,108,4,0,5,11,136,241,255,12,189,7,0,6,10,81,144,193,231,255,9,117,0,11,10,45,100,211,255,5,206,0,14,31,255,5,244,0,3,199,85,5,0,8,38,255,5,242,0,3,255,2,240,167,104,57,25,9,6,26,85,215,255,5,202,0,3,255,17,108,0,3,255,16,186,3,0,3,255,14,246,138,5,0,4,25,76,122,160,194,218,238,248,253,245,233,204,164,98,21,0,193, +43,26,0,215,27,115,172,217,237,250,249,239,221,193,160,115,68,13,0,10,21,159,253,255,12,252,203,0,8,34,224,255,16,0,7,5,212,255,17,0,7,101,255,18,0,7,186,255,5,243,127,51,15,3,12,30,72,121,190,250,255,2,0,7,231,255,5,73,0,9,15,103,205,0,7,250,255,5,11,0,19,236,255,5,97,0,19,188,255,5,253,172,91,34,1,0,15,96,255,9,244,206,166,120,59,6,0,10,3,192,255,13,239,155,42,0,9,16,182,255,14,253,143,5,0,8,1,84,204,255,14,164,0,11,40,111,171,219,253,255,10,71,0,14,9,51,106,174,248,255,6,170,0,18,22,195,255,5,226,0,19,40,255,5,248,0,5,193,67,0,12,12,255,5,241,0,5,255,2,199,97,13,0,9,110,255,5,217,0,5,255,4,245,176,117,61,31,11,3,21,67,159,254,255,5,158,0,5,255,20,70,0,5,255,19,181,0,6,255,18,201,15,0,6,62,145,225,255,13,243,126,8,0,10,33,93,144,181,216,235,247,252,241,227,195,151,85,9,0,18,46,245,255,1,97,0,23,115,255,1,250,46,0,22,15,255,2,179,0,21,18,127,255,2,244,0,17,3,255,7,232,0,17,2,255,7,132,0,17,1,255,4,243,202,108,1,0,61, +43,21,0,255,0,44,44,125,181,218,239,250,250,241,221,196,162,123,76,25,0,5,20,176,255,14,0,4,11,216,255,15,0,4,129,255,16,0,4,212,255,5,212,80,25,5,18,46,98,163,240,255,2,0,4,245,255,5,35,0,7,6,87,200,0,4,244,255,4,254,14,0,14,206,255,5,178,53,6,0,12,118,255,7,251,223,187,148,99,39,0,7,8,198,255,12,215,108,4,0,5,11,136,241,255,12,189,7,0,6,10,81,144,193,231,255,9,117,0,11,10,45,100,211,255,5,206,0,14,31,255,5,244,0,3,199,85,5,0,8,38,255,5,242,0,3,255,2,240,167,104,57,25,9,6,26,85,215,255,5,202,0,3,255,17,108,0,3,255,16,186,3,0,3,255,14,246,138,5,0,4,25,76,122,160,194,218,238,248,253,245,233,204,164,98,21,0,14,46,245,255,1,97,0,18,115,255,1,250,46,0,17,15,255,2,179,0,16,18,127,255,2,244,0,12,3,255,7,232,0,12,2,255,7,132,0,12,1,255,4,243,202,108,1,0,48, +43,26,0,6,158,255,2,155,3,0,3,3,155,255,2,157,0,13,9,208,255,2,179,10,0,1,10,180,255,2,207,8,0,14,36,240,255,2,200,42,201,255,2,240,35,0,16,80,255,3,254,255,3,79,0,18,138,255,5,138,0,95,27,115,172,217,237,250,249,239,221,193,160,115,68,13,0,10,21,159,253,255,12,252,203,0,8,34,224,255,16,0,7,5,212,255,17,0,7,101,255,18,0,7,186,255,5,243,127,51,15,3,12,30,72,121,190,250,255,2,0,7,231,255,5,73,0,9,15,103,205,0,7,250,255,5,11,0,19,236,255,5,97,0,19,188,255,5,253,172,91,34,1,0,15,96,255,9,244,206,166,120,59,6,0,10,3,192,255,13,239,155,42,0,9,16,182,255,14,253,143,5,0,8,1,84,204,255,14,164,0,11,40,111,171,219,253,255,10,71,0,14,9,51,106,174,248,255,6,170,0,18,22,195,255,5,226,0,19,40,255,5,248,0,5,193,67,0,12,12,255,5,241,0,5,255,2,199,97,13,0,9,110,255,5,217,0,5,255,4,245,176,117,61,31,11,3,21,67,159,254,255,5,158,0,5,255,20,70,0,5,255,19,181,0,6,255,18,201,15,0,6,62,145,225,255,13,243,126,8,0,10,33,93,144,181,216,235,247,252,241,227,195,151,85,9,0,240, +43,21,0,109,175,255,2,120,0,5,120,255,2,175,0,8,28,242,255,1,253,74,0,3,75,253,255,1,242,27,0,9,109,255,2,240,39,0,1,40,241,255,2,108,0,10,2,202,255,2,217,32,217,255,2,201,2,0,11,47,251,255,2,246,255,2,251,47,0,13,138,255,5,137,0,14,10,222,255,3,222,10,0,54,44,125,181,218,239,250,250,241,221,196,162,123,76,25,0,5,20,176,255,14,0,4,11,216,255,15,0,4,129,255,16,0,4,212,255,5,212,80,25,5,18,46,98,163,240,255,2,0,4,245,255,5,35,0,7,6,87,200,0,4,244,255,4,254,14,0,14,206,255,5,178,53,6,0,12,118,255,7,251,223,187,148,99,39,0,7,8,198,255,12,215,108,4,0,5,11,136,241,255,12,189,7,0,6,10,81,144,193,231,255,9,117,0,11,10,45,100,211,255,5,206,0,14,31,255,5,244,0,3,199,85,5,0,8,38,255,5,242,0,3,255,2,240,167,104,57,25,9,6,26,85,215,255,5,202,0,3,255,17,108,0,3,255,16,186,3,0,3,255,14,246,138,5,0,4,25,76,122,160,194,218,238,248,253,245,233,204,164,98,21,0,193, +43,17,0,80,196,255,3,205,0,11,1,243,255,3,103,0,11,38,255,3,244,13,0,11,86,255,3,157,0,12,135,255,3,56,0,5,255,6,0,1,183,255,2,211,0,6,255,6,0,1,232,255,2,110,0,6,255,6,0,11,255,6,0,11,255,6,0,8,255,15,0,2,255,15,0,2,255,15,0,2,255,15,0,2,255,15,0,5,255,6,0,11,255,6,0,11,255,6,0,11,255,6,0,11,255,6,0,11,255,6,0,11,255,6,0,11,255,6,0,11,247,255,5,23,0,10,232,255,5,153,26,2,0,8,192,255,11,0,5,129,255,11,0,5,31,246,255,10,0,6,89,249,255,9,0,7,38,144,207,240,253,255,5,0,154, +43,26,0,62,78,193,243,243,192,77,0,19,132,255,6,131,0,17,79,255,8,77,0,16,193,255,2,182,27,28,184,255,2,192,0,16,244,255,2,27,0,2,28,255,2,243,0,16,244,255,2,26,0,2,27,255,2,243,0,16,193,255,2,179,27,26,180,255,2,193,0,16,79,255,8,78,0,17,133,255,6,132,0,19,79,193,244,244,193,79,0,65,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,6,0,8,255,6,0,6,255,5,254,0,8,255,6,0,6,255,5,253,0,8,255,6,0,6,255,5,252,0,8,255,6,0,6,255,5,250,0,8,255,6,0,6,255,5,248,0,8,255,6,0,6,255,5,248,0,8,255,6,0,6,255,5,248,0,7,2,255,6,0,6,255,5,253,0,7,19,255,6,0,6,255,6,9,0,6,66,255,6,0,6,244,255,5,40,0,6,158,255,6,0,6,225,255,5,122,0,5,71,253,255,6,0,6,179,255,5,250,118,25,6,38,130,248,255,7,0,6,112,255,19,0,6,19,244,255,18,0,7,105,255,10,254,113,255,6,0,8,119,252,255,7,225,77,0,1,255,6,0,9,39,146,212,241,248,226,180,101,9,0,2,255,6,0,237, +43,26,0,11,25,238,255,3,134,0,20,177,255,3,147,0,20,90,255,3,160,1,0,19,22,236,255,2,171,3,0,20,172,255,2,183,6,0,92,255,23,0,3,255,23,0,3,255,23,0,3,255,23,0,3,255,22,163,0,16,50,245,255,6,195,6,0,15,27,229,255,6,221,20,0,15,10,205,255,6,239,40,0,15,1,174,255,6,251,67,0,16,136,255,7,101,0,16,95,255,7,140,0,16,61,249,255,6,177,2,0,15,34,235,255,6,206,11,0,15,15,214,255,6,229,27,0,15,4,186,255,6,245,50,0,16,150,255,6,253,80,0,16,110,255,7,117,0,16,73,252,255,6,155,0,16,43,241,255,6,189,5,0,15,22,223,255,6,216,17,0,15,7,197,255,6,236,36,0,16,164,255,22,0,3,255,23,0,3,255,23,0,3,255,23,0,3,255,23,0,235, +43,21,0,117,95,255,4,136,0,14,34,242,255,3,153,0,14,4,199,255,3,168,2,0,14,130,255,3,182,5,0,14,60,252,255,2,194,9,0,14,15,223,255,2,206,15,0,15,165,255,2,217,21,0,52,255,18,0,3,255,18,0,3,255,18,0,3,255,18,0,3,255,17,209,0,11,12,203,255,6,232,30,0,10,5,184,255,6,247,55,0,10,1,163,255,7,88,0,11,140,255,7,128,0,11,115,255,7,167,0,11,91,254,255,6,200,8,0,10,70,250,255,6,225,23,0,10,51,243,255,6,243,46,0,10,36,233,255,6,253,77,0,10,23,221,255,7,115,0,11,206,255,17,0,3,255,18,0,3,255,18,0,3,255,18,0,3,255,18,0,190, +43,26,0,11,255,5,0,21,255,5,0,21,255,5,0,21,255,5,0,116,255,23,0,3,255,23,0,3,255,23,0,3,255,23,0,3,255,22,163,0,16,50,245,255,6,195,6,0,15,27,229,255,6,221,20,0,15,10,205,255,6,239,40,0,15,1,174,255,6,251,67,0,16,136,255,7,101,0,16,95,255,7,140,0,16,61,249,255,6,177,2,0,15,34,235,255,6,206,11,0,15,15,214,255,6,229,27,0,15,4,186,255,6,245,50,0,16,150,255,6,253,80,0,16,110,255,7,117,0,16,73,252,255,6,155,0,16,43,241,255,6,189,5,0,15,22,223,255,6,216,17,0,15,7,197,255,6,236,36,0,16,164,255,22,0,3,255,23,0,3,255,23,0,3,255,23,0,3,255,23,0,235, +43,21,0,113,255,6,0,15,255,6,0,15,255,6,0,15,255,6,0,15,255,6,0,15,255,6,0,15,255,6,0,51,255,18,0,3,255,18,0,3,255,18,0,3,255,18,0,3,255,17,209,0,11,12,203,255,6,232,30,0,10,5,184,255,6,247,55,0,10,1,163,255,7,88,0,11,140,255,7,128,0,11,115,255,7,167,0,11,91,254,255,6,200,8,0,10,70,250,255,6,225,23,0,10,51,243,255,6,243,46,0,10,36,233,255,6,253,77,0,10,23,221,255,7,115,0,11,206,255,17,0,3,255,18,0,3,255,18,0,3,255,18,0,3,255,18,0,190, +43,26,0,6,158,255,2,155,3,0,3,3,155,255,2,157,0,13,9,208,255,2,179,10,0,1,10,180,255,2,207,8,0,14,36,240,255,2,200,42,201,255,2,240,35,0,16,80,255,3,254,255,3,79,0,18,138,255,5,138,0,90,255,23,0,3,255,23,0,3,255,23,0,3,255,23,0,3,255,22,163,0,16,50,245,255,6,195,6,0,15,27,229,255,6,221,20,0,15,10,205,255,6,239,40,0,15,1,174,255,6,251,67,0,16,136,255,7,101,0,16,95,255,7,140,0,16,61,249,255,6,177,2,0,15,34,235,255,6,206,11,0,15,15,214,255,6,229,27,0,15,4,186,255,6,245,50,0,16,150,255,6,253,80,0,16,110,255,7,117,0,16,73,252,255,6,155,0,16,43,241,255,6,189,5,0,15,22,223,255,6,216,17,0,15,7,197,255,6,236,36,0,16,164,255,22,0,3,255,23,0,3,255,23,0,3,255,23,0,3,255,23,0,235, +43,21,0,108,175,255,2,120,0,5,120,255,2,175,0,8,28,242,255,1,253,74,0,3,75,253,255,1,242,27,0,9,109,255,2,240,39,0,1,40,241,255,2,108,0,10,2,202,255,2,217,32,217,255,2,201,2,0,11,47,251,255,2,246,255,2,251,47,0,13,138,255,5,137,0,14,10,222,255,3,222,10,0,52,255,18,0,3,255,18,0,3,255,18,0,3,255,18,0,3,255,17,209,0,11,12,203,255,6,232,30,0,10,5,184,255,6,247,55,0,10,1,163,255,7,88,0,11,140,255,7,128,0,11,115,255,7,167,0,11,91,254,255,6,200,8,0,10,70,250,255,6,225,23,0,10,51,243,255,6,243,46,0,10,36,233,255,6,253,77,0,10,23,221,255,7,115,0,11,206,255,17,0,3,255,18,0,3,255,18,0,3,255,18,0,3,255,18,0,190, +43,29,0,185,84,92,92,92,92,92,30,0,22,236,255,5,84,0,22,236,255,5,84,0,22,236,255,5,84,0,22,236,255,5,84,0,22,236,255,5,84,0,22,236,255,5,84,0,21,2,237,255,5,87,0,17,4,79,156,210,247,255,6,254,226,182,110,27,0,12,69,218,255,14,248,139,5,0,9,81,251,255,17,181,2,0,7,24,238,255,19,111,0,7,154,255,6,241,251,255,5,236,255,6,243,15,0,5,16,245,255,5,234,32,236,255,5,85,161,255,6,110,0,5,89,255,6,92,0,1,236,255,5,84,13,232,255,5,193,0,5,148,255,5,231,4,0,1,236,255,5,84,0,1,131,255,5,245,4,0,4,186,255,5,165,0,2,236,255,5,84,0,1,62,255,6,33,0,4,204,255,5,132,0,2,236,255,5,84,0,1,29,255,6,51,0,4,208,255,5,125,0,2,236,255,5,84,0,1,22,255,6,56,0,4,188,255,5,144,0,2,236,255,5,84,0,1,41,255,6,35,0,4,159,255,5,195,0,2,236,255,5,84,0,1,92,255,5,251,10,0,4,92,255,5,254,45,0,1,236,255,5,84,1,195,255,5,195,0,5,20,246,255,5,221,38,236,255,5,88,151,255,6,114,0,6,139,255,6,243,249,255,5,237,255,6,232,10,0,6,16,218,255,18,254,84,0,8,37,234,255,17,122,0,10,31,201,255,14,242,96,0,12,1,90,196,254,255,9,229,138,22,0,16,23,77,244,255,5,144,46,2,0,20,236,255,5,84,0,22,236,255,5,84,0,22,236,255,5,84,0,22,236,255,5,84,0,22,236,255,5,84,0,22,236,255,5,84,0,22,114,124,124,124,124,124,40,0,40, +43,25,0,6,255,4,0,3,255,4,0,14,255,4,0,3,255,4,0,14,255,4,0,3,255,4,0,14,255,4,0,3,255,4,0,111,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,6,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,18,0,7,255,18,0,7,255,18,0,7,255,18,0,7,255,18,0,7,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,228, +43,28,0,233,77,255,8,76,0,18,174,255,8,173,0,17,21,250,255,8,250,20,0,16,113,255,10,112,0,16,210,255,10,209,0,15,52,255,12,51,0,14,149,255,5,214,214,255,5,148,0,13,8,238,255,5,117,118,255,5,238,7,0,12,88,255,5,252,24,25,252,255,5,87,0,12,185,255,5,179,0,2,180,255,5,184,0,11,29,253,255,5,81,0,2,82,255,5,253,28,0,10,124,255,5,235,5,0,2,5,235,255,5,123,0,10,220,255,5,143,0,4,144,255,5,219,0,9,63,255,6,46,0,4,47,255,6,62,0,8,160,255,5,205,0,6,206,255,5,159,0,7,13,244,255,5,108,0,6,109,255,5,244,12,0,6,99,255,20,98,0,6,196,255,20,195,0,5,38,255,22,37,0,4,135,255,22,134,0,3,3,229,255,22,228,3,0,2,74,255,6,36,0,10,36,255,6,73,0,2,171,255,5,193,0,12,194,255,5,170,0,1,19,249,255,5,95,0,12,96,255,5,248,18,110,255,5,242,11,0,12,11,243,255,5,109,207,255,5,156,0,14,157,255,5,207,0,252, +43,27,0,219,255,20,0,7,255,20,0,7,255,20,0,7,255,20,0,7,255,20,0,7,255,6,0,21,255,6,0,21,255,6,0,21,255,6,0,21,255,6,0,21,255,11,246,233,214,173,127,51,0,10,255,17,218,91,1,0,7,255,19,183,12,0,6,255,20,178,0,6,255,21,75,0,5,255,6,0,5,6,24,68,162,255,6,163,0,5,255,6,0,9,123,255,5,220,0,5,255,6,0,9,17,255,5,243,0,5,255,6,0,9,19,255,5,245,0,5,255,6,0,9,125,255,5,223,0,5,255,6,0,5,4,23,68,162,255,6,170,0,5,255,21,86,0,5,255,20,198,1,0,5,255,19,207,22,0,6,255,17,239,120,7,0,7,255,11,254,242,228,194,147,79,6,0,249, +43,27,0,219,255,10,253,244,233,209,174,126,55,1,0,9,255,17,211,74,0,8,255,18,254,108,0,7,255,19,250,46,0,6,255,20,151,0,6,255,6,0,5,16,43,123,240,255,5,218,0,6,255,6,0,8,69,255,5,244,0,6,255,6,0,8,7,255,5,239,0,6,255,6,0,8,67,255,5,208,0,6,255,6,0,5,15,42,120,238,255,5,125,0,6,255,19,226,20,0,6,255,18,213,44,0,7,255,18,143,17,0,7,255,19,228,41,0,6,255,20,218,7,0,5,255,6,0,5,4,21,67,159,255,6,104,0,5,255,6,0,9,119,255,5,189,0,5,255,6,0,9,16,255,5,235,0,5,255,6,0,9,17,255,5,251,0,5,255,6,0,9,122,255,5,235,0,5,255,6,0,5,4,21,67,161,255,6,200,0,5,255,21,122,0,5,255,20,231,16,0,5,255,19,240,60,0,6,255,18,180,38,0,7,255,12,248,236,213,171,117,36,0,249, +43,23,0,187,255,19,0,4,255,19,0,4,255,19,0,4,255,19,0,4,255,19,0,4,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,221, +43,32,0,255,0,8,255,19,0,13,255,19,0,13,255,19,0,13,255,19,0,13,255,19,0,12,1,255,6,0,7,255,6,0,12,2,255,6,0,7,255,6,0,12,3,255,5,253,0,7,255,6,0,12,5,255,5,250,0,7,255,6,0,12,8,255,5,246,0,7,255,6,0,12,12,255,5,238,0,7,255,6,0,12,17,255,5,230,0,7,255,6,0,12,23,255,5,216,0,7,255,6,0,12,31,255,5,201,0,7,255,6,0,12,43,255,5,181,0,7,255,6,0,12,57,255,5,158,0,7,255,6,0,12,77,255,5,126,0,7,255,6,0,12,110,255,5,88,0,7,255,6,0,12,186,255,5,39,0,7,255,6,0,11,81,255,5,231,1,0,7,255,6,0,10,86,247,255,5,145,0,8,255,6,0,8,255,28,0,4,255,28,0,4,255,28,0,4,255,28,0,4,255,28,0,4,255,5,0,18,255,5,0,4,255,5,0,18,255,5,0,4,255,5,0,18,255,5,0,4,255,5,0,18,255,5,0,4,255,5,0,18,255,5,0,4,255,5,0,18,255,5,0,98, +43,25,0,203,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,6,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,18,0,7,255,18,0,7,255,18,0,7,255,18,0,7,255,18,0,7,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,228, +43,44,0,255,0,98,131,255,7,206,17,0,8,255,6,0,8,17,207,255,7,131,0,3,138,255,7,202,15,0,7,255,6,0,7,15,203,255,7,137,0,5,144,255,7,198,12,0,6,255,6,0,6,13,199,255,7,143,0,7,150,255,7,194,11,0,5,255,6,0,5,11,195,255,7,149,0,8,1,156,255,7,190,9,0,4,255,6,0,4,9,190,255,7,155,1,0,9,2,162,255,7,185,7,0,3,255,6,0,3,8,186,255,7,161,2,0,11,3,167,255,7,181,6,0,2,255,6,0,2,6,182,255,7,166,3,0,13,4,173,255,7,176,5,0,1,255,6,0,1,5,177,255,7,172,4,0,15,5,178,255,7,171,4,255,6,4,172,255,7,177,5,0,17,7,183,255,7,166,255,6,167,255,7,182,6,0,19,20,248,255,20,248,20,0,20,158,255,22,157,0,19,85,255,24,84,0,17,29,238,255,24,238,28,0,15,2,193,255,6,245,255,12,245,255,6,192,2,0,14,123,255,6,219,29,206,255,10,206,30,220,255,6,122,0,13,54,251,255,5,250,53,0,1,19,210,255,8,209,19,0,1,54,251,255,5,251,54,0,11,13,220,255,6,120,0,3,22,213,255,6,213,21,0,3,121,255,6,220,12,0,10,161,255,6,190,2,0,4,24,255,6,23,0,4,2,191,255,6,160,0,9,88,255,6,237,27,0,6,255,6,0,6,28,237,255,6,87,0,7,31,240,255,6,82,0,7,255,6,0,7,82,255,6,239,30,0,5,3,195,255,6,154,0,8,255,6,0,8,155,255,6,195,3,0,4,126,255,6,215,10,0,8,255,6,0,8,10,216,255,6,125,0,3,57,252,255,5,249,49,0,9,255,6,0,9,49,249,255,5,251,56,0,1,14,222,255,6,115,0,10,255,6,0,10,116,255,6,222,14,164,255,6,186,1,0,10,255,6,0,10,1,186,255,6,164,0,255,0,141, +43,26,0,211,33,88,130,166,195,222,241,252,248,238,224,192,157,98,30,0,11,255,14,254,180,50,0,9,255,16,250,99,0,8,255,17,251,57,0,7,255,18,173,0,7,223,160,115,75,49,24,13,5,4,19,59,141,249,255,5,230,0,19,81,255,5,246,0,19,9,255,5,217,0,19,81,255,5,162,0,14,1,7,26,64,140,247,255,4,253,46,0,11,255,12,251,89,0,12,255,11,175,39,0,13,255,11,252,171,34,0,12,255,13,240,60,0,11,255,14,236,20,0,13,2,9,27,58,114,209,255,6,128,0,18,2,156,255,5,205,0,19,23,255,5,242,0,19,21,255,5,248,0,5,201,91,7,0,10,2,153,255,5,222,0,5,255,2,243,169,106,63,29,16,4,4,18,49,106,205,255,6,165,0,5,255,20,66,0,5,255,19,155,0,6,255,18,153,5,0,6,56,168,249,255,13,197,70,0,10,13,86,147,192,226,241,252,248,237,224,192,155,103,30,0,242, +43,30,0,243,255,6,0,10,139,255,7,0,6,255,6,0,9,27,247,255,7,0,6,255,6,0,9,153,255,8,0,6,255,6,0,8,36,251,255,8,0,6,255,6,0,8,167,255,9,0,6,255,6,0,7,47,254,255,9,0,6,255,6,0,7,180,255,3,206,255,6,0,6,255,6,0,6,59,255,4,70,255,6,0,6,255,6,0,6,194,255,3,187,0,1,255,6,0,6,255,6,0,5,73,255,3,254,50,0,1,255,6,0,6,255,6,0,4,1,206,255,3,167,0,2,255,6,0,6,255,6,0,4,86,255,3,249,34,0,2,255,6,0,6,255,6,0,3,3,217,255,3,146,0,3,255,6,0,6,255,6,0,3,100,255,3,242,21,0,3,255,6,0,6,255,6,0,2,7,226,255,3,126,0,4,255,6,0,6,255,6,0,2,113,255,3,231,11,0,4,255,6,0,6,255,6,0,1,13,235,255,3,105,0,5,255,6,0,6,255,6,0,1,127,255,3,218,4,0,5,255,6,0,6,255,6,19,242,255,3,84,0,6,255,6,0,6,255,6,140,255,3,201,0,7,255,6,0,6,255,6,247,255,3,64,0,7,255,6,0,6,255,9,182,0,8,255,6,0,6,255,8,253,46,0,8,255,6,0,6,255,8,161,0,9,255,6,0,6,255,7,248,30,0,9,255,6,0,6,255,7,141,0,10,255,6,0,255,0,18, +43,30,0,8,232,255,2,62,0,4,63,255,2,231,0,18,166,255,2,229,77,14,14,78,230,255,2,164,0,18,51,253,255,8,252,49,0,19,101,251,255,6,250,98,0,21,46,157,221,248,248,221,156,45,0,105,255,6,0,10,139,255,7,0,6,255,6,0,9,27,247,255,7,0,6,255,6,0,9,153,255,8,0,6,255,6,0,8,36,251,255,8,0,6,255,6,0,8,167,255,9,0,6,255,6,0,7,47,254,255,9,0,6,255,6,0,7,180,255,3,206,255,6,0,6,255,6,0,6,59,255,4,70,255,6,0,6,255,6,0,6,194,255,3,187,0,1,255,6,0,6,255,6,0,5,73,255,3,254,50,0,1,255,6,0,6,255,6,0,4,1,206,255,3,167,0,2,255,6,0,6,255,6,0,4,86,255,3,249,34,0,2,255,6,0,6,255,6,0,3,3,217,255,3,146,0,3,255,6,0,6,255,6,0,3,100,255,3,242,21,0,3,255,6,0,6,255,6,0,2,7,226,255,3,126,0,4,255,6,0,6,255,6,0,2,113,255,3,231,11,0,4,255,6,0,6,255,6,0,1,13,235,255,3,105,0,5,255,6,0,6,255,6,0,1,127,255,3,218,4,0,5,255,6,0,6,255,6,19,242,255,3,84,0,6,255,6,0,6,255,6,140,255,3,201,0,7,255,6,0,6,255,6,247,255,3,64,0,7,255,6,0,6,255,9,182,0,8,255,6,0,6,255,8,253,46,0,8,255,6,0,6,255,8,161,0,9,255,6,0,6,255,7,248,30,0,9,255,6,0,6,255,7,141,0,10,255,6,0,255,0,18, +43,29,0,235,255,6,0,9,50,237,255,7,124,0,4,255,6,0,8,55,239,255,7,116,0,5,255,6,0,7,61,242,255,6,254,109,0,6,255,6,0,6,66,245,255,6,254,101,0,7,255,6,0,5,72,247,255,6,253,95,0,8,255,6,0,4,78,249,255,6,251,88,0,9,255,6,0,3,84,250,255,6,250,82,0,10,255,6,0,2,91,252,255,6,248,75,0,11,255,6,0,1,98,253,255,6,246,70,0,12,255,6,105,254,255,6,243,64,0,13,255,14,94,0,14,255,14,214,11,0,13,255,15,165,0,13,255,16,106,0,12,255,9,241,255,6,249,53,0,11,255,8,227,37,157,255,6,224,18,0,10,255,7,223,33,0,1,8,208,255,6,181,1,0,9,255,6,218,29,0,3,36,240,255,6,123,0,9,255,6,25,0,5,81,255,6,252,66,0,8,255,6,0,7,140,255,6,233,26,0,7,255,6,0,7,4,195,255,6,195,4,0,6,255,6,0,8,26,233,255,6,140,0,6,255,6,0,9,66,252,255,6,81,0,5,255,6,0,10,123,255,6,240,36,0,4,255,6,0,10,1,181,255,6,208,8,0,3,255,6,0,11,18,224,255,6,157,0,255,0,6, +43,30,0,248,255,19,0,11,255,19,0,11,255,19,0,11,255,19,0,11,255,19,0,10,1,255,6,0,7,255,6,0,10,3,255,6,0,7,255,6,0,10,5,255,5,252,0,7,255,6,0,10,10,255,5,249,0,7,255,6,0,10,15,255,5,243,0,7,255,6,0,10,25,255,5,234,0,7,255,6,0,10,35,255,5,222,0,7,255,6,0,10,48,255,5,206,0,7,255,6,0,10,65,255,5,187,0,7,255,6,0,10,88,255,5,163,0,7,255,6,0,10,117,255,5,132,0,7,255,6,0,10,156,255,5,97,0,7,255,6,0,10,216,255,5,53,0,7,255,6,0,9,75,255,5,248,7,0,7,255,6,0,8,53,235,255,5,192,0,8,255,6,0,5,25,77,167,252,255,6,111,0,8,255,6,0,5,255,9,233,13,0,8,255,6,0,5,255,8,246,65,0,9,255,6,0,5,255,7,216,54,0,10,255,6,0,5,255,5,207,100,6,0,11,255,6,0,5,238,202,157,101,33,0,14,255,6,0,255,0,18, +43,36,0,255,0,36,255,7,121,0,13,121,255,7,0,7,255,7,229,5,0,11,6,230,255,7,0,7,255,8,94,0,11,95,255,8,0,7,255,8,208,0,11,209,255,8,0,7,255,9,68,0,9,69,255,9,0,7,255,9,183,0,9,184,255,9,0,7,255,10,43,0,7,44,255,10,0,7,255,6,197,255,3,157,0,7,158,255,3,196,255,6,0,7,255,6,82,255,3,248,23,0,5,23,248,255,3,81,255,6,0,7,255,6,2,221,255,3,130,0,5,131,255,3,220,2,255,6,0,7,255,6,0,1,109,255,3,235,9,0,3,9,236,255,3,108,0,1,255,6,0,7,255,6,0,1,11,238,255,3,104,0,3,105,255,3,238,11,0,1,255,6,0,7,255,6,0,2,135,255,3,217,1,0,1,2,218,255,3,134,0,2,255,6,0,7,255,6,0,2,26,250,255,3,78,0,1,79,255,3,250,26,0,2,255,6,0,7,255,6,0,3,162,255,3,193,0,1,194,255,3,161,0,3,255,6,0,7,255,6,0,3,47,255,4,105,255,4,47,0,3,255,6,0,7,255,6,0,4,188,255,3,253,255,3,187,0,4,255,6,0,7,255,6,0,4,74,255,7,73,0,4,255,6,0,7,255,6,0,4,1,214,255,5,213,1,0,4,255,6,0,7,255,6,0,5,100,255,5,99,0,5,255,6,0,7,255,6,0,5,8,233,255,3,233,7,0,5,255,6,0,7,255,6,0,17,255,6,0,7,255,6,0,17,255,6,0,7,255,6,0,17,255,6,0,7,255,6,0,17,255,6,0,7,255,6,0,17,255,6,0,255,0,73, +43,30,0,243,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,24,0,6,255,24,0,6,255,24,0,6,255,24,0,6,255,24,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,255,0,18, +43,31,0,255,0,2,9,73,136,193,218,236,251,236,218,194,136,73,10,0,16,17,125,235,255,11,235,125,17,0,13,63,231,255,15,231,62,0,11,101,252,255,17,251,101,0,9,71,252,255,19,252,69,0,7,23,240,255,6,232,126,55,20,5,21,56,127,233,255,6,239,22,0,6,142,255,6,163,10,0,7,11,167,255,6,141,0,5,19,246,255,5,169,0,10,1,173,255,5,246,19,0,4,89,255,5,240,16,0,11,17,242,255,5,87,0,4,156,255,5,143,0,13,145,255,5,154,0,4,206,255,5,73,0,13,75,255,5,204,0,4,226,255,5,26,0,13,28,255,5,225,0,4,246,255,5,8,0,13,10,255,5,245,0,4,246,255,5,8,0,13,8,255,5,246,0,4,227,255,5,26,0,13,27,255,5,225,0,4,206,255,5,72,0,13,74,255,5,205,0,4,158,255,5,142,0,13,144,255,5,156,0,4,90,255,5,239,14,0,11,16,241,255,5,88,0,4,20,247,255,5,166,0,11,170,255,5,247,20,0,5,144,255,6,160,9,0,7,10,164,255,6,143,0,6,24,241,255,6,230,124,54,19,4,19,55,125,232,255,6,240,23,0,7,74,253,255,19,252,73,0,9,105,252,255,17,252,104,0,11,66,233,255,15,233,66,0,13,18,128,236,255,11,236,128,19,0,16,10,75,138,195,219,238,251,238,220,195,138,75,10,0,255,0,33, +43,30,0,243,255,24,0,6,255,24,0,6,255,24,0,6,255,24,0,6,255,24,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,6,255,6,0,12,255,6,0,255,0,18, +43,26,0,211,255,12,243,227,195,144,73,2,0,8,255,17,225,85,0,7,255,19,152,1,0,5,255,20,129,0,5,255,20,249,35,0,4,255,6,0,5,9,38,101,213,255,6,132,0,4,255,6,0,8,7,184,255,5,202,0,4,255,6,0,9,44,255,5,233,0,4,255,6,0,9,7,255,5,250,0,4,255,6,0,9,45,255,5,233,0,4,255,6,0,8,7,185,255,5,202,0,4,255,6,0,5,8,37,100,213,255,6,131,0,4,255,20,249,35,0,4,255,20,129,0,5,255,19,152,1,0,5,255,17,226,87,0,7,255,12,244,229,197,146,73,2,0,8,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,251, +43,26,0,218,47,110,171,209,228,246,248,233,205,158,99,21,0,11,3,86,203,255,11,253,179,62,0,8,30,197,255,16,0,7,62,237,255,17,0,6,41,239,255,18,0,5,9,221,255,6,252,167,88,33,12,6,21,47,95,155,234,255,2,0,5,118,255,6,211,41,0,9,3,80,197,0,4,11,237,255,5,209,12,0,17,77,255,5,251,37,0,18,149,255,5,162,0,19,202,255,5,83,0,19,224,255,5,30,0,19,245,255,5,9,0,19,246,255,5,8,0,19,225,255,5,29,0,19,203,255,5,81,0,19,150,255,5,161,0,19,78,255,5,251,36,0,18,11,238,255,5,207,11,0,18,119,255,6,208,38,0,9,3,79,197,0,5,9,222,255,6,252,166,86,32,11,5,20,46,94,155,234,255,2,0,6,42,239,255,18,0,7,63,237,255,17,0,8,30,198,255,16,0,9,3,87,204,255,11,253,180,63,0,12,48,111,172,210,229,247,249,234,206,159,99,22,0,238, +43,25,0,200,255,24,0,1,255,24,0,1,255,24,0,1,255,24,0,1,255,24,0,10,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,235, +43,28,0,225,195,255,5,220,3,0,10,8,230,255,5,193,0,2,74,255,6,90,0,10,108,255,6,67,0,3,207,255,5,210,1,0,8,6,226,255,5,198,0,4,86,255,6,78,0,8,103,255,6,72,0,4,2,217,255,5,199,0,7,4,223,255,5,202,0,6,98,255,6,66,0,6,97,255,6,77,0,6,5,226,255,5,188,0,5,3,219,255,5,207,0,8,110,255,6,54,0,4,92,255,6,83,0,8,9,234,255,5,176,0,3,2,215,255,5,211,1,0,9,123,255,5,254,43,0,2,86,255,6,88,0,10,15,241,255,5,163,0,1,1,210,255,5,216,2,0,11,135,255,5,251,33,81,255,6,93,0,12,22,246,255,5,151,205,255,5,220,3,0,13,147,255,5,254,255,6,98,0,14,30,250,255,10,224,5,0,15,159,255,10,103,0,16,39,253,255,8,227,6,0,17,172,255,8,108,0,18,50,255,7,231,8,0,18,11,241,255,6,114,0,17,10,54,185,255,6,234,10,0,15,255,11,117,0,16,255,10,219,7,0,16,255,9,242,50,0,17,255,8,199,46,0,18,255,1,253,243,232,210,171,125,47,0,255,0,12, +43,36,0,255,0,48,255,6,0,30,255,6,0,30,255,6,0,24,22,79,136,178,209,240,255,6,240,209,178,136,79,22,0,15,8,97,192,254,255,16,254,192,97,8,0,11,81,223,255,22,223,81,0,9,124,255,26,123,0,7,99,255,28,99,0,5,19,237,255,6,233,148,86,41,13,255,6,13,41,86,148,233,255,6,237,19,0,4,106,255,6,140,9,0,4,255,6,0,4,10,143,255,6,105,0,4,182,255,5,164,0,6,255,6,0,6,166,255,5,182,0,4,222,255,5,54,0,6,255,6,0,6,56,255,5,221,0,4,244,255,5,11,0,6,255,6,0,6,12,255,5,243,0,4,245,255,5,10,0,6,255,6,0,6,11,255,5,244,0,4,222,255,5,52,0,6,255,6,0,6,54,255,5,221,0,4,184,255,5,161,0,6,255,6,0,6,163,255,5,183,0,4,107,255,6,135,8,0,4,255,6,0,4,9,138,255,6,106,0,4,20,239,255,6,231,146,84,39,12,255,6,12,39,84,146,232,255,6,238,20,0,5,103,255,28,102,0,7,130,255,26,129,0,9,85,226,255,22,225,84,0,11,9,101,195,254,255,16,254,195,101,9,0,15,23,81,138,179,210,241,255,6,241,210,179,138,81,23,0,24,255,6,0,30,255,6,0,30,255,6,0,255,0,84, +43,28,0,225,167,255,6,168,0,10,169,255,6,166,0,2,17,228,255,6,91,0,8,92,255,6,227,16,0,3,68,254,255,5,240,29,0,6,30,240,255,5,254,67,0,5,144,255,6,190,1,0,4,2,191,255,6,143,0,6,8,213,255,6,115,0,4,116,255,6,212,8,0,7,48,250,255,5,248,44,0,2,45,248,255,5,249,48,0,9,121,255,6,209,6,6,209,255,6,120,0,10,2,195,255,6,138,139,255,6,195,2,0,11,33,242,255,5,253,253,255,5,242,32,0,13,97,255,12,96,0,15,174,255,10,174,0,16,20,232,255,8,231,20,0,17,86,255,8,86,0,18,163,255,8,162,0,17,78,255,10,78,0,15,18,231,255,10,231,18,0,14,165,255,12,164,0,13,80,255,6,218,219,255,6,79,0,11,19,232,255,5,253,60,60,253,255,5,231,18,0,10,167,255,6,142,0,2,143,255,6,166,0,9,82,255,6,217,9,0,2,9,218,255,6,81,0,7,20,233,255,5,253,57,0,4,60,253,255,5,232,19,0,6,169,255,6,139,0,6,142,255,6,168,0,5,84,255,6,215,8,0,6,9,218,255,6,83,0,3,21,234,255,5,252,55,0,8,59,253,255,5,233,20,0,2,170,255,6,137,0,10,141,255,6,170,0,253, +43,33,0,255,0,12,255,6,0,12,255,6,0,9,255,6,0,12,255,6,0,9,255,6,0,12,255,6,0,9,255,6,0,12,255,6,0,9,255,6,0,12,255,6,0,9,255,6,0,12,255,6,0,9,255,6,0,12,255,6,0,9,255,6,0,12,255,6,0,9,255,6,0,12,255,6,0,9,255,6,0,12,255,6,0,9,255,6,0,12,255,6,0,9,255,6,0,12,255,6,0,9,255,6,0,12,255,6,0,9,255,6,0,12,255,6,0,9,255,6,0,12,255,6,0,9,255,6,0,12,255,6,0,9,255,6,0,12,255,6,0,9,255,6,0,12,255,6,0,9,255,6,0,12,255,6,0,9,255,6,0,12,255,6,0,9,255,6,0,12,255,6,0,9,255,28,0,5,255,28,0,5,255,28,0,5,255,28,0,5,255,28,0,28,255,5,0,28,255,5,0,28,255,5,0,28,255,5,0,28,255,5,0,28,255,5,0,101, +43,29,0,235,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,1,0,10,255,6,0,6,255,6,7,0,10,255,6,0,6,255,6,24,0,10,255,6,0,6,253,255,5,58,0,10,255,6,0,6,238,255,5,129,0,10,255,6,0,6,207,255,5,246,105,23,1,0,7,255,6,0,6,147,255,22,0,6,47,255,22,0,7,149,255,21,0,7,5,150,255,20,0,9,51,152,213,242,255,16,0,23,255,6,0,23,255,6,0,23,255,6,0,23,255,6,0,23,255,6,0,23,255,6,0,23,255,6,0,23,255,6,0,23,255,6,0,23,255,6,0,23,255,6,0,255,0,9, +43,44,0,255,0,100,255,6,0,10,255,6,0,10,255,6,0,6,255,6,0,10,255,6,0,10,255,6,0,6,255,6,0,10,255,6,0,10,255,6,0,6,255,6,0,10,255,6,0,10,255,6,0,6,255,6,0,10,255,6,0,10,255,6,0,6,255,6,0,10,255,6,0,10,255,6,0,6,255,6,0,10,255,6,0,10,255,6,0,6,255,6,0,10,255,6,0,10,255,6,0,6,255,6,0,10,255,6,0,10,255,6,0,6,255,6,0,10,255,6,0,10,255,6,0,6,255,6,0,10,255,6,0,10,255,6,0,6,255,6,0,10,255,6,0,10,255,6,0,6,255,6,0,10,255,6,0,10,255,6,0,6,255,6,0,10,255,6,0,10,255,6,0,6,255,6,0,10,255,6,0,10,255,6,0,6,255,6,0,10,255,6,0,10,255,6,0,6,255,6,0,10,255,6,0,10,255,6,0,6,255,6,0,10,255,6,0,10,255,6,0,6,255,6,0,10,255,6,0,10,255,6,0,6,255,6,0,10,255,6,0,10,255,6,0,6,255,6,0,10,255,6,0,10,255,6,0,6,255,38,0,6,255,38,0,6,255,38,0,6,255,38,0,6,255,38,0,255,0,144, +43,48,0,255,0,132,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,6,0,10,255,42,0,6,255,42,0,6,255,42,0,6,255,42,0,6,255,42,0,43,255,5,0,43,255,5,0,43,255,5,0,43,255,5,0,43,255,5,0,43,255,5,0,147, +43,37,0,255,0,44,255,6,0,18,255,6,0,7,255,6,0,18,255,6,0,7,255,6,0,18,255,6,0,7,255,6,0,18,255,6,0,7,255,6,0,18,255,6,0,7,255,6,0,18,255,6,0,7,255,6,0,18,255,6,0,7,255,6,0,18,255,6,0,7,255,6,0,18,255,6,0,7,255,6,0,18,255,6,0,7,255,11,254,242,228,195,149,81,7,0,6,255,6,0,7,255,17,240,122,8,0,4,255,6,0,7,255,19,208,22,0,3,255,6,0,7,255,20,198,1,0,2,255,6,0,7,255,21,86,0,2,255,6,0,7,255,6,0,5,6,24,68,162,255,6,169,0,2,255,6,0,7,255,6,0,9,123,255,5,222,0,2,255,6,0,7,255,6,0,9,17,255,5,244,0,2,255,6,0,7,255,6,0,9,19,255,5,245,0,2,255,6,0,7,255,6,0,9,125,255,5,223,0,2,255,6,0,7,255,6,0,5,4,23,68,162,255,6,171,0,2,255,6,0,7,255,21,87,0,2,255,6,0,7,255,20,199,1,0,2,255,6,0,7,255,19,209,23,0,3,255,6,0,7,255,17,241,124,8,0,4,255,6,0,7,255,11,254,243,229,196,150,82,8,0,6,255,6,0,255,0,82, +43,27,0,219,255,6,0,21,255,6,0,21,255,6,0,21,255,6,0,21,255,6,0,21,255,6,0,21,255,6,0,21,255,6,0,21,255,6,0,21,255,6,0,21,255,11,254,242,228,195,149,81,7,0,9,255,17,240,122,8,0,7,255,19,208,22,0,6,255,20,198,1,0,5,255,21,86,0,5,255,6,0,5,6,24,68,162,255,6,169,0,5,255,6,0,9,123,255,5,222,0,5,255,6,0,9,17,255,5,244,0,5,255,6,0,9,19,255,5,245,0,5,255,6,0,9,125,255,5,223,0,5,255,6,0,5,4,23,68,162,255,6,171,0,5,255,21,87,0,5,255,20,199,1,0,5,255,19,209,23,0,6,255,17,241,124,8,0,7,255,11,254,243,229,196,150,82,8,0,249, +43,26,0,187,11,71,116,153,169,179,162,143,119,62,7,0,12,1,76,179,247,255,9,247,176,57,0,10,164,255,15,189,30,0,8,180,255,16,236,71,0,7,180,255,17,251,68,0,6,180,255,2,242,173,109,74,54,63,87,146,231,255,7,239,40,0,5,180,229,108,13,0,7,9,140,255,7,192,0,5,80,12,0,11,130,255,7,69,0,17,1,194,255,6,184,0,18,54,255,6,247,8,0,18,213,255,6,68,0,6,78,168,168,168,168,168,168,168,168,168,168,168,226,255,6,109,0,6,120,255,18,130,0,6,120,255,18,151,0,6,120,255,18,146,0,6,120,255,18,126,0,6,54,116,116,116,116,116,116,116,116,116,116,116,212,255,6,105,0,17,2,227,255,6,54,0,17,78,255,6,237,2,0,16,10,218,255,6,164,0,4,119,44,0,10,3,169,255,6,253,43,0,4,180,251,161,53,0,7,38,185,255,7,164,0,5,180,255,3,224,160,124,105,114,137,196,252,255,7,218,17,0,5,180,255,17,237,38,0,6,180,255,16,207,35,0,7,129,251,255,13,243,138,8,0,9,29,128,208,255,8,252,204,124,18,0,14,20,66,103,119,127,112,93,69,14,0,219, +43,42,0,255,0,84,255,6,0,11,29,100,155,205,225,241,251,235,217,191,133,70,8,0,12,255,6,0,9,55,175,252,255,11,232,121,15,0,10,255,6,0,7,4,131,253,255,15,228,59,0,9,255,6,0,6,3,172,255,18,251,97,0,8,255,6,0,6,152,255,20,251,67,0,7,255,6,0,5,77,255,7,232,126,55,20,5,21,56,127,233,255,6,238,21,0,6,255,6,0,4,4,226,255,6,163,10,0,7,11,167,255,6,139,0,6,255,6,0,4,86,255,6,169,0,10,1,173,255,5,246,18,0,5,255,6,0,4,172,255,5,240,16,0,11,17,242,255,5,87,0,5,255,6,0,4,228,255,5,143,0,13,145,255,5,154,0,5,255,16,73,0,13,75,255,5,204,0,5,255,16,26,0,13,28,255,5,225,0,5,255,16,8,0,13,10,255,5,245,0,5,255,16,8,0,13,8,255,5,246,0,5,255,16,26,0,13,27,255,5,225,0,5,255,6,0,4,231,255,5,72,0,13,74,255,5,205,0,5,255,6,0,4,180,255,5,142,0,13,144,255,5,156,0,5,255,6,0,4,110,255,5,239,14,0,11,16,241,255,5,88,0,5,255,6,0,4,19,248,255,5,166,0,11,170,255,5,246,19,0,5,255,6,0,5,146,255,6,160,9,0,7,10,164,255,6,141,0,6,255,6,0,5,15,233,255,6,230,124,54,19,4,19,55,125,232,255,6,239,22,0,6,255,6,0,6,66,250,255,19,252,70,0,7,255,6,0,7,95,252,255,17,252,101,0,8,255,6,0,8,68,236,255,15,230,62,0,9,255,6,0,9,25,141,243,255,11,233,124,17,0,10,255,6,0,11,16,85,146,200,222,240,251,237,218,192,135,72,8,0,255,0,132, +43,28,0,232,33,119,171,215,234,247,255,11,0,9,28,174,255,17,0,8,40,233,255,18,0,7,4,216,255,19,0,7,97,255,6,179,73,23,4,0,4,255,6,0,7,178,255,5,167,0,8,255,6,0,7,227,255,5,49,0,8,255,6,0,7,247,255,5,8,0,8,255,6,0,7,241,255,5,9,0,8,255,6,0,7,193,255,5,52,0,8,255,6,0,7,95,255,5,170,0,8,255,6,0,7,2,188,255,5,182,74,23,4,0,4,255,6,0,8,14,198,255,18,0,9,10,170,255,17,0,11,110,244,255,15,0,11,18,237,255,15,0,11,147,255,6,86,0,3,255,6,0,10,41,251,255,5,195,0,4,255,6,0,10,183,255,5,254,51,0,4,255,6,0,9,73,255,6,159,0,5,255,6,0,8,4,215,255,5,243,25,0,5,255,6,0,8,110,255,6,122,0,6,255,6,0,7,18,237,255,5,223,8,0,6,255,6,0,7,147,255,6,85,0,7,255,6,0,6,41,251,255,5,194,0,8,255,6,0,6,183,255,5,254,50,0,8,255,6,0,255, +43,24,0,255,0,85,23,71,119,167,202,228,243,252,247,234,216,173,122,36,0,10,255,14,180,31,0,8,255,15,235,39,0,7,255,16,211,2,0,6,255,2,201,117,64,26,10,4,19,57,138,249,255,5,84,0,6,185,47,0,9,90,255,5,161,0,17,8,255,5,216,0,7,10,80,150,192,226,240,251,255,9,238,0,6,107,234,255,15,253,0,5,147,255,18,0,4,71,255,19,0,4,173,255,5,241,119,44,11,0,3,1,255,6,0,4,228,255,5,72,0,6,25,255,6,0,4,249,255,5,9,0,6,108,255,6,0,4,236,255,5,67,0,5,46,239,255,6,0,4,185,255,5,231,93,25,5,35,122,244,255,7,0,4,85,255,19,0,5,174,255,11,124,255,6,0,5,8,160,255,8,238,99,0,1,255,6,0,7,57,158,219,245,247,226,189,115,21,0,2,255,6,0,218, +43,25,0,168,12,44,1,0,12,1,30,67,100,128,154,179,201,222,243,255,2,44,0,10,61,176,240,255,11,105,0,9,128,255,14,166,0,8,111,255,15,226,0,7,43,250,255,9,235,206,176,145,111,72,24,0,7,184,255,5,244,144,74,32,6,0,13,50,255,5,225,34,0,17,136,255,5,76,45,134,192,231,248,246,226,193,130,46,0,8,194,255,5,182,255,10,177,28,0,6,230,255,17,232,54,0,5,248,255,18,232,27,0,4,255,20,176,0,4,255,7,244,127,44,10,9,43,126,244,255,5,254,45,0,3,255,6,243,48,0,6,48,244,255,5,129,0,3,255,6,126,0,8,126,255,5,193,0,3,255,6,42,0,8,43,255,5,226,0,3,255,6,8,0,8,9,255,5,246,0,3,250,255,5,8,0,8,9,255,5,245,0,3,230,255,5,42,0,8,43,255,5,223,0,3,199,255,5,125,0,8,125,255,5,187,0,3,131,255,5,243,46,0,6,46,243,255,5,117,0,3,44,253,255,5,243,125,42,8,8,41,124,242,255,5,249,31,0,4,162,255,18,145,0,5,18,214,255,16,201,10,0,6,29,206,255,14,195,22,0,8,6,129,238,255,10,235,121,3,0,11,10,92,153,207,231,247,248,231,207,153,90,8,0,231, +43,23,0,255,0,70,255,9,249,238,212,173,106,18,0,8,255,14,242,95,0,7,255,15,254,66,0,6,255,16,183,0,6,255,16,237,0,6,255,6,0,3,18,130,255,5,246,0,6,255,6,0,4,13,255,5,207,0,6,255,6,0,3,18,130,255,5,99,0,6,255,14,252,133,0,7,255,14,180,35,0,7,255,15,250,89,0,6,255,16,254,62,0,5,255,17,181,0,5,255,6,0,3,4,24,105,255,5,238,0,5,255,6,0,3,4,23,107,255,5,248,0,5,255,17,221,0,5,255,17,147,0,5,255,16,235,24,0,5,255,15,208,41,0,6,255,10,248,235,202,153,75,2,0,211, +43,19,0,255,0,14,255,15,0,4,255,15,0,4,255,15,0,4,255,15,0,4,255,15,0,4,255,6,0,13,255,6,0,13,255,6,0,13,255,6,0,13,255,6,0,13,255,6,0,13,255,6,0,13,255,6,0,13,255,6,0,13,255,6,0,13,255,6,0,13,255,6,0,13,255,6,0,13,255,6,0,13,255,6,0,181, +43,29,0,255,0,158,255,17,0,12,255,17,0,12,255,17,0,12,255,17,0,11,2,255,17,0,11,6,255,5,254,0,5,255,6,0,11,15,255,5,247,0,5,255,6,0,11,28,255,5,239,0,5,255,6,0,11,47,255,5,226,0,5,255,6,0,11,76,255,5,200,0,5,255,6,0,11,115,255,5,173,0,5,255,6,0,11,175,255,5,130,0,5,255,6,0,10,27,247,255,5,77,0,5,255,6,0,9,2,178,255,5,250,17,0,5,255,6,0,8,43,185,255,6,182,0,6,255,6,0,7,255,25,0,4,255,25,0,4,255,25,0,4,255,25,0,4,255,25,0,4,255,5,0,15,255,5,0,4,255,5,0,15,255,5,0,4,255,5,0,15,255,5,0,4,255,5,0,15,255,5,0,4,255,5,0,15,255,5,0,118, +43,24,0,255,0,88,9,92,155,209,231,248,242,221,179,112,24,0,11,3,122,236,255,9,246,140,8,0,8,22,195,255,13,202,25,0,6,10,201,255,15,202,8,0,5,145,255,5,246,129,41,7,14,74,206,255,5,140,0,4,31,249,255,4,252,67,0,5,9,203,255,4,246,24,0,3,118,255,5,146,0,7,69,255,5,112,0,3,188,255,5,60,0,7,11,255,5,179,0,3,225,255,19,221,0,3,246,255,19,242,0,3,246,255,20,0,3,225,255,20,0,3,190,255,5,25,0,17,120,255,5,109,0,17,34,251,255,4,238,45,0,9,15,103,205,0,5,150,255,5,245,137,55,15,3,15,33,75,123,191,251,255,2,0,5,13,206,255,17,0,6,24,198,255,16,0,7,3,120,233,255,14,0,9,6,85,148,202,228,245,253,246,236,216,192,159,122,76,25,0,218, +43,36,0,255,0,250,123,255,7,243,65,0,4,255,6,0,4,65,243,255,7,122,0,3,112,255,7,247,73,0,3,255,6,0,3,74,247,255,6,254,111,0,5,101,253,255,6,249,82,0,2,255,6,0,2,83,250,255,6,253,100,0,7,91,251,255,6,252,92,0,1,255,6,0,1,93,252,255,6,251,90,0,9,81,249,255,6,253,102,255,6,103,254,255,6,249,80,0,11,72,246,255,20,246,71,0,13,64,243,255,18,243,63,0,15,56,239,255,16,239,56,0,16,6,202,255,16,201,6,0,16,154,255,18,153,0,15,102,255,20,102,0,13,57,249,255,20,249,57,0,11,25,230,255,6,179,210,255,6,210,179,255,6,230,25,0,9,6,198,255,6,213,12,18,255,6,18,13,214,255,6,197,6,0,8,154,255,6,240,37,0,2,255,6,0,2,38,240,255,6,153,0,7,102,255,6,253,74,0,3,255,6,0,3,75,253,255,6,102,0,5,57,249,255,6,124,0,4,255,6,0,4,125,255,6,249,57,0,3,25,230,255,6,174,1,0,4,255,6,0,4,1,175,255,6,230,25,0,1,6,198,255,6,213,13,0,5,255,6,0,5,13,214,255,6,197,6,154,255,6,240,37,0,6,255,6,0,6,38,240,255,6,153,0,255,0,69, +43,21,0,255,0,42,255,7,248,237,210,171,106,18,0,8,255,12,243,100,0,7,255,14,76,0,6,255,14,194,0,6,203,115,57,22,7,6,26,83,211,255,5,242,0,14,34,255,5,235,0,14,48,255,5,182,0,11,5,29,89,226,255,4,247,49,0,8,255,9,254,194,47,0,9,255,9,200,95,10,0,9,255,11,229,71,0,8,255,12,250,56,0,7,255,13,184,0,10,4,15,39,89,197,255,5,241,0,4,195,73,1,0,7,20,255,5,244,0,4,255,2,222,130,61,17,2,10,34,86,198,255,5,207,0,4,255,16,114,0,4,255,15,192,4,0,4,255,13,246,140,7,0,5,29,86,143,192,212,230,247,251,242,228,197,158,94,19,0,194, +43,25,0,255,0,98,255,6,0,6,146,255,6,0,6,255,6,0,5,49,252,255,6,0,6,255,6,0,4,1,199,255,7,0,6,255,6,0,4,101,255,8,0,6,255,6,0,3,19,236,255,8,0,6,255,6,0,3,156,255,9,0,6,255,6,0,2,57,254,255,9,0,6,255,6,0,1,3,207,255,10,0,6,255,6,0,1,111,255,11,0,6,255,6,25,241,255,4,201,255,6,0,6,255,6,166,255,4,251,48,255,6,0,6,255,11,140,0,1,255,6,0,6,255,10,225,11,0,1,255,6,0,6,255,10,78,0,2,255,6,0,6,255,9,175,0,3,255,6,0,6,255,8,243,28,0,3,255,6,0,6,255,8,112,0,4,255,6,0,6,255,7,206,3,0,4,255,6,0,6,255,6,253,53,0,5,255,6,0,6,255,6,147,0,6,255,6,0,228, +43,25,0,182,240,255,2,49,0,4,49,255,2,239,0,13,188,255,2,218,71,14,14,71,218,255,2,187,0,13,81,255,10,79,0,14,136,255,8,133,0,16,62,166,224,248,248,224,166,61,0,61,255,6,0,6,146,255,6,0,6,255,6,0,5,49,252,255,6,0,6,255,6,0,4,1,199,255,7,0,6,255,6,0,4,101,255,8,0,6,255,6,0,3,19,236,255,8,0,6,255,6,0,3,156,255,9,0,6,255,6,0,2,57,254,255,9,0,6,255,6,0,1,3,207,255,10,0,6,255,6,0,1,111,255,11,0,6,255,6,25,241,255,4,201,255,6,0,6,255,6,166,255,4,251,48,255,6,0,6,255,11,140,0,1,255,6,0,6,255,10,225,11,0,1,255,6,0,6,255,10,78,0,2,255,6,0,6,255,9,175,0,3,255,6,0,6,255,8,243,28,0,3,255,6,0,6,255,8,112,0,4,255,6,0,6,255,7,206,3,0,4,255,6,0,6,255,6,253,53,0,5,255,6,0,6,255,6,147,0,6,255,6,0,228, +43,24,0,255,0,84,255,6,0,4,59,241,255,7,123,0,4,255,6,0,3,66,244,255,7,112,0,5,255,6,0,2,74,247,255,6,254,103,0,6,255,6,0,1,82,249,255,6,252,94,0,7,255,6,89,251,255,6,250,86,0,8,255,6,253,255,6,248,78,0,9,255,12,246,70,0,10,255,11,243,63,0,11,255,11,210,9,0,11,255,12,163,0,11,255,13,111,0,10,255,13,251,63,0,9,255,6,220,176,255,6,233,28,0,8,255,6,26,10,208,255,6,202,7,0,7,255,6,0,2,32,236,255,6,158,0,7,255,6,0,3,68,252,255,6,106,0,6,255,6,0,4,116,255,6,250,59,0,5,255,6,0,5,167,255,6,231,26,0,4,255,6,0,5,10,209,255,6,199,6,0,3,255,6,0,6,33,237,255,6,154,0,216, +43,26,0,255,0,115,255,17,0,9,255,17,0,9,255,17,0,9,255,17,0,8,1,255,17,0,8,4,255,6,0,5,255,6,0,8,7,255,5,253,0,5,255,6,0,8,14,255,5,249,0,5,255,6,0,8,23,255,5,241,0,5,255,6,0,8,35,255,5,230,0,5,255,6,0,8,53,255,5,214,0,5,255,6,0,8,82,255,5,192,0,5,255,6,0,8,148,255,5,161,0,5,255,6,0,7,58,247,255,5,118,0,5,255,6,0,5,39,135,247,255,6,56,0,5,255,6,0,5,255,8,210,1,0,5,255,6,0,5,255,7,251,60,0,6,255,6,0,5,255,6,251,95,0,7,255,6,0,5,255,5,213,62,0,8,255,6,0,5,250,236,203,150,72,1,0,9,255,6,0,237, +43,29,0,255,0,154,255,6,151,0,9,159,255,6,0,6,255,6,247,22,0,7,28,250,255,6,0,6,255,7,133,0,7,141,255,7,0,6,255,7,239,13,0,5,16,242,255,7,0,6,255,8,116,0,5,122,255,8,0,6,255,8,228,6,0,3,8,232,255,8,0,6,255,9,99,0,3,103,255,9,0,6,255,9,216,2,0,1,2,219,255,9,0,6,255,6,250,255,3,81,0,1,84,255,3,250,255,6,0,6,255,6,159,255,3,200,0,1,202,255,3,159,255,6,0,6,255,6,42,254,255,3,129,255,3,254,42,255,6,0,6,255,6,0,1,177,255,7,177,0,1,255,6,0,6,255,6,0,1,57,255,7,59,0,1,255,6,0,6,255,6,0,2,194,255,5,196,0,2,255,6,0,6,255,6,0,2,75,255,5,77,0,2,255,6,0,6,255,6,0,2,1,211,255,3,213,1,0,2,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,6,255,6,0,11,255,6,0,255,0,9, +43,25,0,255,0,98,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,6,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,6,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,228, +43,25,0,255,0,102,6,86,149,204,228,246,247,229,206,151,89,8,0,11,2,116,232,255,10,233,119,3,0,8,20,192,255,14,194,22,0,6,9,200,255,16,201,9,0,5,144,255,18,145,0,4,31,249,255,5,244,127,44,10,8,42,126,243,255,5,249,31,0,3,118,255,5,243,48,0,6,48,244,255,5,117,0,3,188,255,5,126,0,8,126,255,5,187,0,3,225,255,5,42,0,8,43,255,5,223,0,3,246,255,5,8,0,8,9,255,5,245,0,3,246,255,5,8,0,8,9,255,5,245,0,3,225,255,5,42,0,8,43,255,5,223,0,3,188,255,5,125,0,8,125,255,5,187,0,3,118,255,5,243,46,0,6,45,243,255,5,117,0,3,31,249,255,5,243,125,43,8,8,41,123,242,255,5,249,31,0,4,145,255,18,145,0,5,10,201,255,16,201,10,0,6,20,192,255,14,195,22,0,8,2,117,232,255,10,234,120,3,0,11,7,86,150,205,230,247,248,231,207,153,90,8,0,231, +43,25,0,255,0,98,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,6,255,19,0,6,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,228, +43,26,0,255,0,112,255,6,0,2,21,116,194,229,249,232,194,113,14,0,9,255,6,0,1,98,238,255,7,229,73,0,8,255,6,124,255,10,251,84,0,7,255,18,245,38,0,6,255,19,189,0,6,255,7,229,99,26,5,25,96,227,255,6,48,0,5,255,6,234,29,0,5,27,233,255,5,134,0,5,255,6,113,0,7,113,255,5,193,0,5,255,6,38,0,7,38,255,5,228,0,5,255,6,7,0,7,8,255,5,246,0,5,255,6,7,0,7,8,255,5,246,0,5,255,6,38,0,7,38,255,5,228,0,5,255,6,112,0,7,113,255,5,193,0,5,255,6,233,27,0,5,27,233,255,5,134,0,5,255,7,227,98,25,4,24,95,226,255,6,48,0,5,255,19,189,0,6,255,18,245,38,0,6,255,6,125,255,10,251,84,0,7,255,6,0,1,100,240,255,7,230,74,0,8,255,6,0,2,23,120,195,231,250,233,195,114,14,0,9,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,20,255,6,0,43, +43,21,0,255,0,46,6,84,147,202,227,245,246,221,164,79,2,0,8,2,114,231,255,9,219,76,0,6,20,192,255,13,0,5,10,200,255,14,0,5,144,255,15,0,4,31,249,255,6,173,74,23,5,19,64,145,243,255,1,0,4,118,255,5,253,93,0,7,20,169,0,4,188,255,5,151,0,14,224,255,5,51,0,14,245,255,5,10,0,14,245,255,5,10,0,14,224,255,5,51,0,14,188,255,5,150,0,14,118,255,5,253,89,0,7,14,163,0,4,31,249,255,6,170,73,21,4,18,58,134,238,255,1,0,5,144,255,15,0,5,10,201,255,14,0,6,20,193,255,13,0,7,2,116,231,255,9,221,77,0,9,6,85,149,204,229,246,247,222,165,80,3,0,192, +43,21,0,255,0,39,255,20,0,1,255,20,0,1,255,20,0,1,255,20,0,1,255,20,0,8,255,6,0,15,255,6,0,15,255,6,0,15,255,6,0,15,255,6,0,15,255,6,0,15,255,6,0,15,255,6,0,15,255,6,0,15,255,6,0,15,255,6,0,15,255,6,0,15,255,6,0,15,255,6,0,15,255,6,0,197, +43,23,0,255,0,67,203,255,5,176,0,8,147,255,5,209,0,1,98,255,5,252,29,0,6,5,236,255,5,115,0,1,9,238,255,5,132,0,6,80,255,5,252,24,0,2,142,255,5,232,5,0,5,174,255,5,183,0,3,37,254,255,5,88,0,4,18,249,255,5,89,0,4,186,255,5,194,0,4,107,255,5,241,9,0,4,81,255,6,44,0,3,201,255,5,157,0,5,3,227,255,5,150,0,2,39,255,6,63,0,6,125,255,5,242,13,0,1,133,255,5,223,1,0,6,24,250,255,5,105,1,225,255,5,131,0,8,169,255,5,210,66,255,6,37,0,8,64,255,6,210,255,5,199,0,10,213,255,11,105,0,10,108,255,10,249,17,0,10,14,243,255,9,173,0,12,152,255,9,79,0,12,47,255,8,235,5,0,13,197,255,7,147,0,14,91,255,7,53,0,14,6,234,255,5,214,0,15,3,231,255,5,121,0,15,77,255,5,253,29,0,14,2,193,255,5,183,0,13,14,51,169,255,6,72,0,12,228,255,8,194,0,13,228,255,7,244,39,0,13,228,255,6,238,65,0,14,228,255,3,243,207,133,23,0,35, +43,36,0,255,0,12,255,6,0,30,255,6,0,30,255,6,0,30,255,6,0,30,255,6,0,30,255,6,0,30,255,6,0,21,11,108,189,230,249,229,202,138,46,255,6,46,138,202,229,249,230,189,108,11,0,11,68,226,255,22,225,68,0,9,80,249,255,24,249,80,0,7,37,244,255,26,244,36,0,6,188,255,28,186,0,5,47,255,6,227,79,8,17,73,194,255,6,193,73,17,8,79,228,255,6,47,0,4,134,255,5,236,30,0,4,2,255,6,2,0,4,32,237,255,5,133,0,4,193,255,5,115,0,6,255,6,0,6,117,255,5,192,0,4,229,255,5,39,0,6,255,6,0,6,40,255,5,227,0,4,247,255,5,8,0,6,255,6,0,6,9,255,5,246,0,4,247,255,5,8,0,6,255,6,0,6,9,255,5,246,0,4,229,255,5,39,0,6,255,6,0,6,40,255,5,227,0,4,193,255,5,115,0,6,255,6,0,6,117,255,5,192,0,4,134,255,5,235,30,0,4,2,255,6,2,0,4,32,237,255,5,133,0,4,48,255,6,226,78,7,16,72,194,255,6,193,72,16,7,79,227,255,6,47,0,5,188,255,28,187,0,6,37,244,255,26,244,36,0,7,81,250,255,24,249,80,0,9,69,227,255,22,226,68,0,11,11,109,191,231,249,230,203,139,46,255,6,46,139,203,230,249,231,191,109,11,0,21,255,6,0,30,255,6,0,30,255,6,0,30,255,6,0,30,255,6,0,30,255,6,0,30,255,6,0,30,255,6,0,51, +43,23,0,255,0,68,160,255,6,210,9,0,4,10,213,255,6,160,0,1,11,214,255,6,154,0,4,160,255,6,213,10,0,2,44,246,255,6,89,0,2,96,255,6,245,42,0,4,99,255,6,242,37,42,245,255,6,96,0,6,163,255,6,207,213,255,6,160,0,7,12,216,255,12,213,10,0,8,46,247,255,10,245,42,0,10,102,255,10,96,0,12,166,255,8,160,0,13,13,228,255,6,227,10,0,13,61,252,255,6,253,64,0,12,15,224,255,8,227,17,0,11,167,255,10,170,0,10,94,255,12,97,0,8,34,242,255,6,254,255,5,243,35,0,6,3,198,255,6,150,144,255,6,200,4,0,5,129,255,6,214,9,7,210,255,6,131,0,4,59,252,255,5,248,47,0,2,44,247,255,5,252,60,0,2,14,223,255,6,113,0,4,110,255,6,223,15,0,1,165,255,6,185,1,0,4,1,182,255,6,165,0,207, +43,27,0,255,0,125,255,6,0,7,255,6,0,8,255,6,0,7,255,6,0,8,255,6,0,7,255,6,0,8,255,6,0,7,255,6,0,8,255,6,0,7,255,6,0,8,255,6,0,7,255,6,0,8,255,6,0,7,255,6,0,8,255,6,0,7,255,6,0,8,255,6,0,7,255,6,0,8,255,6,0,7,255,6,0,8,255,6,0,7,255,6,0,8,255,6,0,7,255,6,0,8,255,6,0,7,255,6,0,8,255,6,0,7,255,6,0,8,255,6,0,7,255,6,0,8,255,22,0,5,255,22,0,5,255,22,0,5,255,22,0,5,255,22,0,22,255,5,0,22,255,5,0,22,255,5,0,22,255,5,0,22,255,5,0,111, +43,25,0,255,0,97,255,6,0,6,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,6,255,6,0,7,255,6,6,0,5,255,6,0,7,255,6,24,0,5,255,6,0,7,253,255,5,67,0,5,255,6,0,7,239,255,5,203,45,4,0,3,255,6,0,7,203,255,17,0,7,136,255,17,0,7,32,246,255,16,0,8,90,252,255,15,0,9,51,169,231,252,255,12,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,19,255,6,0,230, +43,38,0,255,0,255,0,25,255,6,0,7,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,6,255,6,0,7,255,6,0,7,255,6,0,6,255,32,0,6,255,32,0,6,255,32,0,6,255,32,0,6,255,32,0,255,0,90, +43,40,0,255,0,255,0,53,255,6,0,7,255,6,0,7,255,6,0,8,255,6,0,7,255,6,0,7,255,6,0,8,255,6,0,7,255,6,0,7,255,6,0,8,255,6,0,7,255,6,0,7,255,6,0,8,255,6,0,7,255,6,0,7,255,6,0,8,255,6,0,7,255,6,0,7,255,6,0,8,255,6,0,7,255,6,0,7,255,6,0,8,255,6,0,7,255,6,0,7,255,6,0,8,255,6,0,7,255,6,0,7,255,6,0,8,255,6,0,7,255,6,0,7,255,6,0,8,255,6,0,7,255,6,0,7,255,6,0,8,255,6,0,7,255,6,0,7,255,6,0,8,255,6,0,7,255,6,0,7,255,6,0,8,255,6,0,7,255,6,0,7,255,6,0,8,255,6,0,7,255,6,0,7,255,6,0,8,255,35,0,5,255,35,0,5,255,35,0,5,255,35,0,5,255,35,0,35,255,5,0,35,255,5,0,35,255,5,0,35,255,5,0,35,255,5,0,162, +43,27,0,255,0,123,52,176,176,176,176,176,176,176,176,176,176,176,176,132,0,13,76,255,12,192,0,13,76,255,12,192,0,13,76,255,12,192,0,13,15,52,52,52,52,52,52,163,255,5,192,0,20,140,255,5,192,0,20,140,255,5,192,0,20,140,255,5,206,56,56,56,52,40,18,0,14,140,255,12,231,163,65,0,11,140,255,15,171,9,0,9,140,255,16,166,0,9,140,255,5,235,172,172,172,189,238,255,6,45,0,8,140,255,5,192,0,4,12,192,255,5,117,0,8,140,255,5,192,0,5,89,255,5,145,0,8,140,255,5,192,0,5,105,255,5,142,0,8,140,255,5,192,0,3,3,62,228,255,5,108,0,8,140,255,5,252,240,240,240,252,255,6,251,30,0,8,140,255,16,132,0,9,140,255,14,245,121,0,10,140,255,9,253,242,219,177,109,22,0,247, +43,33,0,255,0,210,255,6,0,14,255,6,0,7,255,6,0,14,255,6,0,7,255,6,0,14,255,6,0,7,255,6,0,14,255,6,0,7,255,6,0,14,255,6,0,7,255,6,0,14,255,6,0,7,255,6,0,14,255,6,0,7,255,6,0,14,255,6,0,7,255,10,245,229,191,137,53,0,5,255,6,0,7,255,15,183,23,0,3,255,6,0,7,255,16,218,11,0,2,255,6,0,7,255,17,127,0,2,255,6,0,7,255,17,209,0,2,255,6,0,7,255,6,0,3,4,22,102,255,5,243,0,2,255,6,0,7,255,6,0,3,4,23,107,255,5,244,0,2,255,6,0,7,255,17,213,0,2,255,6,0,7,255,17,135,0,2,255,6,0,7,255,16,227,16,0,2,255,6,0,7,255,15,195,30,0,3,255,6,0,7,255,10,248,233,198,145,63,0,5,255,6,0,255,0,46, +43,23,0,255,0,70,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,6,0,17,255,10,245,229,191,137,53,0,8,255,15,183,23,0,6,255,16,218,11,0,5,255,17,127,0,5,255,17,209,0,5,255,6,0,3,4,22,102,255,5,243,0,5,255,6,0,3,4,23,107,255,5,244,0,5,255,17,213,0,5,255,17,135,0,5,255,16,227,16,0,5,255,15,195,30,0,6,255,10,248,233,198,145,63,0,212, +43,21,0,255,0,24,8,28,35,21,4,0,12,25,107,174,227,254,255,4,220,161,85,3,0,8,152,255,11,225,88,0,7,152,255,13,157,3,0,5,152,255,14,151,0,5,152,255,1,238,165,113,93,104,148,233,255,7,83,0,4,133,108,9,0,5,10,170,255,6,216,3,0,12,5,200,255,6,57,0,13,59,255,6,128,0,5,47,168,168,168,168,168,168,168,169,255,6,168,0,5,72,255,14,189,0,5,72,255,14,196,0,5,63,224,224,224,224,224,224,224,224,254,255,5,175,0,13,25,255,6,147,0,13,140,255,6,82,0,3,81,22,0,7,82,252,255,5,244,15,0,3,152,241,143,63,15,1,13,59,154,253,255,6,131,0,4,152,255,14,214,13,0,4,152,255,13,228,31,0,5,152,255,12,181,21,0,6,78,198,253,255,7,247,178,66,0,10,13,64,100,121,128,114,97,58,6,0,176, +43,35,0,255,0,238,255,6,0,8,16,103,161,211,232,248,246,228,204,149,86,6,0,9,255,6,0,6,10,144,245,255,10,231,115,2,0,7,255,6,0,5,32,216,255,14,191,20,0,6,255,6,0,4,23,221,255,16,199,9,0,5,255,6,0,4,177,255,18,143,0,5,255,6,0,3,63,255,6,244,127,44,10,8,42,126,243,255,5,248,30,0,4,255,6,0,3,165,255,5,243,48,0,6,48,244,255,5,117,0,4,255,6,0,3,225,255,5,126,0,8,126,255,5,187,0,4,255,6,252,244,236,255,6,42,0,8,43,255,5,223,0,4,255,15,8,0,8,9,255,5,245,0,4,255,15,8,0,8,9,255,5,245,0,4,255,6,220,220,220,254,255,5,42,0,8,43,255,5,223,0,4,255,6,0,3,219,255,5,125,0,8,125,255,5,187,0,4,255,6,0,3,157,255,5,243,46,0,6,45,243,255,5,117,0,4,255,6,0,3,56,255,6,243,125,43,8,8,41,123,242,255,5,249,30,0,4,255,6,0,4,171,255,18,143,0,5,255,6,0,4,21,219,255,16,200,9,0,5,255,6,0,5,31,215,255,14,192,20,0,6,255,6,0,6,10,143,245,255,10,232,116,2,0,7,255,6,0,8,16,103,162,211,233,248,247,230,205,150,86,7,0,255,0,66, +43,23,0,255,0,72,8,90,163,206,236,247,255,10,0,6,63,227,255,15,0,5,38,246,255,16,0,5,161,255,17,0,5,228,255,17,0,5,250,255,5,151,39,8,0,3,255,6,0,5,235,255,5,17,0,5,255,6,0,5,173,255,5,152,38,7,0,3,255,6,0,5,58,254,255,16,0,6,125,255,16,0,7,136,254,255,14,0,8,128,255,14,0,7,4,216,255,14,0,7,105,255,6,113,0,2,255,6,0,6,13,233,255,5,221,6,0,2,255,6,0,6,132,255,6,86,0,3,255,6,0,5,27,245,255,5,200,0,4,255,6,0,5,159,255,6,60,0,4,255,6,0,4,46,253,255,5,175,0,5,255,6,0,4,185,255,5,251,39,0,5,255,6,0,209, +43,24,0,150,255,4,0,3,255,4,0,13,255,4,0,3,255,4,0,13,255,4,0,3,255,4,0,13,255,4,0,3,255,4,0,110,9,92,155,209,231,248,242,221,179,112,24,0,11,3,122,236,255,9,246,140,8,0,8,22,195,255,13,202,25,0,6,10,201,255,15,202,8,0,5,145,255,5,246,129,41,7,14,74,206,255,5,140,0,4,31,249,255,4,252,67,0,5,9,203,255,4,246,24,0,3,118,255,5,146,0,7,69,255,5,112,0,3,188,255,5,60,0,7,11,255,5,179,0,3,225,255,19,221,0,3,246,255,19,242,0,3,246,255,20,0,3,225,255,20,0,3,190,255,5,25,0,17,120,255,5,109,0,17,34,251,255,4,238,45,0,9,15,103,205,0,5,150,255,5,245,137,55,15,3,15,33,75,123,191,251,255,2,0,5,13,206,255,17,0,6,24,198,255,16,0,7,3,120,233,255,14,0,9,6,85,148,202,228,245,253,246,236,216,192,159,122,76,25,0,218, +255 +}; + +unsigned char *ftv = fonttable; + +void loadCompressedChar(int &otwidth, int &otheight, int *tpix) { + if(*ftv == 255) { + fprintf(stderr, "There is something wrong with the font table\n"); + exit(1); + } + otheight = *(ftv++); + otwidth = *(ftv++); + int left = otwidth * otheight; + while(left) { + int x = *(ftv++); + if(x == 0 || x == 255) { + x = x * 0x1010101; + int q = *(ftv++); + left -= q; + while(q--) *(tpix++) = x; + } + else { + *(tpix++) = (x << 24) | 0xFFFFFF; + left--; + } + } + } +#endif + +#ifdef CREATEFONT +void generateFont(int ch, SDL_Surface *txt) { + if(ch >= 32) { + printf("%d,%d,", txt->h, txt->w); + int rle_last = -1, rle_q = 0; + for(int j=0; j h;j++) { + for(int i=0; i < txt->w; i++) { + int c = (unsigned char) (qpixel(txt, i, j) >> 24); + if(c == rle_last && rle_q < 255) rle_q++; + else { + if(rle_last != -1) printf("%d,%d,", rle_last, rle_q); + if(c == 0 || c == 255) rle_last = c, rle_q = 1; + else { rle_last = -1; printf("%d,", c); } + } + } + } + if(rle_last != -1) printf("%d,%d,", rle_last, rle_q); + printf("\n"); + } + } +#endif diff --git a/polygons.cpp b/polygons.cpp index aaf2a74f..3f8cefca 100644 --- a/polygons.cpp +++ b/polygons.cpp @@ -1,46 +1,6 @@ // HyperRogue, shapes used for the vector graphics // Copyright (C) 2011-2016 Zeno Rogue, see 'hyper.cpp' for details -#ifdef GFX -#ifndef MOBILE -#include -#endif -#endif - -#ifdef WINDOWS -#include -#else - -#define GL_GLEXT_PROTOTYPES 1 -#ifndef MOBILE -#ifdef GL -#ifdef MAC -#include -#include -#else -#include -#include -#endif - -#ifdef MAC -#include -#else -#include -#endif -#endif -#endif - -#ifdef ANDROID -#ifndef FAKE -#ifdef GL -#include -#include -#include -#endif -#endif -#endif -#endif - #define QHPC 32000 int qhpc, prehpc; @@ -278,8 +238,7 @@ void addpoly(const transmatrix& V, GLfloat *tab, int cnt) { } } -#ifdef GFX -#ifndef MOBILE +#ifdef SDLGFX void aapolylineColor(SDL_Surface *s, int*x, int *y, int polyi, int col) { for(int i=1; iw != s->w || aux->h != s->h)) @@ -586,7 +544,7 @@ void drawqueue() { } } -#ifndef MOBILE +#ifndef NOSDL if(vid.goteyes && !vid.usingGL) { int qty = s->w * s->h; int *a = (int*) s->pixels; @@ -854,11 +812,13 @@ void buildpolys() { // procedural floors double shexf = purehepta ? crossf* .55 : hexf; + double p = -.006; + bshape(shTriheptaFloor[0], PPR_FLOOR); - for(int t=0; t<=3; t++) hpcpush(ddi(t*S28, scalef*spzoom6*.2776) * C0); + for(int t=0; t<=3; t++) hpcpush(ddi(t*S28, scalef*spzoom6*(.2776+p)) * C0); bshape(shTriheptaFloor[1], PPR_FLOOR); - for(int t=0; t<=S7; t++) hpcpush(ddi(t*12, sphere ? .54 : scalef*spzoom6*.5273) * C0); + for(int t=0; t<=S7; t++) hpcpush(ddi(t*12, sphere ? .54 : scalef*spzoom6*(.5273-2*p)) * C0); bshape(shTriheptaFloorShadow[0], PPR_FLOOR); for(int t=0; t<=3; t++) hpcpush(ddi(t*S28, scalef*spzoom6*.2776*SHADMUL) * C0); @@ -1872,12 +1832,21 @@ namespace svg { if(!invisible(col)) { startstring(); + string str2 = ""; + for(int i=0; i<(int) str.size(); i++) + if(str[i] == '&') + str2 += "&"; + else if(str[i] == '<') + str2 += "<"; + else if(str[i] == '>') + str2 += ">"; + else str2 += str[i]; fprintf(f, "%s", - coord(x), coord(y+size/2), + coord(x), coord(y+size*.4), align == 8 ? "middle" : align < 8 ? "start" : "end", - coord(size), stylestr(col, frame ? 0x0000000FF : 0, (1< -- visualize a social network -// embedded into hyperbolic plane, see: -// https://bitbucket.org/HaiZhung/hyperbolic-embedder/overview -// (it uses the same format) - -// hyper -tol -- visualize the tree of life, -// based on a XML dump from https://tree.opentreeoflife.org/ - -// hyper -tess -- visualize a horocyclic tesselation, - -namespace rogueviz { - -void init(); - -bool showlabels = false; -bool specialmark = false; - -const char *fname; -const char *cfname; - -enum eVizkind { kNONE, kAnyGraph, kTree, kSpiral, kSAG, kCollatz }; -eVizkind kind; - -bool on; - -struct edgeinfo { - int i, j; - double weight, weight2; - bool visible; - vector prec; - cell *orig; - int lastdraw; - edgeinfo() { visible = true; orig = NULL; lastdraw = -1; } - }; - -struct colorpair { - int color1, color2; - char shade; - colorpair(int col = 0xC0C0C0FF) { shade = 0; color1 = col; } - }; - -colorpair parse(const string& s) { - colorpair cp; - cp.shade = 0; cp.color2 = 0; - sscanf(s.c_str(), "%x:%c%x", &cp.color1, &cp.shade, &cp.color2); - return cp; - } - -int nh = 0; -int hues[256*6]; - -void buildhue() { - unsigned mh = 193; - for(unsigned y=0; y<=mh; y++) - hues[nh++] = (int) (0xFF + 0x1000000*mh + (unsigned) 0x10000 * y); - for(unsigned y=0; y<=mh; y++) - hues[nh++] = (int) (0xFF + 0x1010000*mh - 0x1000000 * y); - for(unsigned y=0; y<=mh; y++) - hues[nh++] = (int) (0xFF + 0x0010000*mh + 0x100 * y); - for(unsigned y=0; y<=mh; y++) - hues[nh++] = (int) (0xFF + 0x0010100*mh - 0x10000 * y); - for(unsigned y=0; y<=mh; y++) - hues[nh++] = (int) (0xFF + 0x0000100*mh + 0x1000000 * y); - for(unsigned y=0; y<=mh; y++) - hues[nh++] = (int) (0xFF + 0x1000100*mh - 0x100 * y); - } - -int perturb(int c) { - if(nh == 0) buildhue(); - int hueid = 0; - for(int t=0; t> (8*u)) & 0xFF; - } - int - if(part[1] == 255 && part[2] == 0) - int k = - k += rand() % 16; - k -= rand() % 16; - if(k<0) k=-k; - if(k>255) k = 255-(k-255); - c &=~ (0xFF << (8*u)); - c |= k << (8*u); - } */ - return c; - } - -colorpair perturb(colorpair cp) { - cp.color1 = perturb(cp.color1); - cp.color2 = perturb(cp.color2); - return cp; - } - -struct vertexdata { - vector > edges; - string name; - colorpair cp; - edgeinfo *virt; - bool special; - int data; - string *info; - shmup::monster *m; - vertexdata() { virt = NULL; m = NULL; info = NULL; special = false; } - }; - -vector vdata; - -transmatrix cspin(int i, int ch) { - return spin(M_PI + (2 * M_PI * (i+1)) / (ch+1)); - } - -map labeler; - -int getid(const string& s) { - if(labeler.count(s)) return labeler[s]; - else { - int id = vdata.size(); - vdata.resize(vdata.size() + 1); - vdata[id].name = s; - return labeler[s] = id; - } - } - -int getnewid(string s) { - while(labeler.count(s)) s += "'"; - return getid(s); - } - -void addedge0(int i, int j, edgeinfo *ei) { - vdata[i].edges.push_back(make_pair(j, ei)); - vdata[j].edges.push_back(make_pair(i, ei)); - } - -void createViz(int id, cell *c, transmatrix at) { - vertexdata& vd(vdata[id]); - vd.m = new shmup::monster; - vd.m->pid = id; - vd.m->type = moRogueviz; - vd.m->base = c; - vd.m->at = at; - } - -void addedge(int i, int j, edgeinfo *ei) { - double d = hdist(vdata[i].m->at * C0, vdata[j].m->at * C0); - if(d >= 4) { - // printf("splitting %lf\n", d); - hyperpoint h = mid(vdata[i].m->at * C0, vdata[j].m->at * C0); - int id = size(vdata); - vdata.resize(id+1); - vertexdata& vd(vdata[id]); - vd.cp = colorpair(0x400000FF); - vd.virt = ei; - - createViz(id, currentmap->gamestart(), rgpushxto0(h)); - - addedge(i, id, ei); - addedge(id, j, ei); - } - else addedge0(i, j, ei); - } - -vector edgeinfos; - -void addedge(int i, int j, double wei, bool subdiv) { - edgeinfo *ei = new edgeinfo; - edgeinfos.push_back(ei); - ei->i = i; - ei->j = j; - ei->weight = wei; - if(subdiv) addedge(i, j, ei); - else addedge0(i, j, ei); - } - -void storeall() { - for(int i=0; istore(); - } - -int dftcolor = 0x282828FF; - -namespace spiral { - - void place(int N, ld mul) { - init(); kind = kSpiral; - vdata.resize(N); - - for(int i=0; i= 0 && j0 < N) addedge(i, j0, 0, false); - } - } - - void color(ld start, ld period, colorpair c) { - int N = size(vdata); - int maxw = N; - while(start >= 0 && start < N) { - int i = int(start); - vdata[i].cp = c; - start += period; - maxw--; if(maxw <= 0) break; - } - } - } - -namespace collatz { - - double s2, s3, p2, p3; - - void start() { - init(); kind = kCollatz; - vdata.resize(1); - vertexdata& vd = vdata[0]; - createViz(0, cwt.c, Id); - virtualRebase(vd.m, true); - vd.cp = dftcolor; - vd.data = 0; - addedge(0, 0, 0, false); - vd.name = "1"; - storeall(); - } - } - -int readLabel(FILE *f) { - char xlabel[10000]; - if(fscanf(f, "%9500s", xlabel) <= 0) return -1; - return getid(xlabel); - } - -namespace anygraph { - double R, alpha, T; - vector > coords; - - void read(string fn, bool subdiv = true) { - init(); kind = kAnyGraph; - FILE *f = fopen((fn + "-coordinates.txt").c_str(), "rt"); - if(!f) { - printf("Missing file: %s-coordinates.txt\n", fname); - exit(1); - } - printf("Reading coordinates...\n"); - char buf[100]; - int N; - int err; - err = fscanf(f, "%s%s%s%s%d%lf%lf%lf", buf, buf, buf, buf, &N, - &anygraph::R, &anygraph::alpha, &anygraph::T); - if(err < 8) { printf("Error: incorrect format of the first line\n"); exit(1); } - vdata.reserve(N); - while(true) { - int id = readLabel(f); - if(id < 0) break; - vertexdata& vd(vdata[id]); - vd.name = its(id); - vd.cp = colorpair(dftcolor); - - double r, alpha; - int err = fscanf(f, "%lf%lf", &r, &alpha); - coords.push_back(make_pair(r, alpha)); - if(err < 2) { printf("Error: incorrect format of r/alpha\n"); exit(1); } - - transmatrix h = spin(alpha * 2 * M_PI / 360) * xpush(r); - - createViz(id, currentmap->gamestart(), h); - } - fclose(f); - - f = fopen((fn + "-links.txt").c_str(), "rt"); - if(!f) { - printf("Missing file: %s-links.txt\n", fname); - exit(1); - } - printf("Reading links...\n"); - int qlink = 0; - while(true) { - int i = readLabel(f), j = readLabel(f); - if(i == -1 || j == -1) break; - addedge(i, j, 0, subdiv); - if(qlink % 10000 == 0) printf("%d\n", qlink); - qlink++; - } - fclose(f); - - printf("Rebasing...\n"); - for(int i=0; i children; - }; - - vector tol; - - void child(int pid, int id) { - if(size(tol) <= id) tol.resize(id+1); - - treevertex& v = tol[id]; - v.parent = pid; - tol.push_back(v); - if(pid >= 0) tol[pid].children.push_back(id); - } - - void readnode(FILE *f, int pid) { - string lab = ""; - while(true) { - int c = fgetc(f); - if(c == EOF) { fprintf(stderr, "Ended prematurely\n"); exit(1); } - if(c == ',') break; - if(c == ')') { int id = getnewid(lab); child(pid, id); return; } - lab += c; - } - int id = getnewid(lab); - child(pid, id); - while(true) { - int c = fgetc(f); -// printf("c=%c at %d/%d\n", c, pid, id); - if(c == EOF) { fprintf(stderr, "Ended prematurely\n"); exit(1); } - if(c == ' ' || c == 10 || c == 13 || c == 9 || c == ',') continue; - else if(c == '(') readnode(f, id); - else if(c == ')') break; - } - } - - int xpos; - void spos(int at, int d) { - tol[at].spos = xpos++; - tol[at].depth = d; - for(int i=0; ipid = i; - vd.data = lv.parent; - createViz(i, cwt.c, h); - vd.cp = dftcolor; - - if(tol[i].parent >= 0) - addedge(i, tol[i].parent, 0, true); - } - - for(int i=0; i snakecells; - vector snakefirst, snakelast; - vector snakenode; - vector snakeid; - vector lpbak; - vector wpbak; - - bool snake_enabled; - - void setsnake(cellwalker& cw, int i) { - lpbak[i] = cw.c->landparam; - wpbak[i] = cw.c->wparam; - cw.c->landparam = i; cw.c->wparam = INSNAKE; - // cw.c->monst = moWormtail; cw.c->mondir = cw.spin; - snakecells[i] = cw.c; - } - - void snakeswitch() { - for(int i=0; ilandparam; c->landparam = x; - x = wpbak[i]; wpbak[i] = c->wparam; c->wparam = x; - } - snake_enabled = !snake_enabled; - } - - void enable_snake() { if(!snake_enabled) snakeswitch(); } - - void disable_snake() { if(snake_enabled) snakeswitch(); } - - int snakedist(int i, int j) { - if(i < insnaketab && j < insnaketab) return sdist[i][j]; - if(euclid || sphere) return celldistance(snakecells[i], snakecells[j]); - int i0 = i, i1 = i, j0 = j, j1 = j; - int cost = 0; - // intersect - while(true) { - if(j0 > i1+1) { j0 = snakefirst[j0], j1 = snakelast[j1]; cost++; } - else if(i0 > j1+1) { i0 = snakefirst[i0], i1 = snakelast[i1]; cost++; } - else if(j1+1 == i0) return cost+1; - else if(i1+1 == j0) return cost+1; - else return cost; - } - } - - void initSnake(int n) { - if(sphere && purehepta) n = 12; - else if(sphere) n = 32; - numsnake = n; - snakecells.resize(numsnake); - snakefirst.resize(numsnake); - snakelast.resize(numsnake); - snakenode.resize(numsnake); - lpbak.resize(numsnake); - wpbak.resize(numsnake); - cellwalker cw = cwt; - setsnake(cw, 0); - cwstep(cw); - setsnake(cw, 1); - for(int i=2; i<=numsnake; i++) { - if(i == numsnake && sphere) break; - cwstep(cw); - snakefirst[i-1] = cw.c->landparam; - while(cw.c->wparam == INSNAKE) { - snakelast[i-1] = cw.c->landparam; - cwstep(cw); cwspin(cw, 1); cwstep(cw); - } - if(i == numsnake) break; - setsnake(cw, i); cwspin(cw, 1); - } - int stab = min(numsnake, MAXSNAKETAB); - for(int i=0; iweight2; - } - /* cell *c = snakecells[id]; - for(int i=0; itype; i++) { - cell *c2 = c->mov[i]; - if(c2 && c2->wparam == INSNAKE && snakenode[c2->landparam] >= 0) - cost += 100; - } */ - return cost; - } - - MTRand53 los; - - bool infullsa; - - double cost; - int N; - - vector chgs; - - void forgetedges(int id) { - for(int i=0; iorig = NULL; - } - - void saiter() { - aiter: - - int t1 = hrand(N); - int sid1 = snakeid[t1]; - - int sid2; - - int s = hrand(6); - - if(s == 3) s = 2; - if(s == 4) s = 5; - - if(s == 5) sid2 = hrand(numsnake); - - else { - cell *c; - if(s>=2 && size(vdata[t1].edges)) c = snakecells[snakeid[hrand(size(vdata[t1].edges))]]; - else c = snakecells[sid1]; - - int it = s<2 ? (s+1) : s-2; - for(int ii=0; iitype; - c = c->mov[d]; - if(!c) goto aiter; - if(c->wparam != INSNAKE) goto aiter; - } - sid2 = c->landparam; - } - int t2 = snakenode[sid2]; - - snakenode[sid1] = -1; snakeid[t1] = -1; - snakenode[sid2] = -1; if(t2 >= 0) snakeid[t2] = -1; - - double change = - costat(t1,sid2) + costat(t2,sid1) - costat(t1,sid1) - costat(t2,sid2); - - snakenode[sid1] = t1; snakeid[t1] = sid1; - snakenode[sid2] = t2; if(t2 >= 0) snakeid[t2] = sid2; - - if(change < 0) chgs.push_back(-change); - - if(change > 0 && (sagmode == sagHC || los() > exp(-change * exp(-temperature)))) return; - - snakenode[sid1] = t2; snakenode[sid2] = t1; - snakeid[t1] = sid2; if(t2 >= 0) snakeid[t2] = sid1; - if(vdata[t1].m) vdata[t1].m->base = snakecells[sid2]; - if(t2 >= 0 && vdata[t2].m) vdata[t2].m->base = snakecells[sid1]; - cost += 2*change; - - if(t1 >= 0) forgetedges(t1); - if(t2 >= 0) forgetedges(t2); - } - - void organize() { - for(int i=0; i freenodes; - for(int i=0; i= numsnake || err < 1) sid = -1; - if(!labeler.count(lab)) { - printf("unknown vertex: %s\n", lab.c_str()); - } - else { - int id = getid(lab); - snakeid[id] = sid; - } - } - afterload: - if(sf) fclose(sf); - - organize(); - for(int i=0; ibase = snakecells[sag::snakeid[i]]; - forgetedges(i); - } - - } - - vector sagedges; - - /* bool totcmp(int i, int j) { - return totwei[i] > totwei[j]; - } */ - - int ipturn = 100; - int numiter = 0; - - void dofullsa(int satime) { - sagmode = sagSA; - enable_snake(); - int t1 = SDL_GetTicks(); - - while(true) { - int t2 = SDL_GetTicks(); - double d = (t2-t1) / (1000. * satime); - if(d > 1) break; - temperature = 10 - (d*25); - chgs.clear(); - for(int i=0; i<50000; i++) { - numiter++; - sag::saiter(); - } - printf("it %8d temp %6.4" PLDF" [1/e at %13.6" PLDF"] cost = %lf ", - numiter, sag::temperature, (ld) exp(sag::temperature), - sag::cost); - - sort(chgs.begin(), chgs.end()); - int cc = chgs.size() - 1; - printf("%9.4lf .. %9.4lf .. %9.4lf .. %9.4lf .. %9.4lf\n", - chgs[0], chgs[cc/4], chgs[cc/2], chgs[cc*3/4], chgs[cc]); - fflush(stdout); - } - - temperature = -5; - disable_snake(); - sagmode = sagOff; - } - - void iterate() { - if(!sagmode) return; - int t1 = SDL_GetTicks(); - enable_snake(); - for(int i=0; i 200) ipturn /= 2; - else ipturn = ipturn * 100 / t; - printf("it %8d temp %6.4" PLDF" [2:%8.6" PLDF",10:%8.6" PLDF",50:%8.6" PLDF"] cost = %lf\n", - numiter, sag::temperature, - exp(-2 * exp(-sag::temperature)), - exp(-10 * exp(-sag::temperature)), - exp(-50 * exp(-sag::temperature)), - sag::cost); - } - - void savesnake(const char *fname) { - FILE *f = fopen(fname, "wt"); - for(int i=0; i= 0.1; - // (ei.weight >= maxwei[ei.i] / 5 || ei.weight >= maxwei[ei.j] / 5); - - ei.weight2 = pow(ei.weight, edgepower) * edgemul; - // LANG:: pow(ei.weight, .4) / 50; - - // ei.weight2 = 0; int w = ei.weight; while(w) { w >>= 1; ei.weight2++; } - /* if(totwei[ei.i] <= 0 || totwei[ei.j] <= 0) { - printf("BAD TOTWEI\n"); - exit(1); - } - ei.weight2 = 3 * ( - sqrt(ei.weight * 1. / totwei[ei.i]) * log(totwei[ei.i]) * log(totwei[ei.i]) + - sqrt(ei.weight * 1. / totwei[ei.j]) * log(totwei[ei.j]) * log(totwei[ei.j])); */ - // printf("%f\n", ei.weight2); - addedge0(ei.i, ei.j, &ei); - } - - initSnake(N*2); - printf("numsnake = %d\n", numsnake); - if(numsnake < N) { - printf("Error: snake does not fit\n"); - exit(1); - } - snakeid.resize(N); - for(int i=0; iweight > e2->weight; - } - -string describe(shmup::monster *m) { - int i = m->pid; - vertexdata& vd = vdata[i]; - - string o = vd.name+", "+its(size(vd.edges))+" edges"; - /* if(size(vd.edges) < 10) { - for(int i=0; isnakeid)); - } */ - - vector alledges; - - for(int j=0; jvisible) continue; - int k = ei->i ^ ei->j ^ i; - help += vdata[k].name; - help += "/" + fts(ei->weight)+":" + fts(ei->weight2) + " "; - } - - return o; - } - -void activate(shmup::monster *m) { - int i = m->pid; - vertexdata& vd = vdata[i]; - - vd.cp = colorpair(rand() & 0xFFFFFFFF); - - for(int i=0; iorig = NULL; - - /* if(ealpha == 1) ealpha = 8; - else if(ealpha == 8) ealpha = 32; - else if(ealpha == 32) ealpha = 255; - else ealpha = 1; */ - } - -void storevertex(vector& tab, const hyperpoint& h) { - for(int i=0; i<3; i++) tab.push_back(h[i]); - } - -double linequality = .1; - -void storelineto(vector& tab, const hyperpoint& h1, const hyperpoint& h2) { - if(intval(h1, h2) < linequality) - storevertex(tab, h2); - else { - hyperpoint h3 = mid(h1, h2); - storelineto(tab, h1, h3); - storelineto(tab, h3, h2); - } - } - -void storeline(vector& tab, const hyperpoint& h1, const hyperpoint& h2) { - storevertex(tab, h1); - storelineto(tab, h1, h2); - } - -void queuedisk(const transmatrix& V, const colorpair& cp, bool legend) { - if(legend && (int) cp.color1 == (int) 0x000000FF && backcolor == 0) - poly_outline = 0x606060FF; - else - poly_outline = 0x000000FF; - queuepoly(V, shDisk, cp.color1); - if(cp.shade == 't') queuepoly(V, shDiskT, cp.color2); - if(cp.shade == 's') queuepoly(V, shDiskS, cp.color2); - if(cp.shade == 'q') queuepoly(V, shDiskSq, cp.color2); - if(cp.shade == 'm') queuepoly(V, shDiskM, cp.color2); - } - -ld maxweight; - -ld ggamma = .5; - -void drawVertex(const transmatrix &V, cell *c, shmup::monster *m) { - int i = m->pid; - vertexdata& vd = vdata[i]; - - bool ghilite = false; - - if(vd.special && specialmark) ghilite = true; - - if(!gmatrix.count(m->base)) printf("base not in gmatrix\n"); - - int lid = shmup::lmousetarget ? shmup::lmousetarget->pid : -2; - - if(!leftclick) for(int j=0; jvisible) continue; - vertexdata& vd1 = vdata[ei->i]; - vertexdata& vd2 = vdata[ei->j]; - - int oi = ei->i, oj = ei->j; - bool hilite = false; - if(vdata[oi].special && vdata[oj].special && specialmark) hilite = true; - else if(svg::in || inHighQual) hilite = false; - else if(vd1.m == shmup::lmousetarget) hilite = true; - else if(vd2.m == shmup::lmousetarget) hilite = true; - else if(oi == lid || oj == lid) hilite = true; - - if(hilite) ghilite = true; - - if(ei->lastdraw < frameid) { - ei->lastdraw = frameid; - - int xlalpha = (hilite || hiliteclick) ? 64 : 20; - - if(kind == kSAG) { - if(ei->weight2 > maxweight) maxweight = ei->weight2; - xlalpha = int(pow(ei->weight2/ maxweight, ggamma) * 255); - } - else xlalpha = int(pow(.5, ggamma) * 255); - - if(svg::in && xlalpha < 16) continue; - - transmatrix& gm1 = shmup::ggmatrix(vd1.m->base); - transmatrix& gm2 = shmup::ggmatrix(vd2.m->base); - - - hyperpoint h1 = gm1 * vd1.m->at * C0; - hyperpoint h2 = gm2 * vd2.m->at * C0; - - /* if(hdist0(h1) < .001 || hdist0(h2) < .001) { - printf("h1 = %s\n", display(h1)); - printf("h2 = %s\n", display(h2)); - display(m->at); - display(vd2.m->at); - display(V); - display(gmatrix[vd2.m->base]); - display(shmup::calc_gmatrix(vd2.m->base)); - } */ - - int col = - ((hilite ? 0xFF0000 : backcolor ? 0x808080 : 0xFFFFFF) << 8) + xlalpha; - - if(pmodel) { - queueline(h1, h2, col, 2); - lastptd().prio = PPR_STRUCT0; - } - else { - - if(ei->orig && ei->orig->cpdist >= 3) ei->orig = NULL; - if(!ei->orig) { - ei->orig = cwt.c; - ei->prec.clear(); - transmatrix T = inverse(shmup::ggmatrix(ei->orig)); - storeline(ei->prec, T*h1, T*h2); - } - queuetable(shmup::ggmatrix(ei->orig), &ei->prec[0], size(ei->prec)/3, col, 0, - PPR_STRUCT0); - } - } -/* - */ - } - - if(!vd.virt) { - queuedisk(V * m->at, ghilite ? colorpair(0xFF0000FF) : vd.cp, false); - lastptd().info = vd.info; - } - - - if(showlabels) { - bool doshow = true; - if(kind == kTree && i > 0) { - vertexdata& vdp = vdata[vd.data]; - hyperpoint h2 = shmup::ggmatrix(vdp.m->base) * vdp.m->at * C0; - if(hdist(h2, V * m->at * C0) < 0.1) doshow = false; - } - - hyperpoint h = tC0(V * m->at); - transmatrix V2 = rgpushxto0(h) * ypush(purehepta ? .3 : .2); - if(doshow) queuestr(V2, (svg::in ? .28 : .2) * crossf / hcrossf, vd.name, backcolor ? 0x000000 : 0xFFFF00, svg::in ? 0 : 1); - lastptd().info = vd.info; - } - - if(kind == kCollatz) { - if(vd.data == 2) { - // doubler vertex - string s = vd.name; - colorpair cp = vd.cp; - vd.data = 20; - int i0 = size(vdata); - vdata.resize(i0+1); - vertexdata& vdn = vdata[i0]; - createViz(i0, m->base, m->at * spin(collatz::s2) * xpush(collatz::p2)); - virtualRebase(vdn.m, true); - vdn.cp = perturb(cp); - vdn.data = 0; - addedge(i, i0, 0, false); - vdn.m->store(); - int carry = 0; - string s2 = s; - for(int i=size(s2)-1; i>=0; i--) { - int x = 2*(s2[i] - '0') + carry; - carry = x>=10; - if(carry) x-=10; - s2[i] = '0'+x; - } - if(carry) s2 = "1" + s2; - vdn.name = s2; - - int m3 = 0; - for(int i=0; ibase, m->at * spin(collatz::s3) * xpush(collatz::p3)); - virtualRebase(vdn.m, true); - vdn.cp = perturb(cp); - vdn.data = 0; - addedge(i, i0+1, 0, false); - vdn.m->store(); - int carry = -1; - string s2 = s; - for(int i=size(s2)-1; i>=0; i--) { - carry += 2 * (s2[i] - '0'); - int ncarry = 0; - while(carry % 3) carry += 10, ncarry--; - if(carry >= 30) carry -= 30, ncarry += 3; - s2[i] = '0'+carry/3; - carry = ncarry; - } - if(s2[0] == '0') s2 = s2.substr(1); - vdn.name = s2; - vdn.cp = perturb(vdn.cp); - } - } - else if(vd.data < 2) { - vd.data++; - fixmatrix(vd.m->at); - } - } - - } - -bool virt(shmup::monster *m) { - if(m->type != moRogueviz) return false; - vertexdata& vd = vdata[m->pid]; - return vd.virt; - } - -vector legend; - -void drawExtra() { - for(int i=0; i 0) - vdata[getid(lab)].info = new string(buf); // replace with std::shared_ptr in C++111 - continue; - } - else { - ungetc(c2, f); - char buf[60]; - int err = fscanf(f, "%30s", buf); - if(err > 0) x = parse(buf); - } - - if(size(lab) && lab[0] == '*') { - lab = lab.substr(1); - for(int i=0; i= 0) goto again; - } - } - } - } - -void init() { - if(on) return; - on = autocheat = true; -#ifndef WEB - mapeditor::drawplayer = false; - firstland = euclidland = laCanvas; - if(!shmup::on) restartGame('s'); -#else - firstland = euclidland = laCanvas; - restartGame(); -#endif - items[itOrbLife] = 0; - timerghost = false; - - gmatrix.clear(); - drawthemap(); - gmatrix0 = gmatrix; - addMessage("RogueViz enabled"); - } - -void close() { - vdata.clear(); - labeler.clear(); - legend.clear(); - for(int i=0; irebase(); - } - -void fixparam() { - if((svg::in || inHighQual) && size(legend)) vid.xres = vid.xres * 22/16; - while(vid.xres & 15) vid.xres++; - if(size(legend)) vid.xcenter = vid.ycenter; - } - -void rvvideo(const char *fname) { - for(int i=0; i<1050; i++) { - char buf[500]; - snprintf(buf, 500, fname, i); - shmup::pc[0]->base = currentmap->gamestart(); - shmup::pc[0]->at = spin(i * 2 * M_PI / 1000.) * xpush(1.7); - if(i == 0) drawthemap(); - shmup::turn(100); - if(i == 0) drawthemap(); - centerpc(100); - printf("%s\n", buf); - saveHighQualityShot(buf); - } - } - -int readArgs() { - using namespace arg; - -// options before reading - if(0) ; - else if(argis("-dftcolor")) { - shift(); dftcolor = strtol(args(), NULL, 16); - } - -// tree visualizer (e.g. Tree of Life) -//------------------------------------- - - else if(argis("-tree")) { - PHASE(3); shift(); tree::read(args()); - } - -// SAG visualizer (e.g. Reddit roguelikes, GitHub languages) -//----------------------------------------------------------- - -// (1) configure edge weights - else if(argis("-edgepower")) { - shift(); sag::edgepower = argf(); - shift(); sag::edgemul = argf(); - } -// (2) read the edge data - else if(argis("-sag")) { - PHASE(3); - shift(); sag::read(args()); - } -// (3) load the initial positioning - else if(argis("-gload")) { - PHASE(3); shift(); sag::loadsnake(args()); - } -// (4) perform simulated annealing: -fullsa