From 60c8797d25548f1eace643651e09965313ebc6bd Mon Sep 17 00:00:00 2001 From: Spoike Date: Mon, 28 May 2018 10:12:10 +0000 Subject: [PATCH] Try to fix frametime issues with TW. Use eukara's icon in x11, matching the windows icon. Use the extra main-menu options even when there's no menufont available. git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5255 fc73d0e0-1445-4013-8a0c-d673dee63da5 --- engine/client/cl_main.c | 2 +- engine/client/fte_eukara64.h | 597 ++++++++++++++++++++++++++++++ engine/client/m_items.c | 33 +- engine/client/pr_csqc.c | 1 + engine/common/bothdefs.h | 1 - engine/common/common.c | 12 +- engine/common/common.h | 2 +- engine/common/config_fteqw.h | 4 +- engine/common/config_minimal.h | 4 +- engine/common/config_nocompat.h | 4 +- engine/common/config_wastes.h | 4 +- engine/common/sys_linux_threads.c | 9 + engine/gl/gl_vidlinuxglx.c | 3 +- engine/gl/gl_vidwayland.c | 2 +- engine/qclib/hash.h | 2 +- engine/qclib/qcc.h | 6 +- engine/qclib/qcc_pr_comp.c | 45 +-- engine/qclib/qccmain.c | 9 +- engine/qclib/qcctui.c | 23 +- engine/server/sv_main.c | 4 +- 20 files changed, 695 insertions(+), 72 deletions(-) create mode 100644 engine/client/fte_eukara64.h diff --git a/engine/client/cl_main.c b/engine/client/cl_main.c index 510a1b41c..caae67940 100644 --- a/engine/client/cl_main.c +++ b/engine/client/cl_main.c @@ -5581,7 +5581,6 @@ double Host_Frame (double time) #endif cls.framecount++; - cl.lasttime = cl.time; RSpeedRemark(); @@ -5727,6 +5726,7 @@ double Host_Frame (double time) TP_UpdateAutoStatus(); host_framecount++; + cl.lasttime = cl.time; return 0; } diff --git a/engine/client/fte_eukara64.h b/engine/client/fte_eukara64.h new file mode 100644 index 000000000..a8c811e92 --- /dev/null +++ b/engine/client/fte_eukara64.h @@ -0,0 +1,597 @@ +/* GIMP RGBA C-Source image dump (fte_eukaranopng.h) */ + +static const struct { + unsigned int width; + unsigned int height; + unsigned int bytes_per_pixel; /* 2:RGB16, 3:RGB, 4:RGBA */ + unsigned char pixel_data[64 * 64 * 4 + 1]; +} icon = { + 64, 64, 4, + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\246\246\246\026rrrSeee\205" + "\\\\\\\257VVV\315QQQ\350OOO\370LLL\377LLL\377OOO\370QQQ\350VVV\315\\\\\\" + "\257eee\205rrrS\246\246\246\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000|||\001\000\000\000\000\000\000\000\000|||\062eee\215WWW\364BBB\377\062\062\062\377$$$\377" + "\031\031\031\377\022\022\022\377\016\016\016\377\012\012\012\377\011\011\011\377\011\011\011" + "\377\012\012\012\377\015\015\015\377\022\022\022\377\031\031\031\377$$$\377\062\062\062" + "\377BBB\377WWW\364eee\215|||\062\000\000\000\000\000\000\000\000|||\001\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000jjj\003\000\000\000\000\306\306\306\011jjjsVVV\365" + "===\377$$$\377\021\021\021\377\006\006\006\377\002\002\002\377\001\001\001\377\001\001\001\377\003\003\003" + "\377\005\005\005\377\005\005\005\377\006\006\006\377\006\006\006\377\005\005\005\377\005\005\005\377\003\003\003\377" + "\001\001\001\377\001\001\001\377\002\002\002\377\006\006\006\377\021\021\021\377$$$\377===\377VVV\365" + "jjjs\306\306\306\011\000\000\000\000jjj\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000ppp\003\000\000\000\000\377" + "\377\377\002jjj\222LLL\377---\377\022\022\022\377\005\005\005\377\001\001\001\377\003\003\003\377" + "\007\007\007\377\017\017\017\377\026\026\026\377\034\034\034\377\040\040\040\377%%%\377(((" + "\377***\377***\377(((\377&&&\377!!!\377\034\034\034\377\026\026\026\377\016\016\016" + "\377\007\007\007\377\003\003\003\377\001\001\001\377\005\005\005\377\022\022\022\377---\377LLL\377j" + "jj\222\377\377\377\002\000\000\000\000ppp\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000uuubQQQ\377***\377\014\014" + "\014\373\003\003\003\377\002\002\002\377\007\007\007\377\020\020\020\377\032\032\032\377(((\377\071" + "\071\071\377GFF\377YYY\377fff\377mmm\377rrr\377qqq\377ppp\377ooo\377hhh\377" + "```\377UUU\377EEE\377\070\070\070\377***\377\034\034\034\377\020\020\020\377\007\007\007" + "\377\002\002\002\377\003\003\003\377\014\014\014\373***\377QQQ\377uuub\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000ooo\001\000\000\000\000\341\341\341\013" + "^^^\325\066\066\066\377\020\020\020\374\002\002\002\377\003\003\003\377\012\012\012\377\026\026" + "\026\377'''\377===\377aaa\377www\377\177\177\177\377\202\202\202\377~~~\377" + "{{{\377yyy\377xxx\377www\377uuu\377ttt\377rrr\377qqq\377qqq\377rrr\377mm" + "m\377fgf\377VVV\377<<<\377)))\377\030\030\030\377\012\012\012\377\003\003\003\377\002\002" + "\002\377\020\020\020\374\066\066\066\377^^^\325\341\341\341\013\000\000\000\000ooo\001\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000xxxVNNN\377\036\036\036\377\006\006\006\377\001\001" + "\001\377\011\011\011\377\032\032\032\377...\377QQQ\377xxx\377\207\210\210\377\203" + "\203\203\377\200\200\200\377\202\202\202\377\205\205\205\377\206\207\206" + "\377\210\210\210\377\211\211\211\377\212\212\211\377\211\212\211\377\210" + "\207\207\377\205\205\205\377\201\201\201\377}}}\377yyy\377ttt\377ppp\377" + "lll\377kkk\377lll\377aaa\377JJJ\377\060\060\060\377\033\033\033\377\011\011\011\377" + "\001\001\001\377\006\006\006\377\036\036\036\377NNN\377xxxV\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000ggg\233>>>\377\021\021\021\377\002\002\002\377\005\005\005\377\025\025\025\377" + "***\377UTU\377\201\201\201\377\212\212\212\377\205\205\205\377\207\207\207" + "\377\214\214\214\377\222\223\223\377\230\230\230\377\235\235\234\377\240" + "\240\240\377\242\242\242\377\243\243\242\377\242\242\242\377\241\241\241" + "\377\237\237\237\377\233\233\233\377\230\230\230\377\223\223\223\377\216" + "\216\216\377\210\210\210\377\200\200\200\377zyy\377rrr\377lll\377hhh\377" + "hhh\377ccd\377KKK\377---\377\025\025\025\377\005\005\005\377\002\002\002\377\021\021\021\377" + ">>>\377ggg\233\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000bbb\277\061\061\061\377\012\012\012\377\001" + "\001\001\377\012\012\012\377\040\040\040\377@@@\377}}}\377\216\216\216\377\211\211" + "\211\377\215\214\215\377\224\225\224\377\235\235\235\377\246\246\246\377" + "\255\255\255\377\261\261\261\377\264\264\264\377\265\265\265\377\266\266" + "\265\377\265\265\265\377\264\264\264\377\263\262\263\377\260\260\260\377" + "\255\255\256\377\251\251\251\377\244\244\244\377\240\240\240\377\233\233" + "\233\377\225\225\225\377\215\215\215\377\205\205\205\377|||\377rrr\377kk" + "k\377fee\377fff\377___\377???\377!!!\377\012\012\012\377\001\001\001\377\012\012\012" + "\377\061\061\061\377bbb\277\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000bbb\315+++\377\005\005\005\376\001\001\001\377\020\020" + "\020\377'''\377]\\]\377\222\222\222\377\214\214\214\377\217\217\217\377\231" + "\231\231\377\244\244\244\377\257\257\257\377\270\270\270\377\275\275\275" + "\377\301\301\301\377\302\302\302\377\302\302\302\377\301\301\301\377\276" + "\276\277\377\275\275\275\377\273\273\273\377\270\271\270\377\266\265\266" + "\377\262\263\262\377\261\260\260\377\255\255\254\377\252\252\252\377\246" + "\245\246\377\241\242\242\377\234\235\234\377\225\226\226\377\216\216\216" + "\377\204\204\203\377yyz\377ppp\377hhh\377ccc\377ddd\377OOO\377+++\377\020" + "\020\020\377\001\001\001\377\005\005\005\376+++\377bbb\315\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000bbb\277+++\377\004\004\004\376\003\003\003\377\024" + "\024\024\377...\377vvv\377\225\225\225\377\216\216\216\377\230\230\230\377" + "\245\245\245\377\263\263\263\377\275\275\275\377\305\305\305\377\311\311" + "\311\377\312\312\312\377\311\312\311\377\310\310\310\377\307\306\306\377" + "\305\306\306\377\303\303\304\377\301\301\301\377\277\277\277\377\274\274" + "\274\377\271\271\271\377\267\266\267\377\265\264\264\377\260\260\260\377" + "\256\256\256\377\251\252\252\377\246\246\246\377\242\242\242\377\236\236" + "\236\377\231\231\231\377\222\222\222\377\212\212\212\377\200\200\200\377" + "ttu\377jjj\377abb\377bbb\377XXX\377\062\062\062\377\024\024\024\377\003\003\003\377\004" + "\004\004\376+++\377bbb\277\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000ooo\001\000\000\000\000ggg\233" + "\061\061\061\377\005\005\005\376\003\003\003\377\030\030\030\377\062\062\062\377\202\202\202\377" + "\223\223\223\377\222\222\222\377\237\237\237\377\257\257\260\377\276\276" + "\276\377\310\310\310\377\316\316\316\377\320\320\320\377\320\320\320\377" + "\316\316\316\377\316\316\316\377\314\314\315\377\311\311\311\377\307\307" + "\307\377\304\304\303\377\301\301\301\377\277\276\277\377\274\274\274\377" + "\271\271\271\377\266\267\266\377\264\264\264\377\261\261\261\377\257\257" + "\257\377\254\254\254\377\252\252\251\377\246\246\246\377\241\242\241\377" + "\235\235\235\377\232\231\231\377\224\224\224\377\214\215\214\377\203\203" + "\203\377wxw\377kkk\377bcb\377___\377[[[\377\066\066\066\377\027\027\027\377\003\003" + "\003\377\005\005\005\376\061\061\061\377ggg\233\000\000\000\000ooo\001\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000xxxV>>>\377" + "\012\012\012\377\002\002\002\377\024\024\024\377\063\063\063\377\203\203\203\377\217\217" + "\217\377\224\224\224\377\243\243\243\377\265\265\265\377\306\305\305\377" + "\316\316\316\377\324\324\324\377\324\324\324\377\323\324\324\377\324\324" + "\324\377\321\321\321\377\317\317\317\377\314\313\313\377\311\311\311\377" + "\306\306\306\377\303\303\303\377\301\301\301\377\276\276\276\377\273\273" + "\273\377\270\270\270\377\266\266\266\377\263\263\263\377\260\260\260\377" + "\256\256\256\377\253\253\253\377\251\251\251\377\246\246\246\377\244\244" + "\244\377\241\241\241\377\233\234\233\377\230\227\230\377\223\224\224\377" + "\215\215\215\377\204\204\204\377xxx\377kkk\377aaa\377\\\\\\\377YYY\377\066" + "\066\066\377\024\024\024\377\002\002\002\377\012\012\012\377>>>\377yyyV\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\341\341\341\013NNN\377\021\021\021\377\001\001\001\377\020\020\020\377...\377\201\201" + "\201\377\216\216\216\377\224\224\224\377\245\245\245\377\271\271\271\377" + "\311\311\311\377\324\323\323\377\326\326\327\377\327\327\327\377\327\327" + "\330\377\326\326\325\377\323\322\323\377\317\317\317\377\314\314\314\377" + "\310\311\310\377\306\306\306\377\303\303\303\377\300\300\300\377\275\275" + "\275\377\272\272\272\377\267\267\267\377\264\264\264\377\262\262\262\377" + "\260\260\260\377\255\255\255\377\253\253\253\377\250\251\250\377\247\247" + "\247\377\244\244\244\377\242\242\242\377\237\237\240\377\235\235\235\377" + "\233\233\233\377\225\225\226\377\222\222\222\377\214\214\214\377\203\203" + "\204\377xxx\377jkk\377```\377ZZZ\377XXX\377\063\062\063\377\017\017\017\377\001\001" + "\001\377\021\021\021\377MMM\377\342\342\342\013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000ppp\003\000\000\000\000^^^\325\036\036\036\377\002\002\002\377" + "\012\012\012\377'''\377ttt\377\217\217\217\377\222\222\222\377\244\244\244\377" + "\272\272\272\377\313\313\314\377\326\326\325\377\330\330\330\377\331\331" + "\331\377\330\330\330\377\325\324\324\377\321\322\322\377\315\315\315\377" + "\311\311\311\377\305\304\304\377\277\300\277\377\274\274\274\377\267\267" + "\267\377\263\263\263\377\260\260\257\377\254\254\254\377\252\252\252\377" + "\247\247\247\377\245\245\245\377\243\243\243\377\241\241\242\377\241\241" + "\241\377\240\240\240\377\237\237\237\377\235\236\236\377\235\235\235\377" + "\234\234\234\377\231\232\232\377\231\231\231\377\227\227\227\377\224\224" + "\224\377\217\217\217\377\212\212\212\377\201\201\202\377vvv\377iii\377^^" + "^\377[[[\377STS\377+++\377\012\012\012\377\002\002\002\377\036\036\036\377^^^\325\000\000" + "\000\000ppp\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000uuub\066" + "\066\066\377\006\006\006\377\005\005\005\377\040\040\040\377[[[\377\220\220\220\377\217\217" + "\217\377\240\240\240\377\270\270\270\377\312\312\312\377\326\325\326\377" + "\327\327\327\377\330\330\330\377\325\325\326\377\320\317\320\377\312\312" + "\312\377\304\304\304\377\274\274\274\377\264\264\264\377\254\254\254\377" + "\246\245\246\377\240\240\237\377\231\231\231\377\226\226\226\377\222\222" + "\222\377\217\217\217\377\214\215\215\377\212\213\212\377\211\211\211\377" + "\207\210\210\377\207\207\206\377\206\207\207\377\207\207\206\377\211\211" + "\211\377\212\212\212\377\214\214\214\377\216\216\216\377\217\217\217\377" + "\221\221\221\377\220\221\220\377\221\221\222\377\216\216\216\377\212\212" + "\212\377\207\207\207\377\177\177\177\377stt\377fee\377\\\\\\\377ZYZ\377L" + "KL\377\"\"\"\377\005\005\005\377\006\006\006\377\066\066\066\377uuub\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000jjj\003\377\377\377\002QQQ\377\020\020\020\374\002\002\002" + "\377\025\025\025\377@@@\377\216\216\216\377\212\213\212\377\233\234\233\377" + "\262\262\262\377\305\305\305\377\321\321\321\377\323\323\323\377\322\323" + "\323\377\315\315\315\377\304\303\304\377\271\271\271\377\256\256\256\377" + "\242\242\242\377\234\234\234\377\233\233\233\377\222\222\222\377\200\200" + "\200\377sss\377ggg\377]]^\377XXX\377TTT\377SSS\377RRR\377RRR\377SSS\377V" + "VV\377\\\\\\\377bbb\377jjj\377sss\377{zz\377vww\377www\377{{{\377\200\177" + "\177\377\205\204\204\377\207\207\207\377\210\210\210\377\205\205\205\377" + "\202\202\202\377zz{\377ooo\377ccb\377YYY\377YYY\377>>>\377\025\025\025\377\002" + "\002\002\377\020\020\020\374QQQ\377\377\377\377\002jjj\003\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000jjj\222***\377\003\003\003\377\011\011\011\377***\377zzz\377\211\211" + "\211\377\224\224\224\377\253\253\253\377\276\276\276\377\313\313\313\377" + "\315\315\315\377\310\310\310\377\276\276\276\377\255\255\255\377\241\241" + "\241\377\240\240\240\377\212\212\212\377sss\377TTT\377\061\061\061\377\036\036" + "\036\377\031\031\031\377\023\023\023\377\017\017\017\377\015\015\015\377\014\014\014\377" + "\014\014\014\377\014\014\014\377\014\014\014\377\014\014\014\377\015\015\015\377\016\016\016" + "\377\020\020\020\377\023\023\023\377\030\030\030\377\035\035\035\377'''\377???\377SS" + "S\377aaa\377mmm\377ooo\377ppp\377xyx\377}}}\377~~~\377}}}\377uuu\377jjj\377" + "^^^\377WWW\377UTU\377...\377\011\011\011\377\003\003\003\377***\377jjj\222\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000|||\001\306\306\306\011KKK\377\014\014\014\373\003\003\003\377" + "\031\031\031\377SSS\377\212\212\212\377\212\212\213\377\237\237\237\377\266" + "\266\265\377\301\301\301\377\302\302\302\377\267\267\267\377\246\246\246" + "\377\242\242\241\377\213\213\213\377ddd\377...\377\034\034\034\377\017\017\017" + "\377\012\012\012\377\011\011\011\377\010\010\010\377\007\007\007\377\011\011\011\377\013\013" + "\013\377\012\012\012\377\006\006\006\377\002\002\002\377\001\001\001\377\001\001\001\377\002\002\002\377\006" + "\006\006\377\012\012\012\377\013\013\013\377\012\012\012\377\011\011\011\377\010\010\010\377" + "\011\011\011\377\013\013\013\377\017\017\017\377\031\031\031\377$$$\377???\377ZZZ\377" + "ggg\377iii\377nnn\377vuu\377uuu\377ooo\377ccc\377XXX\377VVV\377GGG\377\033" + "\033\033\377\003\003\003\377\014\014\014\373KKK\377\306\306\306\011|||\001\000\000\000\000\000\000" + "\000\000\000\000\000\000jjjs---\377\004\004\004\377\012\012\012\377...\377~~~\377\204\204\205" + "\377\223\223\223\377\250\250\250\377\265\265\265\377\263\264\264\377\242" + "\243\243\377\235\235\235\377\202\202\202\377>>>\377\032\032\032\377\013\013\013" + "\377\012\012\012\377\007\007\007\377\006\006\006\377\012\012\012\377\016\016\016\377\017\017\017" + "\377\025\025\025\377%%%\377///\377\061\061\061\377\036\036\036\377\006\006\006\377\000\000\000" + "\377\000\000\000\377\004\004\004\377\027\027\027\377///\377///\377)))\377\036\036\036\377\022" + "\022\022\377\017\017\017\377\015\015\015\377\011\011\011\377\007\007\007\377\011\011\011\377" + "\014\014\014\377\025\025\025\377)))\377MMM\377``a\377bab\377jjj\377lll\377fff\377" + "\\\\\\\377TTT\377TTT\377\061\061\061\377\012\012\012\377\004\004\004\377---\377jjjs\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000VVV\365\022\022\022\377\002\002\002\377\027\027\027\377" + "PPP\377\205\205\205\377\206\206\206\377\231\231\231\377\250\250\250\377\245" + "\244\244\377\236\236\236\377\212\213\212\377???\377\025\025\025\377\017\017\017" + "\377\010\010\010\377\005\005\005\377\010\010\010\377\012\012\012\377\023\023\023\377%%%\377" + "AAA\377eee\377zzz\377}}}\377yyy\377ooo\377EEE\377\013\013\013\377\001\001\001\377" + "\000\000\000\377\011\011\011\377\063\063\063\377ddd\377kkk\377mnn\377kjk\377ccc\377M" + "MM\377\061\061\061\377!!!\377\021\021\021\377\014\014\014\377\007\007\007\377\006\006\006\377" + "\013\013\013\377\023\023\023\377(((\377NNN\377^^^\377```\377ccc\377^^^\377UVU\377" + "RRR\377FFF\377\030\030\030\377\002\002\002\377\022\022\022\377VVV\365\000\000\000\000\000\000\000\000" + "\000\000\000\000|||\062<<<\377\005\005\005\377\007\007\007\377(((\377sss\377\177\177\177\377\213" + "\213\213\377\230\231\231\377\227\227\227\377\224\224\224\377ZZZ\377\032\032" + "\032\377\017\017\017\377\006\006\006\377\004\004\004\377\011\011\011\377\017\017\017\377\"\"\"" + "\377MMM\377www\377\211\211\211\377\223\223\223\377\222\222\222\377\226\227" + "\226\377\231\231\231\377\220\221\220\377~~}\377JJJ\377\017\017\017\377\001\001\001" + "\377\000\000\000\377\013\013\013\377\070\070\070\377ppp\377\177\177\177\377\206\206\206" + "\377\202\202\202\377zz{\377uuu\377rrr\377fff\377WXX\377:\071:\377\036\036\036" + "\377\017\017\017\377\010\010\010\377\005\005\005\377\013\013\013\377\026\026\026\377\063\063" + "\063\377WWW\377WWW\377[[[\377VVV\377QQQ\377PPO\377+++\377\007\007\007\377\005\005\005" + "\377<<<\377|||\062\000\000\000\000\000\000\000\000eee\215%%%\377\001\001\001\377\020\020\020\377==" + "=\377\202\202\202\377~~~\377\211\211\211\377\212\212\212\377\211\211\211" + "\377\066\066\066\377\023\023\023\377\010\010\010\377\003\003\003\377\007\007\007\377\020\020\020" + "\377'''\377ggg\377\212\212\212\377\224\223\224\377\230\230\230\377\244\244" + "\244\377\253\253\253\377\260\261\260\377\262\262\262\377\257\257\257\377" + "\242\242\242\377\212\213\213\377LLL\377\017\017\017\377\001\001\001\377\001\001\001\377" + "\013\013\013\377:::\377zzz\377\215\215\215\377\230\230\230\377\230\230\230\377" + "\224\223\223\377\215\215\215\377\206\206\206\377{{{\377ppp\377kkk\377```" + "\377HHH\377\040\040\040\377\017\017\017\377\006\006\006\377\005\005\005\377\020\020\020\377\"" + "\"\"\377NNN\377RRR\377SSS\377PPP\377PPP\377<<<\377\020\020\020\377\001\001\001\377" + "%%%\377eee\215\000\000\000\000\000\000\000\000WWW\364\021\021\021\377\003\003\003\377\033\033\033\377" + "^^^\377|||\377|||\377\177\177\177\377\200\200\200\377***\377\016\016\016\377" + "\005\005\005\377\004\004\004\377\015\015\015\377\034\034\034\377aaa\377\220\220\220\377\224" + "\224\224\377\243\243\243\377\256\256\256\377\265\265\265\377\271\271\271" + "\377\273\273\273\377\273\273\273\377\272\272\272\377\265\265\266\377\246" + "\247\247\377\215\215\215\377MMM\377\017\017\017\377\001\001\001\377\001\001\001\377\013\013" + "\013\377:::\377}||\377\221\221\221\377\235\235\235\377\236\236\236\377\234" + "\234\234\377\230\230\231\377\223\223\224\377\216\216\216\377\207\210\207" + "\377\177~~\377rrr\377fgf\377___\377???\377\030\030\030\377\011\011\011\377\004\004" + "\004\377\012\012\012\377\036\036\036\377KKK\377KKK\377MMM\377MMM\377III\377\036\036" + "\036\377\003\003\003\377\021\021\021\377WWW\364\000\000\000\000\245\245\245\026CCC\377\006\006\006" + "\377\007\007\007\377'''\377rrr\377uuu\377vvv\377|||\377\062\062\062\377\015\015\015\377" + "\003\003\003\377\005\005\005\377\017\017\017\377\066\066\066\377\205\205\205\377\222\222\222" + "\377\242\242\242\377\261\261\261\377\271\271\271\377\275\274\275\377\276" + "\277\276\377\277\277\277\377\276\276\276\377\274\275\275\377\273\273\273" + "\377\265\265\265\377\246\246\246\377\215\215\215\377LLL\377\017\017\017\377" + "\001\001\001\377\001\001\001\377\013\013\013\377:\071:\377|||\377\220\221\220\377\236\236" + "\236\377\237\237\236\377\235\234\235\377\232\233\232\377\227\227\227\377" + "\224\224\224\377\220\220\220\377\213\213\213\377\205\205\205\377{{{\377l" + "lm\377aaa\377RRR\377\"\"\"\377\014\014\014\377\004\004\004\377\012\012\012\377###\377" + "JJJ\377GGG\377IIJ\377MMM\377+++\377\007\007\007\377\006\006\006\377CCC\377\245\245\245" + "\026rrrS\062\062\062\377\002\002\002\377\016\016\016\377\070\070\070\377www\377qqq\377pp" + "p\377PPP\377\021\021\021\377\004\004\004\377\005\005\005\377\020\020\020\377III\377\216\216" + "\215\377\230\227\227\377\254\254\254\377\267\267\270\377\275\275\275\377" + "\277\277\300\377\300\300\300\377\300\277\300\377\276\276\276\377\274\274" + "\274\377\273\273\273\377\271\271\271\377\263\263\263\377\244\244\244\377" + "\213\213\213\377LLL\377\017\017\017\377\001\001\001\377\001\001\001\377\013\013\013\377\071" + "\071\071\377zzz\377\220\220\220\377\233\233\233\377\235\235\235\377\234\234" + "\234\377\231\231\232\377\227\227\227\377\225\225\225\377\221\221\221\377" + "\216\216\216\377\213\214\213\377\205\205\205\377~~~\377qqq\377___\377XXX" + "\377&&&\377\015\015\015\377\003\003\003\377\017\017\017\377\064\064\064\377EEE\377FFF\377" + "LLL\377\067\067\067\377\016\016\016\377\002\002\002\377\062\062\062\377rrrSeee\205$$$\377" + "\001\001\001\377\026\026\026\377EEE\377xwx\377kkk\377ooo\377\036\036\036\377\010\010\010" + "\377\004\004\004\377\022\022\022\377HHH\377\215\215\215\377\232\232\232\377\260\260" + "\260\377\272\272\272\377\276\276\276\377\277\277\300\377\277\277\277\377" + "\277\277\277\377\275\275\275\377\274\274\274\377\273\273\273\377\271\271" + "\271\377\266\266\266\377\261\261\261\377\242\242\242\377\211\211\212\377" + "LLK\377\017\017\017\377\001\001\001\377\001\001\001\377\013\013\013\377\071\071\071\377yyy\377" + "\216\216\216\377\232\231\232\377\233\234\233\377\232\233\233\377\230\230" + "\230\377\226\226\226\377\224\223\224\377\221\221\221\377\217\217\217\377" + "\214\214\214\377\210\210\210\377\204\204\204\377}||\377qqq\377]]]\377SSS" + "\377\"\"\"\377\011\011\011\377\006\006\006\377\034\034\034\377BBB\377CBC\377III\377@" + "@@\377\025\025\025\377\001\001\001\377$$$\377eee\205\\\\\\\257\031\031\031\377\001\001\001" + "\377\033\033\033\377VVV\377qqq\377iii\377STS\377\024\024\024\377\004\004\004\377\015\015" + "\015\377\063\062\063\377\210\210\210\377\226\226\226\377\257\257\257\377\272" + "\272\272\377\275\275\275\377\277\276\276\377\276\276\276\377\275\275\275" + "\377\274\274\274\377\274\273\273\377\272\272\272\377\270\270\270\377\266" + "\266\266\377\265\265\265\377\257\257\257\377\240\240\240\377\210\210\210" + "\377KJK\377\016\016\016\377\001\001\001\377\001\001\001\377\013\013\013\377\071\071\071\377xx" + "x\377\215\214\214\377\230\230\230\377\233\232\232\377\232\231\231\377\226" + "\226\226\377\225\225\225\377\222\222\222\377\220\217\217\377\215\216\215" + "\377\213\213\213\377\211\211\211\377\205\205\205\377\201\201\201\377zzz\377" + "mmm\377WWW\377III\377\024\024\024\377\005\005\005\377\021\021\021\377\071\071\071\377AA" + "A\377FFF\377FFF\377\034\034\034\377\001\001\001\377\031\031\031\377\\\\\\\257VVV\315" + "\022\022\022\377\003\003\003\377\040\040\040\377aaa\377nmm\377hhh\377FFF\377\016\016\016" + "\377\005\005\005\377\022\022\022\377rqr\377\211\211\210\377\247\247\247\377\266\266" + "\266\377\273\273\273\377\274\274\274\377\274\274\274\377\274\274\274\377" + "\273\273\273\377\272\272\272\377\271\271\270\377\267\267\267\377\266\266" + "\266\377\265\265\265\377\263\263\263\377\255\255\255\377\236\236\236\377" + "\207\207\207\377HHH\377\016\016\016\377\001\001\001\377\001\001\001\377\013\013\013\377\070" + "\070\070\377vvv\377\212\213\212\377\227\227\227\377\231\231\231\377\227\227" + "\227\377\226\226\226\377\223\223\223\377\220\221\220\377\216\217\217\377" + "\214\214\214\377\211\211\211\377\210\210\210\377\204\205\205\377\202\201" + "\202\377}}}\377sts\377bbb\377RRR\377(((\377\010\010\010\377\014\014\014\377\063" + "\064\063\377@@@\377EEE\377HHH\377\"\"\"\377\003\003\003\377\022\022\022\377VVV\315Q" + "QQ\350\016\016\016\377\004\004\004\377$$$\377hhh\377kkk\377hgh\377BBB\377\015\015\015" + "\377\010\010\010\377...\377~~~\377\227\227\227\377\257\257\257\377\270\270\270" + "\377\273\273\273\377\273\273\273\377\272\272\273\377\271\271\271\377\270" + "\270\270\377\267\267\267\377\266\266\266\377\266\266\266\377\264\264\264" + "\377\262\263\263\377\260\260\260\377\253\253\253\377\235\235\235\377\205" + "\205\205\377GGG\377\016\016\016\377\001\001\001\377\001\001\001\377\013\013\013\377\070\070\070" + "\377uuu\377\211\211\211\377\226\226\226\377\227\227\227\377\226\226\226\377" + "\224\224\224\377\222\221\222\377\217\217\217\377\215\215\215\377\212\212" + "\212\377\211\211\211\377\206\206\206\377\204\203\204\377\202\202\202\377" + "~~~\377www\377jii\377UUU\377\070\070\070\377\015\015\015\377\014\014\014\377\062\062" + "\062\377@@@\377DDD\377III\377'''\377\004\004\004\377\016\016\016\377QQQ\350OOO\370" + "\012\012\012\377\005\005\005\377(((\377mmm\377kkk\377jjj\377JJJ\377\017\017\017\377\013" + "\013\013\377;;;\377\202\202\202\377\235\235\235\377\261\261\261\377\267\267" + "\267\377\270\270\270\377\267\270\270\377\267\267\267\377\267\266\266\377" + "\266\266\266\377\265\265\265\377\264\264\265\377\263\263\263\377\261\261" + "\261\377\260\257\260\377\256\256\256\377\251\251\251\377\232\232\233\377" + "\204\204\204\377GGG\377\016\016\016\377\001\001\001\377\001\001\001\377\013\013\013\377\067" + "\067\067\377tts\377\210\210\210\377\224\224\224\377\225\225\225\377\225\225" + "\225\377\222\222\222\377\220\220\220\377\216\216\216\377\213\213\213\377" + "\211\211\211\377\210\207\207\377\205\205\205\377\203\203\203\377\200\200" + "\200\377}}}\377xxx\377kkk\377VVV\377@@@\377\020\020\020\377\017\017\017\377\066" + "\065\066\377AAA\377EEE\377III\377,,,\377\005\005\005\377\012\012\012\377OOO\370LLL\377" + "\011\011\011\377\006\006\006\377***\377lll\377lll\377lll\377___\377\027\027\027\377\015" + "\015\015\377\070\070\070\377\200\201\201\377\232\232\232\377\256\256\256\377\264" + "\264\264\377\266\266\266\377\266\266\266\377\265\265\265\377\264\264\264" + "\377\263\263\263\377\263\263\262\377\261\261\261\377\260\260\260\377\257" + "\257\257\377\256\256\256\377\254\254\254\377\247\247\247\377\231\231\231" + "\377\202\202\202\377HGG\377\016\016\016\377\001\001\001\377\001\001\001\377\013\013\013\377" + "\067\067\067\377rrr\377\206\206\206\377\222\222\222\377\225\225\224\377\223" + "\223\223\377\220\220\220\377\217\217\217\377\214\214\214\377\211\211\211" + "\377\211\210\211\377\206\206\206\377\203\203\203\377\201\201\201\377\177" + "\177\177\377{{{\377vvv\377jii\377VVV\377===\377\021\021\021\377\026\026\026\377" + ">>>\377CCC\377FFF\377JJJ\377---\377\007\007\007\377\011\011\011\377LLL\377LLL\377" + "\011\011\011\377\006\006\006\377***\377lll\377mmm\377ppp\377uuu\377---\377\021\021\021" + "\377'''\377|||\377\217\217\217\377\247\247\247\377\260\257\260\377\263\263" + "\263\377\262\262\262\377\262\262\262\377\261\261\261\377\260\260\260\377" + "\260\260\260\377\257\257\257\377\256\256\256\377\255\255\255\377\253\253" + "\253\377\251\251\251\377\245\245\245\377\227\227\227\377\200\200\200\377" + "GGG\377\016\016\016\377\001\001\001\377\001\001\001\377\013\013\013\377\067\067\067\377qqq\377" + "\205\205\205\377\221\221\221\377\223\222\222\377\221\221\221\377\217\217" + "\217\377\215\215\215\377\212\212\212\377\210\210\210\377\207\207\207\377" + "\204\204\204\377\202\202\202\377\177\200\200\377}}}\377zzz\377rrr\377ddd" + "\377TST\377\062\062\062\377\023\023\023\377'''\377HHH\377FGF\377GGG\377III\377" + "...\377\006\006\006\377\011\011\011\377LLL\377OOO\370\012\012\012\377\005\005\005\377)))\377" + "jjj\377mnm\377uuu\377vvv\377ggg\377\032\032\032\377\026\026\026\377fff\377\202" + "\202\202\377\233\233\234\377\251\251\251\377\255\255\255\377\257\257\257" + "\377\260\257\257\377\257\257\257\377\256\256\256\377\255\255\255\377\254" + "\254\255\377\253\253\253\377\252\252\252\377\251\251\251\377\247\247\247" + "\377\242\242\242\377\224\225\225\377~~~\377HHH\377\017\017\017\377\001\001\001\377" + "\001\001\001\377\013\013\013\377\067\067\067\377ooo\377\203\204\203\377\216\216\217\377" + "\220\220\220\377\217\217\217\377\216\215\215\377\212\213\213\377\211\211" + "\211\377\207\210\210\377\205\205\205\377\203\203\203\377\200\201\200\377" + "~~~\377zz{\377vvu\377lkl\377ZZZ\377QQQ\377!!!\377\034\034\034\377CCC\377HHH" + "\377KKK\377HHH\377III\377,,,\377\005\005\005\377\012\012\012\377OOO\370QQQ\350\016" + "\016\016\377\004\004\004\377%%%\377eee\377mmm\377www\377\177\177\177\377~~~\377Q" + "QQ\377\035\035\035\377---\377\177\177\177\377\211\211\211\377\235\236\235\377" + "\247\247\247\377\252\252\252\377\254\254\254\377\254\254\254\377\253\253" + "\253\377\252\252\252\377\252\252\251\377\251\251\251\377\250\250\250\377" + "\246\247\246\377\245\244\244\377\240\240\240\377\223\223\223\377}}}\377H" + "HH\377\017\017\017\377\001\001\001\377\001\001\001\377\013\013\013\377\067\067\067\377oon\377" + "\201\201\201\377\214\215\214\377\217\216\217\377\216\216\216\377\213\213" + "\213\377\211\211\211\377\210\210\210\377\205\205\205\377\203\203\203\377" + "\201\201\202\377~~~\377{{{\377wwv\377nnn\377aba\377VVV\377\070\070\070\377\040" + "\040\040\377:::\377MMM\377OOP\377MMM\377HHH\377IHI\377()(\377\004\004\004\377\016" + "\016\016\377QQQ\350VVV\315\022\022\022\377\003\003\003\377!!!\377^^^\377mmm\377vvv\377" + "\205\205\205\377\205\205\205\377\202\202\202\377NNN\377\040\040\040\377AAA\377" + "\205\205\205\377\212\212\212\377\233\233\233\377\243\242\243\377\246\246" + "\246\377\250\250\250\377\251\251\251\377\251\250\250\377\247\250\247\377" + "\246\246\246\377\245\245\245\377\244\243\244\377\242\242\242\377\236\236" + "\236\377\221\221\220\377zzz\377GGG\377\020\020\020\377\001\001\001\377\001\001\001\377\013" + "\013\013\377\067\067\067\377mnm\377\200\200\200\377\213\213\213\377\215\215\215" + "\377\213\214\214\377\211\211\211\377\210\210\210\377\206\206\206\377\203" + "\204\203\377\201\202\201\377~~~\377{{{\377vvv\377ooo\377dcc\377YYY\377FF" + "F\377'''\377:::\377QQQ\377RRQ\377TTT\377MMM\377HHH\377HHH\377###\377\003\003" + "\003\377\022\022\022\377VVV\315\\\\\\\257\031\031\031\377\001\001\001\377\034\034\034\377" + "SSS\377mmm\377ttt\377\206\206\206\377\217\217\217\377\210\210\210\377\201" + "\201\201\377]]]\377&&&\377EEE\377\210\210\210\377\214\214\214\377\226\226" + "\226\377\236\236\236\377\242\243\242\377\244\244\244\377\244\244\244\377" + "\244\244\244\377\243\243\243\377\243\243\243\377\242\242\242\377\240\240" + "\240\377\233\233\233\377\216\216\216\377yyy\377FFF\377\017\017\017\377\001\001\001" + "\377\001\001\001\377\013\013\013\377\067\067\067\377kkk\377~~\177\377\212\212\211\377" + "\213\213\213\377\212\211\212\377\211\211\210\377\206\206\206\377\203\203" + "\203\377\201\201\201\377~~~\377zzz\377vvv\377ooo\377ddd\377```\377HHH\377" + ",,,\377CCC\377SSR\377TTT\377YYY\377UUU\377MLL\377GGG\377EEE\377\035\035\035" + "\377\001\001\001\377\031\031\031\377\\\\\\\257eee\205$$$\377\001\001\001\377\026\026\026\377" + "EEE\377nnn\377qqq\377\201\201\201\377\221\221\221\377\225\225\225\377\213" + "\213\213\377\203\203\203\377www\377<;<\377\067\067\067\377|{|\377\215\215\215" + "\377\220\217\220\377\226\226\226\377\234\234\234\377\236\237\237\377\240" + "\237\237\377\241\241\241\377\240\240\240\377\240\237\237\377\235\235\235" + "\377\231\231\231\377\215\215\215\377www\377FFF\377\017\017\017\377\001\001\001\377" + "\001\001\001\377\013\013\013\377\066\066\066\377jjj\377}}}\377\207\207\210\377\211\211" + "\211\377\211\211\211\377\205\206\206\377\203\203\203\377\200\200\200\377" + "}}}\377yyy\377sss\377llk\377fff\377`_`\377???\377\067\067\067\377SSS\377VVV" + "\377XXX\377^^^\377\\[\\\377TST\377KKK\377GGG\377AAA\377\025\025\025\377\001\001" + "\001\377$$$\377eee\205rrrS\062\062\062\377\002\002\002\377\016\016\016\377\070\070\070\377" + "jjj\377mmm\377|}|\377\216\216\216\377\230\230\230\377\226\227\227\377\221" + "\221\221\377\206\206\206\377\210\210\210\377kkk\377\070\070\070\377SSS\377\205" + "\205\205\377\216\216\217\377\221\221\221\377\224\224\223\377\230\230\230" + "\377\233\233\233\377\234\234\234\377\234\234\234\377\233\233\233\377\227" + "\227\227\377\212\212\212\377uuu\377EEE\377\020\020\020\377\001\001\001\377\001\001\001\377" + "\013\013\013\377\066\066\066\377iii\377{{{\377\206\206\206\377\207\207\207\377" + "\206\206\206\377\202\202\202\377\200\177\200\377z{z\377uuu\377opp\377lll" + "\377gfg\377OOO\377;;;\377OOO\377\\\\\\\377ZZZ\377_^_\377a``\377aaa\377[Z" + "[\377RRR\377III\377HHH\377\070\070\070\377\016\016\016\377\002\002\002\377\062\062\062\377" + "rrrS\245\245\245\026CCC\377\006\006\006\377\007\007\007\377***\377ccc\377hhh\377uuu\377" + "\210\210\210\377\226\226\225\377\232\232\231\377\232\232\232\377\225\225" + "\225\377\215\215\215\377\207\207\207\377\212\211\211\377nnn\377JJJ\377TT" + "T\377zzz\377\217\217\217\377\222\222\222\377\225\225\225\377\230\231\231" + "\377\231\232\231\377\230\230\230\377\224\224\224\377\210\210\210\377tst\377" + "DDD\377\020\020\020\377\001\001\001\377\001\001\001\377\013\013\013\377\066\066\066\377ggg\377" + "yyy\377\204\204\204\377\205\205\204\377\203\203\203\377\200\200\200\377{" + "{{\377vuv\377ppp\377gfg\377PPP\377FFF\377TUU\377aaa\377^^^\377aaa\377ddc" + "\377eee\377ddd\377```\377YYY\377NNN\377GGG\377GGG\377---\377\007\007\007\377\006" + "\006\006\377CCC\377\245\245\245\026\000\000\000\000WWW\364\021\021\021\377\003\003\003\377\034\034" + "\034\377UUU\377hhg\377ooo\377\200\200\200\377\220\220\220\377\230\230\230" + "\377\231\231\231\377\232\232\232\377\226\226\227\377\222\222\222\377\215" + "\215\215\377\211\211\211\377\212\212\212\377\203\203\203\377eee\377ZZZ\377" + "eee\377\223\223\223\377\225\224\225\377\226\226\226\377\225\225\225\377\222" + "\223\223\377\206\206\206\377rrr\377DDD\377\020\020\020\377\001\001\001\377\001\001\001\377" + "\013\013\013\377\066\066\066\377fff\377xxx\377\201\201\201\377\203\203\203\377" + "\201\201\201\377~}~\377z{z\377^]^\377SSS\377TTT\377ccc\377ggg\377ddd\377" + "ddd\377fgg\377hgh\377ggg\377fef\377ccc\377^^^\377UUU\377KKK\377EFF\377FF" + "F\377\036\036\036\377\003\003\003\377\021\021\021\377WWW\364\000\000\000\000\000\000\000\000eee\215%" + "%%\377\001\001\001\377\020\020\020\377===\377hhh\377iii\377www\377\210\210\210\377" + "\224\224\224\377\230\230\230\377\232\232\232\377\232\231\231\377\230\230" + "\230\377\225\225\225\377\222\223\222\377\216\216\216\377\213\213\213\377" + "\214\214\214\377\214\214\214\377\215\215\215\377\220\220\220\377\223\223" + "\223\377\224\224\224\377\223\223\223\377\220\220\220\377\204\205\205\377" + "qqq\377DDD\377\020\020\020\377\001\001\001\377\001\001\001\377\014\014\014\377\066\066\067\377" + "ggg\377vvv\377\200\177\200\377\201\201\201\377\177\177\177\377|||\377www" + "\377sss\377ooo\377lll\377jjj\377jjj\377jjj\377kkk\377jkj\377iii\377hhh\377" + "ddd\377aaa\377ZZZ\377PPP\377HHH\377FFF\377===\377\020\020\020\377\001\001\001\377" + "%%%\377eee\215\000\000\000\000\000\000\000\000|||\062<<<\377\005\005\005\377\007\007\007\377***\377__" + "_\377eee\377noo\377\177\177\177\377\215\214\214\377\224\224\224\377\226\226" + "\226\377\230\230\230\377\227\227\227\377\226\225\226\377\225\225\225\377" + "\223\223\223\377\222\222\222\377\220\220\220\377\217\217\217\377\217\217" + "\217\377\221\221\221\377\222\222\222\377\222\222\222\377\221\221\221\377" + "\215\215\215\377\203\203\203\377ppp\377MMM\377\022\022\022\377\002\002\002\377\001\001" + "\001\377\017\017\017\377>>>\377ggg\377vwv\377\177~~\377\177\177\177\377~~~\377" + "z{z\377xyx\377tts\377qqq\377pqp\377ooo\377nnn\377nnn\377lll\377jjj\377ii" + "i\377fee\377ccc\377]]]\377UUU\377KKL\377FFF\377GGG\377,,,\377\007\007\007\377\005" + "\005\005\377<<<\377|||\062\000\000\000\000\000\000\000\000\000\000\000\000VVV\365\022\022\022\377\002\002\002\377" + "\030\030\030\377III\377eee\377hhg\377uuu\377\205\205\205\377\217\217\217\377" + "\222\222\222\377\225\226\226\377\226\226\226\377\226\226\226\377\225\225" + "\225\377\224\224\224\377\223\223\223\377\222\222\222\377\221\221\221\377" + "\220\220\220\377\220\220\220\377\220\220\220\377\220\220\220\377\217\217" + "\217\377\213\213\214\377\204\204\203\377ppp\377YYY\377\025\025\025\377\003\003\003" + "\377\002\002\002\377\023\023\023\377MMM\377fff\377www\377}}}\377}}}\377|||\377zzz" + "\377wwx\377uuu\377sss\377qqq\377oop\377noo\377mmm\377kkk\377iii\377ggg\377" + "cbb\377```\377ZYY\377PPP\377HHH\377EEE\377CCC\377\031\031\031\377\002\002\002\377" + "\022\022\022\377VVV\365\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000jjjs---\377\004\004\004\377" + "\012\012\012\377\061\061\061\377```\377bbb\377lll\377{{|\377\210\210\207\377\217" + "\217\216\377\220\220\220\377\223\223\223\377\223\223\223\377\223\222\222" + "\377\222\222\222\377\222\222\222\377\221\220\221\377\220\220\220\377\217" + "\217\217\377\217\217\217\377\217\217\217\377\216\216\216\377\215\215\215" + "\377\211\212\212\377\203\203\203\377qqq\377aaa\377\033\033\033\377\005\005\005\377" + "\004\004\004\377\027\027\027\377XXX\377fff\377vvw\377{{{\377|||\377zzz\377xxx\377" + "vvv\377uuu\377sss\377qqp\377poo\377nnn\377kll\377iij\377hhh\377ddd\377aa" + "a\377\\]\\\377TTT\377LKK\377FFF\377GGG\377\063\063\063\377\012\012\012\377\004\004" + "\004\377---\377jjjs\000\000\000\000\000\000\000\000\000\000\000\000|||\001\306\306\306\011KKK\377\014\014" + "\014\373\003\003\003\377\032\032\032\377KJJ\377bcb\377ddd\377ppp\377~~~\377\207\207" + "\207\377\214\214\214\377\216\216\216\377\220\220\220\377\217\220\220\377" + "\217\217\217\377\217\217\217\377\217\217\217\377\216\216\216\377\216\216" + "\216\377\215\215\215\377\214\214\214\377\213\213\213\377\212\212\212\377" + "\210\210\210\377\203\202\203\377sts\377```\377***\377\007\007\007\377\006\006\006\377" + "\"\"\"\377[\\\\\377ihh\377vvv\377zzz\377zyy\377xxx\377vvv\377uuu\377sss\377" + "qpq\377opo\377mnm\377lkl\377jjj\377hhh\377ede\377a`a\377^^^\377WWW\377NN" + "N\377GGG\377DDD\377CCC\377\033\033\033\377\003\003\003\377\014\014\014\373KKK\377\306" + "\306\306\011|||\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000jjj\222***\377\003\003\003\377" + "\011\011\011\377---\377\\\\\\\377```\377ggg\377tst\377\177\177\177\377\207\207" + "\207\377\212\212\212\377\215\215\215\377\216\216\216\377\215\215\215\377" + "\215\214\215\377\214\214\214\377\214\213\214\377\213\213\213\377\212\212" + "\212\377\211\211\211\377\211\211\211\377\210\210\210\377\205\205\206\377" + "\201\201\201\377uuu\377```\377\066\066\066\377\013\013\013\377\012\012\012\377\061" + "\061\061\377ZZZ\377lll\377vvv\377www\377www\377vvv\377ttt\377rrr\377ppp\377" + "ooo\377nmn\377lkl\377jij\377hhh\377fee\377aaa\377___\377YYY\377QQQ\377II" + "I\377EEE\377GGG\377///\377\011\011\011\377\003\003\003\377***\377jjj\222\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000jjj\003\377\377\377\002QQQ\377\020\020\020\374\002\002" + "\002\377\025\025\025\377>>>\377```\377_^_\377ghh\377ttt\377~~~\377\205\205\205" + "\377\206\206\206\377\211\211\211\377\212\212\212\377\211\212\212\377\211" + "\211\211\377\211\210\210\377\210\211\211\377\210\210\210\377\207\207\207" + "\377\206\206\206\377\205\205\205\377\203\203\203\377\200\200\200\377vwv\377" + "bcb\377@@@\377\020\020\020\377\017\017\017\377<<<\377]]]\377mmm\377ttt\377vvv\377" + "vuv\377tst\377rrr\377ppp\377ooo\377mll\377jkk\377iii\377hhh\377fee\377aa" + "a\377___\377YZY\377RRR\377KKK\377FEF\377DDD\377>>>\377\025\025\025\377\002\002\002" + "\377\020\020\020\374QQQ\377\377\377\377\002jjj\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000uuub\066\066\066\377\006\006\006\377\005\005\005\377\"\"\"\377NNN\377" + "___\377___\377hih\377ttt\377}}}\377\204\204\204\377\204\204\204\377\207\207" + "\207\377\207\207\207\377\207\207\207\377\206\206\206\377\206\206\205\377" + "\205\205\205\377\204\204\204\377\204\204\203\377\203\203\203\377\201\201" + "\202\377~~~\377vvv\377ccc\377KKK\377\025\025\025\377\024\024\024\377GHG\377^]^" + "\377nnm\377tts\377ttu\377sss\377qqq\377ppp\377nnn\377lll\377jjj\377iii\377" + "hhh\377eee\377aaa\377___\377ZZZ\377SSS\377LKL\377GGF\377DDD\377EEE\377\"" + "\"\"\377\005\005\005\377\006\006\006\377\066\066\066\377uuub\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000ppp\003\000\000\000\000^^^\325\036\036\036\377\002\002\002\377\012" + "\012\012\377+++\377UUU\377\\\\\\\377^^^\377fgg\377rrr\377zzz\377\200\177\200" + "\377\201\201\201\377\202\202\202\377\204\204\204\377\204\204\204\377\203" + "\203\203\377\203\202\203\377\202\202\202\377\201\201\201\377\200\200\200" + "\377\177\177~\377|||\377vvv\377ede\377UUU\377\033\033\033\377\033\033\033\377R" + "RR\377``_\377non\377rrr\377rqr\377qpp\377pop\377mmm\377lll\377jjj\377iii" + "\377ggg\377ddd\377aaa\377___\377ZYY\377SSS\377LLL\377FFF\377CCC\377FFF\377" + "---\377\012\012\012\377\002\002\002\377\036\036\036\377^^^\325\000\000\000\000ppp\003\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\341\341\341\013NNN" + "\377\021\021\021\377\001\001\001\377\017\017\017\377\062\062\062\377XXX\377YZY\377]]]\377" + "fff\377ooo\377wxw\377}}}\377~~~\377\177\177\177\377\201\201\201\377\201\201" + "\201\377\200\200\200\377\177\177\177\377~~~\377}}}\377||}\377z{{\377uuv\377" + "fff\377[[[\377%%%\377%%%\377YYY\377bbb\377mmm\377ppp\377ppp\377ooo\377mm" + "m\377kkk\377iii\377ihi\377fff\377ccc\377aaa\377^^^\377YYY\377SSS\377LLL\377" + "GGG\377CCC\377FFF\377\064\064\064\377\017\017\017\377\001\001\001\377\021\021\021\377MM" + "M\377\342\342\342\013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000xxxV>>>\377\012\012\012\377\002\002\002\377\024" + "\024\024\377\066\066\066\377VWV\377XXX\377[[[\377bbb\377kkl\377sss\377www\377" + "zzz\377{{{\377|||\377}}}\377|||\377|||\377{{{\377{{z\377xxx\377ttt\377hh" + "h\377[[[\377\064\064\064\377\066\066\066\377XXX\377ddd\377lll\377nnn\377nnn\377" + "lll\377jjj\377iii\377hhh\377dde\377aaa\377```\377\\]\\\377XXX\377RRR\377" + "KKL\377FFF\377CCC\377EEE\377\070\070\070\377\024\024\024\377\002\002\002\377\012\012\012" + "\377>>>\377yyyV\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000ooo\001\000\000\000\000ggg\233\061\061\061\377\005\005\005\376" + "\003\003\003\377\027\027\027\377\067\067\067\377VVV\377WWW\377YYY\377___\377ggg\377o" + "no\377ttt\377wvw\377xxw\377xxx\377xyy\377yyy\377xxx\377wwx\377vvv\377sss" + "\377jjj\377]]]\377AAA\377BBB\377[[[\377efe\377llk\377lll\377llk\377jjj\377" + "iii\377fff\377ccc\377aaa\377___\377\\\\\\\377WVV\377QQQ\377KKK\377FFF\377" + "CCC\377FFF\377\070\070\070\377\027\027\027\377\003\003\003\377\005\005\005\376\061\061\061\377" + "ggg\233\000\000\000\000ooo\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000bbb\277+++\377\004\004\004" + "\376\003\003\003\377\024\024\024\377\062\062\062\377RRR\377WWW\377VVV\377[[[\377aaa\377" + "hhh\377mmm\377qqq\377sss\377ttt\377ttt\377ttt\377ttt\377sst\377qqq\377kk" + "k\377aaa\377MLL\377NNN\377^^^\377fff\377iii\377iii\377hhh\377fff\377ccc\377" + "bbb\377```\377]\\\\\377YYY\377TTS\377NNN\377III\377EEE\377CCC\377FFF\377" + "\064\064\064\377\024\024\024\377\003\003\003\377\004\004\004\376+++\377bbb\277\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000bbb\315+++\377\005\005\005" + "\376\001\001\001\377\020\020\020\377+++\377KKK\377VVV\377TTT\377VVV\377[[[\377``a" + "\377fff\377jjj\377llm\377ooo\377ooo\377ooo\377ooo\377mmm\377iii\377bbb\377" + "VUU\377XWW\377^__\377ccd\377eee\377fff\377ddd\377aba\377`_`\377]]]\377YY" + "Y\377TTT\377OOO\377JJK\377GGG\377DDD\377DDD\377EEE\377---\377\020\020\020\377" + "\001\001\001\377\005\005\005\376+++\377bbb\315\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000bbb\277\061\061\061\377\012\012\012\377" + "\001\001\001\377\012\012\012\377!!!\377???\377RRR\377SSS\377SSS\377TTT\377XXX\377" + "\\\\\\\377```\377ccc\377fff\377hhh\377hhh\377hhh\377fff\377bcc\377]]]\377" + "___\377`__\377bbb\377aaa\377___\377]]]\377[[[\377WWW\377SSS\377OOO\377KK" + "K\377GHH\377EEE\377CCD\377FFF\377>>>\377\"\"\"\377\012\012\012\377\001\001\001\377" + "\012\012\012\377\061\061\061\377bbb\277\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000ggg\233>>>\377\021" + "\021\021\377\002\002\002\377\005\005\005\377\025\025\025\377...\377FFF\377QQQ\377QQQ\377P" + "PP\377RRR\377TTT\377WXW\377ZZZ\377\\\\\\\377^]]\377^^^\377\\\\\\\377\\\\" + "\\\377[[[\377ZZZ\377YYY\377YYY\377XXX\377WWW\377TTT\377QPP\377NNN\377JJJ" + "\377HGG\377EEE\377DCD\377FFF\377CCC\377///\377\025\025\025\377\005\005\005\377\002\002" + "\002\377\021\021\021\377>>>\377ggg\233\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "xxxVNNN\377\036\036\036\377\006\006\006\377\001\001\001\377\011\011\011\377\033\033\033\377\062" + "\062\062\377EEE\377OOO\377PPP\377NNN\377NNN\377OOO\377PPP\377QQQ\377RRR\377" + "RRR\377QRR\377QRQ\377QQQ\377PPP\377OOO\377NNN\377LLL\377JJJ\377HHH\377FF" + "F\377EEE\377EEE\377FFF\377CCC\377\063\063\063\377\034\034\034\377\011\011\011\377" + "\001\001\001\377\006\006\006\377\036\036\036\377NNN\377xxxV\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000ooo\001\000\000\000\000\341\341\341\013^^^\325\066\066\066\377\020\020\020\374" + "\002\002\002\377\003\003\003\377\012\012\012\377\030\030\030\377+++\377===\377III\377MMM\377" + "NNN\377LLL\377KKK\377KKK\377KKK\377KJJ\377JJJ\377JJJ\377III\377HHH\377GG" + "G\377GGF\377FFF\377GGG\377GGG\377EEE\377===\377,,,\377\031\031\031\377\012\012" + "\012\377\003\003\003\377\002\002\002\377\020\020\020\374\066\066\066\377^^^\325\341\341\341" + "\013\000\000\000\000ooo\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000uuubQQQ\377***\377\014\014\014\373\003\003\003\377\002\002\002\377\007\007\007\377\020" + "\020\020\377\036\036\036\377,,,\377\070\070\070\377BBB\377GGG\377III\377III\377J" + "JJ\377JJJ\377IIJ\377HHH\377HHH\377GGG\377EEE\377AAA\377\070\070\070\377---\377" + "\036\036\036\377\020\020\020\377\007\007\007\377\002\002\002\377\003\003\003\377\014\014\014\373***" + "\377QQQ\377uuub\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000ppp\003\000\000\000\000\377\377\377\002jjj\222LLL\377-" + "--\377\022\022\022\377\005\005\005\377\001\001\001\377\003\003\003\377\007\007\007\377\016\016\016\377" + "\025\025\025\377\035\035\035\377###\377)))\377,,,\377...\377...\377---\377)))\377" + "###\377\035\035\035\377\025\025\025\377\016\016\016\377\007\007\007\377\003\003\003\377\001\001\001" + "\377\005\005\005\377\022\022\022\377---\377LLL\377jjj\222\377\377\377\002\000\000\000\000pp" + "p\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000jjj\003\000\000\000\000\306\306\306\011jjjsVVV\365===\377" + "$$$\377\021\021\021\377\006\006\006\377\002\002\002\377\001\001\001\377\001\001\001\377\003\003\003\377\005" + "\005\005\377\005\005\005\377\006\006\006\377\006\006\006\377\005\005\005\377\005\005\005\377\003\003\003\377\001\001" + "\001\377\001\001\001\377\002\002\002\377\006\006\006\377\021\021\021\377$$$\377===\377VVV\365jj" + "js\306\306\306\011\000\000\000\000jjj\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000|||\001\000\000\000\000\000\000\000\000|||\062eee\215WWW\364BBB\377\062\062\062\377" + "$$$\377\031\031\031\377\022\022\022\377\016\016\016\377\012\012\012\377\011\011\011\377" + "\011\011\011\377\012\012\012\377\015\015\015\377\022\022\022\377\031\031\031\377$$$\377" + "\062\062\062\377BBB\377WWW\364eee\215|||\062\000\000\000\000\000\000\000\000|||\001\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\246\246\246\026rrrSeee\205\\\\\\\257" + "VVV\315QQQ\350OOO\370LLL\377LLL\377OOO\370QQQ\350VVV\315\\\\\\\257eee\205" + "rrrS\246\246\246\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000", +}; + diff --git a/engine/client/m_items.c b/engine/client/m_items.c index 8ab832ef1..9ee102e90 100644 --- a/engine/client/m_items.c +++ b/engine/client/m_items.c @@ -213,7 +213,7 @@ void Draw_BigFontString(int x, int y, const char *text) p = QBigFontWorks(); if (!p) { - Draw_FunString(x, y, text); + Draw_AltFunString(x, y, text); return; } @@ -1935,6 +1935,22 @@ qboolean MC_Main_Key (int key, menu_t *menu) //here purly to restart demos. return false; } +static int M_Main_AddExtraOptions(menu_t *mainm, int y) +{ + if (Cmd_AliasExist("mod_menu", RESTRICT_LOCAL)) + {MC_AddConsoleCommandQBigFont(mainm, 72, y, va("%-14s", Cvar_Get("mod_menu", "Mod Menu", 0, NULL)->string), "mod_menu\n"); y += 20;} + if (Cmd_Exists("xmpp")) + {MC_AddConsoleCommandQBigFont(mainm, 72, y, "Social ", "xmpp\n"); y += 20;} + if (Cmd_Exists("irc")) + {MC_AddConsoleCommandQBigFont(mainm, 72, y, "IRC ", "irc\n"); y += 20;} + if (Cmd_Exists("qi")) + {MC_AddConsoleCommandQBigFont(mainm, 72, y, "Quake Injector", "qi\n"); y += 20;} + if (Cmd_Exists("menu_download")) + {MC_AddConsoleCommandQBigFont(mainm, 72, y, "Updates ", "menu_download\n"); y += 20;} + + return y; +} + void M_Menu_Main_f (void) { extern cvar_t m_helpismedia; @@ -2114,16 +2130,7 @@ void M_Menu_Main_f (void) {MC_AddConsoleCommandQBigFont(mainm, 72, y, "Media ", "menu_media\n"); y += 20;} else {MC_AddConsoleCommandQBigFont(mainm, 72, y, "Help ", "help\n"); y += 20;} - if (Cmd_AliasExist("mod_menu", RESTRICT_LOCAL)) - {MC_AddConsoleCommandQBigFont(mainm, 72, y, va("%-14s", Cvar_Get("mod_menu", "Mod Menu", 0, NULL)->string), "mod_menu\n"); y += 20;} - if (Cmd_Exists("xmpp")) - {MC_AddConsoleCommandQBigFont(mainm, 72, y, "Social ", "xmpp\n"); y += 20;} - if (Cmd_Exists("irc")) - {MC_AddConsoleCommandQBigFont(mainm, 72, y, "IRC ", "irc\n"); y += 20;} - if (Cmd_Exists("qi")) - {MC_AddConsoleCommandQBigFont(mainm, 72, y, "Quake Injector", "qi\n"); y += 20;} - if (Cmd_Exists("menu_download")) - {MC_AddConsoleCommandQBigFont(mainm, 72, y, "Updates ", "menu_download\n"); y += 20;} + y = M_Main_AddExtraOptions(mainm, y); #ifdef FTE_TARGET_WEB MC_AddConsoleCommandQBigFont (mainm, 72, y, "Save Settings ", "menu_quit\n"); y += 20; #else @@ -2134,7 +2141,7 @@ void M_Menu_Main_f (void) } else { - int width; + int width, y; Key_Dest_Add(kdm_emenu); mainm = M_CreateMenu(0); @@ -2190,6 +2197,8 @@ void M_Menu_Main_f (void) b->common.width = width; b->common.height = 20; + M_Main_AddExtraOptions(mainm, 112+20); + mainm->cursoritem = (menuoption_t *)MC_AddCursor(mainm, &resel, 54, 32); } diff --git a/engine/client/pr_csqc.c b/engine/client/pr_csqc.c index 2349a9826..5ef6d0f83 100644 --- a/engine/client/pr_csqc.c +++ b/engine/client/pr_csqc.c @@ -7814,6 +7814,7 @@ qboolean CSQC_DrawView(void) else *csqcg.frametime = host_frametime; } + if (csqcg.clframetime) *csqcg.clframetime = host_frametime; diff --git a/engine/common/bothdefs.h b/engine/common/bothdefs.h index 6b14929b1..14c366c6e 100644 --- a/engine/common/bothdefs.h +++ b/engine/common/bothdefs.h @@ -98,7 +98,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifdef CONFIG_FILE_NAME #undef MULTITHREAD - #undef BOTLIB_STATIC #define HEADLESSQUAKE //usable renderers are normally specified via the makefile, but HEADLESS is considered a feature rather than an actual renderer, so usually gets forgotten about... //yup, C89 allows this (doesn't like C's token concat though). diff --git a/engine/common/common.c b/engine/common/common.c index 998db3887..5c101bdf7 100644 --- a/engine/common/common.c +++ b/engine/common/common.c @@ -5003,9 +5003,17 @@ void COM_Version_f (void) Con_Printf("Games:"); #if defined(Q3SERVER) && defined(Q3CLIENT) - Con_Printf(" Quake3"); + #ifdef BOTLIB_STATIC + Con_Printf(" Quake3"); + #else + Con_Printf(" Quake3^h(no-botlib)^h"); + #endif #elif defined(Q3SERVER) - Con_Printf(" Quake3(server)"); + #ifdef BOTLIB_STATIC + Con_Printf(" Quake3(server)"); + #else + Con_Printf(" Quake3(server,no-botlib)"); + #endif #elif defined(Q3CLIENT) Con_Printf(" Quake3(client)"); #elif defined(Q3BSPS) diff --git a/engine/common/common.h b/engine/common/common.h index 3e405abf2..4081f664c 100644 --- a/engine/common/common.h +++ b/engine/common/common.h @@ -746,7 +746,7 @@ typedef size_t hashfunc_t(unsigned char *digest, size_t maxdigestsize, size_t nu hashfunc_t SHA1_m; //int SHA1_m(char *digest, size_t maxdigestsize, size_t numstrings, const char **strings, size_t *stringlens); //#define SHA1(digest,maxdigestsize,string,stringlen) SHA1_m(digest, maxdigestsize, 1, &string, &stringlen) -int SHA1(unsigned char *digest, int maxdigestsize, const unsigned char *string, size_t stringlen); +size_t SHA1(unsigned char *digest, size_t maxdigestsize, const unsigned char *string, size_t stringlen); size_t HMAC(hashfunc_t *hashfunc, unsigned char *digest, size_t maxdigestsize, const unsigned char *data, size_t datalen, const unsigned char *key, size_t keylen); int version_number(void); diff --git a/engine/common/config_fteqw.h b/engine/common/config_fteqw.h index 1af02ef6b..253a63a4e 100644 --- a/engine/common/config_fteqw.h +++ b/engine/common/config_fteqw.h @@ -104,7 +104,7 @@ #define Q2CLIENT //q2 client. file formats enabled separately. #define Q3CLIENT //q3 client stuff. #define Q3SERVER //q3 server stuff. -#define BOTLIB_STATIC //q3 botlib +#define AVAIL_BOTLIB //q3 botlib #define HEXEN2 //runs hexen2 gamecode, supports hexen2 file formats. #define HUFFNETWORK //crappy network compression. probably needs reseeding. #define NETPREPARSE //allows for running both nq+qw on the same server (if not, protocol used must match gamecode). @@ -172,7 +172,7 @@ //-DNO_OPUS //-DNO_SPEEX //disable static speex -#ifndef BOTLIB_STATIC +#ifndef AVAIL_BOTLIB -DNO_BOTLIB //disable static botlib #endif //-DNO_VORBISFILE //disable static vorbisfile diff --git a/engine/common/config_minimal.h b/engine/common/config_minimal.h index 66a85eea6..9b6615ab8 100644 --- a/engine/common/config_minimal.h +++ b/engine/common/config_minimal.h @@ -106,7 +106,7 @@ //#define Q2CLIENT //q2 client. file formats enabled separately. //#define Q3CLIENT //q3 client stuff. //#define Q3SERVER //q3 server stuff. -//#define BOTLIB_STATIC //q3 botlib +//#define AVAIL_BOTLIB //q3 botlib //#define HEXEN2 //runs hexen2 gamecode, supports hexen2 file formats. //#define HUFFNETWORK //crappy network compression. probably needs reseeding. #define NETPREPARSE //allows for running both nq+qw on the same server (if not, protocol used must match gamecode). @@ -173,7 +173,7 @@ -DNO_OPUS -DNO_SPEEX //disable static speex -#ifndef BOTLIB_STATIC +#ifndef AVAIL_BOTLIB -DNO_BOTLIB //disable static botlib #endif -DNO_VORBISFILE //disable static vorbisfile diff --git a/engine/common/config_nocompat.h b/engine/common/config_nocompat.h index a47581e20..65e39f4f6 100644 --- a/engine/common/config_nocompat.h +++ b/engine/common/config_nocompat.h @@ -103,7 +103,7 @@ //#define Q2CLIENT //q2 client. file formats enabled separately. //#define Q3CLIENT //q3 client stuff. //#define Q3SERVER //q3 server stuff. -//#define BOTLIB_STATIC //q3 botlib +//#define AVAIL_BOTLIB //q3 botlib //#define HEXEN2 //runs hexen2 gamecode, supports hexen2 file formats. //#define HUFFNETWORK //crappy network compression. probably needs reseeding. //#define NETPREPARSE //allows for running both nq+qw on the same server (if not, protocol used must match gamecode). @@ -171,7 +171,7 @@ //-DNO_OPUS //-DNO_SPEEX //disable static speex -#ifndef BOTLIB_STATIC +#ifndef AVAIL_BOTLIB -DNO_BOTLIB //disable static botlib #endif //-DNO_VORBISFILE //disable static vorbisfile diff --git a/engine/common/config_wastes.h b/engine/common/config_wastes.h index 17d0c0a53..5290b6d43 100644 --- a/engine/common/config_wastes.h +++ b/engine/common/config_wastes.h @@ -91,7 +91,7 @@ #undef AVAIL_FREETYPE //for truetype font rendering #undef AVAIL_WASAPI //windows advanced sound api #undef AVAIL_DSOUND -#undef BOTLIB_STATIC //q3 botlib +#undef AVAIL_BOTLIB //q3 botlib #undef AVAIL_XZDEC //.xz decompression #undef AVAIL_GZDEC //.gz decompression #undef AVAIL_DZIP //.dzip special-case archive support @@ -161,7 +161,7 @@ -DNO_SPEEX //disable static speex -#ifndef BOTLIB_STATIC +#ifndef AVAIL_BOTLIB -DNO_BOTLIB //disable static botlib #endif -DNO_VORBISFILE //disable static vorbisfile diff --git a/engine/common/sys_linux_threads.c b/engine/common/sys_linux_threads.c index a686106ed..0300dd96c 100644 --- a/engine/common/sys_linux_threads.c +++ b/engine/common/sys_linux_threads.c @@ -20,6 +20,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. //well, linux or cygwin (windows with posix emulation layer), anyway... +#define _GNU_SOURCE #include "quakedef.h" #ifdef MULTITHREAD @@ -104,6 +105,10 @@ void *Sys_CreateThread(char *name, int (*func)(void *), void *args, int priority } pthread_attr_destroy(&attr); +#ifdef __USE_GNU + pthread_setname_np(*thread, name); +#endif + return (void *)thread; } #else @@ -128,6 +133,10 @@ void *Sys_CreateThread(char *name, int (*func)(void *), void *args, int priority } pthread_attr_destroy(&attr); +#ifdef __USE_GNU + pthread_setname_np(*thread, name); +#endif + return (void *)thread; } #endif diff --git a/engine/gl/gl_vidlinuxglx.c b/engine/gl/gl_vidlinuxglx.c index 96129a645..422a6863f 100644 --- a/engine/gl/gl_vidlinuxglx.c +++ b/engine/gl/gl_vidlinuxglx.c @@ -2763,7 +2763,8 @@ void GLVID_SwapBuffers (void) } } -#include "bymorphed.h" +#include "fte_eukara64.h" +//#include "bymorphed.h" void X_StoreIcon(Window wnd) { int i; diff --git a/engine/gl/gl_vidwayland.c b/engine/gl/gl_vidwayland.c index a8bd8e1f0..3881b0db7 100644 --- a/engine/gl/gl_vidwayland.c +++ b/engine/gl/gl_vidwayland.c @@ -13,13 +13,13 @@ #include "bothdefs.h" #ifdef WAYLANDQUAKE +#include "gl_videgl.h" //define this BEFORE the wayland stuff. This means the EGL types will have their (x11) defaults instead of getting mixed up with wayland. we expect to be able to use the void* verions instead for wayland anyway. #include #include #include //this is shite. #include "quakedef.h" #if defined(GLQUAKE) && defined(USE_EGL) #include "gl_draw.h" -#include "gl_videgl.h" #endif #if defined(VKQUAKE) #include "vk/vkrenderer.h" diff --git a/engine/qclib/hash.h b/engine/qclib/hash.h index a7c9c8552..610455220 100644 --- a/engine/qclib/hash.h +++ b/engine/qclib/hash.h @@ -7,7 +7,7 @@ #define Hash_BytesForBuckets(b) (sizeof(bucket_t*)*(b)) -#define STRCMP(s1,s2) (((*s1)!=(*s2)) || strcmp(s1+1,s2+1)) //saves about 2-6 out of 120 - expansion of idea from fastqcc +#define STRCMP(s1,s2) (((*s1)!=(*s2)) || (strcmp(s1,s2))) //saves about 2-6 out of 120 - expansion of idea from fastqcc typedef struct bucket_s { void *data; union { diff --git a/engine/qclib/qcc.h b/engine/qclib/qcc.h index 8cdee095e..7e375f418 100644 --- a/engine/qclib/qcc.h +++ b/engine/qclib/qcc.h @@ -1088,8 +1088,8 @@ typedef struct qcc_includechunk_s { } qcc_includechunk_t; extern qcc_includechunk_t *currentchunk; -int QCC_CopyString (char *str); -int QCC_CopyStringLength (char *str, size_t length); +int QCC_CopyString (const char *str); +int QCC_CopyStringLength (const char *str, size_t length); @@ -1173,4 +1173,4 @@ vfile_t *QCC_AddVFile(const char *name, void *data, size_t size); void QCC_CatVFile(vfile_t *, const char *fmt, ...); void QCC_InsertVFile(vfile_t *, size_t pos, const char *fmt, ...); -void *QCC_ReadFile(const char *fname, unsigned char *(*buf_get)(void *ctx, size_t len), void *buf_ctx, size_t *out_size); +void *QCC_ReadFile(const char *fname, unsigned char *(*buf_get)(void *ctx, size_t len), void *buf_ctx, size_t *out_size, pbool issourcefile); diff --git a/engine/qclib/qcc_pr_comp.c b/engine/qclib/qcc_pr_comp.c index 9fc074fc2..0f419573d 100644 --- a/engine/qclib/qcc_pr_comp.c +++ b/engine/qclib/qcc_pr_comp.c @@ -4276,32 +4276,20 @@ QCC_sref_t QCC_PR_ParseImmediate (void) case ev_string: { - int t,l; + int t=0,l; char tmp[8192]; - t=l = pr_immediate_strlen; - if (l+1 > sizeof(tmp)) - QCC_PR_ParseError (ERR_NAMETOOLONG, "string immediate is too long"); - memcpy(tmp, pr_immediate_string, l); - tmp[l] = 0; - - //extra logic to amalgamate any "additional " "string" " immediates", like in C - for(;;) + do { + l = pr_immediate_strlen; + if (t+l+1 > sizeof(tmp)) + QCC_PR_ParseError (ERR_NAMETOOLONG, "string immediate is too long"); + memcpy(tmp+t, pr_immediate_string, l); + t+=l; + QCC_PR_Lex (); - if (pr_token_type == tt_immediate && pr_immediate_type == type_string) - { - l = pr_immediate_strlen; - if (t+l+1 > sizeof(tmp)) - QCC_PR_ParseError (ERR_NAMETOOLONG, "string immediate is too long"); - memcpy(tmp+t, pr_immediate_string, l); - tmp[t+l] = 0; - t+=l; - } - else - break; - } - - cn = QCC_MakeStringConstLength(tmp, t+1); + } while(pr_token_type == tt_immediate && pr_immediate_type == type_string); + tmp[t++] = 0; + cn = QCC_MakeStringConstLength(tmp, t); } return cn; default: @@ -6415,7 +6403,7 @@ QCC_sref_t QCC_MakeFloatConst(float value) extern hashtable_t stringconstdefstable, stringconstdefstable_trans; int dotranslate_count; -static QCC_sref_t QCC_MakeStringConstInternal(char *value, size_t length, pbool translate) +static QCC_sref_t QCC_MakeStringConstInternal(const char *value, size_t length, pbool translate) { QCC_def_t *cn; int string; @@ -10618,8 +10606,13 @@ void QCC_PR_ParseStatement (void) if (patch2) patch2->a.ofs = &statements[numstatements] - patch2; - if (QCC_PR_StatementBlocksMatch(patch1+1, patch2-patch1, patch2+1, &statements[numstatements] - patch2)) - QCC_PR_ParseWarning(0, "Two identical blocks each side of an else"); +/*FIXME: this doesn't work right + if (patch1 && patch2) + { + if (QCC_PR_StatementBlocksMatch(patch1+1, patch2-(patch1+1), patch2+1, &statements[numstatements] - (patch2+1))) + QCC_PR_ParseWarning(0, "Two identical blocks each side of an else"); + } +*/ } } else if (patch1) diff --git a/engine/qclib/qccmain.c b/engine/qclib/qccmain.c index a49e11d40..d5fbd3f6c 100644 --- a/engine/qclib/qccmain.c +++ b/engine/qclib/qccmain.c @@ -476,7 +476,7 @@ typedef struct stringtab_s } stringtab_t; stringtab_t *stringtablist[256]; // CopyString returns an offset from the string heap -int QCC_CopyString (char *str) +int QCC_CopyString (const char *str) { int old; size_t len; @@ -528,7 +528,7 @@ int QCC_CopyString (char *str) return old; } -int QCC_CopyStringLength (char *str, size_t length) +int QCC_CopyStringLength (const char *str, size_t length) { int old; @@ -541,11 +541,12 @@ int QCC_CopyStringLength (char *str, size_t length) if ( (strofs + length) > MAX_STRINGS) QCC_Error(ERR_INTERNAL, "QCC_CopyString: stringtable size limit exceeded\n"); memcpy (strings+strofs, str, length); - strofs += length; + strings[strofs+length] = 0; + strofs += length+1; return old; } -int QCC_CopyDupBackString (char *str) +int QCC_CopyDupBackString (const char *str) { size_t length; int old; diff --git a/engine/qclib/qcctui.c b/engine/qclib/qcctui.c index dc20fdd34..9bd18c7a7 100644 --- a/engine/qclib/qcctui.c +++ b/engine/qclib/qcctui.c @@ -8,7 +8,7 @@ LoadFile ============== */ -void *QCC_ReadFile(const char *fname, unsigned char *(*buf_get)(void *ctx, size_t len), void *buf_ctx, size_t *out_size) +void *QCC_ReadFile(const char *fname, unsigned char *(*buf_get)(void *ctx, size_t len), void *buf_ctx, size_t *out_size, pbool issourcefile) //unsigned char *PDECL QCC_ReadFile (const char *fname, void *buffer, int len, size_t *sz) { size_t len; @@ -126,16 +126,21 @@ int main (int argc, char **argv) funcs.funcs.parms->WriteFile = QCC_WriteFile; funcs.funcs.parms->Printf = logprintf; funcs.funcs.parms->Sys_Error = Sys_Error; - logfile = fopen("fteqcc.log", "at"); - fputs("Args:", logfile); - for (i = 0; i < argc; i++) +#ifdef _WIN32 + logfile = fopen("fteqcc.log", "wt"); +#endif + if (logfile) { - if (strchr(argv[i], ' ')) - fprintf(logfile, " \"%s\"", argv[i]); - else - fprintf(logfile, " %s", argv[i]); + fputs("Args:", logfile); + for (i = 0; i < argc; i++) + { + if (strchr(argv[i], ' ')) + fprintf(logfile, " \"%s\"", argv[i]); + else + fprintf(logfile, " %s", argv[i]); + } + fprintf(logfile, "\n"); } - fprintf(logfile, "\n"); sucess = CompileParams(&funcs, NULL, argc, argv); qccClearHunk(); if (logfile) diff --git a/engine/server/sv_main.c b/engine/server/sv_main.c index 9db45c37d..c06526984 100644 --- a/engine/server/sv_main.c +++ b/engine/server/sv_main.c @@ -357,7 +357,7 @@ void VARGS SV_Error (char *error, ...) } #ifdef SERVERONLY -void VARGS Host_Error (char *error, ...) +void VARGS Host_Error (const char *error, ...) { va_list argptr; char string[1024]; @@ -371,7 +371,7 @@ void VARGS Host_Error (char *error, ...) #endif #ifdef SERVERONLY -void VARGS Host_EndGame (char *error, ...) +void VARGS Host_EndGame (const char *error, ...) { va_list argptr; char string[1024];