From e315bb65dcc6ec117aa746e854c2f8e2fe863c83 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 13 Oct 2006 22:03:29 +0000 Subject: [PATCH] 352.7 svn: r4592 --- src/foreign/README | 5 + src/foreign/gcc/libffi/configure | 3 +- src/mred/mred.cxx | 13 +- src/mred/mredmac.cxx | 272 +- src/mzscheme/configure.ac | 1 + src/mzscheme/gc/include/private/gcconfig.h | 19 +- src/mzscheme/gc2/compact.c | 5 + src/mzscheme/include/mzscheme.exp | 2 + src/mzscheme/include/mzscheme3m.exp | 2 + src/mzscheme/include/mzwin.def | 2 + src/mzscheme/include/scheme.h | 42 +- src/mzscheme/sconfig.h | 45 +- src/mzscheme/sgc/Makefile.in | 26 +- src/mzscheme/src/Makefile.in | 2 +- src/mzscheme/src/cstartup.inc | 6122 ++++++++++---------- src/mzscheme/src/dynext.c | 2 - src/mzscheme/src/env.c | 3 +- src/mzscheme/src/error.c | 2 +- src/mzscheme/src/eval.c | 437 +- src/mzscheme/src/file.c | 21 +- src/mzscheme/src/fun.c | 3358 ++++++++--- src/mzscheme/src/hash.c | 3 + src/mzscheme/src/image.c | 741 +-- src/mzscheme/src/jit.c | 30 +- src/mzscheme/src/lightning/ppc/asm.h | 16 +- src/mzscheme/src/mzmark.c | 165 +- src/mzscheme/src/mzmarksrc.c | 72 +- src/mzscheme/src/print.c | 12 +- src/mzscheme/src/salloc.c | 15 - src/mzscheme/src/schemef.h | 8 +- src/mzscheme/src/schemex.h | 8 +- src/mzscheme/src/schemex.inc | 2 + src/mzscheme/src/schemexm.h | 2 + src/mzscheme/src/schminc.h | 2 +- src/mzscheme/src/schnapp.inc | 26 +- src/mzscheme/src/schpriv.h | 131 +- src/mzscheme/src/schvers.h | 4 +- src/mzscheme/src/setjmpup.c | 7 - src/mzscheme/src/startup.inc | 128 +- src/mzscheme/src/startup.ss | 193 +- src/mzscheme/src/stypes.h | 128 +- src/mzscheme/src/thread.c | 190 +- src/mzscheme/src/type.c | 26 +- src/wxmac/include/base/common.h | 1 + src/wxmac/src/mac/wx_app.cc | 3 + src/wxmac/src/mac/wx_item.cc | 7 +- 46 files changed, 7053 insertions(+), 5251 deletions(-) diff --git a/src/foreign/README b/src/foreign/README index 731d29af27..da282e850e 100644 --- a/src/foreign/README +++ b/src/foreign/README @@ -10,3 +10,8 @@ ways: * Added line to "configure" for i*86-*-darwin* * Added line to "configure" for i*86-*-openbsd* + + * Added line to "configure" for amd64-*-freebsd* + + * Added case in "configure" sparc64-*-freebsd* to existing sparc64 line + diff --git a/src/foreign/gcc/libffi/configure b/src/foreign/gcc/libffi/configure index 38a512be0c..b3298b818f 100755 --- a/src/foreign/gcc/libffi/configure +++ b/src/foreign/gcc/libffi/configure @@ -5390,12 +5390,13 @@ i*86-*-darwin*) TARGET=X86; TARGETDIR=x86;; i*86-*-win32*) TARGET=X86_WIN32; TARGETDIR=x86;; i*86-*-cygwin*) TARGET=X86_WIN32; TARGETDIR=x86;; i*86-*-mingw*) TARGET=X86_WIN32; TARGETDIR=x86;; +amd64-*-freebsd* ) TARGET=X86_64; TARGETDIR=x86;; frv-*-*) TARGET=FRV; TARGETDIR=frv;; sparc-sun-4*) TARGET=SPARC; TARGETDIR=sparc;; sparc*-sun-*) TARGET=SPARC; TARGETDIR=sparc;; sparc-*-linux* | sparc-*-netbsdelf* | sparc-*-knetbsd*-gnu) TARGET=SPARC; TARGETDIR=sparc;; sparc*-*-rtems*) TARGET=SPARC; TARGETDIR=sparc;; -sparc64-*-linux* | sparc64-*-netbsd* | sparc64-*-knetbsd*-gnu) TARGET=SPARC; TARGETDIR=sparc;; +sparc64-*-linux* | sparc64-*-netbsd* | sparc64-*-knetbsd*-gnu | sparc64-*-freebsd*) TARGET=SPARC; TARGETDIR=sparc;; alpha*-*-linux* | alpha*-*-osf* | alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu | alpha*-*-netbsd* | alpha*-*-knetbsd*-gnu) TARGET=ALPHA; TARGETDIR=alpha;; ia64*-*-*) TARGET=IA64; TARGETDIR=ia64;; m32r*-*-linux* ) TARGET=M32R; TARGETDIR=m32r;; diff --git a/src/mred/mred.cxx b/src/mred/mred.cxx index db476a167b..9e6669d092 100644 --- a/src/mred/mred.cxx +++ b/src/mred/mred.cxx @@ -1281,7 +1281,7 @@ static Scheme_Object *MrEdDoNextEvent(MrEdContext *c, wxDispatch_Check_Fun alt, if (alt_wait) { Nested_Wait *nw; - Scheme_Object *a[2], *v; + Scheme_Object *a[2], *v = NULL; nw = (Nested_Wait *)scheme_malloc_tagged(sizeof(Nested_Wait)); nw->so.type = mred_nested_wait_type; @@ -3203,6 +3203,17 @@ wxFrame *MrEdApp::OnInit(void) initialized = 0; +#ifdef wx_mac + { + TSMDocumentID doc; + OSType itfs[1]; + itfs[0] = kUnicodeDocumentInterfaceType; + NewTSMDocument(1, itfs, &doc, 0); + UseInputWindow(NULL, TRUE); + ActivateTSMDocument(doc); + } +#endif + wxREGGLOB(mred_frames); wxREGGLOB(mred_timers); diff --git a/src/mred/mredmac.cxx b/src/mred/mredmac.cxx index c7b5b0236d..48c2db8423 100644 --- a/src/mred/mredmac.cxx +++ b/src/mred/mredmac.cxx @@ -269,118 +269,187 @@ void DequeueMrEdEvents(int type, long message) } } -static int WeAreFront(); /* forward decl */ +static RgnHandle mouseRgn; static int waiting_for_next_event; +static int wne_handlersInstalled; +static int pending_self_ae; -/* WNE: a replacement for WaitNextEvent so we can get things like - wheel events. */ +static void EnsureWNEReturn() +{ + /* Generate an event that WaitNextEvent will return, but + that we can recognize and ignore. An AppleEvent is a + heavyweight but reliable way to do that. */ + if (!pending_self_ae) { + ProcessSerialNumber psn; + AEAddressDesc target; + AppleEvent ae; + + pending_self_ae = 1; + + GetCurrentProcess(&psn); + AECreateDesc(typeProcessSerialNumber, &psn, sizeof(psn), &target); + AECreateAppleEvent('MrEd', 'Smug', &target, kAutoGenerateReturnID, kAnyTransactionID, &ae); + AESend(&ae, NULL, kAENoReply, kAENormalPriority, kNoTimeOut, NULL, NULL); + } +} + +void wxSmuggleOutEvent(EventRef ref) +{ + EventRecord e; + int ok = 0; + + if ((GetEventClass(ref) == kEventClassMouse) + && (GetEventKind(ref) == 11 /* kEventMouseScroll */)) { + GetEventParameter(ref, kEventParamEventRef, typeEventRef, + NULL, sizeof(ref), NULL, &ref); + } + + if ((GetEventClass(ref) == kEventClassMouse) + && (GetEventKind(ref) == kEventMouseWheelMoved)) { + UInt32 modifiers; + EventMouseWheelAxis axis; + SInt32 delta; + Point pos; + + GetEventParameter(ref, kEventParamKeyModifiers, typeUInt32, + NULL, sizeof(modifiers), NULL, &modifiers); + GetEventParameter(ref, kEventParamMouseWheelAxis, + typeMouseWheelAxis, NULL, sizeof(axis), NULL, &axis); + GetEventParameter(ref, kEventParamMouseWheelDelta, + typeLongInteger, NULL, sizeof(delta), NULL, &delta); + GetEventParameter(ref, kEventParamMouseLocation, + typeQDPoint, NULL, sizeof(Point), NULL, &pos); + + if (axis == kEventMouseWheelAxisY) { + e.what = wheelEvt; + e.message = (delta > 0); + e.modifiers = modifiers; + e.where.h = pos.h; + e.where.v = pos.v; + ok = TRUE; + } + } else if ((GetEventClass(ref) == kEventClassTextInput) + && (GetEventKind(ref) == kEventTextInputUnicodeForKeyEvent)) { + UniChar *text; + UInt32 actualSize; + + GetEventParameter(ref, kEventParamTextInputSendText, + typeUnicodeText, NULL, 0, &actualSize, NULL); + if (actualSize) { + text = (UniChar*)scheme_malloc_atomic(actualSize); + GetEventParameter(ref, kEventParamTextInputSendText, + typeUnicodeText, NULL, actualSize, NULL, text); + + e.what = unicodeEvt; + e.message = text[0]; + e.modifiers = 0; + e.where.h = 0; + e.where.v = 0; + ok = TRUE; + } + } else { + ok = ConvertEventRefToEventRecord(ref, &e); + } + + if (ok) { + QueueTransferredEvent(&e); + EnsureWNEReturn(); + } +} + +static OSStatus unhide_cursor_handler(EventHandlerCallRef inHandlerCallRef, + EventRef inEvent, + void *inUserData) +{ + wxUnhideCursor(); + return eventNotHandledErr; +} + +static OSStatus smuggle_handler(EventHandlerCallRef inHandlerCallRef, + EventRef inEvent, + void *inUserData) +{ + wxSmuggleOutEvent(inEvent); + return noErr; +} + +static pascal OSErr HandleSmug(const AppleEvent *evt, AppleEvent *rae, long k) +{ + pending_self_ae = 0; + return 0; +} + +/* WNE: a small wrapper for WaitNextEvent, mostly to manage + wake-up activities. + It's tempting to try to use ReceiveNextEvent() to filter + the raw events. Don't do that, because WaitNextEvent() is + magic. In particular, WaitNextEvent() properly handles + Cmd-~, Cmd-Q, dead keys like option-e on a U.S. keyboard, + clicking that brings the application to the foreground, + and the character palette. (We used ReceiveNextEvent() + until version 352.7, and finally gave up when trying + to get the character palette to work.) */ int WNE(EventRecord *e, double sleep_secs) { -#if 0 + int r; + wxResetCanvasBackgrounds(); - return WaitNextEvent(everyEvent, e, sleep_secs * 60, NULL); -#else - EventRef ref; - wxResetCanvasBackgrounds(); + if (!wne_handlersInstalled) { + EventTypeSpec evts[4]; + wne_handlersInstalled = TRUE; + + evts[0].eventClass = kEventClassMouse; + evts[0].eventKind = kEventMouseDown; + evts[1].eventClass = kEventClassMouse; + evts[1].eventKind = kEventMouseMoved; + evts[2].eventClass = kEventClassMouse; + evts[2].eventKind = kEventMouseUp; + evts[3].eventClass = kEventClassMouse; + evts[3].eventKind = kEventMouseDragged; + + ::InstallEventHandler(GetEventDispatcherTarget(), + unhide_cursor_handler, + 4, + evts, + NULL, + NULL); + + evts[0].eventClass = kEventClassMouse; + evts[0].eventKind = 11 /* kEventMouseScroll */; + evts[1].eventClass = kEventClassMouse; + evts[1].eventKind = kEventMouseWheelMoved; + evts[2].eventClass = kEventClassTextInput; + evts[2].eventKind = kEventTextInputUnicodeForKeyEvent; + + ::InstallEventHandler(GetEventDispatcherTarget(), + smuggle_handler, + 2, + evts, + NULL, + NULL); + + AEInstallEventHandler('MrEd', 'Smug', HandleSmug, 0, 0); + + mouseRgn = NewRgn(); + SetRectRgn(mouseRgn, 0, 0, 1, 1); + } waiting_for_next_event = 1; - if (noErr == ReceiveNextEvent(0, NULL, sleep_secs, TRUE, &ref)) { - Boolean ok; - - waiting_for_next_event = 0; - - if (GetEventClass(ref) == kEventClassMouse) - wxUnhideCursor(); - - ok = ConvertEventRefToEventRecord(ref, e); - - if (!ok) { - EventRef compat = NULL; - - if ((GetEventClass(ref) == kEventClassMouse) - && (GetEventKind(ref) == 11 /* kEventMouseScroll */)) { - GetEventParameter(ref, kEventParamEventRef, typeEventRef, - NULL, sizeof(compat), NULL, &compat); - } - if (!compat) - compat = ref; - - if ((GetEventClass(compat) == kEventClassMouse) - && (GetEventKind(compat) == kEventMouseWheelMoved)) { - UInt32 modifiers; - EventMouseWheelAxis axis; - SInt32 delta; - Point pos; - - GetEventParameter(compat, kEventParamKeyModifiers, typeUInt32, - NULL, sizeof(modifiers), NULL, &modifiers); - GetEventParameter(compat, kEventParamMouseWheelAxis, - typeMouseWheelAxis, NULL, sizeof(axis), NULL, &axis); - GetEventParameter(compat, kEventParamMouseWheelDelta, - typeLongInteger, NULL, sizeof(delta), NULL, &delta); - GetEventParameter(compat, kEventParamMouseLocation, - typeQDPoint, NULL, sizeof(Point), NULL, &pos); - - if (axis == kEventMouseWheelAxisY) { - e->what = wheelEvt; - e->message = (delta > 0); - e->modifiers = modifiers; - e->where.h = pos.h; - e->where.v = pos.v; - ok = TRUE; - } - } else { - SendEventToEventTarget(ref, GetEventDispatcherTarget()); - } - } - - if (ok && (e->what == mouseDown)) { - /* For bring-to-front: */ - if (!WeAreFront()) { - SendEventToEventTarget(ref, GetEventDispatcherTarget()); - /* Drop this event, because the target will generate a new one if it's useful */ - ok = 0; - } - } - - if (ok && (e->what == keyDown)) { - /* Let the normal system handle Cmd-Q, Cmd-~ to rotate windows, - accent handling (so option-e e e doesn't produce an accent on - the 2nd e), etc. */ - OSErr oe; - wx_ignore_key = FALSE; - oe = SendEventToEventTarget(ref, GetEventDispatcherTarget()); - if ((oe != eventNotHandledErr) && !wx_ignore_key) { - /* The event was handled, so we don't need to handle it again */ - ok = 0; - } - } - - ReleaseEvent(ref); - - return ok; - } + r = WaitNextEvent(everyEvent, e, sleep_secs * 60, mouseRgn); waiting_for_next_event = 0; - return FALSE; -#endif + return r; } void WakeUpMrEd() { /* Make sure we wake up a sleep, if this is a callback through a window painter. */ - static EventRef wakeup_evt; - if (waiting_for_next_event) { - if (!wakeup_evt) - CreateEvent(NULL, 'MrEd', 'wkup', 0, 0, &wakeup_evt); - PostEventToQueue(GetMainEventQueue(), - wakeup_evt, - kEventPriorityStandard); + EnsureWNEReturn(); waiting_for_next_event = 0; } } @@ -473,23 +542,6 @@ static int WindowStillHere(WindowPtr win) return IsValidWindowPtr(win); } -static int WeAreFront() -{ - static int inited; - static ProcessSerialNumber us; - ProcessSerialNumber front; - Boolean r; - - if (!inited) { - GetCurrentProcess(&us); - inited = 1; - } - GetFrontProcess(&front); - SameProcess(&us, &front, &r); - - return r; -} - static int GetMods(void) { KeyMap km; diff --git a/src/mzscheme/configure.ac b/src/mzscheme/configure.ac index 4bd4e3bb54..adcd0c3842 100644 --- a/src/mzscheme/configure.ac +++ b/src/mzscheme/configure.ac @@ -479,6 +479,7 @@ case $OS in ;; FreeBSD) LIBS="$LIBS -rdynamic" + DYN_CFLAGS="-fPIC" ;; OpenBSD) LIBS="$LIBS -rdynamic" diff --git a/src/mzscheme/gc/include/private/gcconfig.h b/src/mzscheme/gc/include/private/gcconfig.h index ccba470ece..74cf149d4a 100644 --- a/src/mzscheme/gc/include/private/gcconfig.h +++ b/src/mzscheme/gc/include/private/gcconfig.h @@ -335,10 +335,15 @@ # define X86_64 # define mach_type_known # endif +/* PLTSCHEME: added FREEBSD + __amd64__ */ +# if defined(FREEBSD) && defined(__amd64__) +# define X86_64 +# define mach_type_known +# endif # if defined(FREEBSD) && defined(__sparc__) # define SPARC # define mach_type_known -#endif +# endif # if defined(bsdi) && (defined(i386) || defined(__i386__)) # define I386 # define BSDI @@ -1993,6 +1998,18 @@ # define PREFETCH_FOR_WRITE(x) __builtin_prefetch((x), 1) # endif # endif +/* PLTSCHEME: added FREEBSD: */ +# ifdef FREEBSD +# define OS_TYPE "FREEBSD" +# define SIG_SUSPEND SIGUSR1 +# define SIG_THR_RESTART SIGUSR2 +# ifdef __ELF__ +# define DYNAMIC_LOADING +# endif +# define HEURISTIC2 + extern char etext[]; +# define SEARCH_FOR_DATA_START +# endif # ifdef NETBSD # define OS_TYPE "NETBSD" # ifdef __ELF__ diff --git a/src/mzscheme/gc2/compact.c b/src/mzscheme/gc2/compact.c index a1ba5ef171..a1a4c23d1d 100644 --- a/src/mzscheme/gc2/compact.c +++ b/src/mzscheme/gc2/compact.c @@ -3809,6 +3809,11 @@ void *GC_malloc_one_small_tagged(size_t size_in_bytes) return GC_malloc_one_tagged(size_in_bytes); } +void *GC_malloc_one_small_dirty_tagged(size_t size_in_bytes) +{ + return GC_malloc_one_tagged(size_in_bytes); +} + void *GC_malloc_pair(void *a, void *b) { void *p; diff --git a/src/mzscheme/include/mzscheme.exp b/src/mzscheme/include/mzscheme.exp index f942da702c..dd5a6d8127 100644 --- a/src/mzscheme/include/mzscheme.exp +++ b/src/mzscheme/include/mzscheme.exp @@ -138,6 +138,7 @@ scheme_temp_dec_mark_depth scheme_temp_inc_mark_depth scheme_current_continuation_marks scheme_extract_one_cc_mark +scheme_extract_one_cc_mark_to_tag scheme_do_eval scheme_eval_compiled_stx_string scheme_load_compiled_stx_string @@ -396,6 +397,7 @@ scheme_fdisset scheme_add_fd_handle scheme_add_fd_eventmask scheme_security_check_file +scheme_security_check_file_link scheme_security_check_network scheme_get_host_address scheme_free_host_address diff --git a/src/mzscheme/include/mzscheme3m.exp b/src/mzscheme/include/mzscheme3m.exp index 26ba68db5b..0141dfe084 100644 --- a/src/mzscheme/include/mzscheme3m.exp +++ b/src/mzscheme/include/mzscheme3m.exp @@ -138,6 +138,7 @@ scheme_temp_dec_mark_depth scheme_temp_inc_mark_depth scheme_current_continuation_marks scheme_extract_one_cc_mark +scheme_extract_one_cc_mark_to_tag scheme_do_eval scheme_eval_compiled_stx_string scheme_load_compiled_stx_string @@ -403,6 +404,7 @@ scheme_fdisset scheme_add_fd_handle scheme_add_fd_eventmask scheme_security_check_file +scheme_security_check_file_link scheme_security_check_network scheme_get_host_address scheme_free_host_address diff --git a/src/mzscheme/include/mzwin.def b/src/mzscheme/include/mzwin.def index 79fe28f946..894256e3eb 100644 --- a/src/mzscheme/include/mzwin.def +++ b/src/mzscheme/include/mzwin.def @@ -134,6 +134,7 @@ EXPORTS scheme_temp_inc_mark_depth scheme_current_continuation_marks scheme_extract_one_cc_mark + scheme_extract_one_cc_mark_to_tag scheme_do_eval scheme_eval_compiled_stx_string scheme_load_compiled_stx_string @@ -388,6 +389,7 @@ EXPORTS scheme_add_fd_handle scheme_add_fd_eventmask scheme_security_check_file + scheme_security_check_file_link scheme_security_check_network scheme_get_host_address scheme_free_host_address diff --git a/src/mzscheme/include/scheme.h b/src/mzscheme/include/scheme.h index 78a6248429..da9c6545e2 100644 --- a/src/mzscheme/include/scheme.h +++ b/src/mzscheme/include/scheme.h @@ -836,13 +836,10 @@ typedef struct Scheme_Jumpup_Buf_Holder { } Scheme_Jumpup_Buf_Holder; typedef struct Scheme_Continuation_Jump_State { - struct Scheme_Escaping_Cont *jumping_to_continuation; - union { - Scheme_Object **vals; - Scheme_Object *val; - } u; + struct Scheme_Object *jumping_to_continuation; + Scheme_Object *val; /* or **vals */ mzshort num_vals; - short is_kill; + short is_kill, is_escape; } Scheme_Continuation_Jump_State; /* A mark position is in odd number, so that it can be @@ -894,7 +891,6 @@ typedef struct Scheme_Thread { mz_jmp_buf *error_buf; Scheme_Continuation_Jump_State cjs; - Scheme_Object *current_escape_cont_key; Scheme_Thread_Cell_Table *cell_values; Scheme_Config *init_config; @@ -908,9 +904,8 @@ typedef struct Scheme_Thread { struct Scheme_Saved_Stack *runstack_saved; Scheme_Object **runstack_tmp_keep; - /* in case of bouncing, we keep a recently - released runstack; it's dropped on GC, though */ - Scheme_Object **spare_runstack; + Scheme_Object **spare_runstack; /* in case of bouncing, we keep a recently + released runstack; it's dropped on GC, though */ long spare_runstack_size; struct Scheme_Thread **runstack_owner; @@ -920,17 +915,32 @@ typedef struct Scheme_Thread { MZ_MARK_STACK_TYPE cont_mark_stack; /* current mark stack position */ struct Scheme_Cont_Mark **cont_mark_stack_segments; int cont_mark_seg_count; + int cont_mark_stack_bottom; /* for restored delimited continuations */ + int cont_mark_pos_bottom; /* for splicing cont marks in meta continuations */ struct Scheme_Thread **cont_mark_stack_owner; struct Scheme_Cont_Mark *cont_mark_stack_swapped; + struct Scheme_Prompt *barrier_prompt; /* a pseudo-prompt */ + struct Scheme_Prompt *meta_prompt; /* a pseudo-prompt */ + + struct Scheme_Meta_Continuation *meta_continuation; + long engine_weight; - void *stack_start, *stack_end; - Scheme_Jumpup_Buf jmpup_buf; + void *stack_start; /* This is the C stack base of the thread, which + corresponds to the starting stack address for + paging out the thread, and in 3m corresponds to + the starting stack address for GC marking. In non-3m, + it can be 0, which means that the deepest (non-main) + thread starting address should be used. This value will + change when a continuation is applied under a prompt, + and it will be changed on stack overflow. */ + void *stack_end; /* The end of the C stack, for determine stack overflow. + Currently, this is the same for all threads. */ + + Scheme_Jumpup_Buf jmpup_buf; /* For jumping back to this thread */ - long *cc_ok; - long cc_ok_save; struct Scheme_Dynamic_Wind *dw; int running; @@ -949,10 +959,7 @@ typedef struct Scheme_Thread { char ran_some; char suspend_to_kill; - short overflow_set; struct Scheme_Overflow *overflow; - mz_jmp_buf *overflow_buf; - void *o_start; struct Scheme_Comp_Env *current_local_env; Scheme_Object *current_local_mark; @@ -1600,6 +1607,7 @@ MZ_EXTERN void scheme_set_original_dir(Scheme_Object *d); /* Initialization */ MZ_EXTERN Scheme_Env *scheme_basic_env(void); +MZ_EXTERN void scheme_reset_overflow(void); #ifdef USE_MSVC_MD_LIBRARY MZ_EXTERN void GC_pre_init(void); diff --git a/src/mzscheme/sconfig.h b/src/mzscheme/sconfig.h index 200669f13c..c1d530f4b4 100644 --- a/src/mzscheme/sconfig.h +++ b/src/mzscheme/sconfig.h @@ -260,13 +260,13 @@ /************** x86/OpenBSD with gcc ****************/ /* Thanks to Bengt Kleberg */ -# if defined(__OpenBSD__) && (defined(__i386__) || defined(i386) || defined(__x86_64__)) +#if defined(__OpenBSD__) && (defined(__i386__) || defined(i386) || defined(__x86_64__)) -#if defined(__x86_64__) -# define SCHEME_PLATFORM_LIBRARY_SUBPATH "x86_64-openbsd" -#else -# define SCHEME_PLATFORM_LIBRARY_SUBPATH "i386-openbsd" -#endif +# if defined(__x86_64__) +# define SCHEME_PLATFORM_LIBRARY_SUBPATH "x86_64-openbsd" +# else +# define SCHEME_PLATFORM_LIBRARY_SUBPATH "i386-openbsd" +# endif # include "uconfig.h" # undef HAS_STANDARD_IOB @@ -302,14 +302,23 @@ /************** x86/FreeBSD with gcc ****************/ -# if defined(__FreeBSD__) && (defined(i386) || defined(__x86_64__)) - -#if defined(i386) -# define SCHEME_PLATFORM_LIBRARY_SUBPATH "i386-freebsd" -#endif -#if defined(__x86_64__) -# define SCHEME_PLATFORM_LIBRARY_SUBPATH "x86_64-freebsd" -#endif +#if defined(__FreeBSD__) + +# if defined(__i386__) +# define SCHEME_PLATFORM_LIBRARY_SUBPATH "i386-freebsd" +# define REGISTER_POOR_MACHINE +# define MZ_USE_JIT_I386 +# define FREEBSD_CONTROL_387 +# elif defined(__amd64__) +# define SCHEME_PLATFORM_LIBRARY_SUBPATH "amd64-freebsd" +# define REGISTER_POOR_MACHINE +# define MZ_USE_JIT_X86_64 +# elif defined(__sparc64__) +# define SCHEME_PLATFORM_LIBRARY_SUBPATH "sparc64-freebsd" +# define FLUSH_SPARC_REGISTER_WINDOWS +# else +# error Unported platform. +# endif # include "uconfig.h" # undef HAS_STANDARD_IOB @@ -331,15 +340,7 @@ # define USE_TM_GMTOFF_FIELD -# define REGISTER_POOR_MACHINE - -#if defined(__x86_64__) -# define MZ_USE_JIT_X86_64 # define MZ_JIT_USE_MPROTECT -#else -# define MZ_USE_JIT_I386 -# define MZ_JIT_USE_MPROTECT -#endif # define FLAGS_ALREADY_SET diff --git a/src/mzscheme/sgc/Makefile.in b/src/mzscheme/sgc/Makefile.in index 29664c9579..6598e6784f 100644 --- a/src/mzscheme/sgc/Makefile.in +++ b/src/mzscheme/sgc/Makefile.in @@ -12,31 +12,31 @@ ARFLAGS = @ARFLAGS@ CFLAGS = @CFLAGS@ @PREFLAGS@ @COMPFLAGS@ @PROFFLAGS@ @OPTIONS@ -OBJS = sgc.o +OBJS = sgc.@LTO@ SRCS = $(srcdir)/sgc.c -../libmzgc.a: $(OBJS) +../libmzgc.@LIBSFX@: $(OBJS) $(MAKE) gcobjects - $(AR) $(ARFLAGS) ../libmzgc.a $(OBJS) - $(RANLIB) ../libmzgc.a + $(AR) $(ARFLAGS) ../libmzgc.@LIBSFX@ $(OBJS) + $(RANLIB) ../libmzgc.@LIBSFX@ -test: $(OBJS) test.o - $(CC) -o test $(OBJS) test.o +test: $(OBJS) test.@LTO@ + $(CC) -o test $(OBJS) test.@LTO@ gcobjects: $(OBJS) -sgc.o: $(srcdir)/sgc.c $(srcdir)/autostat.inc $(srcdir)/collect.inc $(srcdir)/../utils/splay.c - $(CC) $(CFLAGS) -I.. -c $(srcdir)/sgc.c -o sgc.o +sgc.@LTO@: $(srcdir)/sgc.c $(srcdir)/autostat.inc $(srcdir)/collect.inc $(srcdir)/../utils/splay.c + $(CC) $(CFLAGS) -I.. -c $(srcdir)/sgc.c -o sgc.@LTO@ -test.o: $(srcdir)/test.c - $(CC) $(CFLAGS) -c $(srcdir)/test.c -o test.o +test.@LTO@: $(srcdir)/test.c + $(CC) $(CFLAGS) -c $(srcdir)/test.c -o test.@LTO@ clean: - /bin/rm -f $(OBJS) gc.a test + /bin/rm -f $(OBJS) gc.@LIBSFX@ test # Extra dependencies -sgc.o: $(srcdir)/sgc.h +sgc.@LTO@: $(srcdir)/sgc.h -test.o: $(srcdir)/sgc.h +test.@LTO@: $(srcdir)/sgc.h diff --git a/src/mzscheme/src/Makefile.in b/src/mzscheme/src/Makefile.in index b829133460..bb1519d873 100644 --- a/src/mzscheme/src/Makefile.in +++ b/src/mzscheme/src/Makefile.in @@ -159,7 +159,7 @@ env.@LTO@: $(srcdir)/env.c $(CC) $(CFLAGS) -c $(srcdir)/env.c -o env.@LTO@ error.@LTO@: $(srcdir)/error.c $(CC) $(CFLAGS) -c $(srcdir)/error.c -o error.@LTO@ -eval.@LTO@: $(srcdir)/eval.c $(srcdir)/schapp.inc +eval.@LTO@: $(srcdir)/eval.c $(srcdir)/schapp.inc $(srcdir)/schnapp.inc $(CC) $(CFLAGS) -c $(srcdir)/eval.c -o eval.@LTO@ file.@LTO@: $(srcdir)/file.c $(CC) $(CFLAGS) -c $(srcdir)/file.c -o file.@LTO@ diff --git a/src/mzscheme/src/cstartup.inc b/src/mzscheme/src/cstartup.inc index fb7178b8a8..12faf3ff90 100644 --- a/src/mzscheme/src/cstartup.inc +++ b/src/mzscheme/src/cstartup.inc @@ -1,5 +1,5 @@ { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,54,252,225,7,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,55,54,252,225,7,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,65,35,37,115,116, 120,1,29,2,11,11,10,10,10,34,80,158,34,34,20,98,159,36,16,16,30, 3,2,2,71,105,100,101,110,116,105,102,105,101,114,63,4,254,1,30,5,2, @@ -21,128 +21,128 @@ 11,11,11,11,11,11,11,11,11,11,11,11,16,16,2,28,2,26,2,4,2, 34,2,18,2,14,2,16,2,24,2,12,2,8,2,6,2,10,2,30,2,32, 2,22,2,20,50,50,9,110,83,159,34,93,80,159,34,51,35,89,162,8,64, -37,52,64,108,111,111,112,35,223,0,28,28,248,22,50,196,10,28,248,22,206, -196,248,22,50,248,22,210,197,11,91,159,37,11,90,161,37,34,11,27,28,248, -22,50,200,248,22,53,200,248,22,53,248,22,210,201,28,28,248,22,50,193,10, -28,248,22,206,193,248,22,50,248,22,210,194,11,91,159,37,11,90,161,37,34, -11,250,80,159,44,51,35,203,204,28,248,22,50,199,248,22,53,199,248,22,53, -248,22,210,200,28,249,22,182,196,202,250,22,7,9,198,248,22,170,198,250,22, -7,249,22,51,28,248,22,50,201,248,22,52,201,248,22,52,248,22,210,202,197, -196,197,250,22,7,9,195,28,201,28,28,248,22,57,196,10,28,248,22,206,196, -248,22,57,248,22,210,197,11,34,33,6,45,105,110,102,46,48,36,28,28,248, -22,57,196,10,28,248,22,206,196,248,22,57,248,22,210,197,11,2,36,35,28, -249,22,182,196,198,250,22,7,9,201,248,22,170,198,250,22,7,249,22,51,28, -248,22,50,204,248,22,52,204,248,22,52,248,22,210,205,197,196,197,250,22,7, -9,198,28,197,28,28,248,22,57,199,10,28,248,22,206,199,248,22,57,248,22, -210,200,11,34,2,36,28,28,248,22,57,199,10,28,248,22,206,199,248,22,57, -248,22,210,200,11,2,36,35,83,159,34,93,80,159,34,50,35,89,162,8,100, -35,45,2,35,223,0,28,248,22,50,194,27,248,22,53,195,28,248,22,50,193, -27,248,22,53,194,28,248,22,50,193,27,248,22,53,194,28,248,22,50,193,27, -248,22,53,194,28,248,22,50,193,27,248,22,53,194,28,248,22,50,193,27,248, -22,53,194,28,248,22,50,193,27,248,22,53,194,28,248,22,50,193,248,80,159, -42,50,35,248,22,53,194,248,80,159,42,38,35,193,248,80,159,41,38,35,193, +37,52,64,108,111,111,112,35,223,0,28,28,248,22,56,196,10,28,248,22,212, +196,248,22,56,248,22,216,197,11,91,159,37,11,90,161,37,34,11,27,28,248, +22,56,200,248,22,59,200,248,22,59,248,22,216,201,28,28,248,22,56,193,10, +28,248,22,212,193,248,22,56,248,22,216,194,11,91,159,37,11,90,161,37,34, +11,250,80,159,44,51,35,203,204,28,248,22,56,199,248,22,59,199,248,22,59, +248,22,216,200,28,249,22,188,196,202,250,22,7,9,198,248,22,176,198,250,22, +7,249,22,57,28,248,22,56,201,248,22,58,201,248,22,58,248,22,216,202,197, +196,197,250,22,7,9,195,28,201,28,28,248,22,63,196,10,28,248,22,212,196, +248,22,63,248,22,216,197,11,34,33,6,45,105,110,102,46,48,36,28,28,248, +22,63,196,10,28,248,22,212,196,248,22,63,248,22,216,197,11,2,36,35,28, +249,22,188,196,198,250,22,7,9,201,248,22,176,198,250,22,7,249,22,57,28, +248,22,56,204,248,22,58,204,248,22,58,248,22,216,205,197,196,197,250,22,7, +9,198,28,197,28,28,248,22,63,199,10,28,248,22,212,199,248,22,63,248,22, +216,200,11,34,2,36,28,28,248,22,63,199,10,28,248,22,212,199,248,22,63, +248,22,216,200,11,2,36,35,83,159,34,93,80,159,34,50,35,89,162,8,100, +35,45,2,35,223,0,28,248,22,56,194,27,248,22,59,195,28,248,22,56,193, +27,248,22,59,194,28,248,22,56,193,27,248,22,59,194,28,248,22,56,193,27, +248,22,59,194,28,248,22,56,193,27,248,22,59,194,28,248,22,56,193,27,248, +22,59,194,28,248,22,56,193,27,248,22,59,194,28,248,22,56,193,248,80,159, +42,50,35,248,22,59,194,248,80,159,42,38,35,193,248,80,159,41,38,35,193, 248,80,159,40,38,35,193,248,80,159,39,38,35,193,248,80,159,38,38,35,193, 248,80,159,37,38,35,193,248,80,159,36,38,35,193,248,80,159,35,38,35,194, 83,159,34,93,80,159,34,34,35,32,37,89,162,34,35,37,2,4,222,28,248, -22,206,193,248,22,41,248,22,210,194,11,83,159,34,93,80,159,34,35,35,32, -38,89,162,34,35,37,2,6,222,28,248,22,57,193,10,28,248,22,206,193,248, -22,57,248,22,210,194,11,83,159,34,93,80,159,34,36,35,32,39,89,162,34, -35,37,2,8,222,28,248,22,57,193,9,28,248,22,206,193,28,248,22,57,248, -22,210,194,9,11,11,83,159,34,93,80,159,34,37,35,32,40,89,162,34,35, -37,2,10,222,28,248,22,50,193,10,28,248,22,206,193,248,22,50,248,22,210, +22,212,193,248,22,47,248,22,216,194,11,83,159,34,93,80,159,34,35,35,32, +38,89,162,34,35,37,2,6,222,28,248,22,63,193,10,28,248,22,212,193,248, +22,63,248,22,216,194,11,83,159,34,93,80,159,34,36,35,32,39,89,162,34, +35,37,2,8,222,28,248,22,63,193,9,28,248,22,212,193,28,248,22,63,248, +22,216,194,9,11,11,83,159,34,93,80,159,34,37,35,32,40,89,162,34,35, +37,2,10,222,28,248,22,56,193,10,28,248,22,212,193,248,22,56,248,22,216, 194,11,83,159,34,93,80,159,34,38,35,89,162,34,35,46,2,12,223,0,28, -248,22,58,194,10,28,248,22,206,194,28,248,22,58,248,22,210,195,10,27,248, -22,210,195,28,248,22,50,193,27,248,22,53,194,28,248,22,50,193,27,248,22, -53,194,28,248,22,50,193,27,248,22,53,194,28,248,22,50,193,27,248,22,53, -194,28,248,22,50,193,27,248,22,53,194,28,248,22,50,193,27,248,22,53,194, -28,248,22,50,193,248,80,159,42,50,35,248,22,53,194,248,80,159,42,38,35, +248,22,64,194,10,28,248,22,212,194,28,248,22,64,248,22,216,195,10,27,248, +22,216,195,28,248,22,56,193,27,248,22,59,194,28,248,22,56,193,27,248,22, +59,194,28,248,22,56,193,27,248,22,59,194,28,248,22,56,193,27,248,22,59, +194,28,248,22,56,193,27,248,22,59,194,28,248,22,56,193,27,248,22,59,194, +28,248,22,56,193,248,80,159,42,50,35,248,22,59,194,248,80,159,42,38,35, 193,248,80,159,41,38,35,193,248,80,159,40,38,35,193,248,80,159,39,38,35, 193,248,80,159,38,38,35,193,248,80,159,37,38,35,193,248,80,159,36,38,35, -193,28,248,22,50,194,248,80,159,35,38,35,248,22,53,195,11,83,159,34,93, -80,159,34,39,35,32,41,89,162,34,35,37,2,14,222,28,248,22,50,193,248, -22,52,193,248,22,52,248,22,210,194,83,159,34,93,80,159,34,40,35,32,42, -89,162,34,35,37,2,16,222,28,248,22,50,193,248,22,53,193,248,22,53,248, -22,210,194,83,159,34,93,80,159,34,41,35,32,43,89,162,34,35,42,2,18, -222,28,248,22,206,193,248,22,216,193,27,28,248,22,57,194,11,28,248,22,50, -194,27,248,22,53,195,28,248,22,57,193,11,28,248,22,50,193,248,32,44,89, -162,8,100,35,39,2,35,222,28,248,22,57,193,11,28,248,22,50,193,27,248, -22,53,194,28,248,22,57,193,11,28,248,22,50,193,27,248,22,53,194,28,248, -22,57,193,11,28,248,22,50,193,248,2,44,248,22,53,194,28,248,22,206,193, -248,22,216,193,11,28,248,22,206,193,248,22,216,193,11,28,248,22,206,193,248, -22,216,193,11,248,22,53,194,28,248,22,206,193,248,22,216,193,11,28,248,22, -206,194,248,22,216,194,11,28,192,28,248,22,57,194,9,28,248,22,50,194,249, -22,51,248,22,52,196,249,32,45,89,162,8,64,36,44,2,35,222,28,248,22, -57,194,9,28,248,22,50,194,249,22,51,248,22,52,196,27,248,22,53,197,28, -248,22,57,193,9,28,248,22,50,193,249,22,51,248,22,52,195,249,2,45,199, -248,22,53,197,28,248,22,206,193,195,12,28,248,22,206,194,192,12,196,248,22, -53,198,28,248,22,206,194,192,12,193,83,159,34,93,80,159,34,42,35,32,46, -89,162,34,36,40,2,20,222,28,248,22,206,193,28,248,22,252,222,1,248,22, -210,194,28,193,249,22,181,195,248,22,252,226,1,248,22,210,196,10,11,11,83, +193,28,248,22,56,194,248,80,159,35,38,35,248,22,59,195,11,83,159,34,93, +80,159,34,39,35,32,41,89,162,34,35,37,2,14,222,28,248,22,56,193,248, +22,58,193,248,22,58,248,22,216,194,83,159,34,93,80,159,34,40,35,32,42, +89,162,34,35,37,2,16,222,28,248,22,56,193,248,22,59,193,248,22,59,248, +22,216,194,83,159,34,93,80,159,34,41,35,32,43,89,162,34,35,42,2,18, +222,28,248,22,212,193,248,22,222,193,27,28,248,22,63,194,11,28,248,22,56, +194,27,248,22,59,195,28,248,22,63,193,11,28,248,22,56,193,248,32,44,89, +162,8,100,35,39,2,35,222,28,248,22,63,193,11,28,248,22,56,193,27,248, +22,59,194,28,248,22,63,193,11,28,248,22,56,193,27,248,22,59,194,28,248, +22,63,193,11,28,248,22,56,193,248,2,44,248,22,59,194,28,248,22,212,193, +248,22,222,193,11,28,248,22,212,193,248,22,222,193,11,28,248,22,212,193,248, +22,222,193,11,248,22,59,194,28,248,22,212,193,248,22,222,193,11,28,248,22, +212,194,248,22,222,194,11,28,192,28,248,22,63,194,9,28,248,22,56,194,249, +22,57,248,22,58,196,249,32,45,89,162,8,64,36,44,2,35,222,28,248,22, +63,194,9,28,248,22,56,194,249,22,57,248,22,58,196,27,248,22,59,197,28, +248,22,63,193,9,28,248,22,56,193,249,22,57,248,22,58,195,249,2,45,199, +248,22,59,197,28,248,22,212,193,195,12,28,248,22,212,194,192,12,196,248,22, +59,198,28,248,22,212,194,192,12,193,83,159,34,93,80,159,34,42,35,32,46, +89,162,34,36,40,2,20,222,28,248,22,212,193,28,248,22,252,228,1,248,22, +216,194,28,193,249,22,187,195,248,22,252,232,1,248,22,216,196,10,11,11,83, 159,34,93,80,159,34,43,35,32,47,89,162,34,36,39,2,22,222,249,22,252, -227,1,248,22,210,195,195,83,159,34,93,80,159,34,44,35,32,48,89,162,34, +233,1,248,22,216,195,195,83,159,34,93,80,159,34,44,35,32,48,89,162,34, 36,37,2,24,222,28,192,192,248,194,11,83,159,34,93,80,159,34,45,35,32, -49,89,162,34,36,38,2,26,222,28,193,249,22,51,194,195,11,83,159,34,93, +49,89,162,34,36,38,2,26,222,28,193,249,22,57,194,195,11,83,159,34,93, 80,159,34,46,35,32,50,89,162,34,36,38,2,28,222,28,192,28,193,28,248, -22,57,194,192,249,22,65,194,195,11,11,83,159,34,93,80,159,34,47,35,32, -51,89,162,34,35,38,2,30,222,250,22,1,22,2,22,59,195,83,159,34,93, -80,159,34,48,35,32,52,89,162,34,35,40,2,32,222,249,22,1,22,61,250, -22,1,22,2,22,59,197,83,159,34,93,80,159,34,49,35,89,162,34,37,52, -2,34,223,0,91,159,37,11,90,161,37,34,11,28,28,248,22,50,197,10,28, -248,22,206,197,248,22,50,248,22,210,198,11,91,159,37,11,90,161,37,34,11, -250,80,159,43,51,35,203,204,28,248,22,50,203,248,22,53,203,248,22,53,248, -22,210,204,28,249,22,182,196,202,250,22,7,9,202,248,22,170,198,250,22,7, -249,22,51,28,248,22,50,205,248,22,52,205,248,22,52,248,22,210,206,197,196, -197,250,22,7,9,199,28,201,28,28,248,22,57,200,10,28,248,22,206,200,248, -22,57,248,22,210,201,11,34,2,36,28,28,248,22,57,200,10,28,248,22,206, -200,248,22,57,248,22,210,201,11,2,36,35,250,22,7,195,196,249,22,181,199, +22,63,194,192,249,22,71,194,195,11,11,83,159,34,93,80,159,34,47,35,32, +51,89,162,34,35,38,2,30,222,250,22,1,22,2,22,65,195,83,159,34,93, +80,159,34,48,35,32,52,89,162,34,35,40,2,32,222,249,22,1,22,67,250, +22,1,22,2,22,65,197,83,159,34,93,80,159,34,49,35,89,162,34,37,52, +2,34,223,0,91,159,37,11,90,161,37,34,11,28,28,248,22,56,197,10,28, +248,22,212,197,248,22,56,248,22,216,198,11,91,159,37,11,90,161,37,34,11, +250,80,159,43,51,35,203,204,28,248,22,56,203,248,22,59,203,248,22,59,248, +22,216,204,28,249,22,188,196,202,250,22,7,9,202,248,22,176,198,250,22,7, +249,22,57,28,248,22,56,205,248,22,58,205,248,22,58,248,22,216,206,197,196, +197,250,22,7,9,199,28,201,28,28,248,22,63,200,10,28,248,22,212,200,248, +22,63,248,22,216,201,11,34,2,36,28,28,248,22,63,200,10,28,248,22,212, +200,248,22,63,248,22,216,201,11,2,36,35,250,22,7,195,196,249,22,187,199, 202,93,68,35,37,107,101,114,110,101,108,53,9,0}; EVAL_ONE_SIZED_STR((char *)expr, 2029); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,134,252,215,18,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,55,134,252,215,18,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,71,35,37,113,113, 45,97,110,100,45,111,114,1,29,2,11,11,10,10,10,34,80,158,34,34,20, 98,159,34,16,1,30,3,2,2,69,113,113,45,97,112,112,101,110,100,4,254, -1,16,0,11,11,16,1,2,4,35,11,16,6,62,111,114,5,63,108,101,116, -6,64,108,101,116,42,7,70,113,117,97,115,105,113,117,111,116,101,8,63,97, -110,100,9,66,108,101,116,114,101,99,10,16,6,11,11,11,11,11,11,16,6, +1,16,0,11,11,16,1,2,4,35,11,16,6,63,97,110,100,5,63,108,101, +116,6,64,108,101,116,42,7,70,113,117,97,115,105,113,117,111,116,101,8,62, +111,114,9,66,108,101,116,114,101,99,10,16,6,11,11,11,11,11,11,16,6, 2,5,2,6,2,7,2,8,2,9,2,10,34,40,96,16,5,95,2,6,2, 7,2,10,87,98,83,159,34,93,80,159,34,52,35,89,162,8,64,38,46,65, -99,104,101,99,107,11,223,0,28,248,22,57,196,12,27,28,194,248,22,77,197, -248,80,158,36,34,248,80,158,37,34,248,22,52,199,28,28,248,22,57,198,11, -28,249,22,221,194,248,22,52,200,10,27,248,22,53,199,28,248,22,57,193,11, -28,249,22,221,195,248,22,52,195,10,27,248,22,53,194,28,248,22,57,193,11, -28,249,22,221,196,248,22,52,195,10,27,248,22,53,194,28,248,22,57,193,11, -28,249,22,221,197,248,22,52,195,10,249,32,12,89,162,34,36,41,71,105,100, -45,105,110,45,108,105,115,116,63,13,222,28,248,22,57,194,11,28,249,22,221, -194,248,22,52,196,10,27,248,22,53,195,28,248,22,57,193,11,28,249,22,221, -195,248,22,52,195,10,27,248,22,53,194,28,248,22,57,193,11,28,249,22,221, -196,248,22,52,195,10,249,2,12,196,248,22,53,195,197,248,22,53,195,251,22, -252,39,2,11,6,20,20,100,117,112,108,105,99,97,116,101,32,105,100,101,110, -116,105,102,105,101,114,14,199,196,251,80,159,39,52,35,198,199,248,22,53,201, -249,22,51,198,203,83,159,34,93,80,159,34,51,35,89,162,8,64,38,47,2, -11,223,0,28,248,22,57,197,12,27,28,195,248,22,77,198,248,80,158,36,34, -248,80,158,37,34,248,22,52,200,27,250,22,116,198,248,22,210,197,9,28,28, -248,22,57,193,11,28,249,22,221,195,248,22,52,195,10,27,248,22,53,194,28, -248,22,57,193,11,28,249,22,221,196,248,22,52,195,10,27,248,22,53,194,28, -248,22,57,193,11,28,249,22,221,197,248,22,52,195,10,27,248,22,53,194,28, -248,22,57,193,11,28,249,22,221,198,248,22,52,195,10,249,2,12,198,248,22, -53,195,251,22,252,39,2,11,6,20,20,100,117,112,108,105,99,97,116,101,32, -105,100,101,110,116,105,102,105,101,114,15,201,197,87,94,250,22,115,198,248,22, -210,197,249,22,51,198,197,251,80,159,40,51,35,199,200,201,248,22,53,203,83, +99,104,101,99,107,11,223,0,28,248,22,63,196,12,27,28,194,248,22,83,197, +248,80,158,36,34,248,80,158,37,34,248,22,58,199,28,28,248,22,63,198,11, +28,249,22,227,194,248,22,58,200,10,27,248,22,59,199,28,248,22,63,193,11, +28,249,22,227,195,248,22,58,195,10,27,248,22,59,194,28,248,22,63,193,11, +28,249,22,227,196,248,22,58,195,10,27,248,22,59,194,28,248,22,63,193,11, +28,249,22,227,197,248,22,58,195,10,249,32,12,89,162,34,36,41,71,105,100, +45,105,110,45,108,105,115,116,63,13,222,28,248,22,63,194,11,28,249,22,227, +194,248,22,58,196,10,27,248,22,59,195,28,248,22,63,193,11,28,249,22,227, +195,248,22,58,195,10,27,248,22,59,194,28,248,22,63,193,11,28,249,22,227, +196,248,22,58,195,10,249,2,12,196,248,22,59,195,197,248,22,59,195,251,22, +252,45,2,11,6,20,20,100,117,112,108,105,99,97,116,101,32,105,100,101,110, +116,105,102,105,101,114,14,199,196,251,80,159,39,52,35,198,199,248,22,59,201, +249,22,57,198,203,83,159,34,93,80,159,34,51,35,89,162,8,64,38,47,2, +11,223,0,28,248,22,63,197,12,27,28,195,248,22,83,198,248,80,158,36,34, +248,80,158,37,34,248,22,58,200,27,250,22,122,198,248,22,216,197,9,28,28, +248,22,63,193,11,28,249,22,227,195,248,22,58,195,10,27,248,22,59,194,28, +248,22,63,193,11,28,249,22,227,196,248,22,58,195,10,27,248,22,59,194,28, +248,22,63,193,11,28,249,22,227,197,248,22,58,195,10,27,248,22,59,194,28, +248,22,63,193,11,28,249,22,227,198,248,22,58,195,10,249,2,12,198,248,22, +59,195,251,22,252,45,2,11,6,20,20,100,117,112,108,105,99,97,116,101,32, +105,100,101,110,116,105,102,105,101,114,15,201,197,87,94,250,22,121,198,248,22, +216,197,249,22,57,198,197,251,80,159,40,51,35,199,200,201,248,22,59,203,83, 159,34,93,80,159,34,50,35,89,162,8,100,38,50,64,108,111,111,112,16,223, -0,28,248,22,57,197,9,27,248,22,52,198,249,22,56,28,28,248,80,158,38, +0,28,248,22,63,197,9,27,248,22,58,198,249,22,62,28,28,248,80,158,38, 36,195,28,248,80,158,38,36,248,80,158,39,35,196,248,80,158,38,37,248,80, -158,39,35,248,80,158,40,35,197,11,11,28,248,22,41,248,22,210,248,80,158, -40,34,197,28,196,249,22,51,248,80,158,40,34,197,248,80,158,40,34,248,80, -158,41,35,198,250,22,209,201,249,22,56,249,22,56,248,80,158,45,34,202,9, -248,80,158,43,35,200,197,251,22,252,39,2,11,6,30,30,98,97,100,32,115, +158,39,35,248,80,158,40,35,197,11,11,28,248,22,47,248,22,216,248,80,158, +40,34,197,28,196,249,22,57,248,80,158,40,34,197,248,80,158,40,34,248,80, +158,41,35,198,250,22,215,201,249,22,62,249,22,62,248,80,158,45,34,202,9, +248,80,158,43,35,200,197,251,22,252,45,2,11,6,30,30,98,97,100,32,115, 121,110,116,97,120,32,40,110,111,116,32,97,110,32,105,100,101,110,116,105,102, -105,101,114,41,17,201,248,80,158,42,34,199,251,22,252,39,2,11,6,59,59, +105,101,114,41,17,201,248,80,158,42,34,199,251,22,252,45,2,11,6,59,59, 98,97,100,32,115,121,110,116,97,120,32,40,110,111,116,32,97,110,32,105,100, 101,110,116,105,102,105,101,114,32,97,110,100,32,101,120,112,114,101,115,115,105, 111,110,32,102,111,114,32,97,32,98,105,110,100,105,110,103,41,18,201,198,251, -80,159,41,50,35,200,201,202,248,22,53,204,83,159,34,93,80,159,34,49,35, +80,159,41,50,35,200,201,202,248,22,59,204,83,159,34,93,80,159,34,49,35, 89,162,34,35,39,70,115,116,120,45,50,108,105,115,116,63,19,223,0,28,248, 80,158,35,36,194,28,248,80,158,35,36,248,80,158,36,35,195,248,80,158,35, 37,248,80,158,36,35,248,80,158,37,35,196,11,11,83,159,34,93,80,159,34, @@ -151,19 +151,19 @@ 38,8,32,62,103,111,21,224,2,1,91,159,36,11,90,161,35,34,11,80,159, 37,48,35,90,161,35,35,11,80,159,37,49,35,87,94,28,28,248,80,158,38, 38,197,27,248,80,158,39,35,198,28,248,80,158,39,37,193,10,28,248,80,158, -39,37,248,80,158,40,35,194,10,28,198,28,248,22,41,248,22,210,248,80,158, +39,37,248,80,158,40,35,194,10,28,198,28,248,22,47,248,22,216,248,80,158, 41,34,195,248,80,158,39,37,248,80,158,40,35,248,80,158,41,35,195,11,11, -10,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,22, -199,12,27,28,198,27,248,80,158,40,34,248,80,158,41,35,200,28,248,22,41, -248,22,210,194,192,11,11,27,248,80,158,40,39,27,28,195,248,80,158,42,35, +10,250,22,252,45,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,22, +199,12,27,28,198,27,248,80,158,40,34,248,80,158,41,35,200,28,248,22,47, +248,22,216,194,192,11,11,27,248,80,158,40,39,27,28,195,248,80,158,42,35, 201,200,248,80,158,42,34,248,80,158,43,35,194,27,248,80,158,41,35,248,80, 158,42,35,28,196,248,80,158,43,35,202,201,28,193,27,251,80,159,45,50,35, -199,204,202,198,87,94,28,202,12,28,249,22,183,248,22,64,195,39,27,247,22, -110,251,80,159,46,51,35,196,200,205,197,251,80,159,45,52,35,199,204,196,9, -250,22,209,201,28,198,250,22,1,22,60,250,22,60,20,15,159,50,36,40,248, -22,60,249,22,60,248,22,60,23,16,250,22,62,20,15,159,56,37,40,249,22, -1,22,60,249,22,2,22,52,23,19,23,16,204,249,22,2,22,53,200,250,22, -62,23,17,198,199,203,251,22,252,39,2,11,6,62,62,98,97,100,32,115,121, +199,204,202,198,87,94,28,202,12,28,249,22,189,248,22,70,195,39,27,247,22, +116,251,80,159,46,51,35,196,200,205,197,251,80,159,45,52,35,199,204,196,9, +250,22,215,201,28,198,250,22,1,22,66,250,22,66,20,15,159,50,36,40,248, +22,66,249,22,66,248,22,66,23,16,250,22,68,20,15,159,56,37,40,249,22, +1,22,66,249,22,2,22,58,23,19,23,16,204,249,22,2,22,59,200,250,22, +68,23,17,198,199,203,251,22,252,45,2,11,6,62,62,98,97,100,32,115,121, 110,116,97,120,32,40,110,111,116,32,97,32,115,101,113,117,101,110,99,101,32, 111,102,32,105,100,101,110,116,105,102,105,101,114,45,45,101,120,112,114,101,115, 115,105,111,110,32,98,105,110,100,105,110,103,115,41,23,203,248,80,158,45,34, @@ -176,164 +176,164 @@ 31,2,25,69,115,116,120,45,110,117,108,108,63,32,10,30,33,2,25,69,115, 116,120,45,108,105,115,116,63,34,8,30,35,2,25,69,115,116,120,45,62,108, 105,115,116,36,4,16,7,18,97,70,108,97,109,98,100,97,45,115,116,120,37, -39,97,37,10,34,11,16,14,2,4,2,2,2,9,2,2,2,8,2,2,2, -6,2,2,2,5,2,2,2,7,2,2,2,10,2,2,98,36,10,35,11,93, +39,97,37,10,34,11,16,14,2,4,2,2,2,6,2,2,2,8,2,2,2, +5,2,2,2,7,2,2,2,9,2,2,2,10,2,2,98,36,10,35,11,93, 159,2,25,9,11,16,0,96,35,8,254,1,11,16,0,18,16,2,158,73,108, 101,116,114,101,99,45,118,97,108,117,101,115,38,39,40,18,103,2,38,47,37, 36,35,16,6,46,11,2,37,77,108,101,116,114,101,99,45,118,97,108,117,101, -115,45,115,116,120,39,3,1,7,101,110,118,50,52,54,52,40,2,40,16,10, +115,45,115,116,120,39,3,1,7,101,110,118,50,53,48,49,40,2,40,16,10, 45,11,63,115,116,120,41,66,110,97,109,101,100,63,42,65,115,116,97,114,63, -43,66,116,97,114,103,101,116,44,3,1,7,101,110,118,50,52,54,54,45,2, +43,66,116,97,114,103,101,116,44,3,1,7,101,110,118,50,53,48,51,45,2, 45,2,45,2,45,16,8,44,11,2,19,2,13,2,20,3,1,7,101,110,118, -50,52,54,57,46,3,1,7,101,110,118,50,52,54,56,47,3,1,7,101,110, -118,50,52,54,55,48,16,4,43,11,64,110,97,109,101,49,3,1,7,101,110, -118,50,52,55,53,50,16,6,42,11,68,98,105,110,100,105,110,103,115,51,64, -98,111,100,121,52,3,1,7,101,110,118,50,52,55,55,53,2,53,16,4,41, +50,53,48,54,46,3,1,7,101,110,118,50,53,48,53,47,3,1,7,101,110, +118,50,53,48,52,48,16,4,43,11,64,110,97,109,101,49,3,1,7,101,110, +118,50,53,49,50,50,16,6,42,11,68,98,105,110,100,105,110,103,115,51,64, +98,111,100,121,52,3,1,7,101,110,118,50,53,49,52,53,2,53,16,4,41, 11,72,110,101,119,45,98,105,110,100,105,110,103,115,54,3,1,7,101,110,118, -50,52,55,56,55,18,16,2,158,66,108,97,109,98,100,97,56,47,48,18,100, +50,53,49,53,55,18,16,2,158,66,108,97,109,98,100,97,56,47,48,18,100, 70,108,101,116,45,118,97,108,117,101,115,57,51,37,36,35,46,16,4,50,11, -2,21,3,1,7,101,110,118,50,52,54,53,58,16,4,49,11,2,41,3,1, -7,101,110,118,50,52,56,57,59,18,100,71,108,101,116,42,45,118,97,108,117, +2,21,3,1,7,101,110,118,50,53,48,50,58,16,4,49,11,2,41,3,1, +7,101,110,118,50,53,50,54,59,18,100,71,108,101,116,42,45,118,97,108,117, 101,115,60,53,37,36,35,46,50,16,4,52,11,2,41,3,1,7,101,110,118, -50,52,57,48,61,18,100,2,38,55,37,36,35,46,50,16,4,54,11,2,41, -3,1,7,101,110,118,50,52,57,49,62,11,16,5,93,2,8,87,97,83,159, +50,53,50,55,61,18,100,2,38,55,37,36,35,46,50,16,4,54,11,2,41, +3,1,7,101,110,118,50,53,50,56,62,11,16,5,93,2,8,87,97,83,159, 34,93,80,159,34,57,35,89,162,34,39,53,62,113,113,63,223,0,28,248,80, 158,35,35,197,27,248,80,158,36,38,198,28,28,248,80,158,36,34,193,28,249, -22,223,194,197,248,80,158,36,39,198,11,11,27,248,80,158,37,36,199,87,94, -28,28,248,80,158,37,35,193,248,22,252,9,2,248,80,158,38,37,248,80,158, -39,36,195,10,251,22,252,39,2,67,117,110,113,117,111,116,101,64,6,30,30, +22,229,194,197,248,80,158,36,39,198,11,11,27,248,80,158,37,36,199,87,94, +28,28,248,80,158,37,35,193,248,22,252,15,2,248,80,158,38,37,248,80,158, +39,36,195,10,251,22,252,45,2,67,117,110,113,117,111,116,101,64,6,30,30, 101,120,112,101,99,116,115,32,101,120,97,99,116,108,121,32,111,110,101,32,101, -120,112,114,101,115,115,105,111,110,65,199,202,12,28,248,22,186,200,248,80,158, -37,38,193,252,80,159,41,58,35,200,201,202,203,248,22,171,205,28,28,248,80, -158,36,34,193,28,249,22,223,194,20,15,159,37,43,40,248,80,158,36,39,198, -11,11,252,80,159,40,58,35,199,200,201,202,248,22,170,204,28,28,248,80,158, -36,34,193,28,249,22,223,194,198,248,80,158,36,39,198,11,11,251,22,252,39, +120,112,114,101,115,115,105,111,110,65,199,202,12,28,248,22,192,200,248,80,158, +37,38,193,252,80,159,41,58,35,200,201,202,203,248,22,177,205,28,28,248,80, +158,36,34,193,28,249,22,229,194,20,15,159,37,43,40,248,80,158,36,39,198, +11,11,252,80,159,40,58,35,199,200,201,202,248,22,176,204,28,28,248,80,158, +36,34,193,28,249,22,229,194,198,248,80,158,36,39,198,11,11,251,22,252,45, 2,76,117,110,113,117,111,116,101,45,115,112,108,105,99,105,110,103,66,6,33, 33,105,110,118,97,108,105,100,32,99,111,110,116,101,120,116,32,119,105,116,104, 105,110,32,113,117,97,115,105,113,117,111,116,101,67,198,201,28,28,248,80,158, -36,35,193,28,248,80,158,36,34,248,80,158,37,38,194,28,249,22,223,248,80, +36,35,193,28,248,80,158,36,34,248,80,158,37,38,194,28,249,22,229,248,80, 158,38,38,195,198,248,80,158,36,39,193,11,11,11,27,248,80,158,37,36,194, -87,94,28,28,248,80,158,37,35,193,248,22,252,9,2,248,80,158,38,37,248, -80,158,39,36,195,10,251,22,252,39,2,2,64,6,30,30,101,120,112,101,99, +87,94,28,28,248,80,158,37,35,193,248,22,252,15,2,248,80,158,38,37,248, +80,158,39,36,195,10,251,22,252,45,2,2,64,6,30,30,101,120,112,101,99, 116,115,32,101,120,97,99,116,108,121,32,111,110,101,32,101,120,112,114,101,115, 115,105,111,110,68,199,202,12,27,248,80,158,38,38,194,27,248,80,158,39,36, 201,27,252,80,159,44,57,35,203,204,205,248,80,158,45,36,23,15,23,15,28, -248,22,186,203,27,28,249,22,252,11,2,195,196,28,248,80,158,41,37,194,20, -15,159,40,37,40,249,22,59,20,15,159,42,38,40,195,193,250,22,59,20,15, -159,43,44,40,198,195,27,252,80,159,45,58,35,204,205,206,201,248,22,171,23, -17,28,28,249,22,252,11,2,195,196,249,22,252,11,2,194,198,11,202,27,27, -20,15,159,42,45,40,27,28,249,22,252,11,2,197,201,28,248,80,158,44,37, -196,20,15,159,43,37,40,249,22,59,20,15,159,45,38,40,197,195,28,248,80, -158,44,37,193,249,22,59,20,15,159,45,39,40,195,28,28,248,22,50,193,28, -249,22,223,20,15,159,45,40,40,248,22,52,195,10,249,22,223,20,15,159,45, -41,40,248,22,52,195,11,250,22,61,248,22,52,196,196,248,22,53,196,250,22, -59,20,15,159,46,42,40,196,195,27,28,249,22,252,11,2,197,198,28,248,80, -158,43,37,196,20,15,159,42,37,40,249,22,59,20,15,159,44,38,40,197,195, -28,248,80,158,43,37,193,249,22,59,20,15,159,44,39,40,195,28,28,248,22, -50,193,28,249,22,223,20,15,159,44,40,40,248,22,52,195,10,249,22,223,20, -15,159,44,41,40,248,22,52,195,11,250,22,61,248,22,52,196,196,248,22,53, -196,250,22,59,20,15,159,45,42,40,196,195,252,80,159,40,58,35,199,200,201, -202,203,28,28,248,22,206,197,248,22,252,222,1,248,22,210,198,11,27,248,22, -252,229,1,248,22,210,199,27,252,80,159,41,57,35,200,201,202,198,204,28,249, -22,252,11,2,195,194,198,249,22,59,20,15,159,38,46,40,194,28,248,22,206, -197,28,248,22,107,248,22,210,198,27,248,22,108,248,22,210,199,27,252,80,159, -41,57,35,200,201,202,198,204,28,249,22,252,11,2,195,194,198,249,22,59,20, +248,22,192,203,27,28,249,22,252,17,2,195,196,28,248,80,158,41,37,194,20, +15,159,40,37,40,249,22,65,20,15,159,42,38,40,195,193,250,22,65,20,15, +159,43,44,40,198,195,27,252,80,159,45,58,35,204,205,206,201,248,22,177,23, +17,28,28,249,22,252,17,2,195,196,249,22,252,17,2,194,198,11,202,27,27, +20,15,159,42,45,40,27,28,249,22,252,17,2,197,201,28,248,80,158,44,37, +196,20,15,159,43,37,40,249,22,65,20,15,159,45,38,40,197,195,28,248,80, +158,44,37,193,249,22,65,20,15,159,45,39,40,195,28,28,248,22,56,193,28, +249,22,229,20,15,159,45,40,40,248,22,58,195,10,249,22,229,20,15,159,45, +41,40,248,22,58,195,11,250,22,67,248,22,58,196,196,248,22,59,196,250,22, +65,20,15,159,46,42,40,196,195,27,28,249,22,252,17,2,197,198,28,248,80, +158,43,37,196,20,15,159,42,37,40,249,22,65,20,15,159,44,38,40,197,195, +28,248,80,158,43,37,193,249,22,65,20,15,159,44,39,40,195,28,28,248,22, +56,193,28,249,22,229,20,15,159,44,40,40,248,22,58,195,10,249,22,229,20, +15,159,44,41,40,248,22,58,195,11,250,22,67,248,22,58,196,196,248,22,59, +196,250,22,65,20,15,159,45,42,40,196,195,252,80,159,40,58,35,199,200,201, +202,203,28,28,248,22,212,197,248,22,252,228,1,248,22,216,198,11,27,248,22, +252,235,1,248,22,216,199,27,252,80,159,41,57,35,200,201,202,198,204,28,249, +22,252,17,2,195,194,198,249,22,65,20,15,159,38,46,40,194,28,248,22,212, +197,28,248,22,113,248,22,216,198,27,248,22,114,248,22,216,199,27,252,80,159, +41,57,35,200,201,202,198,204,28,249,22,252,17,2,195,194,198,249,22,65,20, 15,159,38,47,40,194,196,196,83,159,34,93,80,159,34,58,35,89,162,8,36, 39,50,67,113,113,45,108,105,115,116,69,223,0,27,248,80,158,36,38,198,27, 248,80,158,37,36,199,27,252,80,159,42,57,35,201,202,203,199,205,27,252,80, -159,43,57,35,202,203,204,199,206,28,28,249,22,252,11,2,195,197,249,22,252, -11,2,194,196,11,200,27,28,249,22,252,11,2,196,198,28,248,80,158,40,37, -195,20,15,159,39,37,40,249,22,59,20,15,159,41,38,40,196,194,27,28,249, -22,252,11,2,196,198,28,248,80,158,41,37,195,20,15,159,40,37,40,249,22, -59,20,15,159,42,38,40,196,194,28,248,80,158,41,37,193,249,22,59,20,15, -159,42,39,40,195,28,28,248,22,50,193,28,249,22,223,20,15,159,42,40,40, -248,22,52,195,10,249,22,223,20,15,159,42,41,40,248,22,52,195,11,250,22, -61,248,22,52,196,196,248,22,53,196,250,22,59,20,15,159,43,42,40,196,195, +159,43,57,35,202,203,204,199,206,28,28,249,22,252,17,2,195,197,249,22,252, +17,2,194,196,11,200,27,28,249,22,252,17,2,196,198,28,248,80,158,40,37, +195,20,15,159,39,37,40,249,22,65,20,15,159,41,38,40,196,194,27,28,249, +22,252,17,2,196,198,28,248,80,158,41,37,195,20,15,159,40,37,40,249,22, +65,20,15,159,42,38,40,196,194,28,248,80,158,41,37,193,249,22,65,20,15, +159,42,39,40,195,28,28,248,22,56,193,28,249,22,229,20,15,159,42,40,40, +248,22,58,195,10,249,22,229,20,15,159,42,41,40,248,22,58,195,11,250,22, +67,248,22,58,196,196,248,22,59,196,250,22,65,20,15,159,43,42,40,196,195, 83,159,34,93,80,159,34,56,35,89,162,8,36,36,41,70,97,112,112,108,121, -45,99,111,110,115,70,223,0,28,248,80,158,35,37,195,249,22,59,20,15,159, -36,39,40,195,28,28,248,22,50,195,28,249,22,223,20,15,159,36,40,40,248, -22,52,197,10,249,22,223,20,15,159,36,41,40,248,22,52,197,11,250,22,61, -248,22,52,198,196,248,22,53,198,250,22,59,20,15,159,37,42,40,196,197,83, +45,99,111,110,115,70,223,0,28,248,80,158,35,37,195,249,22,65,20,15,159, +36,39,40,195,28,28,248,22,56,195,28,249,22,229,20,15,159,36,40,40,248, +22,58,197,10,249,22,229,20,15,159,36,41,40,248,22,58,197,11,250,22,67, +248,22,58,198,196,248,22,59,198,250,22,65,20,15,159,37,42,40,196,197,83, 159,34,93,80,159,34,55,35,89,162,8,36,36,39,66,110,111,114,109,97,108, -71,223,0,28,249,22,252,11,2,195,196,28,248,80,158,35,37,194,20,15,159, -34,37,40,249,22,59,20,15,159,36,38,40,195,193,27,20,15,159,35,34,40, +71,223,0,28,249,22,252,17,2,195,196,28,248,80,158,35,37,194,20,15,159, +34,37,40,249,22,65,20,15,159,36,38,40,195,193,27,20,15,159,35,34,40, 27,20,15,159,36,35,40,27,20,15,159,37,36,40,89,162,8,36,35,50,9, -226,3,0,1,2,87,94,28,248,80,158,38,34,197,250,22,252,39,2,11,6, +226,3,0,1,2,87,94,28,248,80,158,38,34,197,250,22,252,45,2,11,6, 10,10,98,97,100,32,115,121,110,116,97,120,72,199,12,27,28,248,80,158,39, 35,248,80,158,40,36,199,28,248,80,158,39,37,248,80,158,40,36,248,80,158, -41,36,200,248,80,158,39,38,248,80,158,40,36,199,250,22,252,39,2,11,6, -10,10,98,97,100,32,115,121,110,116,97,120,73,200,250,22,252,39,2,11,6, -10,10,98,97,100,32,115,121,110,116,97,120,74,200,250,22,209,196,27,252,80, -159,47,57,35,206,203,204,201,34,28,249,22,252,11,2,194,198,28,248,80,158, -43,37,193,20,15,159,42,37,40,249,22,59,20,15,159,44,38,40,194,192,200, +41,36,200,248,80,158,39,38,248,80,158,40,36,199,250,22,252,45,2,11,6, +10,10,98,97,100,32,115,121,110,116,97,120,73,200,250,22,252,45,2,11,6, +10,10,98,97,100,32,115,121,110,116,97,120,74,200,250,22,215,196,27,252,80, +159,47,57,35,206,203,204,201,34,28,249,22,252,17,2,194,198,28,248,80,158, +43,37,193,20,15,159,42,37,40,249,22,65,20,15,159,44,38,40,194,192,200, 37,20,98,159,38,16,6,30,75,2,25,71,105,100,101,110,116,105,102,105,101, 114,63,76,2,2,29,2,27,2,31,2,24,2,33,16,14,18,97,64,104,101, 114,101,77,56,37,36,35,18,16,2,158,2,64,56,57,18,16,2,158,2,66, 56,58,18,100,9,8,28,37,36,35,16,8,8,27,11,2,77,71,117,110,113, 117,111,116,101,45,115,116,120,78,1,20,117,110,113,117,111,116,101,45,115,112, -108,105,99,105,110,103,45,115,116,120,79,3,1,7,101,110,118,50,52,57,51, +108,105,99,105,110,103,45,115,116,120,79,3,1,7,101,110,118,50,53,51,48, 80,2,80,2,80,16,4,8,26,11,67,105,110,45,102,111,114,109,81,3,1, -7,101,110,118,50,52,57,52,82,16,6,59,11,61,120,83,63,111,108,100,84, -3,1,7,101,110,118,50,52,57,54,85,2,85,18,16,2,158,65,113,117,111, +7,101,110,118,50,53,51,49,82,16,6,59,11,61,120,83,63,111,108,100,84, +3,1,7,101,110,118,50,53,51,51,85,2,85,18,16,2,158,65,113,117,111, 116,101,86,8,28,8,29,18,100,64,108,105,115,116,87,8,31,37,36,35,8, 27,8,26,16,6,8,30,11,61,97,88,61,100,89,3,1,7,101,110,118,50, -52,57,55,90,2,90,18,16,2,158,2,87,8,31,8,32,18,16,2,158,65, +53,51,52,90,2,90,18,16,2,158,2,87,8,31,8,32,18,16,2,158,65, 108,105,115,116,42,91,8,31,8,33,18,8,33,18,104,2,8,8,39,37,36, 35,8,27,8,26,16,8,8,38,11,64,102,111,114,109,92,2,71,2,70,3, -1,7,101,110,118,50,52,57,53,93,2,93,2,93,16,4,8,37,11,2,63, -3,1,7,101,110,118,50,52,57,56,94,16,6,8,36,11,2,83,65,108,101, -118,101,108,95,3,1,7,101,110,118,50,52,57,57,96,2,96,16,4,8,35, -11,2,69,3,1,7,101,110,118,50,53,48,48,97,16,4,8,34,11,65,102, -105,114,115,116,98,3,1,7,101,110,118,50,53,48,54,99,18,106,2,4,8, +1,7,101,110,118,50,53,51,50,93,2,93,2,93,16,4,8,37,11,2,63, +3,1,7,101,110,118,50,53,51,53,94,16,6,8,36,11,2,83,65,108,101, +118,101,108,95,3,1,7,101,110,118,50,53,51,54,96,2,96,16,4,8,35, +11,2,69,3,1,7,101,110,118,50,53,51,55,97,16,4,8,34,11,65,102, +105,114,115,116,98,3,1,7,101,110,118,50,53,52,51,99,18,106,2,4,8, 42,37,36,35,8,27,8,26,8,38,8,37,8,36,8,35,8,34,16,4,8, -41,11,64,114,101,115,116,100,3,1,7,101,110,118,50,53,48,57,101,16,8, +41,11,64,114,101,115,116,100,3,1,7,101,110,118,50,53,52,54,101,16,8, 8,40,11,64,117,113,115,100,102,65,111,108,100,45,108,103,61,108,104,3,1, -7,101,110,118,50,53,49,49,105,2,105,2,105,18,158,94,107,2,86,8,44, +7,101,110,118,50,53,52,56,105,2,105,2,105,18,158,94,107,2,86,8,44, 37,36,35,8,27,8,26,8,38,8,37,8,36,8,35,8,34,8,41,8,40, -16,4,8,43,11,65,114,101,115,116,120,106,3,1,7,101,110,118,50,53,49, -51,107,158,2,66,8,44,8,44,18,105,72,108,105,115,116,45,62,118,101,99, +16,4,8,43,11,65,114,101,115,116,120,106,3,1,7,101,110,118,50,53,53, +48,107,158,2,66,8,44,8,44,18,105,72,108,105,115,116,45,62,118,101,99, 116,111,114,108,8,47,37,36,35,8,27,8,26,8,38,8,37,8,36,8,35, -16,4,8,46,11,2,104,3,1,7,101,110,118,50,53,49,52,109,16,4,8, -45,11,62,108,50,110,3,1,7,101,110,118,50,53,49,53,111,18,105,63,98, +16,4,8,46,11,2,104,3,1,7,101,110,118,50,53,53,49,109,16,4,8, +45,11,62,108,50,110,3,1,7,101,110,118,50,53,53,50,111,18,105,63,98, 111,120,112,8,50,37,36,35,8,27,8,26,8,38,8,37,8,36,8,35,16, -4,8,49,11,61,118,113,3,1,7,101,110,118,50,53,49,54,114,16,4,8, -48,11,62,113,118,115,3,1,7,101,110,118,50,53,49,55,116,11,16,5,93, -2,9,27,20,15,159,35,34,39,89,162,34,35,48,9,224,1,0,87,94,28, -248,80,158,36,34,195,12,250,22,252,39,2,11,6,10,10,98,97,100,32,115, +4,8,49,11,61,118,113,3,1,7,101,110,118,50,53,53,51,114,16,4,8, +48,11,62,113,118,115,3,1,7,101,110,118,50,53,53,52,116,11,16,5,93, +2,5,27,20,15,159,35,34,39,89,162,34,35,48,9,224,1,0,87,94,28, +248,80,158,36,34,195,12,250,22,252,45,2,11,6,10,10,98,97,100,32,115, 121,110,116,97,120,117,197,27,248,80,158,37,35,196,28,248,80,158,37,36,193, 20,15,159,36,35,39,28,28,248,80,158,37,37,193,248,80,158,37,36,248,80, -158,38,35,194,10,248,80,158,37,38,193,250,22,209,196,251,22,59,20,15,159, -43,36,39,248,80,158,44,38,200,249,22,51,20,15,159,45,37,39,248,80,158, +158,38,35,194,10,248,80,158,37,38,193,250,22,215,196,251,22,65,20,15,159, +43,36,39,248,80,158,44,38,200,249,22,57,20,15,159,45,37,39,248,80,158, 46,35,202,20,15,159,43,38,39,198,35,20,98,159,34,16,5,2,33,2,27, 2,31,2,29,2,24,16,5,18,16,2,158,2,77,56,8,51,18,100,10,8, -55,37,36,35,16,4,8,54,11,2,77,3,1,7,101,110,118,50,53,49,57, -118,16,4,8,53,11,2,83,3,1,7,101,110,118,50,53,50,48,119,16,4, -8,52,11,61,101,120,3,1,7,101,110,118,50,53,50,49,121,18,16,2,158, -62,105,102,122,8,55,8,56,18,16,2,158,2,9,8,55,8,57,18,158,11, -8,55,11,16,5,93,2,5,27,20,15,159,35,34,40,89,162,34,35,51,9, -224,1,0,87,94,28,248,80,158,36,34,195,250,22,252,39,2,11,6,10,10, +55,37,36,35,16,4,8,54,11,2,77,3,1,7,101,110,118,50,53,53,54, +118,16,4,8,53,11,2,83,3,1,7,101,110,118,50,53,53,55,119,16,4, +8,52,11,61,101,120,3,1,7,101,110,118,50,53,53,56,121,18,16,2,158, +62,105,102,122,8,55,8,56,18,16,2,158,2,5,8,55,8,57,18,158,11, +8,55,11,16,5,93,2,9,27,20,15,159,35,34,40,89,162,34,35,51,9, +224,1,0,87,94,28,248,80,158,36,34,195,250,22,252,45,2,11,6,10,10, 98,97,100,32,115,121,110,116,97,120,123,197,12,27,248,80,158,37,35,196,28, 248,80,158,37,36,193,20,15,159,36,35,40,28,28,248,80,158,37,37,193,248, 80,158,37,36,248,80,158,38,35,194,11,248,80,158,37,38,193,28,248,80,158, -37,39,193,250,22,209,196,250,22,59,20,15,159,42,36,40,248,22,59,249,22, -59,67,111,114,45,112,97,114,116,124,248,80,158,46,38,202,251,22,59,20,15, -159,46,37,40,2,124,2,124,249,22,51,20,15,159,48,38,40,248,80,158,49, -35,205,198,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97, +37,39,193,250,22,215,196,250,22,65,20,15,159,42,36,40,248,22,65,249,22, +65,67,111,114,45,112,97,114,116,124,248,80,158,46,38,202,251,22,65,20,15, +159,46,37,40,2,124,2,124,249,22,57,20,15,159,48,38,40,248,80,158,49, +35,205,198,250,22,252,45,2,11,6,10,10,98,97,100,32,115,121,110,116,97, 120,125,198,35,20,98,159,34,16,6,2,75,2,27,2,31,2,29,2,24,2, 33,16,5,18,8,51,18,100,11,8,61,37,36,35,16,4,8,60,11,2,77, -3,1,7,101,110,118,50,53,50,51,126,16,4,8,59,11,2,83,3,1,7, -101,110,118,50,53,50,52,127,16,4,8,58,11,2,120,3,1,7,101,110,118, -50,53,50,53,128,18,101,2,6,8,63,37,36,35,8,60,8,59,8,58,16, -4,8,62,11,63,116,109,112,129,3,1,7,101,110,118,50,53,50,54,130,18, -16,2,158,2,122,8,63,8,64,18,16,2,158,2,5,8,63,8,65,11,93, +3,1,7,101,110,118,50,53,54,48,126,16,4,8,59,11,2,83,3,1,7, +101,110,118,50,53,54,49,127,16,4,8,58,11,2,120,3,1,7,101,110,118, +50,53,54,50,128,18,101,2,6,8,63,37,36,35,8,60,8,59,8,58,16, +4,8,62,11,63,116,109,112,129,3,1,7,101,110,118,50,53,54,51,130,18, +16,2,158,2,122,8,63,8,64,18,16,2,158,2,9,8,63,8,65,11,93, 83,159,34,93,80,159,34,34,35,32,131,89,162,34,36,39,2,4,222,28,248, -22,58,193,249,22,65,194,195,250,22,252,40,2,2,66,6,11,11,112,114,111, +22,64,193,249,22,71,194,195,250,22,252,46,2,2,66,6,11,11,112,114,111, 112,101,114,32,108,105,115,116,132,195,93,68,35,37,107,101,114,110,101,108,133, 94,2,25,2,133,0}; EVAL_ONE_SIZED_STR((char *)expr, 4835); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,49,252,234,4,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,55,49,252,234,4,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,66,35,37,99,111, 110,100,1,29,2,11,11,10,10,10,34,80,158,34,34,20,98,159,34,16,0, 16,0,11,11,16,0,34,11,16,1,64,99,111,110,100,3,16,1,11,16,1, @@ -341,33 +341,33 @@ 89,162,8,64,37,56,64,108,111,111,112,4,223,0,28,248,80,158,35,36,195, 20,15,159,34,35,39,28,248,80,158,35,37,195,27,248,80,158,36,38,196,27, 248,80,158,37,35,197,28,248,80,158,37,37,194,27,248,80,158,38,38,195,27, -248,80,158,39,35,196,27,28,248,80,158,40,34,195,249,22,223,196,20,15,159, -41,36,39,11,87,94,28,192,28,248,80,158,40,37,196,251,22,252,39,2,11, +248,80,158,39,35,196,27,28,248,80,158,40,34,195,249,22,229,196,20,15,159, +41,36,39,11,87,94,28,192,28,248,80,158,40,37,196,251,22,252,45,2,11, 6,39,39,98,97,100,32,115,121,110,116,97,120,32,40,96,101,108,115,101,39, 32,99,108,97,117,115,101,32,109,117,115,116,32,98,101,32,108,97,115,116,41, 5,202,200,12,12,28,28,248,80,158,40,37,194,28,248,80,158,40,34,248,80, -158,41,38,195,249,22,223,248,80,158,42,38,196,20,15,159,41,37,39,11,11, +158,41,38,195,249,22,229,248,80,158,42,38,196,20,15,159,41,37,39,11,11, 28,28,248,80,158,40,37,248,80,158,41,35,195,248,80,158,40,36,248,80,158, -41,35,248,80,158,42,35,196,11,27,28,193,10,195,27,247,22,48,250,22,59, -20,15,159,44,38,39,248,22,59,249,22,59,248,22,59,199,199,251,22,59,20, -15,159,48,39,39,199,249,22,59,248,80,158,51,38,248,80,158,52,35,206,201, -250,80,159,51,53,35,23,18,23,15,11,251,22,252,39,2,11,6,36,36,98, +41,35,248,80,158,42,35,196,11,27,28,193,10,195,27,247,22,54,250,22,65, +20,15,159,44,38,39,248,22,65,249,22,65,248,22,65,199,199,251,22,65,20, +15,159,48,39,39,199,249,22,65,248,80,158,51,38,248,80,158,52,35,206,201, +250,80,159,51,53,35,23,18,23,15,11,251,22,252,45,2,11,6,36,36,98, 97,100,32,115,121,110,116,97,120,32,40,98,97,100,32,99,108,97,117,115,101, 32,102,111,114,109,32,119,105,116,104,32,61,62,41,6,202,200,28,192,28,200, -250,22,59,20,15,159,42,40,39,10,249,22,51,20,15,159,44,41,39,198,249, -22,51,20,15,159,41,42,39,195,28,248,80,158,40,36,194,27,247,22,48,250, -22,59,20,15,159,43,43,39,248,22,59,249,22,59,248,22,59,199,201,251,22, -59,20,15,159,47,44,39,199,199,250,80,159,50,53,35,23,17,206,11,251,22, -59,20,15,159,43,45,39,198,249,22,51,20,15,159,45,46,39,199,250,80,159, -46,53,35,205,202,11,251,22,252,39,2,11,6,44,44,98,97,100,32,115,121, +250,22,65,20,15,159,42,40,39,10,249,22,57,20,15,159,44,41,39,198,249, +22,57,20,15,159,41,42,39,195,28,248,80,158,40,36,194,27,247,22,54,250, +22,65,20,15,159,43,43,39,248,22,65,249,22,65,248,22,65,199,201,251,22, +65,20,15,159,47,44,39,199,199,250,80,159,50,53,35,23,17,206,11,251,22, +65,20,15,159,43,45,39,198,249,22,57,20,15,159,45,46,39,199,250,80,159, +46,53,35,205,202,11,251,22,252,45,2,11,6,44,44,98,97,100,32,115,121, 110,116,97,120,32,40,99,108,97,117,115,101,32,105,115,32,110,111,116,32,97, 32,116,101,115,116,45,118,97,108,117,101,32,112,97,105,114,41,7,199,197,251, -22,252,39,2,11,6,46,46,98,97,100,32,115,121,110,116,97,120,32,40,98, +22,252,45,2,11,6,46,46,98,97,100,32,115,121,110,116,97,120,32,40,98, 111,100,121,32,109,117,115,116,32,99,111,110,116,97,105,110,32,97,32,108,105, 115,116,32,111,102,32,112,97,105,114,115,41,8,197,198,27,20,15,159,35,34, 39,89,162,8,36,35,45,9,224,1,0,87,94,28,248,80,158,36,34,195,250, -22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,9,197,12, -250,22,209,195,27,248,80,158,40,35,199,250,80,159,42,53,35,201,195,10,197, +22,252,45,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,9,197,12, +250,22,215,195,27,248,80,158,40,35,199,250,80,159,42,53,35,201,195,10,197, 35,20,98,159,35,16,5,30,10,65,35,37,115,116,120,11,71,105,100,101,110, 116,105,102,105,101,114,63,12,2,30,13,2,11,67,115,116,120,45,99,100,114, 14,6,30,15,2,11,69,115,116,120,45,110,117,108,108,63,16,10,30,17,2, @@ -376,28 +376,28 @@ 11,16,2,2,3,2,2,98,36,10,35,11,94,159,71,35,37,113,113,45,97, 110,100,45,111,114,22,9,11,159,2,11,9,11,16,0,96,35,8,254,1,11, 16,0,18,158,93,102,64,118,111,105,100,23,45,37,36,35,16,4,44,11,2, -21,3,1,7,101,110,118,50,53,51,48,24,16,4,43,11,67,105,110,45,102, -111,114,109,25,3,1,7,101,110,118,50,53,51,49,26,16,6,42,11,64,102, -111,114,109,27,66,115,101,114,114,111,114,28,3,1,7,101,110,118,50,53,51, -50,29,2,29,16,4,41,11,2,4,3,1,7,101,110,118,50,53,51,52,30, +21,3,1,7,101,110,118,50,53,54,55,24,16,4,43,11,67,105,110,45,102, +111,114,109,25,3,1,7,101,110,118,50,53,54,56,26,16,6,42,11,64,102, +111,114,109,27,66,115,101,114,114,111,114,28,3,1,7,101,110,118,50,53,54, +57,29,2,29,16,4,41,11,2,4,3,1,7,101,110,118,50,53,55,49,30, 16,6,40,11,65,116,101,115,116,115,31,66,102,105,114,115,116,63,32,3,1, -7,101,110,118,50,53,51,53,33,2,33,45,18,104,64,101,108,115,101,34,48, +7,101,110,118,50,53,55,50,33,2,33,45,18,104,64,101,108,115,101,34,48, 37,36,35,44,43,42,41,40,16,6,47,11,64,108,105,110,101,35,64,114,101, -115,116,36,3,1,7,101,110,118,50,53,51,54,37,2,37,16,6,46,11,64, -116,101,115,116,38,65,118,97,108,117,101,39,3,1,7,101,110,118,50,53,51, -55,40,2,40,18,104,62,61,62,41,50,37,36,35,44,43,42,41,40,47,16, +115,116,36,3,1,7,101,110,118,50,53,55,51,37,2,37,16,6,46,11,64, +116,101,115,116,38,65,118,97,108,117,101,39,3,1,7,101,110,118,50,53,55, +52,40,2,40,18,104,62,61,62,41,50,37,36,35,44,43,42,41,40,47,16, 8,49,11,2,38,2,39,65,101,108,115,101,63,42,2,40,2,40,2,40,18, 105,70,108,101,116,45,118,97,108,117,101,115,43,52,37,36,35,44,43,42,41, -40,47,49,16,4,51,11,63,103,101,110,44,3,1,7,101,110,118,50,53,51, -56,45,18,16,2,158,62,105,102,46,52,53,18,16,2,158,2,46,50,54,18, +40,47,49,16,4,51,11,63,103,101,110,44,3,1,7,101,110,118,50,53,55, +53,45,18,16,2,158,62,105,102,46,52,53,18,16,2,158,2,46,50,54,18, 16,2,158,2,0,50,55,18,55,18,105,2,43,57,37,36,35,44,43,42,41, -40,47,49,16,4,56,11,2,44,3,1,7,101,110,118,50,53,51,57,47,18, +40,47,49,16,4,56,11,2,44,3,1,7,101,110,118,50,53,55,54,47,18, 16,2,158,2,46,57,58,18,54,18,55,11,9,93,68,35,37,107,101,114,110, 101,108,48,95,2,11,2,22,2,48,0}; EVAL_ONE_SIZED_STR((char *)expr, 1270); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,25,252,68,4,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,55,25,252,68,4,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,73,35,37,115,116, 114,117,99,116,45,105,110,102,111,1,29,2,11,11,10,10,10,34,80,158,34, 34,20,98,159,34,16,9,30,3,2,2,74,105,100,101,110,116,105,102,105,101, @@ -415,45 +415,45 @@ 0,11,11,16,2,2,9,2,4,36,11,16,6,2,19,2,15,2,21,2,17, 2,13,2,11,16,6,11,11,11,11,11,11,16,6,2,19,2,15,2,21,2, 17,2,13,2,11,40,40,9,100,83,159,34,93,80,159,34,34,35,89,162,34, -35,38,2,4,223,0,27,248,22,252,9,2,195,28,192,192,248,80,158,36,35, +35,38,2,4,223,0,27,248,22,252,15,2,195,28,192,192,248,80,158,36,35, 195,83,159,34,93,80,159,34,36,35,89,162,34,36,42,2,9,223,0,28,248, -22,57,195,10,28,248,22,50,195,28,248,22,57,248,22,53,196,27,248,22,52, -196,27,248,22,252,9,2,194,28,192,192,248,80,158,37,35,194,28,248,194,248, -22,52,196,27,248,22,53,196,28,248,22,57,193,10,28,248,22,50,193,28,248, -22,57,248,22,53,194,27,248,22,52,194,27,248,22,252,9,2,194,28,192,192, -248,80,158,38,35,194,28,248,195,248,22,52,194,27,248,22,53,194,28,248,22, -57,193,10,28,248,22,50,193,28,248,22,57,248,22,53,194,27,248,22,52,194, -27,248,22,252,9,2,194,28,192,192,248,80,158,39,35,194,28,248,196,248,22, -52,194,249,80,159,38,36,35,197,248,22,53,195,11,11,11,11,11,11,83,159, -34,93,80,159,34,37,35,89,162,34,35,42,2,11,223,0,28,248,22,58,194, -28,249,22,181,248,22,64,196,40,28,27,248,22,52,195,27,248,22,252,9,2, -194,28,192,192,248,80,158,37,35,194,28,27,248,22,78,195,27,248,22,252,9, -2,194,28,192,192,248,80,158,37,35,194,28,27,248,22,87,195,27,248,22,252, -9,2,194,28,192,192,248,80,158,37,35,194,28,27,80,158,35,35,27,249,22, -70,197,37,28,248,22,57,193,10,28,248,22,50,193,28,248,22,57,248,22,53, -194,27,248,22,52,194,27,248,22,252,9,2,194,28,192,192,248,80,158,39,35, -194,28,248,194,248,22,52,194,27,248,22,53,194,28,248,22,57,193,10,28,248, -22,50,193,28,248,22,57,248,22,53,194,27,248,22,52,194,27,248,22,252,9, -2,194,28,192,192,248,80,158,40,35,194,28,248,195,248,22,52,194,249,80,159, -39,36,35,196,248,22,53,195,11,11,11,11,28,27,249,22,70,196,38,28,248, -22,57,193,10,28,248,22,50,193,28,248,22,57,248,22,53,194,27,248,22,52, -194,27,248,22,252,9,2,194,28,192,192,248,80,158,38,35,194,28,27,248,22, -52,194,27,248,22,252,9,2,194,28,192,192,248,80,158,38,35,194,27,248,22, -53,194,28,248,22,57,193,10,28,248,22,50,193,28,248,22,57,248,22,53,194, -27,248,22,52,194,27,248,22,252,9,2,194,28,192,192,248,80,158,39,35,194, -28,27,248,22,52,194,27,248,22,252,9,2,194,28,192,192,248,80,158,39,35, -194,249,80,159,38,36,35,80,159,38,34,35,248,22,53,195,11,11,11,11,27, -27,249,22,70,197,39,27,248,22,252,9,2,194,28,192,192,248,80,158,38,35, -194,28,192,192,249,22,252,11,2,10,249,22,70,198,39,11,11,11,11,11,11, -11,83,159,34,93,80,159,34,38,35,22,52,83,159,34,93,80,159,34,39,35, -22,78,83,159,34,93,80,159,34,40,35,22,87,83,159,34,93,80,159,34,41, -35,22,90,83,159,34,93,80,159,34,42,35,32,22,89,162,34,35,37,2,21, -222,249,22,70,194,38,95,68,35,37,107,101,114,110,101,108,23,2,6,71,35, +22,63,195,10,28,248,22,56,195,28,248,22,63,248,22,59,196,27,248,22,58, +196,27,248,22,252,15,2,194,28,192,192,248,80,158,37,35,194,28,248,194,248, +22,58,196,27,248,22,59,196,28,248,22,63,193,10,28,248,22,56,193,28,248, +22,63,248,22,59,194,27,248,22,58,194,27,248,22,252,15,2,194,28,192,192, +248,80,158,38,35,194,28,248,195,248,22,58,194,27,248,22,59,194,28,248,22, +63,193,10,28,248,22,56,193,28,248,22,63,248,22,59,194,27,248,22,58,194, +27,248,22,252,15,2,194,28,192,192,248,80,158,39,35,194,28,248,196,248,22, +58,194,249,80,159,38,36,35,197,248,22,59,195,11,11,11,11,11,11,83,159, +34,93,80,159,34,37,35,89,162,34,35,42,2,11,223,0,28,248,22,64,194, +28,249,22,187,248,22,70,196,40,28,27,248,22,58,195,27,248,22,252,15,2, +194,28,192,192,248,80,158,37,35,194,28,27,248,22,84,195,27,248,22,252,15, +2,194,28,192,192,248,80,158,37,35,194,28,27,248,22,93,195,27,248,22,252, +15,2,194,28,192,192,248,80,158,37,35,194,28,27,80,158,35,35,27,249,22, +76,197,37,28,248,22,63,193,10,28,248,22,56,193,28,248,22,63,248,22,59, +194,27,248,22,58,194,27,248,22,252,15,2,194,28,192,192,248,80,158,39,35, +194,28,248,194,248,22,58,194,27,248,22,59,194,28,248,22,63,193,10,28,248, +22,56,193,28,248,22,63,248,22,59,194,27,248,22,58,194,27,248,22,252,15, +2,194,28,192,192,248,80,158,40,35,194,28,248,195,248,22,58,194,249,80,159, +39,36,35,196,248,22,59,195,11,11,11,11,28,27,249,22,76,196,38,28,248, +22,63,193,10,28,248,22,56,193,28,248,22,63,248,22,59,194,27,248,22,58, +194,27,248,22,252,15,2,194,28,192,192,248,80,158,38,35,194,28,27,248,22, +58,194,27,248,22,252,15,2,194,28,192,192,248,80,158,38,35,194,27,248,22, +59,194,28,248,22,63,193,10,28,248,22,56,193,28,248,22,63,248,22,59,194, +27,248,22,58,194,27,248,22,252,15,2,194,28,192,192,248,80,158,39,35,194, +28,27,248,22,58,194,27,248,22,252,15,2,194,28,192,192,248,80,158,39,35, +194,249,80,159,38,36,35,80,159,38,34,35,248,22,59,195,11,11,11,11,27, +27,249,22,76,197,39,27,248,22,252,15,2,194,28,192,192,248,80,158,38,35, +194,28,192,192,249,22,252,17,2,10,249,22,76,198,39,11,11,11,11,11,11, +11,83,159,34,93,80,159,34,38,35,22,58,83,159,34,93,80,159,34,39,35, +22,84,83,159,34,93,80,159,34,40,35,22,93,83,159,34,93,80,159,34,41, +35,22,96,83,159,34,93,80,159,34,42,35,32,22,89,162,34,35,37,2,21, +222,249,22,76,194,38,95,68,35,37,107,101,114,110,101,108,23,2,6,71,35, 37,113,113,45,97,110,100,45,111,114,24,9,0}; EVAL_ONE_SIZED_STR((char *)expr, 1104); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,37,252,208,4,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,55,37,252,208,4,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,71,35,37,100,115, 45,104,101,108,112,101,114,1,29,2,11,11,10,10,10,34,80,158,34,34,20, 98,159,34,16,6,30,3,2,2,1,20,108,105,115,116,45,62,105,109,109,117, @@ -466,71 +466,71 @@ 8,1,23,115,116,114,117,99,116,45,105,110,102,111,45,109,117,116,97,116,111, 114,45,105,100,115,15,2,16,0,11,11,16,1,2,4,35,11,16,1,2,6, 16,1,11,16,1,2,6,35,35,9,94,83,159,34,93,80,159,34,34,35,89, -162,8,36,35,46,2,4,223,0,28,248,22,57,194,9,249,22,56,248,22,52, -196,27,248,22,53,197,28,248,22,57,193,9,249,22,56,248,22,52,195,27,248, -22,53,196,28,248,22,57,193,9,249,22,56,248,22,52,195,248,80,159,43,34, -35,248,22,53,196,83,159,34,93,80,159,34,35,35,89,162,34,38,8,32,2, -6,223,0,27,28,197,247,22,48,11,27,28,198,89,162,8,36,35,40,62,113, -115,16,223,1,28,193,249,22,59,194,249,22,59,72,113,117,111,116,101,45,115, -121,110,116,97,120,17,197,11,22,7,27,28,197,249,22,252,87,3,199,32,18, +162,8,36,35,46,2,4,223,0,28,248,22,63,194,9,249,22,62,248,22,58, +196,27,248,22,59,197,28,248,22,63,193,9,249,22,62,248,22,58,195,27,248, +22,59,196,28,248,22,63,193,9,249,22,62,248,22,58,195,248,80,159,43,34, +35,248,22,59,196,83,159,34,93,80,159,34,35,35,89,162,34,38,8,32,2, +6,223,0,27,28,197,247,22,54,11,27,28,198,89,162,8,36,35,40,62,113, +115,16,223,1,28,193,249,22,65,194,249,22,65,72,113,117,111,116,101,45,115, +121,110,116,97,120,17,197,11,22,7,27,28,197,249,22,252,91,3,199,32,18, 89,162,8,44,34,34,9,222,11,11,87,94,28,197,28,28,248,80,158,38,36, -193,248,22,252,9,2,248,80,158,39,37,194,10,251,22,252,39,2,11,28,248, +193,248,22,252,15,2,248,80,158,39,37,194,10,251,22,252,45,2,11,28,248, 80,158,42,36,197,6,63,63,112,97,114,101,110,116,32,115,116,114,117,99,116, 32,105,110,102,111,114,109,97,116,105,111,110,32,100,111,101,115,32,110,111,116, 32,105,110,99,108,117,100,101,32,97,32,116,121,112,101,32,102,111,114,32,115, -117,98,116,121,112,105,110,103,19,249,22,252,184,1,6,32,32,112,97,114,101, +117,98,116,121,112,105,110,103,19,249,22,252,190,1,6,32,32,112,97,114,101, 110,116,32,115,116,114,117,99,116,32,116,121,112,101,32,110,111,116,32,100,101, -102,105,110,101,100,126,97,20,28,198,249,22,252,184,1,6,43,43,32,40,126, +102,105,110,101,100,126,97,20,28,198,249,22,252,190,1,6,43,43,32,40,126, 97,32,100,111,101,115,32,110,111,116,32,110,97,109,101,32,115,116,114,117,99, 116,32,116,121,112,101,32,105,110,102,111,114,109,97,116,105,111,110,41,21,248, -22,210,206,6,0,0,22,200,201,12,12,249,22,7,28,194,248,80,158,40,37, +22,216,206,6,0,0,22,200,201,12,12,249,22,7,28,194,248,80,158,40,37, 195,11,28,200,91,159,39,11,90,161,36,34,11,28,199,249,22,7,249,22,2, 204,248,80,158,49,38,204,249,22,2,204,248,80,158,49,39,204,249,22,7,9, -9,90,161,35,36,11,248,22,88,206,90,161,35,37,11,28,206,32,23,89,162, -34,35,37,64,119,114,97,112,24,222,249,22,51,74,108,105,115,116,45,105,109, +9,90,161,35,36,11,248,22,94,206,90,161,35,37,11,28,206,32,23,89,162, +34,35,37,64,119,114,97,112,24,222,249,22,57,74,108,105,115,116,45,105,109, 109,117,116,97,98,108,101,25,194,22,7,90,161,35,38,11,28,206,89,162,8, -36,35,42,70,116,111,116,97,108,45,119,114,97,112,26,223,9,250,22,59,63, -108,101,116,27,248,22,59,249,22,61,198,21,93,93,1,22,115,121,110,116,97, +36,35,42,70,116,111,116,97,108,45,119,114,97,112,26,223,9,250,22,65,63, +108,101,116,27,248,22,65,249,22,67,198,21,93,93,1,22,115,121,110,116,97, 120,45,108,111,99,97,108,45,99,101,114,116,105,102,105,101,114,28,196,22,7, -248,197,248,197,253,22,60,248,23,17,248,22,52,23,23,248,23,17,248,22,78, -23,23,248,23,17,248,22,87,23,23,248,204,27,249,22,65,249,22,2,23,22, +248,197,248,197,253,22,66,248,23,17,248,22,58,23,23,248,23,17,248,22,84, +23,23,248,23,17,248,22,93,23,23,248,204,27,249,22,71,249,22,2,23,22, 248,32,29,89,162,34,35,43,71,101,118,101,114,121,45,111,116,104,101,114,30, -222,28,248,22,57,193,9,28,248,22,57,248,22,53,194,249,22,51,248,22,52, -195,9,27,248,22,80,194,27,249,22,51,248,22,52,197,9,28,248,22,57,194, -192,28,248,22,57,248,22,53,195,249,22,51,248,22,52,196,194,249,32,31,89, -162,8,64,36,45,64,108,111,111,112,32,222,28,248,22,57,193,193,28,248,22, -57,248,22,53,194,249,22,51,248,22,52,195,195,27,248,22,80,194,27,249,22, -51,248,22,52,197,197,28,248,22,57,194,192,28,248,22,57,248,22,53,195,249, -22,51,248,22,52,196,194,27,248,22,80,195,27,249,22,51,248,22,52,198,196, -28,248,22,57,194,192,28,248,22,57,248,22,53,195,249,22,51,248,22,52,196, -194,249,2,31,248,22,80,196,249,22,51,248,22,52,198,196,248,22,80,196,249, -22,51,248,22,52,198,196,23,17,204,28,248,22,57,193,9,249,22,56,248,22, -52,195,27,248,22,53,196,28,248,22,57,193,9,249,22,56,248,22,52,195,248, -80,159,8,26,34,35,248,22,53,196,248,204,27,249,22,65,249,22,2,23,22, -28,248,22,57,23,17,9,248,2,29,248,22,53,23,18,205,28,248,22,57,193, -9,249,22,56,248,22,52,195,27,248,22,53,196,28,248,22,57,193,9,249,22, -56,248,22,52,195,248,80,159,8,26,34,35,248,22,53,196,28,23,20,248,23, +222,28,248,22,63,193,9,28,248,22,63,248,22,59,194,249,22,57,248,22,58, +195,9,27,248,22,86,194,27,249,22,57,248,22,58,197,9,28,248,22,63,194, +192,28,248,22,63,248,22,59,195,249,22,57,248,22,58,196,194,249,32,31,89, +162,8,64,36,45,64,108,111,111,112,32,222,28,248,22,63,193,193,28,248,22, +63,248,22,59,194,249,22,57,248,22,58,195,195,27,248,22,86,194,27,249,22, +57,248,22,58,197,197,28,248,22,63,194,192,28,248,22,63,248,22,59,195,249, +22,57,248,22,58,196,194,27,248,22,86,195,27,249,22,57,248,22,58,198,196, +28,248,22,63,194,192,28,248,22,63,248,22,59,195,249,22,57,248,22,58,196, +194,249,2,31,248,22,86,196,249,22,57,248,22,58,198,196,248,22,86,196,249, +22,57,248,22,58,198,196,23,17,204,28,248,22,63,193,9,249,22,62,248,22, +58,195,27,248,22,59,196,28,248,22,63,193,9,249,22,62,248,22,58,195,248, +80,159,8,26,34,35,248,22,59,196,248,204,27,249,22,71,249,22,2,23,22, +28,248,22,63,23,17,9,248,2,29,248,22,59,23,18,205,28,248,22,63,193, +9,249,22,62,248,22,58,195,27,248,22,59,196,28,248,22,63,193,9,249,22, +62,248,22,58,195,248,80,159,8,26,34,35,248,22,59,196,28,23,20,248,23, 17,23,21,10,11,97,68,35,37,107,101,114,110,101,108,33,65,35,37,115,116, 120,34,71,35,37,113,113,45,97,110,100,45,111,114,35,66,35,37,99,111,110, 100,36,2,8,9,0}; EVAL_ONE_SIZED_STR((char *)expr, 1244); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,123,252,43,12,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,55,123,252,43,12,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,74,35,37,100,101, 102,105,110,101,45,101,116,45,97,108,1,29,2,11,11,10,10,10,34,80,158, 34,34,20,98,159,34,16,0,16,0,11,11,16,0,34,11,16,6,66,108,101, -116,47,101,99,3,66,117,110,108,101,115,115,4,73,100,101,102,105,110,101,45, -115,116,114,117,99,116,5,74,45,100,101,102,105,110,101,45,115,121,110,116,97, -120,6,64,119,104,101,110,7,67,45,100,101,102,105,110,101,8,16,6,11,11, +116,47,101,99,3,66,117,110,108,101,115,115,4,64,119,104,101,110,5,73,100, +101,102,105,110,101,45,115,116,114,117,99,116,6,74,45,100,101,102,105,110,101, +45,115,121,110,116,97,120,7,67,45,100,101,102,105,110,101,8,16,6,11,11, 11,11,11,11,16,6,2,3,2,4,2,5,2,6,2,7,2,8,34,40,97, -16,5,94,2,8,2,6,27,20,15,159,35,34,39,27,89,162,8,36,35,37, +16,5,94,2,8,2,7,27,20,15,159,35,34,39,27,89,162,8,36,35,37, 69,109,107,45,100,101,102,105,110,101,9,224,2,1,89,162,8,36,35,53,9, 225,1,0,2,27,248,80,158,38,34,197,27,248,80,158,39,35,194,28,248,80, -158,39,36,193,250,22,209,198,250,22,61,200,248,22,59,199,249,80,158,46,37, +158,39,36,193,250,22,215,198,250,22,67,200,248,22,65,199,249,80,158,46,37, 248,80,158,47,38,248,80,158,48,34,203,9,200,27,248,80,158,40,34,195,250, -22,209,20,15,159,42,35,39,250,22,59,201,248,22,59,248,80,158,47,35,201, -250,22,61,66,108,97,109,98,100,97,10,248,80,158,49,34,203,249,80,158,50, +22,215,20,15,159,42,35,39,250,22,65,201,248,22,65,248,80,158,47,35,201, +250,22,67,66,108,97,109,98,100,97,10,248,80,158,49,34,203,249,80,158,50, 37,248,80,158,51,38,204,9,201,249,22,7,248,195,20,15,159,39,36,39,248, 195,20,15,159,39,37,39,39,20,98,159,34,16,5,30,11,65,35,37,115,116, 120,12,67,115,116,120,45,99,100,114,13,6,30,14,2,12,67,115,116,120,45, @@ -543,150 +543,150 @@ 114,24,9,11,159,73,35,37,115,116,114,117,99,116,45,105,110,102,111,25,9, 11,159,66,35,37,99,111,110,100,26,9,11,159,2,19,9,11,159,2,12,9, 11,16,0,96,35,8,254,1,11,16,0,18,103,2,23,46,37,36,35,16,4, -45,11,2,23,3,1,7,101,110,118,50,53,55,48,27,16,4,44,11,64,98, -97,115,101,28,3,1,7,101,110,118,50,53,55,50,29,16,4,43,11,64,99, -111,100,101,30,3,1,7,101,110,118,50,53,55,51,31,16,4,42,11,64,98, -111,100,121,32,3,1,7,101,110,118,50,53,55,52,33,16,4,41,11,65,102, -105,114,115,116,34,3,1,7,101,110,118,50,53,55,53,35,16,4,40,11,65, -112,98,111,100,121,36,3,1,7,101,110,118,50,53,55,54,37,18,99,73,100, +45,11,2,23,3,1,7,101,110,118,50,54,48,55,27,16,4,44,11,64,98, +97,115,101,28,3,1,7,101,110,118,50,54,48,57,29,16,4,43,11,64,99, +111,100,101,30,3,1,7,101,110,118,50,54,49,48,31,16,4,42,11,64,98, +111,100,121,32,3,1,7,101,110,118,50,54,49,49,33,16,4,41,11,65,102, +105,114,115,116,34,3,1,7,101,110,118,50,54,49,50,35,16,4,40,11,65, +112,98,111,100,121,36,3,1,7,101,110,118,50,54,49,51,37,18,99,73,100, 101,102,105,110,101,45,118,97,108,117,101,115,38,48,37,36,35,45,16,4,47, -11,2,9,3,1,7,101,110,118,50,53,55,49,39,18,16,2,158,75,100,101, +11,2,9,3,1,7,101,110,118,50,54,48,56,39,18,16,2,158,75,100,101, 102,105,110,101,45,115,121,110,116,97,120,101,115,40,48,49,11,16,5,93,2, -7,89,162,34,35,47,9,223,0,27,248,22,216,195,28,28,192,249,22,183,248, -22,64,195,36,11,250,22,209,20,15,159,38,34,36,250,22,59,20,15,159,41, -35,36,248,80,158,42,34,248,80,158,43,35,202,249,22,61,20,15,159,43,36, -36,248,80,158,44,35,248,80,158,45,35,204,197,250,22,252,39,2,11,6,10, +5,89,162,34,35,47,9,223,0,27,248,22,222,195,28,28,192,249,22,189,248, +22,70,195,36,11,250,22,215,20,15,159,38,34,36,250,22,65,20,15,159,41, +35,36,248,80,158,42,34,248,80,158,43,35,202,249,22,67,20,15,159,43,36, +36,248,80,158,44,35,248,80,158,45,35,204,197,250,22,252,45,2,11,6,10, 10,98,97,100,32,115,121,110,116,97,120,41,197,34,20,98,159,34,16,2,2, 14,2,11,16,3,18,99,2,23,52,37,36,35,16,4,51,11,61,120,42,3, -1,7,101,110,118,50,53,55,56,43,16,4,50,11,61,108,44,3,1,7,101, -110,118,50,53,55,57,45,18,16,2,158,62,105,102,46,52,53,18,16,2,158, +1,7,101,110,118,50,54,49,53,43,16,4,50,11,61,108,44,3,1,7,101, +110,118,50,54,49,54,45,18,16,2,158,62,105,102,46,52,53,18,16,2,158, 2,0,52,54,11,16,5,93,2,4,89,162,34,35,47,9,223,0,27,248,22, -216,195,28,28,192,249,22,183,248,22,64,195,36,11,250,22,209,20,15,159,38, -34,34,251,22,59,20,15,159,42,35,34,248,22,78,200,20,15,159,42,36,34, -249,22,61,20,15,159,44,37,34,248,22,80,202,197,250,22,252,39,2,11,6, +222,195,28,28,192,249,22,189,248,22,70,195,36,11,250,22,215,20,15,159,38, +34,34,251,22,65,20,15,159,42,35,34,248,22,84,200,20,15,159,42,36,34, +249,22,67,20,15,159,44,37,34,248,22,86,202,197,250,22,252,45,2,11,6, 10,10,98,97,100,32,115,121,110,116,97,120,47,197,34,20,98,159,34,16,0, 16,4,18,99,2,23,57,37,36,35,16,4,56,11,2,42,3,1,7,101,110, -118,50,53,56,49,48,16,4,55,11,2,44,3,1,7,101,110,118,50,53,56, -50,49,18,16,2,158,2,46,57,58,18,158,94,10,64,118,111,105,100,50,57, +118,50,54,49,56,48,16,4,55,11,2,44,3,1,7,101,110,118,50,54,49, +57,49,18,16,2,158,2,46,57,58,18,158,94,10,64,118,111,105,100,50,57, 18,16,2,158,2,0,57,59,11,16,5,93,2,3,89,162,34,35,50,9,223, -0,27,248,22,216,195,28,28,192,28,249,22,183,248,22,64,195,36,248,80,158, -36,34,248,22,78,194,11,11,27,248,22,78,194,27,248,80,158,38,35,248,80, -158,39,35,198,250,22,209,20,15,159,40,34,38,249,22,59,67,99,97,108,108, -47,101,99,51,250,22,61,2,10,248,22,59,202,249,80,158,47,36,248,80,158, -48,37,203,9,199,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110, +0,27,248,22,222,195,28,28,192,28,249,22,189,248,22,70,195,36,248,80,158, +36,34,248,22,84,194,11,11,27,248,22,84,194,27,248,80,158,38,35,248,80, +158,39,35,198,250,22,215,20,15,159,40,34,38,249,22,65,67,99,97,108,108, +47,101,99,51,250,22,67,2,10,248,22,65,202,249,80,158,47,36,248,80,158, +48,37,203,9,199,250,22,252,45,2,11,6,10,10,98,97,100,32,115,121,110, 116,97,120,52,197,34,20,98,159,34,16,4,2,16,2,11,2,18,2,21,16, 1,18,100,2,23,8,29,37,36,35,16,4,8,28,11,2,30,3,1,7,101, -110,118,50,53,56,52,53,16,4,8,27,11,2,44,3,1,7,101,110,118,50, -53,56,53,54,16,6,8,26,11,63,118,97,114,55,65,101,120,112,114,115,56, -3,1,7,101,110,118,50,53,56,54,57,2,57,11,16,5,93,2,5,27,89, +110,118,50,54,50,49,53,16,4,8,27,11,2,44,3,1,7,101,110,118,50, +54,50,50,54,16,6,8,26,11,63,118,97,114,55,65,101,120,112,114,115,56, +3,1,7,101,110,118,50,54,50,51,57,2,57,11,16,5,93,2,6,27,89, 162,8,36,38,8,26,69,109,97,107,101,45,99,111,114,101,58,223,1,250,22, -59,70,108,101,116,45,118,97,108,117,101,115,59,248,22,59,249,22,59,21,97, +65,70,108,101,116,45,118,97,108,117,101,115,59,248,22,65,249,22,65,21,97, 64,116,121,112,101,60,65,109,97,107,101,114,61,64,112,114,101,100,62,66,97, -99,99,101,115,115,63,66,109,117,116,97,116,101,64,26,8,22,59,76,109,97, -107,101,45,115,116,114,117,99,116,45,116,121,112,101,65,249,22,59,65,113,117, -111,116,101,66,23,17,23,17,248,22,64,23,19,34,11,64,110,117,108,108,67, -23,16,252,22,61,66,118,97,108,117,101,115,68,2,60,2,61,2,62,249,80, -158,44,34,28,248,22,57,23,15,9,250,22,61,251,22,59,1,26,109,97,107, +99,99,101,115,115,63,66,109,117,116,97,116,101,64,26,8,22,65,76,109,97, +107,101,45,115,116,114,117,99,116,45,116,121,112,101,65,249,22,65,65,113,117, +111,116,101,66,23,17,23,17,248,22,70,23,19,34,11,64,110,117,108,108,67, +23,16,252,22,67,66,118,97,108,117,101,115,68,2,60,2,61,2,62,249,80, +158,44,34,28,248,22,63,23,15,9,250,22,67,251,22,65,1,26,109,97,107, 101,45,115,116,114,117,99,116,45,102,105,101,108,100,45,97,99,99,101,115,115, -111,114,69,2,63,34,249,22,59,2,66,248,22,52,23,24,251,22,59,1,25, +111,114,69,2,63,34,249,22,65,2,66,248,22,58,23,24,251,22,65,1,25, 109,97,107,101,45,115,116,114,117,99,116,45,102,105,101,108,100,45,109,117,116, -97,116,111,114,70,2,64,34,249,22,59,2,66,248,22,52,23,24,249,32,71, -89,162,8,100,36,51,64,108,111,111,112,72,222,28,248,22,57,193,9,250,22, -61,251,22,59,2,69,2,63,200,249,22,59,2,66,248,22,52,202,251,22,59, -2,70,2,64,200,249,22,59,2,66,248,22,52,202,27,248,22,53,197,27,248, -22,170,199,28,248,22,57,194,9,250,22,61,251,22,59,2,69,2,63,199,249, -22,59,2,66,248,22,52,203,251,22,59,2,70,2,64,199,249,22,59,2,66, -248,22,52,203,249,2,71,248,22,53,199,248,22,170,198,248,22,53,23,20,35, +97,116,111,114,70,2,64,34,249,22,65,2,66,248,22,58,23,24,249,32,71, +89,162,8,100,36,51,64,108,111,111,112,72,222,28,248,22,63,193,9,250,22, +67,251,22,65,2,69,2,63,200,249,22,65,2,66,248,22,58,202,251,22,65, +2,70,2,64,200,249,22,65,2,66,248,22,58,202,27,248,22,59,197,27,248, +22,176,199,28,248,22,63,194,9,250,22,67,251,22,65,2,69,2,63,199,249, +22,65,2,66,248,22,58,203,251,22,65,2,70,2,64,199,249,22,65,2,66, +248,22,58,203,249,2,71,248,22,59,199,248,22,176,198,248,22,59,23,20,35, 9,89,162,8,36,35,8,29,9,224,1,0,87,94,28,248,80,158,36,35,195, -250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,73,197, -12,27,248,80,158,37,36,248,80,158,38,37,197,87,100,27,248,22,50,194,28, +250,22,252,45,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,73,197, +12,27,248,80,158,37,36,248,80,158,38,37,197,87,100,27,248,22,56,194,28, 192,192,249,32,74,89,162,35,37,42,72,115,121,110,116,97,120,45,101,114,114, -111,114,75,222,252,22,1,22,252,39,2,11,198,197,199,198,6,17,17,101,109, +111,114,75,222,252,22,1,22,252,45,2,11,198,197,199,198,6,17,17,101,109, 112,116,121,32,100,101,99,108,97,114,97,116,105,111,110,76,27,248,80,158,38, 38,194,28,192,192,249,2,74,198,6,18,18,105,108,108,101,103,97,108,32,117, -115,101,32,111,102,32,96,46,39,77,27,250,22,184,36,248,22,64,197,37,28, +115,101,32,111,102,32,96,46,39,77,27,250,22,190,36,248,22,70,197,37,28, 192,192,249,2,74,198,6,21,21,119,114,111,110,103,32,110,117,109,98,101,114, -32,111,102,32,112,97,114,116,115,78,27,248,80,158,38,35,248,22,52,195,28, -192,192,27,28,248,80,158,39,39,248,22,52,196,28,248,80,158,39,35,248,80, -158,40,40,248,22,52,197,28,248,80,158,39,39,248,80,158,40,37,248,22,52, -197,28,248,80,158,39,35,248,80,158,40,40,248,80,158,41,37,248,22,52,198, -248,80,158,39,41,248,80,158,40,37,248,80,158,41,37,248,22,52,198,11,11, +32,111,102,32,112,97,114,116,115,78,27,248,80,158,38,35,248,22,58,195,28, +192,192,27,28,248,80,158,39,39,248,22,58,196,28,248,80,158,39,35,248,80, +158,40,40,248,22,58,197,28,248,80,158,39,39,248,80,158,40,37,248,22,58, +197,28,248,80,158,39,35,248,80,158,40,40,248,80,158,41,37,248,22,58,198, +248,80,158,39,41,248,80,158,40,37,248,80,158,41,37,248,22,58,198,11,11, 11,11,28,192,192,249,2,74,199,6,55,55,102,105,114,115,116,32,112,97,114, 116,32,109,117,115,116,32,98,101,32,97,110,32,105,100,101,110,116,105,102,105, 101,114,32,111,114,32,112,97,105,114,32,111,102,32,105,100,101,110,116,105,102, -105,101,114,115,79,27,248,80,158,38,38,248,22,78,195,28,192,192,28,248,80, -158,38,39,248,22,78,195,249,2,74,198,6,41,41,105,108,108,101,103,97,108, +105,101,114,115,79,27,248,80,158,38,38,248,22,84,195,28,192,192,28,248,80, +158,38,39,248,22,84,195,249,2,74,198,6,41,41,105,108,108,101,103,97,108, 32,117,115,101,32,111,102,32,96,46,39,32,105,110,32,102,105,101,108,100,32, 110,97,109,101,32,115,101,113,117,101,110,99,101,80,249,2,74,198,6,30,30, 102,105,101,108,100,32,110,97,109,101,115,32,109,117,115,116,32,98,101,32,97, 32,115,101,113,117,101,110,99,101,81,249,22,3,89,162,34,35,41,9,224,4, 5,27,248,80,158,37,35,196,28,192,192,250,2,74,196,6,27,27,102,105,101, 108,100,32,110,97,109,101,32,110,111,116,32,97,32,105,100,101,110,116,105,102, -105,101,114,82,198,248,80,158,39,36,248,22,78,196,28,249,22,71,247,22,252, -89,3,21,93,70,101,120,112,114,101,115,115,105,111,110,83,249,2,74,197,6, +105,101,114,82,198,248,80,158,39,36,248,22,84,196,28,249,22,77,247,22,252, +93,3,21,93,70,101,120,112,114,101,115,115,105,111,110,83,249,2,74,197,6, 35,35,97,108,108,111,119,101,100,32,111,110,108,121,32,105,110,32,100,101,102, 105,110,105,116,105,111,110,32,99,111,110,116,101,120,116,115,84,12,27,28,248, -80,158,38,35,248,22,52,195,248,22,52,194,248,80,158,38,40,248,22,52,195, -27,248,80,158,39,36,248,22,78,196,27,28,248,22,57,248,22,80,197,20,15, -159,39,34,43,248,22,87,196,27,28,248,80,158,41,35,248,22,52,198,11,248, -80,158,41,40,248,80,158,42,37,248,22,52,199,27,249,22,2,89,162,8,36, -35,39,9,223,6,250,22,209,195,196,195,27,248,22,44,248,22,210,201,27,249, -22,2,22,44,249,22,2,22,210,203,249,22,2,22,42,249,22,65,250,22,59, -249,22,252,159,1,6,7,7,115,116,114,117,99,116,58,85,202,249,22,252,159, -1,6,5,5,109,97,107,101,45,86,202,249,22,252,159,1,202,6,1,1,63, -87,249,22,1,22,65,249,22,2,89,162,8,36,35,43,9,223,9,249,22,59, -250,22,252,159,1,197,6,1,1,45,88,198,252,22,252,159,1,6,4,4,115, +80,158,38,35,248,22,58,195,248,22,58,194,248,80,158,38,40,248,22,58,195, +27,248,80,158,39,36,248,22,84,196,27,28,248,22,63,248,22,86,197,20,15, +159,39,34,43,248,22,93,196,27,28,248,80,158,41,35,248,22,58,198,11,248, +80,158,41,40,248,80,158,42,37,248,22,58,199,27,249,22,2,89,162,8,36, +35,39,9,223,6,250,22,215,195,196,195,27,248,22,50,248,22,216,201,27,249, +22,2,22,50,249,22,2,22,216,203,249,22,2,22,48,249,22,71,250,22,65, +249,22,252,165,1,6,7,7,115,116,114,117,99,116,58,85,202,249,22,252,165, +1,6,5,5,109,97,107,101,45,86,202,249,22,252,165,1,202,6,1,1,63, +87,249,22,1,22,71,249,22,2,89,162,8,36,35,43,9,223,9,249,22,65, +250,22,252,165,1,197,6,1,1,45,88,198,252,22,252,165,1,6,4,4,115, 101,116,45,89,199,6,1,1,45,90,200,6,1,1,33,91,200,91,159,36,11, -90,161,36,34,11,251,80,158,47,42,206,199,198,10,27,250,22,209,20,15,159, -47,35,43,250,22,59,2,0,250,22,59,2,38,204,27,251,23,23,23,21,28, +90,161,36,34,11,251,80,158,47,42,206,199,198,10,27,250,22,215,20,15,159, +47,35,43,250,22,65,2,0,250,22,65,2,38,204,27,251,23,23,23,21,28, 23,19,69,105,110,115,112,101,99,116,111,114,92,11,23,15,23,20,28,23,15, -251,22,59,2,59,248,22,59,249,22,59,21,93,2,92,23,22,21,95,2,46, +251,22,65,2,59,248,22,65,249,22,65,21,93,2,92,23,22,21,95,2,46, 96,2,46,2,92,94,63,110,111,116,93,94,70,105,110,115,112,101,99,116,111, 114,63,94,2,92,11,96,76,114,97,105,115,101,45,116,121,112,101,45,101,114, -114,111,114,95,94,2,66,2,5,6,15,15,105,110,115,112,101,99,116,111,114, -32,111,114,32,35,102,96,2,92,196,192,250,22,59,2,40,248,22,59,23,17, -203,206,28,196,250,22,218,195,75,100,105,115,97,112,112,101,97,114,101,100,45, -117,115,101,97,248,22,252,92,3,200,192,35,20,98,159,34,16,9,2,18,2, +114,111,114,95,94,2,66,2,6,6,15,15,105,110,115,112,101,99,116,111,114, +32,111,114,32,35,102,96,2,92,196,192,250,22,65,2,40,248,22,65,23,17, +203,206,28,196,250,22,224,195,75,100,105,115,97,112,112,101,97,114,101,100,45, +117,115,101,97,248,22,252,96,3,200,192,35,20,98,159,34,16,9,2,18,2, 16,2,21,2,11,30,98,2,12,69,115,116,120,45,108,105,115,116,63,99,8, 30,100,2,12,69,115,116,120,45,112,97,105,114,63,101,11,2,14,30,102,2, 12,69,115,116,120,45,110,117,108,108,63,103,10,30,104,2,24,72,103,101,116, 45,115,116,120,45,105,110,102,111,105,0,16,2,18,158,93,101,77,99,117,114, 114,101,110,116,45,105,110,115,112,101,99,116,111,114,106,8,34,37,36,35,16, -4,8,33,11,2,58,3,1,7,101,110,118,50,53,56,56,107,16,4,8,32, -11,63,115,116,120,108,3,1,7,101,110,118,50,53,57,50,109,16,4,8,31, -11,2,32,3,1,7,101,110,118,50,53,57,51,110,16,6,8,30,11,2,75, +4,8,33,11,2,58,3,1,7,101,110,118,50,54,50,53,107,16,4,8,32, +11,63,115,116,120,108,3,1,7,101,110,118,50,54,50,57,109,16,4,8,31, +11,2,32,3,1,7,101,110,118,50,54,51,48,110,16,6,8,30,11,2,75, 78,98,117,105,108,100,45,115,116,114,117,99,116,45,110,97,109,101,115,111,3, -1,7,101,110,118,50,53,57,52,112,2,112,8,34,18,104,2,23,8,38,37, +1,7,101,110,118,50,54,51,49,112,2,112,8,34,18,104,2,23,8,38,37, 36,35,8,33,8,32,8,31,8,30,16,10,8,37,11,64,110,97,109,101,113, 71,102,105,101,108,100,45,110,97,109,101,115,114,2,92,68,115,117,112,101,114, -45,105,100,115,3,1,7,101,110,118,50,54,48,56,116,2,116,2,116,2,116, +45,105,100,115,3,1,7,101,110,118,50,54,52,53,116,2,116,2,116,2,116, 16,4,8,36,11,73,100,101,102,105,110,101,100,45,110,97,109,101,115,117,3, -1,7,101,110,118,50,54,48,57,118,16,6,8,35,11,76,115,117,112,101,114, +1,7,101,110,118,50,54,52,54,118,16,6,8,35,11,76,115,117,112,101,114, 45,105,100,47,115,116,114,117,99,116,58,119,68,115,116,120,45,105,110,102,111, -120,3,1,7,101,110,118,50,54,49,49,121,2,121,11,9,93,68,35,37,107, +120,3,1,7,101,110,118,50,54,52,56,121,2,121,11,9,93,68,35,37,107, 101,114,110,101,108,122,98,2,122,2,12,2,19,2,26,2,25,2,24,0}; EVAL_ONE_SIZED_STR((char *)expr, 3127); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,21,252,37,1,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,55,21,252,37,1,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,74,35,37,115,109, 97,108,108,45,115,99,104,101,109,101,1,29,2,11,11,10,10,10,34,80,158, -34,34,20,98,159,34,16,0,16,0,11,11,16,0,34,11,16,13,63,97,110, -100,3,62,111,114,4,64,108,101,116,42,5,73,100,101,102,105,110,101,45,115, -116,114,117,99,116,6,74,45,100,101,102,105,110,101,45,115,121,110,116,97,120, -7,66,108,101,116,114,101,99,8,63,108,101,116,9,70,113,117,97,115,105,113, -117,111,116,101,10,64,119,104,101,110,11,66,108,101,116,47,101,99,12,64,99, -111,110,100,13,66,117,110,108,101,115,115,14,67,45,100,101,102,105,110,101,15, -16,13,71,35,37,113,113,45,97,110,100,45,111,114,16,2,16,2,16,74,35, -37,100,101,102,105,110,101,45,101,116,45,97,108,17,2,17,2,16,2,16,2, -16,2,17,2,17,66,35,37,99,111,110,100,18,2,17,2,17,16,13,2,3, +34,34,20,98,159,34,16,0,16,0,11,11,16,0,34,11,16,13,64,108,101, +116,42,3,64,119,104,101,110,4,66,117,110,108,101,115,115,5,63,97,110,100, +6,66,108,101,116,47,101,99,7,73,100,101,102,105,110,101,45,115,116,114,117, +99,116,8,74,45,100,101,102,105,110,101,45,115,121,110,116,97,120,9,62,111, +114,10,66,108,101,116,114,101,99,11,63,108,101,116,12,70,113,117,97,115,105, +113,117,111,116,101,13,67,45,100,101,102,105,110,101,14,64,99,111,110,100,15, +16,13,71,35,37,113,113,45,97,110,100,45,111,114,16,74,35,37,100,101,102, +105,110,101,45,101,116,45,97,108,17,2,17,2,16,2,17,2,17,2,17,2, +16,2,16,2,16,2,16,2,17,66,35,37,99,111,110,100,18,16,13,2,3, 2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2, 14,2,15,34,47,9,9,97,68,35,37,107,101,114,110,101,108,19,65,35,37, 115,116,120,20,2,16,2,18,2,17,9,0}; EVAL_ONE_SIZED_STR((char *)expr, 305); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,231,252,137,53,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,55,231,252,137,53,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,115,64,35,37,115,99, 1,29,2,11,11,10,10,18,95,11,37,96,35,8,254,1,11,16,2,64,115, 101,116,33,3,68,35,37,107,101,114,110,101,108,4,42,80,158,34,34,20,98, @@ -737,29 +737,29 @@ 103,45,100,101,112,116,104,90,254,1,30,91,2,2,1,21,115,121,110,116,97, 120,45,109,97,112,112,105,110,103,45,118,97,108,118,97,114,92,254,1,16,3, 18,98,63,46,46,46,93,41,98,40,10,34,11,94,159,74,35,37,115,109,97, -108,108,45,115,99,104,101,109,101,94,9,11,159,2,20,9,11,16,72,2,29, -2,2,2,68,2,2,2,10,2,2,2,6,2,2,2,35,2,2,2,12,2, -2,2,80,2,2,2,64,2,2,2,27,2,2,2,84,2,2,2,54,2,2, -2,60,2,2,2,90,2,2,2,92,2,2,2,56,2,2,2,31,2,2,2, -58,2,2,2,8,2,2,2,14,2,2,2,62,2,2,2,78,2,2,2,72, -2,2,2,16,2,2,2,52,2,2,2,18,2,2,2,88,2,2,2,70,2, -2,2,46,2,2,2,66,2,2,2,48,2,2,2,74,2,2,2,76,2,2, -2,37,2,2,2,50,2,2,2,86,2,2,2,82,2,2,96,39,35,11,16, -0,35,16,4,38,11,61,115,95,3,1,7,101,110,118,50,54,49,53,96,18, +108,108,45,115,99,104,101,109,101,94,9,11,159,2,20,9,11,16,72,2,68, +2,2,2,10,2,2,2,6,2,2,2,84,2,2,2,12,2,2,2,35,2, +2,2,64,2,2,2,66,2,2,2,54,2,2,2,60,2,2,2,62,2,2, +2,92,2,2,2,56,2,2,2,31,2,2,2,58,2,2,2,8,2,2,2, +76,2,2,2,86,2,2,2,52,2,2,2,90,2,2,2,78,2,2,2,72, +2,2,2,18,2,2,2,88,2,2,2,29,2,2,2,46,2,2,2,80,2, +2,2,16,2,2,2,48,2,2,2,27,2,2,2,74,2,2,2,14,2,2, +2,37,2,2,2,50,2,2,2,70,2,2,2,82,2,2,96,39,35,11,16, +0,35,16,4,38,11,61,115,95,3,1,7,101,110,118,50,54,53,50,96,18, 103,2,93,48,40,39,35,16,10,47,11,61,112,97,67,112,114,111,116,111,45, -114,98,61,107,99,64,100,101,115,116,100,3,1,7,101,110,118,50,54,57,53, +114,98,61,107,99,64,100,101,115,116,100,3,1,7,101,110,118,50,55,51,50, 101,2,101,2,101,2,101,16,6,46,11,68,101,120,112,97,110,100,101,114,102, -63,116,111,112,103,3,1,7,101,110,118,50,54,57,57,104,3,1,7,101,110, -118,50,54,57,55,105,16,6,45,11,2,102,2,103,2,104,2,105,16,10,44, +63,116,111,112,103,3,1,7,101,110,118,50,55,51,54,104,3,1,7,101,110, +118,50,55,51,52,105,16,6,45,11,2,102,2,103,2,104,2,105,16,10,44, 11,69,108,111,99,97,108,45,116,111,112,106,73,117,115,101,45,101,108,108,105, 112,115,101,115,63,107,72,117,115,101,45,116,97,105,108,45,112,111,115,108,65, -104,97,115,104,33,109,3,1,7,101,110,118,50,55,48,50,110,2,110,2,110, +104,97,115,104,33,109,3,1,7,101,110,118,50,55,51,57,110,2,110,2,110, 2,110,16,10,43,11,66,112,45,104,101,97,100,111,68,101,108,45,99,111,117, 110,116,112,66,114,101,115,116,45,112,113,67,108,97,115,116,45,101,108,114,3, -1,7,101,110,118,50,55,48,51,115,2,115,2,115,2,115,16,4,42,11,64, -108,111,111,112,116,3,1,7,101,110,118,50,55,48,54,117,18,98,2,3,50, +1,7,101,110,118,50,55,52,48,115,2,115,2,115,2,115,16,4,42,11,64, +108,111,111,112,116,3,1,7,101,110,118,50,55,52,51,117,18,98,2,3,50, 40,39,35,16,6,49,11,64,115,101,108,102,118,63,115,116,120,119,3,1,7, -101,110,118,50,56,48,49,120,2,120,11,11,16,27,2,74,2,82,2,84,2, +101,110,118,50,56,51,56,120,2,120,11,11,16,27,2,74,2,82,2,84,2, 76,2,6,2,35,2,37,2,31,2,60,2,56,2,58,2,62,2,52,2,18, 2,54,2,29,2,27,2,16,2,64,2,14,2,72,2,8,2,12,2,68,2, 66,2,78,2,80,8,27,16,9,10,10,10,10,10,10,10,10,10,16,9,2, @@ -768,85 +768,85 @@ 2,90,2,92,2,88,43,43,9,132,83,159,34,93,80,159,34,8,53,35,89, 162,8,64,37,47,63,115,117,98,121,223,0,28,28,195,28,248,80,158,35,47, 195,27,248,80,158,36,42,196,28,248,80,158,36,47,193,28,27,248,80,158,37, -43,194,28,248,22,41,248,22,210,194,249,22,223,194,20,15,159,38,34,8,43, -11,248,22,252,9,2,27,248,80,158,38,43,198,28,248,22,41,248,22,210,194, -249,22,223,194,20,15,159,39,34,8,43,11,11,11,11,11,91,159,36,11,90, +43,194,28,248,22,47,248,22,216,194,249,22,229,194,20,15,159,38,34,8,43, +11,248,22,252,15,2,27,248,80,158,38,43,198,28,248,22,47,248,22,216,194, +249,22,229,194,20,15,159,39,34,8,43,11,11,11,11,11,91,159,36,11,90, 161,36,34,11,27,248,80,158,38,42,248,80,158,39,42,199,28,28,248,80,158, -38,47,193,27,248,80,158,39,43,194,28,248,22,41,248,22,210,194,249,22,223, +38,47,193,27,248,80,158,39,43,194,28,248,22,47,248,22,216,194,249,22,229, 194,20,15,159,40,34,8,43,11,11,27,248,80,158,39,42,194,27,32,122,89, -162,8,36,35,37,9,222,248,22,59,248,22,59,194,28,28,248,80,158,40,47, -194,27,248,80,158,41,43,195,28,248,22,41,248,22,210,194,249,22,223,194,20, +162,8,36,35,37,9,222,248,22,65,248,22,65,194,28,28,248,80,158,40,47, +194,27,248,80,158,41,43,195,28,248,22,47,248,22,216,194,249,22,229,194,20, 15,159,42,34,8,43,11,11,249,80,159,41,8,54,35,248,80,158,42,42,196, -32,123,89,162,8,36,35,38,9,222,248,22,59,248,22,59,248,22,59,195,249, -22,7,195,194,249,22,7,194,22,59,27,250,80,159,40,8,53,35,199,248,80, -158,41,43,201,10,249,22,65,249,22,2,198,196,250,80,159,42,8,53,35,201, +32,123,89,162,8,36,35,38,9,222,248,22,65,248,22,65,248,22,65,195,249, +22,7,195,194,249,22,7,194,22,65,27,250,80,159,40,8,53,35,199,248,80, +158,41,43,201,10,249,22,71,249,22,2,198,196,250,80,159,42,8,53,35,201, 198,10,28,248,80,158,35,47,195,27,248,80,158,36,43,196,28,28,196,28,248, -80,158,36,50,193,28,28,248,22,41,248,22,210,194,249,22,223,194,20,15,159, +80,158,36,50,193,28,28,248,22,47,248,22,216,194,249,22,229,194,20,15,159, 37,34,8,43,11,248,80,158,36,47,248,80,158,37,42,197,11,11,11,250,80, -159,38,8,53,35,197,248,80,158,39,43,248,80,158,40,42,200,11,249,22,66, +159,38,8,53,35,197,248,80,158,39,43,248,80,158,40,42,200,11,249,22,72, 250,80,159,40,8,53,35,199,248,80,158,41,43,201,201,250,80,159,40,8,53, 35,199,248,80,158,41,42,201,201,28,248,80,158,35,50,195,28,249,22,5,89, -162,8,36,35,38,9,223,4,28,248,22,206,194,249,22,221,194,195,11,195,9, -248,22,59,195,28,249,80,158,36,51,196,11,250,80,159,37,8,53,35,196,248, -22,252,229,1,248,22,210,199,198,9,83,159,34,93,80,159,34,8,54,35,89, +162,8,36,35,38,9,223,4,28,248,22,212,194,249,22,227,194,195,11,195,9, +248,22,65,195,28,249,80,158,36,51,196,11,250,80,159,37,8,53,35,196,248, +22,252,235,1,248,22,216,199,198,9,83,159,34,93,80,159,34,8,54,35,89, 162,8,64,36,44,2,116,223,0,28,28,248,80,158,35,47,194,27,248,80,158, -36,43,195,28,248,22,41,248,22,210,194,249,22,223,194,20,15,159,37,34,8, +36,43,195,28,248,22,47,248,22,216,194,249,22,229,194,20,15,159,37,34,8, 43,11,11,27,248,80,158,36,42,195,27,89,162,8,36,35,38,9,223,4,248, -22,59,248,194,195,28,28,248,80,158,37,47,194,27,248,80,158,38,43,195,28, -248,22,41,248,22,210,194,249,22,223,194,20,15,159,39,34,8,43,11,11,27, -248,80,158,38,42,195,27,89,162,8,36,35,39,9,223,6,248,22,59,248,22, -59,248,195,196,28,28,248,80,158,39,47,194,27,248,80,158,40,43,195,28,248, -22,41,248,22,210,194,249,22,223,194,20,15,159,41,34,8,43,11,11,249,80, +22,65,248,194,195,28,28,248,80,158,37,47,194,27,248,80,158,38,43,195,28, +248,22,47,248,22,216,194,249,22,229,194,20,15,159,39,34,8,43,11,11,27, +248,80,158,38,42,195,27,89,162,8,36,35,39,9,223,6,248,22,65,248,22, +65,248,195,196,28,28,248,80,158,39,47,194,27,248,80,158,40,43,195,28,248, +22,47,248,22,216,194,249,22,229,194,20,15,159,41,34,8,43,11,11,249,80, 159,40,8,54,35,248,80,158,41,42,196,89,162,8,36,35,40,9,223,8,248, -22,59,248,22,59,248,22,59,248,196,197,249,22,7,195,194,249,22,7,195,194, +22,65,248,22,65,248,22,65,248,196,197,249,22,7,195,194,249,22,7,195,194, 249,22,7,195,196,83,159,34,93,80,159,34,8,52,35,89,162,8,100,36,8, -35,2,116,223,0,28,248,22,186,195,193,249,22,209,11,249,22,59,27,248,22, -171,200,28,248,22,186,193,198,249,22,209,11,249,22,59,27,248,22,171,198,28, -248,22,186,193,203,249,22,209,11,249,22,59,27,248,22,171,198,28,248,22,186, -193,23,16,249,22,209,11,249,22,59,27,248,22,171,198,28,248,22,186,193,23, -21,249,22,209,11,249,22,59,27,248,22,171,198,28,248,22,186,193,23,26,249, -22,209,11,249,22,59,249,80,159,8,31,8,52,35,23,32,248,22,171,199,20, +35,2,116,223,0,28,248,22,192,195,193,249,22,215,11,249,22,65,27,248,22, +177,200,28,248,22,192,193,198,249,22,215,11,249,22,65,27,248,22,177,198,28, +248,22,192,193,203,249,22,215,11,249,22,65,27,248,22,177,198,28,248,22,192, +193,23,16,249,22,215,11,249,22,65,27,248,22,177,198,28,248,22,192,193,23, +21,249,22,215,11,249,22,65,27,248,22,177,198,28,248,22,192,193,23,26,249, +22,215,11,249,22,65,249,80,159,8,31,8,52,35,23,32,248,22,177,199,20, 15,159,8,29,35,8,43,20,15,159,58,35,8,43,20,15,159,53,35,8,43, 20,15,159,48,35,8,43,20,15,159,43,35,8,43,20,15,159,38,35,8,43, 83,159,34,93,80,159,34,8,51,35,89,162,8,64,37,48,2,116,223,0,28, -28,248,80,158,35,47,194,27,248,80,158,36,43,195,28,248,22,41,248,22,210, -194,249,22,223,194,20,15,159,37,34,8,43,11,11,27,248,80,158,36,42,195, -27,248,22,170,197,27,248,80,158,38,43,197,28,28,248,80,158,38,47,195,27, -248,80,158,39,43,196,28,248,22,41,248,22,210,194,249,22,223,194,20,15,159, -40,34,8,43,11,11,27,248,80,158,39,42,196,27,248,22,170,196,27,248,80, +28,248,80,158,35,47,194,27,248,80,158,36,43,195,28,248,22,47,248,22,216, +194,249,22,229,194,20,15,159,37,34,8,43,11,11,27,248,80,158,36,42,195, +27,248,22,176,197,27,248,80,158,38,43,197,28,28,248,80,158,38,47,195,27, +248,80,158,39,43,196,28,248,22,47,248,22,216,194,249,22,229,194,20,15,159, +40,34,8,43,11,11,27,248,80,158,39,42,196,27,248,22,176,196,27,248,80, 158,41,43,198,28,28,248,80,158,41,47,195,27,248,80,158,42,43,196,28,248, -22,41,248,22,210,194,249,22,223,194,20,15,159,43,34,8,43,11,11,250,80, -159,43,8,51,35,248,80,158,44,42,198,248,22,170,197,248,80,158,44,43,198, +22,47,248,22,216,194,249,22,229,194,20,15,159,43,34,8,43,11,11,250,80, +159,43,8,51,35,248,80,158,44,42,198,248,22,176,197,248,80,158,44,43,198, 250,22,7,196,197,195,250,22,7,196,197,195,250,22,7,197,196,198,83,159,34, 93,80,159,34,8,47,35,89,162,34,43,8,45,63,109,38,101,124,223,0,28, 28,199,28,248,80,158,35,47,198,27,248,80,158,36,42,199,28,248,80,158,36, -47,193,28,27,248,80,158,37,43,194,28,248,22,41,248,22,210,194,249,22,223, -194,20,15,159,38,34,8,43,11,248,22,252,9,2,27,248,80,158,38,43,201, -28,248,22,41,248,22,210,194,249,22,223,194,20,15,159,39,34,8,43,11,11, +47,193,28,27,248,80,158,37,43,194,28,248,22,47,248,22,216,194,249,22,229, +194,20,15,159,38,34,8,43,11,248,22,252,15,2,27,248,80,158,38,43,201, +28,248,22,47,248,22,216,194,249,22,229,194,20,15,159,39,34,8,43,11,11, 11,11,11,28,248,80,158,35,41,248,80,158,36,42,248,80,158,37,42,200,27, 248,80,158,36,43,199,27,249,80,159,38,44,35,195,199,91,159,37,11,90,161, 37,34,11,26,9,80,159,48,8,47,35,23,15,23,16,23,17,23,18,205,205, -10,11,11,28,201,250,22,7,249,22,2,22,59,200,11,11,27,249,80,159,42, -45,35,198,32,125,89,162,8,44,35,35,9,222,10,250,22,7,250,22,59,66, -108,97,109,98,100,97,126,21,93,61,101,127,251,22,61,62,105,102,128,21,94, +10,11,11,28,201,250,22,7,249,22,2,22,65,200,11,11,27,249,80,159,42, +45,35,198,32,125,89,162,8,44,35,35,9,222,10,250,22,7,250,22,65,66, +108,97,109,98,100,97,126,21,93,61,101,127,251,22,67,62,105,102,128,21,94, 69,115,116,120,45,108,105,115,116,63,129,2,127,27,248,80,159,52,46,35,205, -28,249,22,252,13,2,194,21,94,64,108,105,115,116,130,2,127,28,23,25,21, +28,249,22,252,19,2,194,21,94,64,108,105,115,116,130,2,127,28,23,25,21, 94,69,115,116,120,45,62,108,105,115,116,131,2,127,21,94,2,130,94,2,131, -2,127,28,248,22,57,204,250,22,61,66,97,110,100,109,97,112,132,250,22,59, -2,126,21,93,2,127,198,21,93,94,2,131,2,127,250,22,59,66,108,101,116, -47,101,99,133,63,101,115,99,134,250,22,59,63,108,101,116,135,248,22,59,249, -22,59,61,108,136,250,22,61,63,109,97,112,137,250,22,59,2,126,21,93,2, -127,250,22,61,73,115,116,120,45,99,104,101,99,107,47,101,115,99,138,23,18, -21,93,2,134,21,93,94,2,131,2,127,251,22,59,2,128,21,94,65,110,117, -108,108,63,139,2,136,249,22,59,65,113,117,111,116,101,140,27,249,22,2,32, -141,89,97,8,44,35,35,9,222,23,26,28,23,38,249,22,1,22,61,194,192, -249,22,61,28,23,37,71,115,116,120,45,114,111,116,97,116,101,42,142,70,115, +2,127,28,248,22,63,204,250,22,67,66,97,110,100,109,97,112,132,250,22,65, +2,126,21,93,2,127,198,21,93,94,2,131,2,127,250,22,65,66,108,101,116, +47,101,99,133,63,101,115,99,134,250,22,65,63,108,101,116,135,248,22,65,249, +22,65,61,108,136,250,22,67,63,109,97,112,137,250,22,65,2,126,21,93,2, +127,250,22,67,73,115,116,120,45,99,104,101,99,107,47,101,115,99,138,23,18, +21,93,2,134,21,93,94,2,131,2,127,251,22,65,2,128,21,94,65,110,117, +108,108,63,139,2,136,249,22,65,65,113,117,111,116,101,140,27,249,22,2,32, +141,89,97,8,44,35,35,9,222,23,26,28,23,38,249,22,1,22,67,194,192, +249,22,67,28,23,37,71,115,116,120,45,114,111,116,97,116,101,42,142,70,115, 116,120,45,114,111,116,97,116,101,143,21,93,2,136,21,93,11,197,11,27,249, -22,59,248,80,158,38,43,201,248,80,158,38,43,248,80,158,39,42,202,27,248, +22,65,248,80,158,38,43,201,248,80,158,38,43,248,80,158,39,42,202,27,248, 80,158,37,42,248,80,158,38,42,201,91,159,36,11,90,161,36,34,11,28,248, 80,158,39,41,195,249,22,7,34,10,28,248,80,158,39,47,195,87,94,28,27, -248,80,158,40,43,196,28,248,22,41,248,22,210,194,249,22,223,194,20,15,159, -41,34,8,43,11,251,22,252,39,2,248,22,210,202,6,54,54,109,105,115,112, +248,80,158,40,43,196,28,248,22,47,248,22,216,194,249,22,229,194,20,15,159, +41,34,8,43,11,251,22,252,45,2,248,22,216,202,6,54,54,109,105,115,112, 108,97,99,101,100,32,101,108,108,105,112,115,101,115,32,105,110,32,112,97,116, 116,101,114,110,32,40,102,111,108,108,111,119,115,32,111,116,104,101,114,32,101, 108,108,105,112,115,101,115,41,144,202,248,80,158,43,43,199,12,251,80,159,42, @@ -856,25 +856,25 @@ 11,26,9,80,159,56,8,47,35,23,23,23,24,23,25,23,26,23,20,23,28, 23,29,23,30,10,90,161,37,40,11,28,23,17,250,22,7,195,196,11,26,9, 80,159,56,8,47,35,23,23,23,24,23,25,23,26,23,21,23,21,23,29,28, -23,30,248,22,252,9,2,206,11,11,28,23,17,250,22,7,249,22,65,203,200, -11,11,250,22,7,250,22,59,2,126,21,93,2,127,250,22,59,71,108,101,116, -42,45,118,97,108,117,101,115,145,248,22,59,249,22,59,21,95,69,112,114,101, +23,30,248,22,252,15,2,206,11,11,28,23,17,250,22,7,249,22,71,203,200, +11,11,250,22,7,250,22,65,2,126,21,93,2,127,250,22,65,71,108,101,116, +42,45,118,97,108,117,101,115,145,248,22,65,249,22,65,21,95,69,112,114,101, 45,105,116,101,109,115,146,70,112,111,115,116,45,105,116,101,109,115,147,63,111, -107,63,148,251,22,59,74,115,112,108,105,116,45,115,116,120,45,108,105,115,116, -149,2,127,23,25,23,26,251,22,61,2,128,2,148,27,27,249,80,159,8,30, +107,63,148,251,22,65,74,115,112,108,105,116,45,115,116,120,45,108,105,115,116, +149,2,127,23,25,23,26,251,22,67,2,128,2,148,27,27,249,80,159,8,30, 48,35,23,23,2,146,27,249,80,159,8,31,48,35,23,21,2,147,28,23,23, -28,28,248,22,50,194,28,249,22,252,11,2,248,22,52,196,2,130,28,248,22, -50,248,22,53,195,248,22,57,248,22,80,195,11,11,11,250,22,59,67,99,111, -110,115,47,35,102,150,248,22,78,197,195,250,22,59,69,97,112,112,101,110,100, -47,35,102,151,196,195,251,22,61,2,128,197,196,21,93,11,28,23,19,28,23, -36,250,22,59,2,135,21,93,94,63,99,97,112,152,96,2,128,94,67,115,121, -110,116,97,120,63,153,2,127,2,127,2,152,195,250,22,59,2,135,21,93,94, +28,28,248,22,56,194,28,249,22,252,17,2,248,22,58,196,2,130,28,248,22, +56,248,22,59,195,248,22,63,248,22,86,195,11,11,11,250,22,65,67,99,111, +110,115,47,35,102,150,248,22,84,197,195,250,22,65,69,97,112,112,101,110,100, +47,35,102,151,196,195,251,22,67,2,128,197,196,21,93,11,28,23,19,28,23, +36,250,22,65,2,135,21,93,94,63,99,97,112,152,96,2,128,94,67,115,121, +110,116,97,120,63,153,2,127,2,127,2,152,195,250,22,65,2,135,21,93,94, 2,152,2,127,195,192,21,93,11,28,202,202,199,28,200,23,25,11,28,248,80, -158,35,47,198,27,248,80,158,36,43,199,28,28,200,28,248,22,41,248,22,210, -194,249,22,223,194,20,15,159,37,34,8,43,11,11,28,28,248,80,158,36,47, +158,35,47,198,27,248,80,158,36,43,199,28,28,200,28,248,22,47,248,22,216, +194,249,22,229,194,20,15,159,37,34,8,43,11,11,28,28,248,80,158,36,47, 248,80,158,37,42,200,248,80,158,36,41,248,80,158,37,42,248,80,158,38,42, 201,11,27,248,80,158,37,43,248,80,158,38,42,201,26,9,80,159,45,8,47, -35,204,205,206,23,15,201,201,11,23,19,11,251,22,252,39,2,248,22,210,199, +35,204,205,206,23,15,201,201,11,23,19,11,251,22,252,45,2,248,22,216,199, 6,29,29,109,105,115,112,108,97,99,101,100,32,101,108,108,105,112,115,101,115, 32,105,110,32,112,97,116,116,101,114,110,154,199,196,91,159,43,11,90,161,37, 34,11,28,206,26,9,80,159,53,8,47,35,23,20,23,21,23,22,23,23,23, @@ -882,468 +882,468 @@ 159,53,8,47,35,23,20,23,21,23,22,23,23,248,80,158,54,42,23,25,23, 25,23,26,23,27,10,90,161,37,40,11,28,206,250,22,7,195,196,11,26,9, 80,159,53,8,47,35,23,20,23,21,23,22,23,23,23,18,23,18,23,26,28, -23,27,248,22,252,9,2,206,11,11,28,206,250,22,7,249,22,65,203,200,11, -11,250,22,7,250,22,59,2,126,21,93,2,127,251,22,61,2,128,21,94,2, +23,27,248,22,252,15,2,206,11,11,28,206,250,22,7,249,22,71,203,200,11, +11,250,22,7,250,22,65,2,126,21,93,2,127,251,22,67,2,128,21,94,2, 33,2,127,27,27,249,80,159,58,48,35,23,20,21,94,2,25,2,127,27,249, -80,159,59,48,35,23,18,21,94,2,23,2,127,28,23,20,28,28,248,22,50, -194,28,249,22,252,11,2,248,22,52,196,2,130,28,248,22,50,248,22,53,195, -248,22,57,248,22,80,195,11,11,11,250,22,59,2,150,248,22,78,197,195,250, -22,59,2,151,196,195,251,22,61,2,128,197,196,21,93,11,28,23,16,28,23, -30,250,22,59,2,135,21,93,94,2,152,96,2,128,94,2,153,2,127,2,127, -2,152,195,250,22,59,2,135,21,93,94,2,152,2,127,195,192,21,93,11,28, +80,159,59,48,35,23,18,21,94,2,23,2,127,28,23,20,28,28,248,22,56, +194,28,249,22,252,17,2,248,22,58,196,2,130,28,248,22,56,248,22,59,195, +248,22,63,248,22,86,195,11,11,11,250,22,65,2,150,248,22,84,197,195,250, +22,65,2,151,196,195,251,22,67,2,128,197,196,21,93,11,28,23,16,28,23, +30,250,22,65,2,135,21,93,94,2,152,96,2,128,94,2,153,2,127,2,127, +2,152,195,250,22,65,2,135,21,93,94,2,152,2,127,195,192,21,93,11,28, 202,202,199,28,200,23,22,11,28,248,80,158,35,41,198,28,196,250,22,7,9, 11,11,250,22,7,71,115,116,120,45,110,117,108,108,47,35,102,155,11,11,28, 248,80,158,35,50,198,28,249,22,5,89,162,8,36,35,38,9,223,7,28,248, -22,206,194,249,22,221,194,195,11,197,28,196,250,22,7,9,11,11,250,22,7, -250,22,59,2,126,21,93,2,127,251,22,61,2,128,21,94,2,39,2,127,250, -22,61,2,128,250,22,59,79,109,111,100,117,108,101,45,105,100,101,110,116,105, -102,105,101,114,61,63,156,2,127,249,22,59,72,113,117,111,116,101,45,115,121, +22,212,194,249,22,227,194,195,11,197,28,196,250,22,7,9,11,11,250,22,7, +250,22,65,2,126,21,93,2,127,251,22,67,2,128,21,94,2,39,2,127,250, +22,67,2,128,250,22,65,79,109,111,100,117,108,101,45,105,100,101,110,116,105, +102,105,101,114,61,63,156,2,127,249,22,65,72,113,117,111,116,101,45,115,121, 110,116,97,120,157,23,23,21,94,64,110,117,108,108,158,11,21,93,11,11,11, -28,28,199,28,248,22,41,248,22,210,199,249,22,223,199,20,15,159,36,34,8, -43,11,11,251,22,252,39,2,248,22,210,198,6,29,29,109,105,115,112,108,97, +28,28,199,28,248,22,47,248,22,216,199,249,22,229,199,20,15,159,36,34,8, +43,11,11,251,22,252,45,2,248,22,216,198,6,29,29,109,105,115,112,108,97, 99,101,100,32,101,108,108,105,112,115,101,115,32,105,110,32,112,97,116,116,101, -114,110,159,198,201,28,196,250,22,7,248,22,59,201,11,11,250,22,7,27,28, -204,32,160,89,162,8,36,35,38,64,119,114,97,112,161,222,250,22,59,2,126, -21,93,2,127,195,32,162,89,162,8,36,35,40,2,161,222,250,22,59,2,126, -21,93,2,127,249,22,59,2,130,197,28,205,248,193,21,96,1,20,100,97,116, +114,110,159,198,201,28,196,250,22,7,248,22,65,201,11,11,250,22,7,27,28, +204,32,160,89,162,8,36,35,38,64,119,114,97,112,161,222,250,22,65,2,126, +21,93,2,127,195,32,162,89,162,8,36,35,40,2,161,222,250,22,65,2,126, +21,93,2,127,249,22,65,2,130,197,28,205,248,193,21,96,1,20,100,97,116, 117,109,45,62,115,121,110,116,97,120,45,111,98,106,101,99,116,163,2,152,2, 127,2,152,248,193,2,127,10,204,28,249,80,158,36,51,199,11,27,248,22,252, -229,1,248,22,210,200,28,28,197,11,27,248,22,252,9,2,202,28,192,192,249, -22,4,80,159,38,8,49,35,195,27,248,22,252,226,1,248,22,210,201,26,10, +235,1,248,22,216,200,28,28,197,11,27,248,22,252,15,2,202,28,192,192,249, +22,4,80,159,38,8,49,35,195,27,248,22,252,232,1,248,22,216,201,26,10, 80,159,46,8,50,35,202,23,17,23,19,205,206,23,15,23,16,202,248,22,252, -9,2,23,21,9,91,159,37,11,90,161,37,34,11,26,9,80,159,47,8,47, +15,2,23,21,9,91,159,37,11,90,161,37,34,11,26,9,80,159,47,8,47, 35,206,23,15,23,16,23,17,204,23,18,23,20,23,21,11,28,200,250,22,7, -195,11,11,250,22,7,250,22,59,2,126,21,93,2,127,251,22,61,2,128,21, +195,11,11,250,22,7,250,22,65,2,126,21,93,2,127,251,22,67,2,128,21, 95,2,41,2,127,11,249,80,159,50,48,35,204,21,94,72,118,101,99,116,111, 114,45,62,108,105,115,116,164,94,68,115,121,110,116,97,120,45,101,165,2,127, -21,93,11,196,11,28,196,250,22,7,9,11,11,250,22,7,250,22,59,2,126, -21,93,2,127,250,22,61,2,128,27,250,22,61,66,101,113,117,97,108,63,166, -248,22,210,23,19,21,93,94,2,165,2,127,28,23,19,250,22,59,63,97,110, +21,93,11,196,11,28,196,250,22,7,9,11,11,250,22,7,250,22,65,2,126, +21,93,2,127,250,22,67,2,128,27,250,22,67,66,101,113,117,97,108,63,166, +248,22,216,23,19,21,93,94,2,165,2,127,28,23,19,250,22,65,63,97,110, 100,167,21,94,2,153,2,127,195,192,21,94,2,158,11,11,11,83,159,34,93, -80,159,34,8,50,35,89,162,8,64,44,8,31,2,116,223,0,28,248,22,186, -201,250,22,7,250,22,59,2,126,21,93,2,127,251,22,61,2,128,250,22,59, +80,159,34,8,50,35,89,162,8,64,44,8,31,2,116,223,0,28,248,22,192, +201,250,22,7,250,22,65,2,126,21,93,2,127,251,22,67,2,128,250,22,65, 2,41,2,127,206,23,20,21,93,11,204,11,91,159,37,11,90,161,37,34,11, -27,249,22,252,227,1,248,22,210,201,248,22,171,23,15,26,9,80,159,47,8, -47,35,23,17,23,18,23,19,23,20,201,201,23,16,248,22,252,9,2,23,23, +27,249,22,252,233,1,248,22,216,201,248,22,177,23,15,26,9,80,159,47,8, +47,35,23,17,23,18,23,19,23,20,201,201,23,16,248,22,252,15,2,23,23, 11,26,10,80,159,47,8,50,35,206,23,15,23,16,23,17,23,18,23,19,23, -20,248,22,171,23,22,28,23,22,23,22,203,27,249,80,159,50,48,35,205,250, -22,59,74,115,116,120,45,118,101,99,116,111,114,45,114,101,102,168,2,127,248, -22,171,23,28,28,248,22,57,23,25,192,28,204,28,28,248,22,50,193,28,249, -22,252,11,2,248,22,52,195,2,130,28,248,22,50,248,22,53,194,248,22,57, -248,22,80,194,11,11,11,250,22,59,2,150,248,22,78,196,23,27,250,22,59, -2,151,195,23,27,251,22,61,2,128,196,23,28,21,93,11,83,159,34,93,80, -159,34,8,49,35,89,162,8,36,35,39,9,223,0,248,22,252,9,2,28,248, -22,41,248,22,210,196,249,22,223,196,20,15,159,37,34,8,43,11,83,159,34, +20,248,22,177,23,22,28,23,22,23,22,203,27,249,80,159,50,48,35,205,250, +22,65,74,115,116,120,45,118,101,99,116,111,114,45,114,101,102,168,2,127,248, +22,177,23,28,28,248,22,63,23,25,192,28,204,28,28,248,22,56,193,28,249, +22,252,17,2,248,22,58,195,2,130,28,248,22,56,248,22,59,194,248,22,63, +248,22,86,194,11,11,11,250,22,65,2,150,248,22,84,196,23,27,250,22,65, +2,151,195,23,27,251,22,67,2,128,196,23,28,21,93,11,83,159,34,93,80, +159,34,8,49,35,89,162,8,36,35,39,9,223,0,248,22,252,15,2,28,248, +22,47,248,22,216,196,249,22,229,196,20,15,159,37,34,8,43,11,83,159,34, 93,80,159,34,8,48,35,89,162,8,64,38,46,2,116,223,0,28,248,80,158, 35,41,196,249,22,7,198,10,28,248,80,158,35,47,196,87,94,28,27,248,80, -158,36,43,197,28,248,22,41,248,22,210,194,249,22,223,194,20,15,159,37,34, -8,43,11,251,22,252,39,2,248,22,210,198,2,144,198,248,80,158,39,43,200, -12,27,248,80,158,36,42,197,27,248,22,170,199,28,248,80,158,37,41,194,249, +158,36,43,197,28,248,22,47,248,22,216,194,249,22,229,194,20,15,159,37,34, +8,43,11,251,22,252,45,2,248,22,216,198,2,144,198,248,80,158,39,43,200, +12,27,248,80,158,36,42,197,27,248,22,176,199,28,248,80,158,37,41,194,249, 22,7,194,10,28,248,80,158,37,47,194,87,94,28,27,248,80,158,38,43,195, -28,248,22,41,248,22,210,194,249,22,223,194,20,15,159,39,34,8,43,11,251, -22,252,39,2,248,22,210,200,2,144,200,248,80,158,41,43,198,12,251,80,159, -40,8,48,35,199,200,248,80,158,41,42,198,248,22,170,197,249,22,7,248,22, -170,195,11,249,22,7,248,22,170,199,11,83,159,34,93,80,159,34,34,35,89, -162,34,35,38,2,6,223,0,28,248,22,41,248,22,210,195,249,22,223,195,20, +28,248,22,47,248,22,216,194,249,22,229,194,20,15,159,39,34,8,43,11,251, +22,252,45,2,248,22,216,200,2,144,200,248,80,158,41,43,198,12,251,80,159, +40,8,48,35,199,200,248,80,158,41,42,198,248,22,176,197,249,22,7,248,22, +176,195,11,249,22,7,248,22,176,199,11,83,159,34,93,80,159,34,34,35,89, +162,34,35,38,2,6,223,0,28,248,22,47,248,22,216,195,249,22,229,195,20, 15,159,36,34,8,43,11,83,159,34,93,80,159,34,35,35,32,169,89,162,34, -36,38,2,8,222,249,22,5,89,162,8,36,35,38,9,223,2,28,248,22,206, -194,249,22,221,194,195,11,195,83,159,34,93,80,159,34,36,35,32,170,89,162, -34,36,42,2,10,222,28,248,22,57,194,11,28,28,248,22,206,248,22,52,195, -249,22,221,194,248,22,52,196,11,34,27,248,22,53,195,28,248,22,57,193,11, -28,28,248,22,206,248,22,52,194,249,22,221,195,248,22,52,195,11,35,250,32, -171,89,162,8,100,37,45,2,116,222,28,248,22,57,195,11,28,28,248,22,206, -248,22,52,196,249,22,221,194,248,22,52,197,11,193,27,248,22,170,195,27,248, -22,53,197,28,248,22,57,193,11,28,28,248,22,206,248,22,52,194,249,22,221, -196,248,22,52,195,11,193,27,248,22,170,195,27,248,22,53,195,28,248,22,57, -193,11,28,28,248,22,206,248,22,52,194,249,22,221,198,248,22,52,195,11,193, -250,2,171,199,248,22,170,197,248,22,53,196,196,36,248,22,53,196,83,159,34, +36,38,2,8,222,249,22,5,89,162,8,36,35,38,9,223,2,28,248,22,212, +194,249,22,227,194,195,11,195,83,159,34,93,80,159,34,36,35,32,170,89,162, +34,36,42,2,10,222,28,248,22,63,194,11,28,28,248,22,212,248,22,58,195, +249,22,227,194,248,22,58,196,11,34,27,248,22,59,195,28,248,22,63,193,11, +28,28,248,22,212,248,22,58,194,249,22,227,195,248,22,58,195,11,35,250,32, +171,89,162,8,100,37,45,2,116,222,28,248,22,63,195,11,28,28,248,22,212, +248,22,58,196,249,22,227,194,248,22,58,197,11,193,27,248,22,176,195,27,248, +22,59,197,28,248,22,63,193,11,28,28,248,22,212,248,22,58,194,249,22,227, +196,248,22,58,195,11,193,27,248,22,176,195,27,248,22,59,195,28,248,22,63, +193,11,28,28,248,22,212,248,22,58,194,249,22,227,198,248,22,58,195,11,193, +250,2,171,199,248,22,176,197,248,22,59,196,196,36,248,22,59,196,83,159,34, 93,80,159,34,37,35,32,172,89,162,34,36,40,2,12,222,250,32,173,89,162, -8,100,37,53,2,116,222,28,248,22,57,195,11,28,249,22,221,194,27,248,22, -52,198,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248, -22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27, -248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192, -27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193, -192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206, -193,192,27,248,22,52,194,28,248,22,206,193,192,248,32,174,89,162,8,64,35, -44,2,116,222,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192, -27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193, -192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206, -193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22, -206,193,192,248,2,174,248,22,52,194,248,22,52,194,193,250,2,173,195,248,22, -170,197,248,22,53,198,195,34,196,83,159,34,93,80,159,34,38,35,32,175,89, -162,34,36,38,2,14,222,28,249,22,252,11,2,194,195,248,22,59,193,249,22, -59,194,195,83,159,34,93,80,159,34,39,35,89,162,8,36,40,54,2,16,223, +8,100,37,53,2,116,222,28,248,22,63,195,11,28,249,22,227,194,27,248,22, +58,198,28,248,22,212,193,192,27,248,22,58,194,28,248,22,212,193,192,27,248, +22,58,194,28,248,22,212,193,192,27,248,22,58,194,28,248,22,212,193,192,27, +248,22,58,194,28,248,22,212,193,192,27,248,22,58,194,28,248,22,212,193,192, +27,248,22,58,194,28,248,22,212,193,192,27,248,22,58,194,28,248,22,212,193, +192,27,248,22,58,194,28,248,22,212,193,192,27,248,22,58,194,28,248,22,212, +193,192,27,248,22,58,194,28,248,22,212,193,192,248,32,174,89,162,8,64,35, +44,2,116,222,28,248,22,212,193,192,27,248,22,58,194,28,248,22,212,193,192, +27,248,22,58,194,28,248,22,212,193,192,27,248,22,58,194,28,248,22,212,193, +192,27,248,22,58,194,28,248,22,212,193,192,27,248,22,58,194,28,248,22,212, +193,192,27,248,22,58,194,28,248,22,212,193,192,27,248,22,58,194,28,248,22, +212,193,192,248,2,174,248,22,58,194,248,22,58,194,193,250,2,173,195,248,22, +176,197,248,22,59,198,195,34,196,83,159,34,93,80,159,34,38,35,32,175,89, +162,34,36,38,2,14,222,28,249,22,252,17,2,194,195,248,22,65,193,249,22, +65,194,195,83,159,34,93,80,159,34,39,35,89,162,8,36,40,54,2,16,223, 0,91,159,37,11,90,161,37,34,11,26,9,80,159,46,8,47,35,205,206,23, -16,23,17,23,15,23,15,10,10,11,28,200,27,247,22,110,87,94,251,32,176, -89,162,8,100,38,44,2,116,222,28,248,22,206,196,27,250,22,116,196,248,22, -210,200,9,87,94,28,249,22,5,89,162,8,36,35,38,9,223,6,249,22,221, -195,194,194,251,22,252,39,2,248,22,210,199,6,30,30,118,97,114,105,97,98, +16,23,17,23,15,23,15,10,10,11,28,200,27,247,22,116,87,94,251,32,176, +89,162,8,100,38,44,2,116,222,28,248,22,212,196,27,250,22,122,196,248,22, +216,200,9,87,94,28,249,22,5,89,162,8,36,35,38,9,223,6,249,22,227, +195,194,194,251,22,252,45,2,248,22,216,199,6,30,30,118,97,114,105,97,98, 108,101,32,117,115,101,100,32,116,119,105,99,101,32,105,110,32,112,97,116,116, -101,114,110,177,199,200,12,250,22,115,196,248,22,210,200,249,22,51,201,197,28, -248,22,50,196,87,94,251,2,176,196,197,198,248,22,52,200,251,2,176,196,197, -198,248,22,53,200,12,196,201,202,197,193,28,249,22,252,13,2,194,21,95,2, +101,114,110,177,199,200,12,250,22,121,196,248,22,216,200,249,22,57,201,197,28, +248,22,56,196,87,94,251,2,176,196,197,198,248,22,58,200,251,2,176,196,197, +198,248,22,59,200,12,196,201,202,197,193,28,249,22,252,19,2,194,21,95,2, 126,93,2,127,2,127,28,201,21,95,2,126,94,2,127,2,156,2,127,21,95, -2,126,93,2,127,2,127,250,22,59,2,126,249,22,61,2,127,249,80,158,44, +2,126,93,2,127,2,127,250,22,65,2,126,249,22,67,2,127,249,80,158,44, 52,28,23,16,21,93,2,156,9,9,248,80,159,41,46,35,196,83,159,34,93, 80,159,34,53,35,89,162,34,39,46,2,46,223,0,253,80,158,40,39,199,200, 201,202,11,203,83,159,34,93,80,159,34,54,35,89,162,34,38,45,2,48,223, 0,253,80,158,40,39,199,200,201,202,10,11,83,159,34,93,80,159,34,46,35, -32,178,89,162,34,35,38,2,31,222,28,28,248,22,50,193,28,249,22,252,11, -2,248,22,52,195,2,126,249,22,252,13,2,248,22,78,195,21,93,2,127,11, -11,248,22,87,193,249,22,61,194,21,93,2,127,83,159,34,93,80,159,34,48, -35,32,179,89,162,34,36,40,2,35,222,28,28,248,22,50,193,28,249,22,252, -11,2,248,22,52,195,2,126,249,22,252,13,2,248,22,78,195,21,93,2,127, -11,11,27,248,22,87,194,28,249,22,252,11,2,194,2,127,194,28,28,248,22, -50,193,28,249,22,252,11,2,248,22,52,195,2,130,28,248,22,50,248,22,53, -194,28,249,22,252,11,2,248,22,78,195,2,127,248,22,57,248,22,80,194,11, -11,11,11,249,22,59,2,130,196,249,22,59,195,196,249,22,59,194,195,83,159, +32,178,89,162,34,35,38,2,31,222,28,28,248,22,56,193,28,249,22,252,17, +2,248,22,58,195,2,126,249,22,252,19,2,248,22,84,195,21,93,2,127,11, +11,248,22,93,193,249,22,67,194,21,93,2,127,83,159,34,93,80,159,34,48, +35,32,179,89,162,34,36,40,2,35,222,28,28,248,22,56,193,28,249,22,252, +17,2,248,22,58,195,2,126,249,22,252,19,2,248,22,84,195,21,93,2,127, +11,11,27,248,22,93,194,28,249,22,252,17,2,194,2,127,194,28,28,248,22, +56,193,28,249,22,252,17,2,248,22,58,195,2,130,28,248,22,56,248,22,59, +194,28,249,22,252,17,2,248,22,84,195,2,127,248,22,63,248,22,86,194,11, +11,11,11,249,22,65,2,130,196,249,22,65,195,196,249,22,65,194,195,83,159, 34,93,80,159,34,49,35,32,180,89,162,34,36,40,2,37,222,28,28,248,22, -50,193,28,249,22,252,11,2,248,22,52,195,2,130,28,248,22,50,248,22,53, -194,248,22,57,248,22,80,194,11,11,11,250,22,59,2,150,248,22,78,196,196, -250,22,59,2,151,195,196,83,159,34,93,80,159,34,55,35,89,162,34,38,56, +56,193,28,249,22,252,17,2,248,22,58,195,2,130,28,248,22,56,248,22,59, +194,248,22,63,248,22,86,194,11,11,11,250,22,65,2,150,248,22,84,196,196, +250,22,65,2,151,195,196,83,159,34,93,80,159,34,55,35,89,162,34,38,56, 2,50,223,0,91,159,36,10,90,161,35,34,10,195,90,161,35,35,10,89,162, 34,40,8,59,2,102,226,2,5,3,1,28,28,199,28,248,80,158,38,47,197, 27,248,80,158,39,42,198,28,248,80,158,39,47,193,28,27,248,80,158,40,43, -194,28,248,22,41,248,22,210,194,249,22,223,194,20,15,159,41,34,8,43,11, -248,22,252,9,2,27,248,80,158,41,43,200,28,248,22,41,248,22,210,194,249, -22,223,194,20,15,159,42,34,8,43,11,11,11,11,11,91,159,40,11,90,161, +194,28,248,22,47,248,22,216,194,249,22,229,194,20,15,159,41,34,8,43,11, +248,22,252,15,2,27,248,80,158,41,43,200,28,248,22,47,248,22,216,194,249, +22,229,194,20,15,159,42,34,8,43,11,11,11,11,11,91,159,40,11,90,161, 35,34,11,248,80,158,44,43,203,90,161,37,35,11,27,248,80,158,45,42,248, 80,158,46,42,205,27,248,80,158,46,43,248,80,158,47,42,206,28,28,248,80, -158,46,47,194,27,248,80,158,47,43,195,28,248,22,41,248,22,210,194,249,22, -223,194,20,15,159,48,34,8,43,11,11,27,248,80,158,47,42,195,27,248,80, +158,46,47,194,27,248,80,158,47,43,195,28,248,22,47,248,22,216,194,249,22, +229,194,20,15,159,48,34,8,43,11,11,27,248,80,158,47,42,195,27,248,80, 158,48,43,196,28,28,248,80,158,48,47,194,27,248,80,158,49,43,195,28,248, -22,41,248,22,210,194,249,22,223,194,20,15,159,50,34,8,43,11,11,27,248, +22,47,248,22,216,194,249,22,229,194,20,15,159,50,34,8,43,11,11,27,248, 80,158,49,42,195,27,248,80,158,50,43,196,28,28,248,80,158,50,47,194,27, -248,80,158,51,43,195,28,248,22,41,248,22,210,194,249,22,223,194,20,15,159, +248,80,158,51,43,195,28,248,22,47,248,22,216,194,249,22,229,194,20,15,159, 52,34,8,43,11,11,27,248,80,158,51,42,195,27,248,80,158,52,43,196,28, -28,248,80,158,52,47,194,27,248,80,158,53,43,195,28,248,22,41,248,22,210, -194,249,22,223,194,20,15,159,54,34,8,43,11,11,27,248,80,158,53,42,195, +28,248,80,158,52,47,194,27,248,80,158,53,43,195,28,248,22,47,248,22,216, +194,249,22,229,194,20,15,159,54,34,8,43,11,11,27,248,80,158,53,42,195, 27,248,80,158,54,43,196,28,28,248,80,158,54,47,194,27,248,80,158,55,43, -195,28,248,22,41,248,22,210,194,249,22,223,194,20,15,159,56,34,8,43,11, +195,28,248,22,47,248,22,216,194,249,22,229,194,20,15,159,56,34,8,43,11, 11,250,80,159,56,8,51,35,248,80,158,57,42,197,39,248,80,158,57,43,197, 250,22,7,38,196,195,250,22,7,37,196,195,250,22,7,36,196,195,250,22,7, -35,196,195,250,22,7,34,196,195,90,161,35,38,11,28,248,22,186,194,192,249, -22,209,11,249,22,59,27,248,22,171,199,28,248,22,186,193,197,249,22,209,11, -249,22,59,27,248,22,171,198,28,248,22,186,193,202,249,22,209,11,249,22,59, -27,248,22,171,198,28,248,22,186,193,23,15,249,22,209,11,249,22,59,27,248, -22,171,198,28,248,22,186,193,23,20,249,22,209,11,249,22,59,27,248,22,171, -198,28,248,22,186,193,23,25,249,22,209,11,249,22,59,27,248,22,171,198,28, -248,22,186,193,23,30,249,22,209,11,249,22,59,27,248,22,171,198,28,248,22, -186,193,23,35,249,22,209,11,249,22,59,249,80,159,8,50,8,52,35,23,41, -248,22,171,199,20,15,159,8,48,35,8,43,20,15,159,8,43,35,8,43,20, +35,196,195,250,22,7,34,196,195,90,161,35,38,11,28,248,22,192,194,192,249, +22,215,11,249,22,65,27,248,22,177,199,28,248,22,192,193,197,249,22,215,11, +249,22,65,27,248,22,177,198,28,248,22,192,193,202,249,22,215,11,249,22,65, +27,248,22,177,198,28,248,22,192,193,23,15,249,22,215,11,249,22,65,27,248, +22,177,198,28,248,22,192,193,23,20,249,22,215,11,249,22,65,27,248,22,177, +198,28,248,22,192,193,23,25,249,22,215,11,249,22,65,27,248,22,177,198,28, +248,22,192,193,23,30,249,22,215,11,249,22,65,27,248,22,177,198,28,248,22, +192,193,23,35,249,22,215,11,249,22,65,249,80,159,8,50,8,52,35,23,41, +248,22,177,199,20,15,159,8,48,35,8,43,20,15,159,8,43,35,8,43,20, 15,159,8,38,35,8,43,20,15,159,8,33,35,8,43,20,15,159,8,28,35, 8,43,20,15,159,57,35,8,43,20,15,159,52,35,8,43,20,15,159,47,35, 8,43,90,161,35,39,11,28,203,249,80,159,45,44,35,198,202,11,87,94,28, -248,22,57,198,251,22,1,22,252,39,2,66,115,121,110,116,97,120,181,6,48, +248,22,63,198,251,22,1,22,252,45,2,66,115,121,110,116,97,120,181,6,48, 48,110,111,32,112,97,116,116,101,114,110,32,118,97,114,105,97,98,108,101,115, 32,98,101,102,111,114,101,32,101,108,108,105,112,115,101,115,32,105,110,32,116, -101,109,112,108,97,116,101,182,28,249,22,252,11,2,205,201,248,22,59,204,249, -22,59,205,201,12,27,28,204,249,22,2,89,162,34,35,43,9,226,12,10,15, -14,251,80,158,41,56,200,196,198,197,200,11,27,28,205,28,248,22,57,194,9, -28,248,22,79,194,27,248,22,53,195,28,248,22,57,193,9,28,248,22,79,193, -248,32,183,89,162,8,64,35,45,2,116,222,28,248,22,57,193,9,28,248,22, -79,193,27,248,22,53,194,28,248,22,57,193,9,28,248,22,79,193,27,248,22, -53,194,28,248,22,57,193,9,28,248,22,79,193,248,2,183,248,22,53,194,249, -22,51,248,22,77,195,248,2,183,248,22,53,196,249,22,51,248,22,77,195,27, -248,22,53,196,28,248,22,57,193,9,28,248,22,79,193,248,2,183,248,22,53, -194,249,22,51,248,22,77,195,248,2,183,248,22,53,196,249,22,51,248,22,77, -195,27,248,22,53,196,28,248,22,57,193,9,28,248,22,79,193,27,248,22,53, -194,28,248,22,57,193,9,28,248,22,79,193,248,2,183,248,22,53,194,249,22, -51,248,22,77,195,248,2,183,248,22,53,196,249,22,51,248,22,77,195,27,248, -22,53,196,28,248,22,57,193,9,28,248,22,79,193,248,2,183,248,22,53,194, -249,22,51,248,22,77,195,248,2,183,248,22,53,196,248,22,53,194,249,22,51, -248,22,77,195,248,2,183,248,22,53,196,249,22,51,248,22,77,196,27,248,22, -53,197,28,248,22,57,193,9,28,248,22,79,193,248,2,183,248,22,53,194,249, -22,51,248,22,77,195,248,2,183,248,22,53,196,11,27,28,206,28,248,22,57, -195,9,28,248,22,79,195,249,22,51,248,22,77,197,27,248,22,53,198,28,248, -22,57,193,9,28,248,22,79,193,249,22,51,248,22,77,195,248,32,184,89,162, -8,64,35,45,2,116,222,28,248,22,57,193,9,28,248,22,79,193,249,22,51, -248,22,77,195,27,248,22,53,196,28,248,22,57,193,9,28,248,22,79,193,249, -22,51,248,22,77,195,27,248,22,53,196,28,248,22,57,193,9,28,248,22,79, -193,249,22,51,248,22,77,195,248,2,184,248,22,53,196,248,2,184,248,22,53, -194,27,248,22,53,194,28,248,22,57,193,9,28,248,22,79,193,249,22,51,248, -22,77,195,248,2,184,248,22,53,196,248,2,184,248,22,53,194,27,248,22,53, -194,28,248,22,57,193,9,28,248,22,79,193,249,22,51,248,22,77,195,27,248, -22,53,196,28,248,22,57,193,9,28,248,22,79,193,249,22,51,248,22,77,195, -248,2,184,248,22,53,196,248,2,184,248,22,53,194,27,248,22,53,194,28,248, -22,57,193,9,28,248,22,79,193,249,22,51,248,22,77,195,248,2,184,248,22, -53,196,248,2,184,248,22,53,194,248,22,53,196,248,2,184,248,22,53,194,27, -248,22,53,196,28,248,22,57,193,9,28,248,22,79,193,249,22,51,248,22,77, -195,248,2,184,248,22,53,196,248,2,184,248,22,53,194,11,27,28,23,15,248, +101,109,112,108,97,116,101,182,28,249,22,252,17,2,205,201,248,22,65,204,249, +22,65,205,201,12,27,28,204,249,22,2,89,162,34,35,43,9,226,12,10,15, +14,251,80,158,41,56,200,196,198,197,200,11,27,28,205,28,248,22,63,194,9, +28,248,22,85,194,27,248,22,59,195,28,248,22,63,193,9,28,248,22,85,193, +248,32,183,89,162,8,64,35,45,2,116,222,28,248,22,63,193,9,28,248,22, +85,193,27,248,22,59,194,28,248,22,63,193,9,28,248,22,85,193,27,248,22, +59,194,28,248,22,63,193,9,28,248,22,85,193,248,2,183,248,22,59,194,249, +22,57,248,22,83,195,248,2,183,248,22,59,196,249,22,57,248,22,83,195,27, +248,22,59,196,28,248,22,63,193,9,28,248,22,85,193,248,2,183,248,22,59, +194,249,22,57,248,22,83,195,248,2,183,248,22,59,196,249,22,57,248,22,83, +195,27,248,22,59,196,28,248,22,63,193,9,28,248,22,85,193,27,248,22,59, +194,28,248,22,63,193,9,28,248,22,85,193,248,2,183,248,22,59,194,249,22, +57,248,22,83,195,248,2,183,248,22,59,196,249,22,57,248,22,83,195,27,248, +22,59,196,28,248,22,63,193,9,28,248,22,85,193,248,2,183,248,22,59,194, +249,22,57,248,22,83,195,248,2,183,248,22,59,196,248,22,59,194,249,22,57, +248,22,83,195,248,2,183,248,22,59,196,249,22,57,248,22,83,196,27,248,22, +59,197,28,248,22,63,193,9,28,248,22,85,193,248,2,183,248,22,59,194,249, +22,57,248,22,83,195,248,2,183,248,22,59,196,11,27,28,206,28,248,22,63, +195,9,28,248,22,85,195,249,22,57,248,22,83,197,27,248,22,59,198,28,248, +22,63,193,9,28,248,22,85,193,249,22,57,248,22,83,195,248,32,184,89,162, +8,64,35,45,2,116,222,28,248,22,63,193,9,28,248,22,85,193,249,22,57, +248,22,83,195,27,248,22,59,196,28,248,22,63,193,9,28,248,22,85,193,249, +22,57,248,22,83,195,27,248,22,59,196,28,248,22,63,193,9,28,248,22,85, +193,249,22,57,248,22,83,195,248,2,184,248,22,59,196,248,2,184,248,22,59, +194,27,248,22,59,194,28,248,22,63,193,9,28,248,22,85,193,249,22,57,248, +22,83,195,248,2,184,248,22,59,196,248,2,184,248,22,59,194,27,248,22,59, +194,28,248,22,63,193,9,28,248,22,85,193,249,22,57,248,22,83,195,27,248, +22,59,196,28,248,22,63,193,9,28,248,22,85,193,249,22,57,248,22,83,195, +248,2,184,248,22,59,196,248,2,184,248,22,59,194,27,248,22,59,194,28,248, +22,63,193,9,28,248,22,85,193,249,22,57,248,22,83,195,248,2,184,248,22, +59,196,248,2,184,248,22,59,194,248,22,59,196,248,2,184,248,22,59,194,27, +248,22,59,196,28,248,22,63,193,9,28,248,22,85,193,249,22,57,248,22,83, +195,248,2,184,248,22,59,196,248,2,184,248,22,59,194,11,27,28,23,15,248, 80,159,48,57,35,195,11,27,28,23,16,248,80,159,49,57,35,195,11,27,28, -248,22,57,196,12,28,248,22,57,197,251,22,1,22,252,39,2,2,181,6,29, +248,22,63,196,12,28,248,22,63,197,251,22,1,22,252,45,2,2,181,6,29, 29,116,111,111,32,109,97,110,121,32,101,108,108,105,112,115,101,115,32,105,110, -32,116,101,109,112,108,97,116,101,185,28,249,22,252,11,2,23,19,23,15,248, -22,59,23,18,249,22,59,23,19,23,15,12,27,253,24,19,23,15,23,24,23, -25,10,23,27,23,28,27,253,24,20,23,18,28,23,25,249,22,65,205,206,11, -23,18,10,11,23,29,28,23,19,250,22,59,2,126,21,93,61,114,186,27,27, +32,116,101,109,112,108,97,116,101,185,28,249,22,252,17,2,23,19,23,15,248, +22,65,23,18,249,22,65,23,19,23,15,12,27,253,24,19,23,15,23,24,23, +25,10,23,27,23,28,27,253,24,20,23,18,28,23,25,249,22,71,205,206,11, +23,18,10,11,23,29,28,23,19,250,22,65,2,126,21,93,61,114,186,27,27, 27,249,22,2,89,162,8,36,35,43,9,225,25,30,27,250,80,159,39,58,35, -2,186,249,80,159,41,37,35,200,197,196,204,28,28,249,22,181,35,248,22,64, -195,28,249,22,181,34,23,17,28,248,22,57,202,249,22,252,13,2,200,21,95, -2,126,93,2,186,94,63,99,97,114,187,2,186,11,11,11,248,22,52,193,28, -28,249,22,181,36,248,22,64,195,28,249,22,181,34,23,17,28,248,22,57,202, -249,22,252,13,2,200,21,95,2,126,93,2,186,95,2,130,94,2,187,2,186, -94,64,99,97,100,114,188,2,186,11,11,11,250,22,61,2,137,21,95,2,126, +2,186,249,80,159,41,37,35,200,197,196,204,28,28,249,22,187,35,248,22,70, +195,28,249,22,187,34,23,17,28,248,22,63,202,249,22,252,19,2,200,21,95, +2,126,93,2,186,94,63,99,97,114,187,2,186,11,11,11,248,22,58,193,28, +28,249,22,187,36,248,22,70,195,28,249,22,187,34,23,17,28,248,22,63,202, +249,22,252,19,2,200,21,95,2,126,93,2,186,95,2,130,94,2,187,2,186, +94,64,99,97,100,114,188,2,186,11,11,11,250,22,67,2,137,21,95,2,126, 94,61,97,189,61,98,190,95,2,130,2,189,2,190,249,80,158,8,28,52,197, -9,27,250,22,61,2,137,250,22,59,2,126,64,118,97,108,115,191,249,22,59, -23,15,28,248,22,57,23,19,2,191,21,95,66,97,112,112,101,110,100,192,68, +9,27,250,22,67,2,137,250,22,65,2,126,64,118,97,108,115,191,249,22,65, +23,15,28,248,22,63,23,19,2,191,21,95,66,97,112,112,101,110,100,192,68, 115,104,97,108,108,111,119,115,193,2,191,249,80,158,8,29,52,198,9,28,248, -22,186,23,17,192,27,250,22,59,65,97,112,112,108,121,194,2,192,196,27,248, -22,171,23,19,28,248,22,186,193,193,27,250,22,59,2,194,2,192,197,27,248, -22,171,195,28,248,22,186,193,193,27,250,22,59,2,194,2,192,197,27,248,22, -171,195,28,248,22,186,193,193,27,250,22,59,2,194,2,192,197,27,248,22,171, -195,28,248,22,186,193,193,27,250,22,59,2,194,2,192,197,27,248,22,171,195, -28,248,22,186,193,193,27,250,22,59,2,194,2,192,197,27,248,22,171,195,28, -248,22,186,193,193,27,250,22,59,2,194,2,192,197,27,248,22,171,195,28,248, -22,186,193,193,27,250,22,59,2,194,2,192,197,27,248,22,171,195,28,248,22, -186,193,193,27,250,22,59,2,194,2,192,197,27,248,22,171,195,28,248,22,186, -193,193,27,250,22,59,2,194,2,192,197,27,248,22,171,195,28,248,22,186,193, -193,249,32,195,89,162,8,64,36,55,2,161,222,28,248,22,186,194,192,27,250, -22,59,2,194,2,192,196,27,248,22,171,196,28,248,22,186,193,193,27,250,22, -59,2,194,2,192,197,27,248,22,171,195,28,248,22,186,193,193,27,250,22,59, -2,194,2,192,197,27,248,22,171,195,28,248,22,186,193,193,27,250,22,59,2, -194,2,192,197,27,248,22,171,195,28,248,22,186,193,193,27,250,22,59,2,194, -2,192,197,27,248,22,171,195,28,248,22,186,193,193,27,250,22,59,2,194,2, -192,197,27,248,22,171,195,28,248,22,186,193,193,27,250,22,59,2,194,2,192, -197,27,248,22,171,195,28,248,22,186,193,193,249,2,195,250,22,59,2,194,2, -192,198,248,22,171,195,250,22,59,2,194,2,192,198,248,22,171,195,28,248,22, -57,201,192,250,22,59,2,135,248,22,59,249,22,59,2,193,249,22,61,2,130, +22,192,23,17,192,27,250,22,65,65,97,112,112,108,121,194,2,192,196,27,248, +22,177,23,19,28,248,22,192,193,193,27,250,22,65,2,194,2,192,197,27,248, +22,177,195,28,248,22,192,193,193,27,250,22,65,2,194,2,192,197,27,248,22, +177,195,28,248,22,192,193,193,27,250,22,65,2,194,2,192,197,27,248,22,177, +195,28,248,22,192,193,193,27,250,22,65,2,194,2,192,197,27,248,22,177,195, +28,248,22,192,193,193,27,250,22,65,2,194,2,192,197,27,248,22,177,195,28, +248,22,192,193,193,27,250,22,65,2,194,2,192,197,27,248,22,177,195,28,248, +22,192,193,193,27,250,22,65,2,194,2,192,197,27,248,22,177,195,28,248,22, +192,193,193,27,250,22,65,2,194,2,192,197,27,248,22,177,195,28,248,22,192, +193,193,27,250,22,65,2,194,2,192,197,27,248,22,177,195,28,248,22,192,193, +193,249,32,195,89,162,8,64,36,55,2,161,222,28,248,22,192,194,192,27,250, +22,65,2,194,2,192,196,27,248,22,177,196,28,248,22,192,193,193,27,250,22, +65,2,194,2,192,197,27,248,22,177,195,28,248,22,192,193,193,27,250,22,65, +2,194,2,192,197,27,248,22,177,195,28,248,22,192,193,193,27,250,22,65,2, +194,2,192,197,27,248,22,177,195,28,248,22,192,193,193,27,250,22,65,2,194, +2,192,197,27,248,22,177,195,28,248,22,192,193,193,27,250,22,65,2,194,2, +192,197,27,248,22,177,195,28,248,22,192,193,193,27,250,22,65,2,194,2,192, +197,27,248,22,177,195,28,248,22,192,193,193,249,2,195,250,22,65,2,194,2, +192,198,248,22,177,195,250,22,65,2,194,2,192,198,248,22,177,195,28,248,22, +63,201,192,250,22,65,2,135,248,22,65,249,22,65,2,193,249,22,67,2,130, 249,80,158,8,32,52,249,22,2,89,162,8,36,35,43,9,225,34,39,36,250, 80,159,39,58,35,2,186,249,80,159,41,37,35,200,197,196,23,20,9,195,27, -248,80,159,57,59,35,199,28,249,22,252,11,2,194,2,158,193,250,22,59,2, +248,80,159,57,59,35,199,28,249,22,252,17,2,194,2,158,193,250,22,65,2, 192,196,195,12,28,248,80,158,38,47,197,27,248,80,158,39,43,198,28,28,200, -28,248,22,41,248,22,210,194,249,22,223,194,20,15,159,40,34,8,43,11,11, +28,248,22,47,248,22,216,194,249,22,229,194,20,15,159,40,34,8,43,11,11, 28,28,248,80,158,39,47,248,80,158,40,42,199,248,80,158,39,41,248,80,158, 40,42,248,80,158,41,42,200,11,27,248,80,158,40,43,248,80,158,41,42,200, -253,215,198,205,198,11,23,16,23,17,251,22,252,39,2,2,181,6,30,30,109, +253,215,198,205,198,11,23,16,23,17,251,22,252,45,2,2,181,6,30,30,109, 105,115,112,108,97,99,101,100,32,101,108,108,105,112,115,101,115,32,105,110,32, 116,101,109,112,108,97,116,101,196,198,196,27,253,215,199,205,199,23,15,23,16, 23,17,27,253,216,248,80,158,47,42,206,206,23,15,23,16,23,17,23,18,28, -200,250,22,59,2,126,21,93,2,186,251,80,159,47,8,26,35,206,248,80,159, +200,250,22,65,2,126,21,93,2,186,251,80,159,47,8,26,35,206,248,80,159, 48,59,35,201,248,80,159,48,59,35,200,206,12,28,249,80,158,39,51,198,11, -27,253,214,248,22,252,229,1,248,22,210,205,204,203,206,23,15,23,16,28,198, -250,22,59,2,126,21,93,2,186,249,22,59,72,108,105,115,116,45,62,118,101, -99,116,111,114,197,249,22,59,2,131,248,80,159,46,59,35,200,12,28,248,80, -158,38,50,197,28,249,22,5,89,162,8,36,35,38,9,223,6,28,248,22,206, -194,249,22,221,194,195,11,196,28,197,250,22,59,2,126,21,93,2,186,249,22, -59,2,157,201,12,28,197,27,249,22,5,89,162,8,36,35,38,9,223,7,28, -248,22,206,194,249,22,221,194,195,11,200,28,192,250,22,59,2,126,21,93,2, +27,253,214,248,22,252,235,1,248,22,216,205,204,203,206,23,15,23,16,28,198, +250,22,65,2,126,21,93,2,186,249,22,65,72,108,105,115,116,45,62,118,101, +99,116,111,114,197,249,22,65,2,131,248,80,159,46,59,35,200,12,28,248,80, +158,38,50,197,28,249,22,5,89,162,8,36,35,38,9,223,6,28,248,22,212, +194,249,22,227,194,195,11,196,28,197,250,22,65,2,126,21,93,2,186,249,22, +65,2,157,201,12,28,197,27,249,22,5,89,162,8,36,35,38,9,223,7,28, +248,22,212,194,249,22,227,194,195,11,200,28,192,250,22,65,2,126,21,93,2, 186,250,80,159,44,58,35,2,186,249,80,159,46,36,35,205,206,23,15,87,95, -28,200,28,28,248,22,41,248,22,210,199,249,22,223,199,20,15,159,40,34,8, -43,11,251,22,252,39,2,2,181,6,30,30,109,105,115,112,108,97,99,101,100, +28,200,28,28,248,22,47,248,22,216,199,249,22,229,199,20,15,159,40,34,8, +43,11,251,22,252,45,2,2,181,6,30,30,109,105,115,112,108,97,99,101,100, 32,101,108,108,105,112,115,101,115,32,105,110,32,116,101,109,112,108,97,116,101, -198,198,201,12,12,249,80,159,40,8,27,35,199,200,250,22,59,2,126,21,93, -2,186,249,22,59,2,157,202,28,28,28,248,22,41,248,22,210,198,249,22,223, -198,20,15,159,39,34,8,43,11,199,11,12,248,202,197,28,248,22,57,197,28, -197,21,95,2,126,93,2,186,2,158,12,28,197,250,22,59,2,126,21,93,2, -186,249,22,59,2,157,201,12,27,28,197,11,247,22,110,27,253,216,203,204,203, -10,28,204,248,22,171,248,22,64,206,11,28,204,11,89,162,8,36,35,42,9, -223,7,27,250,22,116,196,248,22,210,198,9,28,28,248,22,50,193,249,22,5, -89,162,8,36,35,38,9,223,4,249,22,221,195,194,194,11,12,250,22,115,196, -248,22,210,198,249,22,51,199,197,28,198,250,22,59,2,126,21,93,2,186,27, -27,248,80,159,44,59,35,198,28,28,248,22,50,193,249,22,252,11,2,248,22, -52,195,78,112,97,116,116,101,114,110,45,115,117,98,115,116,105,116,117,116,101, -199,11,192,27,28,206,251,22,209,23,18,2,100,23,18,23,18,11,250,22,59, +198,198,201,12,12,249,80,159,40,8,27,35,199,200,250,22,65,2,126,21,93, +2,186,249,22,65,2,157,202,28,28,28,248,22,47,248,22,216,198,249,22,229, +198,20,15,159,39,34,8,43,11,199,11,12,248,202,197,28,248,22,63,197,28, +197,21,95,2,126,93,2,186,2,158,12,28,197,250,22,65,2,126,21,93,2, +186,249,22,65,2,157,201,12,27,28,197,11,247,22,116,27,253,216,203,204,203, +10,28,204,248,22,177,248,22,70,206,11,28,204,11,89,162,8,36,35,42,9, +223,7,27,250,22,122,196,248,22,216,198,9,28,28,248,22,56,193,249,22,5, +89,162,8,36,35,38,9,223,4,249,22,227,195,194,194,11,12,250,22,121,196, +248,22,216,198,249,22,57,199,197,28,198,250,22,65,2,126,21,93,2,186,27, +27,248,80,159,44,59,35,198,28,28,248,22,56,193,249,22,252,17,2,248,22, +58,195,78,112,97,116,116,101,114,110,45,115,117,98,115,116,105,116,117,116,101, +199,11,192,27,28,206,251,22,215,23,18,2,100,23,18,23,18,11,250,22,65, 1,26,100,97,116,117,109,45,62,115,121,110,116,97,120,45,111,98,106,101,99, -116,47,115,104,97,112,101,200,249,22,59,2,157,197,196,28,248,80,159,43,8, -28,35,203,251,22,59,1,20,99,97,116,99,104,45,101,108,108,105,112,115,105, -115,45,101,114,114,111,114,201,250,22,59,2,126,9,199,249,22,59,2,140,23, -15,249,22,59,2,157,250,22,209,11,2,93,23,18,192,249,22,1,22,65,249, -22,118,197,32,202,89,162,8,36,36,36,9,222,193,83,159,34,93,80,159,34, -59,35,32,203,89,162,34,35,38,2,58,222,28,28,248,22,50,193,28,249,22, -252,11,2,248,22,52,195,2,126,249,22,252,13,2,248,22,78,195,21,93,2, -186,11,11,248,22,87,193,249,22,61,194,21,93,2,186,83,159,34,93,80,159, -34,8,26,35,89,162,34,38,50,2,60,223,0,28,28,248,22,50,195,28,249, -22,252,11,2,248,22,52,197,2,157,28,249,22,252,11,2,248,22,78,197,248, -80,158,37,43,199,27,249,22,252,11,2,198,2,158,28,192,192,28,248,22,50, -197,28,249,22,252,11,2,248,22,52,199,2,157,249,22,252,11,2,248,22,78, -199,248,80,158,38,42,200,11,11,11,11,11,249,22,59,2,157,198,28,28,248, -22,50,196,249,22,252,11,2,248,22,52,198,2,199,11,28,28,248,22,50,195, -28,249,22,252,11,2,248,22,52,197,2,157,249,22,252,11,2,248,22,78,197, -248,80,158,37,43,199,11,11,250,22,61,2,199,249,22,59,2,157,27,249,22, -51,248,22,78,203,248,22,95,204,28,248,22,206,200,251,22,209,203,196,203,203, -192,248,22,80,199,28,28,248,22,50,195,249,22,252,11,2,2,199,248,22,52, -197,11,250,22,61,2,199,249,22,59,2,157,27,249,22,51,248,22,95,203,248, -22,95,204,28,248,22,206,200,251,22,209,203,196,203,203,192,249,80,158,39,52, -248,22,80,200,248,22,80,201,27,247,22,48,27,249,22,51,195,248,22,95,200, -27,28,248,22,206,197,251,22,209,200,197,200,200,193,252,22,61,2,199,249,22, -59,2,157,199,199,202,248,22,80,204,28,249,22,252,11,2,197,2,158,251,80, -159,38,8,26,35,197,198,21,94,2,199,94,2,157,9,200,28,28,248,22,50, -196,28,249,22,252,11,2,248,22,52,198,2,157,27,248,22,52,197,249,22,183, +116,47,115,104,97,112,101,200,249,22,65,2,157,197,196,28,248,80,159,43,8, +28,35,203,251,22,65,1,20,99,97,116,99,104,45,101,108,108,105,112,115,105, +115,45,101,114,114,111,114,201,250,22,65,2,126,9,199,249,22,65,2,140,23, +15,249,22,65,2,157,250,22,215,11,2,93,23,18,192,249,22,1,22,71,249, +22,124,197,32,202,89,162,8,36,36,36,9,222,193,83,159,34,93,80,159,34, +59,35,32,203,89,162,34,35,38,2,58,222,28,28,248,22,56,193,28,249,22, +252,17,2,248,22,58,195,2,126,249,22,252,19,2,248,22,84,195,21,93,2, +186,11,11,248,22,93,193,249,22,67,194,21,93,2,186,83,159,34,93,80,159, +34,8,26,35,89,162,34,38,50,2,60,223,0,28,28,248,22,56,195,28,249, +22,252,17,2,248,22,58,197,2,157,28,249,22,252,17,2,248,22,84,197,248, +80,158,37,43,199,27,249,22,252,17,2,198,2,158,28,192,192,28,248,22,56, +197,28,249,22,252,17,2,248,22,58,199,2,157,249,22,252,17,2,248,22,84, +199,248,80,158,38,42,200,11,11,11,11,11,249,22,65,2,157,198,28,28,248, +22,56,196,249,22,252,17,2,248,22,58,198,2,199,11,28,28,248,22,56,195, +28,249,22,252,17,2,248,22,58,197,2,157,249,22,252,17,2,248,22,84,197, +248,80,158,37,43,199,11,11,250,22,67,2,199,249,22,65,2,157,27,249,22, +57,248,22,84,203,248,22,101,204,28,248,22,212,200,251,22,215,203,196,203,203, +192,248,22,86,199,28,28,248,22,56,195,249,22,252,17,2,2,199,248,22,58, +197,11,250,22,67,2,199,249,22,65,2,157,27,249,22,57,248,22,101,203,248, +22,101,204,28,248,22,212,200,251,22,215,203,196,203,203,192,249,80,158,39,52, +248,22,86,200,248,22,86,201,27,247,22,54,27,249,22,57,195,248,22,101,200, +27,28,248,22,212,197,251,22,215,200,197,200,200,193,252,22,67,2,199,249,22, +65,2,157,199,199,202,248,22,86,204,28,249,22,252,17,2,197,2,158,251,80, +159,38,8,26,35,197,198,21,94,2,199,94,2,157,9,200,28,28,248,22,56, +196,28,249,22,252,17,2,248,22,58,198,2,157,27,248,22,58,197,249,22,189, 44,249,80,159,39,8,30,35,196,45,11,11,251,80,159,38,8,26,35,197,198, -249,22,59,2,199,201,200,251,80,159,38,8,26,35,197,198,27,247,22,48,251, -22,59,2,199,249,22,59,2,157,198,196,204,200,83,159,34,93,80,159,34,8, -29,35,89,162,34,36,47,2,66,223,0,249,22,183,196,27,248,22,170,198,28, -249,22,182,194,35,34,28,248,22,206,197,249,80,159,39,8,30,35,248,22,210, -199,194,28,248,22,50,197,27,249,80,159,40,8,30,35,248,22,52,200,195,249, -22,172,194,249,80,159,42,8,30,35,248,22,53,202,249,22,173,199,198,28,248, -22,252,222,1,197,249,80,159,39,8,30,35,248,22,252,229,1,199,194,28,248, -22,107,197,248,22,170,249,80,159,40,8,30,35,248,22,108,200,248,22,171,196, +249,22,65,2,199,201,200,251,80,159,38,8,26,35,197,198,27,247,22,54,251, +22,65,2,199,249,22,65,2,157,198,196,204,200,83,159,34,93,80,159,34,8, +29,35,89,162,34,36,47,2,66,223,0,249,22,189,196,27,248,22,176,198,28, +249,22,188,194,35,34,28,248,22,212,197,249,80,159,39,8,30,35,248,22,216, +199,194,28,248,22,56,197,27,249,80,159,40,8,30,35,248,22,58,200,195,249, +22,178,194,249,80,159,42,8,30,35,248,22,59,202,249,22,179,199,198,28,248, +22,252,228,1,197,249,80,159,39,8,30,35,248,22,252,235,1,199,194,28,248, +22,113,197,248,22,176,249,80,159,40,8,30,35,248,22,114,200,248,22,177,196, 35,83,159,34,93,80,159,34,8,30,35,89,162,34,36,49,2,68,223,0,28, -249,22,182,196,35,34,28,248,22,206,194,27,248,22,210,195,28,249,22,182,197, -35,34,28,248,22,206,193,249,80,159,37,8,30,35,248,22,210,195,197,28,248, -22,50,193,27,249,80,159,38,8,30,35,248,22,52,196,198,249,22,172,194,249, -80,159,40,8,30,35,248,22,53,198,249,22,173,202,198,28,248,22,252,222,1, -193,249,80,159,37,8,30,35,248,22,252,229,1,195,197,28,248,22,107,193,248, -22,170,249,80,159,38,8,30,35,248,22,108,196,248,22,171,199,35,28,248,22, -50,194,27,27,248,22,52,196,28,249,22,182,198,35,34,28,248,22,206,193,249, -80,159,38,8,30,35,248,22,210,195,198,28,248,22,50,193,27,249,80,159,39, -8,30,35,248,22,52,196,199,249,22,172,194,249,80,159,41,8,30,35,248,22, -53,198,249,22,173,203,198,28,248,22,252,222,1,193,249,80,159,38,8,30,35, -248,22,252,229,1,195,198,28,248,22,107,193,248,22,170,249,80,159,39,8,30, -35,248,22,108,196,248,22,171,200,35,249,22,172,194,27,248,22,53,198,27,249, -22,173,201,198,28,249,22,182,194,35,34,28,248,22,206,194,249,80,159,41,8, -30,35,248,22,210,196,194,28,248,22,50,194,27,249,80,159,42,8,30,35,248, -22,52,197,195,249,22,172,194,249,80,159,44,8,30,35,248,22,53,199,249,22, -173,199,198,28,248,22,252,222,1,194,249,80,159,41,8,30,35,248,22,252,229, -1,196,194,28,248,22,107,194,248,22,170,249,80,159,42,8,30,35,248,22,108, -197,248,22,171,196,35,28,248,22,252,222,1,194,27,248,22,252,229,1,195,28, -249,22,182,197,35,34,28,248,22,206,193,249,80,159,37,8,30,35,248,22,210, -195,197,28,248,22,50,193,27,249,80,159,38,8,30,35,248,22,52,196,198,249, -22,172,194,249,80,159,40,8,30,35,248,22,53,198,249,22,173,202,198,28,248, -22,252,222,1,193,249,80,159,37,8,30,35,248,22,252,229,1,195,197,28,248, -22,107,193,248,22,170,249,80,159,38,8,30,35,248,22,108,196,248,22,171,199, -35,28,248,22,107,194,248,22,170,27,248,22,108,196,27,248,22,171,198,28,249, -22,182,194,35,34,28,248,22,206,194,249,80,159,39,8,30,35,248,22,210,196, -194,28,248,22,50,194,27,249,80,159,40,8,30,35,248,22,52,197,195,249,22, -172,194,249,80,159,42,8,30,35,248,22,53,199,249,22,173,199,198,28,248,22, -252,222,1,194,249,80,159,39,8,30,35,248,22,252,229,1,196,194,28,248,22, -107,194,248,22,170,249,80,159,40,8,30,35,248,22,108,197,248,22,171,196,35, +249,22,188,196,35,34,28,248,22,212,194,27,248,22,216,195,28,249,22,188,197, +35,34,28,248,22,212,193,249,80,159,37,8,30,35,248,22,216,195,197,28,248, +22,56,193,27,249,80,159,38,8,30,35,248,22,58,196,198,249,22,178,194,249, +80,159,40,8,30,35,248,22,59,198,249,22,179,202,198,28,248,22,252,228,1, +193,249,80,159,37,8,30,35,248,22,252,235,1,195,197,28,248,22,113,193,248, +22,176,249,80,159,38,8,30,35,248,22,114,196,248,22,177,199,35,28,248,22, +56,194,27,27,248,22,58,196,28,249,22,188,198,35,34,28,248,22,212,193,249, +80,159,38,8,30,35,248,22,216,195,198,28,248,22,56,193,27,249,80,159,39, +8,30,35,248,22,58,196,199,249,22,178,194,249,80,159,41,8,30,35,248,22, +59,198,249,22,179,203,198,28,248,22,252,228,1,193,249,80,159,38,8,30,35, +248,22,252,235,1,195,198,28,248,22,113,193,248,22,176,249,80,159,39,8,30, +35,248,22,114,196,248,22,177,200,35,249,22,178,194,27,248,22,59,198,27,249, +22,179,201,198,28,249,22,188,194,35,34,28,248,22,212,194,249,80,159,41,8, +30,35,248,22,216,196,194,28,248,22,56,194,27,249,80,159,42,8,30,35,248, +22,58,197,195,249,22,178,194,249,80,159,44,8,30,35,248,22,59,199,249,22, +179,199,198,28,248,22,252,228,1,194,249,80,159,41,8,30,35,248,22,252,235, +1,196,194,28,248,22,113,194,248,22,176,249,80,159,42,8,30,35,248,22,114, +197,248,22,177,196,35,28,248,22,252,228,1,194,27,248,22,252,235,1,195,28, +249,22,188,197,35,34,28,248,22,212,193,249,80,159,37,8,30,35,248,22,216, +195,197,28,248,22,56,193,27,249,80,159,38,8,30,35,248,22,58,196,198,249, +22,178,194,249,80,159,40,8,30,35,248,22,59,198,249,22,179,202,198,28,248, +22,252,228,1,193,249,80,159,37,8,30,35,248,22,252,235,1,195,197,28,248, +22,113,193,248,22,176,249,80,159,38,8,30,35,248,22,114,196,248,22,177,199, +35,28,248,22,113,194,248,22,176,27,248,22,114,196,27,248,22,177,198,28,249, +22,188,194,35,34,28,248,22,212,194,249,80,159,39,8,30,35,248,22,216,196, +194,28,248,22,56,194,27,249,80,159,40,8,30,35,248,22,58,197,195,249,22, +178,194,249,80,159,42,8,30,35,248,22,59,199,249,22,179,199,198,28,248,22, +252,228,1,194,249,80,159,39,8,30,35,248,22,252,235,1,196,194,28,248,22, +113,194,248,22,176,249,80,159,40,8,30,35,248,22,114,197,248,22,177,196,35, 35,83,159,34,93,80,159,34,58,35,32,204,89,162,34,37,40,2,56,222,28, -28,194,249,22,181,195,196,11,28,249,22,252,11,2,195,34,192,28,249,22,252, -11,2,195,35,249,22,59,63,99,100,114,205,194,28,249,22,252,11,2,195,36, -249,22,59,64,99,100,100,114,206,194,28,249,22,252,11,2,195,37,249,22,59, -65,99,100,100,100,114,207,194,28,249,22,252,11,2,195,38,249,22,59,66,99, -100,100,100,100,114,208,194,250,22,59,69,108,105,115,116,45,116,97,105,108,209, -195,196,28,249,22,252,11,2,195,34,249,22,59,2,187,194,28,249,22,252,11, -2,195,35,249,22,59,2,188,194,28,249,22,252,11,2,195,36,249,22,59,65, -99,97,100,100,114,210,194,28,249,22,252,11,2,195,37,249,22,59,66,99,97, -100,100,100,114,211,194,250,22,59,68,108,105,115,116,45,114,101,102,212,195,196, +28,194,249,22,187,195,196,11,28,249,22,252,17,2,195,34,192,28,249,22,252, +17,2,195,35,249,22,65,63,99,100,114,205,194,28,249,22,252,17,2,195,36, +249,22,65,64,99,100,100,114,206,194,28,249,22,252,17,2,195,37,249,22,65, +65,99,100,100,100,114,207,194,28,249,22,252,17,2,195,38,249,22,65,66,99, +100,100,100,100,114,208,194,250,22,65,69,108,105,115,116,45,116,97,105,108,209, +195,196,28,249,22,252,17,2,195,34,249,22,65,2,187,194,28,249,22,252,17, +2,195,35,249,22,65,2,188,194,28,249,22,252,17,2,195,36,249,22,65,65, +99,97,100,100,114,210,194,28,249,22,252,17,2,195,37,249,22,65,66,99,97, +100,100,100,114,211,194,250,22,65,68,108,105,115,116,45,114,101,102,212,195,196, 83,159,34,93,80,159,34,44,35,89,162,34,36,41,2,27,223,0,250,80,159, 37,8,53,35,197,196,10,83,159,34,93,80,159,34,56,35,89,162,8,36,38, 54,2,52,223,0,27,249,22,5,89,162,34,35,45,9,223,4,27,28,248,22, -50,195,248,22,52,195,194,27,248,22,50,196,28,28,248,22,50,194,248,22,50, -195,11,252,32,213,89,162,8,64,39,47,2,116,222,28,28,248,22,50,195,248, -22,50,196,11,27,248,22,52,196,27,248,22,52,198,28,28,248,22,50,194,248, -22,50,193,11,252,2,213,199,200,248,22,52,199,248,22,52,198,10,28,248,22, -50,193,252,2,213,199,200,198,248,22,52,198,11,28,248,22,206,194,28,248,22, -206,193,28,249,22,221,195,194,249,22,51,196,11,11,11,11,28,248,22,50,196, -27,248,22,52,197,28,28,248,22,50,196,248,22,50,193,11,252,2,213,198,199, -248,22,52,201,248,22,52,198,10,28,248,22,50,193,252,2,213,198,199,200,248, -22,52,198,11,28,248,22,206,196,28,248,22,206,193,28,249,22,221,197,194,249, -22,51,196,10,11,11,11,28,248,22,206,195,28,248,22,206,196,28,249,22,221, -196,197,249,22,51,28,198,194,195,248,22,252,9,2,199,11,11,11,198,200,248, -22,52,199,248,22,52,200,10,28,248,22,50,195,252,2,213,198,200,198,248,22, -52,200,11,28,248,22,206,194,28,248,22,206,195,28,249,22,221,195,196,249,22, -51,28,194,195,197,248,22,252,9,2,195,11,11,11,197,87,94,28,192,12,251, -22,1,22,252,39,2,2,181,6,49,49,116,111,111,32,102,101,119,32,101,108, +56,195,248,22,58,195,194,27,248,22,56,196,28,28,248,22,56,194,248,22,56, +195,11,252,32,213,89,162,8,64,39,47,2,116,222,28,28,248,22,56,195,248, +22,56,196,11,27,248,22,58,196,27,248,22,58,198,28,28,248,22,56,194,248, +22,56,193,11,252,2,213,199,200,248,22,58,199,248,22,58,198,10,28,248,22, +56,193,252,2,213,199,200,198,248,22,58,198,11,28,248,22,212,194,28,248,22, +212,193,28,249,22,227,195,194,249,22,57,196,11,11,11,11,28,248,22,56,196, +27,248,22,58,197,28,28,248,22,56,196,248,22,56,193,11,252,2,213,198,199, +248,22,58,201,248,22,58,198,10,28,248,22,56,193,252,2,213,198,199,200,248, +22,58,198,11,28,248,22,212,196,28,248,22,212,193,28,249,22,227,197,194,249, +22,57,196,10,11,11,11,28,248,22,212,195,28,248,22,212,196,28,249,22,227, +196,197,249,22,57,28,198,194,195,248,22,252,15,2,199,11,11,11,198,200,248, +22,58,199,248,22,58,200,10,28,248,22,56,195,252,2,213,198,200,198,248,22, +58,200,11,28,248,22,212,194,28,248,22,212,195,28,249,22,227,195,196,249,22, +57,28,194,195,197,248,22,252,15,2,195,11,11,11,197,87,94,28,192,12,251, +22,1,22,252,45,2,2,181,6,49,49,116,111,111,32,102,101,119,32,101,108, 108,105,112,115,101,115,32,102,111,114,32,112,97,116,116,101,114,110,32,118,97, 114,105,97,98,108,101,32,105,110,32,116,101,109,112,108,97,116,101,214,27,28, -248,22,206,200,199,27,248,22,52,201,28,248,22,206,193,192,27,248,22,52,194, -28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52, -194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22, -52,194,28,248,22,206,193,192,248,32,215,89,162,8,100,35,44,2,116,222,28, -248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194, -28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52, -194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22, -52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,248,2, -215,248,22,52,194,248,22,52,194,28,249,22,252,11,2,203,194,248,22,59,202, -249,22,59,203,194,192,83,159,34,93,80,159,34,57,35,32,216,89,162,34,35, -37,2,54,222,249,22,2,32,217,89,162,8,36,35,44,9,222,28,248,22,206, -193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22, -206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248, -22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28, -248,22,206,193,192,248,32,218,89,162,8,100,35,44,2,116,222,28,248,22,206, -193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22, -206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248, -22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28, -248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,248,2,218,248,22, -52,194,248,22,52,194,194,83,159,34,93,80,159,34,8,27,35,32,219,89,162, -34,36,38,2,62,222,249,22,3,89,162,34,35,42,9,223,2,28,248,22,50, -194,27,248,22,52,195,28,248,22,206,193,28,249,22,221,194,195,250,22,252,39, +248,22,212,200,199,27,248,22,58,201,28,248,22,212,193,192,27,248,22,58,194, +28,248,22,212,193,192,27,248,22,58,194,28,248,22,212,193,192,27,248,22,58, +194,28,248,22,212,193,192,27,248,22,58,194,28,248,22,212,193,192,27,248,22, +58,194,28,248,22,212,193,192,248,32,215,89,162,8,100,35,44,2,116,222,28, +248,22,212,193,192,27,248,22,58,194,28,248,22,212,193,192,27,248,22,58,194, +28,248,22,212,193,192,27,248,22,58,194,28,248,22,212,193,192,27,248,22,58, +194,28,248,22,212,193,192,27,248,22,58,194,28,248,22,212,193,192,27,248,22, +58,194,28,248,22,212,193,192,27,248,22,58,194,28,248,22,212,193,192,248,2, +215,248,22,58,194,248,22,58,194,28,249,22,252,17,2,203,194,248,22,65,202, +249,22,65,203,194,192,83,159,34,93,80,159,34,57,35,32,216,89,162,34,35, +37,2,54,222,249,22,2,32,217,89,162,8,36,35,44,9,222,28,248,22,212, +193,192,27,248,22,58,194,28,248,22,212,193,192,27,248,22,58,194,28,248,22, +212,193,192,27,248,22,58,194,28,248,22,212,193,192,27,248,22,58,194,28,248, +22,212,193,192,27,248,22,58,194,28,248,22,212,193,192,27,248,22,58,194,28, +248,22,212,193,192,248,32,218,89,162,8,100,35,44,2,116,222,28,248,22,212, +193,192,27,248,22,58,194,28,248,22,212,193,192,27,248,22,58,194,28,248,22, +212,193,192,27,248,22,58,194,28,248,22,212,193,192,27,248,22,58,194,28,248, +22,212,193,192,27,248,22,58,194,28,248,22,212,193,192,27,248,22,58,194,28, +248,22,212,193,192,27,248,22,58,194,28,248,22,212,193,192,248,2,218,248,22, +58,194,248,22,58,194,194,83,159,34,93,80,159,34,8,27,35,32,219,89,162, +34,36,38,2,62,222,249,22,3,89,162,34,35,42,9,223,2,28,248,22,56, +194,27,248,22,58,195,28,248,22,212,193,28,249,22,227,194,195,250,22,252,45, 2,2,181,6,50,50,109,105,115,115,105,110,103,32,101,108,108,105,112,115,101, 115,32,119,105,116,104,32,112,97,116,116,101,114,110,32,118,97,114,105,97,98, -108,101,32,105,110,32,116,101,109,112,108,97,116,101,220,196,12,27,248,22,52, -194,28,248,22,206,193,28,249,22,221,194,196,250,22,252,39,2,2,181,2,220, -197,12,249,32,221,89,162,8,64,36,41,2,116,222,28,248,22,206,194,28,249, -22,221,195,194,250,22,252,39,2,2,181,2,220,195,12,27,248,22,52,195,28, -248,22,206,193,28,249,22,221,194,195,250,22,252,39,2,2,181,2,220,196,12, -27,248,22,52,194,28,248,22,206,193,28,249,22,221,194,196,250,22,252,39,2, -2,181,2,220,197,12,249,2,221,196,248,22,52,195,196,248,22,52,195,12,195, +108,101,32,105,110,32,116,101,109,112,108,97,116,101,220,196,12,27,248,22,58, +194,28,248,22,212,193,28,249,22,227,194,196,250,22,252,45,2,2,181,2,220, +197,12,249,32,221,89,162,8,64,36,41,2,116,222,28,248,22,212,194,28,249, +22,227,195,194,250,22,252,45,2,2,181,2,220,195,12,27,248,22,58,195,28, +248,22,212,193,28,249,22,227,194,195,250,22,252,45,2,2,181,2,220,196,12, +27,248,22,58,194,28,248,22,212,193,28,249,22,227,194,196,250,22,252,45,2, +2,181,2,220,197,12,249,2,221,196,248,22,58,195,196,248,22,58,195,12,195, 83,159,34,93,80,159,34,40,35,89,162,34,35,41,2,18,223,0,28,248,80, 158,35,47,194,27,248,80,158,36,42,195,28,248,80,158,36,47,193,28,27,248, -80,158,37,43,194,28,248,22,41,248,22,210,194,249,22,223,194,20,15,159,38, -34,8,43,11,248,22,252,9,2,27,248,80,158,38,43,197,28,248,22,41,248, -22,210,194,249,22,223,194,20,15,159,39,34,8,43,11,11,11,11,83,159,34, +80,158,37,43,194,28,248,22,47,248,22,216,194,249,22,229,194,20,15,159,38, +34,8,43,11,248,22,252,15,2,27,248,80,158,38,43,197,28,248,22,47,248, +22,216,194,249,22,229,194,20,15,159,39,34,8,43,11,11,11,11,83,159,34, 93,80,159,34,45,35,32,222,89,162,34,36,39,2,29,222,249,32,223,89,162, -8,64,36,52,2,116,222,28,248,22,57,194,9,28,248,193,248,22,52,195,249, -22,51,27,248,22,52,197,28,248,22,206,193,192,27,248,22,52,194,28,248,22, -206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248, -22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28, -248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194, -28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52, -194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,248,32,224, -89,162,8,64,35,44,2,116,222,28,248,22,206,193,192,27,248,22,52,194,28, -248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194, -28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52, -194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22, -52,194,28,248,22,206,193,192,248,2,224,248,22,52,194,248,22,52,194,249,2, -223,196,248,22,53,198,249,2,223,194,248,22,53,196,195,194,83,159,34,93,80, +8,64,36,52,2,116,222,28,248,22,63,194,9,28,248,193,248,22,58,195,249, +22,57,27,248,22,58,197,28,248,22,212,193,192,27,248,22,58,194,28,248,22, +212,193,192,27,248,22,58,194,28,248,22,212,193,192,27,248,22,58,194,28,248, +22,212,193,192,27,248,22,58,194,28,248,22,212,193,192,27,248,22,58,194,28, +248,22,212,193,192,27,248,22,58,194,28,248,22,212,193,192,27,248,22,58,194, +28,248,22,212,193,192,27,248,22,58,194,28,248,22,212,193,192,27,248,22,58, +194,28,248,22,212,193,192,27,248,22,58,194,28,248,22,212,193,192,248,32,224, +89,162,8,64,35,44,2,116,222,28,248,22,212,193,192,27,248,22,58,194,28, +248,22,212,193,192,27,248,22,58,194,28,248,22,212,193,192,27,248,22,58,194, +28,248,22,212,193,192,27,248,22,58,194,28,248,22,212,193,192,27,248,22,58, +194,28,248,22,212,193,192,27,248,22,58,194,28,248,22,212,193,192,27,248,22, +58,194,28,248,22,212,193,192,248,2,224,248,22,58,194,248,22,58,194,249,2, +223,196,248,22,59,198,249,2,223,194,248,22,59,196,195,194,83,159,34,93,80, 159,34,8,28,35,32,225,89,162,34,35,37,2,64,222,248,32,226,89,162,8, -64,35,40,2,116,222,28,248,22,57,193,11,28,248,22,50,248,22,52,194,27, -248,22,53,194,28,248,22,57,193,11,28,248,22,50,248,22,52,194,10,27,248, -22,53,194,28,248,22,57,193,11,28,248,22,50,248,22,52,194,10,248,32,227, -89,162,8,64,35,39,2,116,222,28,248,22,57,193,11,28,248,22,50,248,22, -52,194,10,27,248,22,53,194,28,248,22,57,193,11,28,248,22,50,248,22,52, -194,10,27,248,22,53,194,28,248,22,57,193,11,28,248,22,50,248,22,52,194, -10,248,2,227,248,22,53,194,248,22,53,194,248,2,226,248,22,53,194,193,83, +64,35,40,2,116,222,28,248,22,63,193,11,28,248,22,56,248,22,58,194,27, +248,22,59,194,28,248,22,63,193,11,28,248,22,56,248,22,58,194,10,27,248, +22,59,194,28,248,22,63,193,11,28,248,22,56,248,22,58,194,10,248,32,227, +89,162,8,64,35,39,2,116,222,28,248,22,63,193,11,28,248,22,56,248,22, +58,194,10,27,248,22,59,194,28,248,22,63,193,11,28,248,22,56,248,22,58, +194,10,27,248,22,59,194,28,248,22,63,193,11,28,248,22,56,248,22,58,194, +10,248,2,227,248,22,59,194,248,22,59,194,248,2,226,248,22,59,194,193,83, 159,34,93,80,159,34,8,31,35,89,162,34,35,41,2,70,223,0,28,248,80, 158,35,47,194,28,27,248,80,158,36,43,195,28,248,80,158,36,47,193,28,27, 248,80,158,37,43,194,28,248,80,158,37,47,193,28,248,80,159,37,8,31,35, 248,80,158,38,43,194,248,80,159,37,8,31,35,248,80,158,38,42,194,11,28, -248,80,158,37,50,193,248,22,252,9,2,28,248,22,41,248,22,210,195,249,22, -223,195,20,15,159,39,34,8,43,11,10,27,248,80,158,37,42,194,28,248,80, +248,80,158,37,50,193,248,22,252,15,2,28,248,22,47,248,22,216,195,249,22, +229,195,20,15,159,39,34,8,43,11,10,27,248,80,158,37,42,194,28,248,80, 158,37,47,193,28,248,80,159,37,8,31,35,248,80,158,38,43,194,248,80,159, 37,8,31,35,248,80,158,38,42,194,11,28,248,80,158,37,50,193,248,22,252, -9,2,28,248,22,41,248,22,210,195,249,22,223,195,20,15,159,39,34,8,43, -11,10,11,28,248,80,158,36,50,193,248,22,252,9,2,28,248,22,41,248,22, -210,195,249,22,223,195,20,15,159,38,34,8,43,11,10,27,248,80,158,36,42, +15,2,28,248,22,47,248,22,216,195,249,22,229,195,20,15,159,39,34,8,43, +11,10,11,28,248,80,158,36,50,193,248,22,252,15,2,28,248,22,47,248,22, +216,195,249,22,229,195,20,15,159,38,34,8,43,11,10,27,248,80,158,36,42, 195,28,248,80,158,36,47,193,28,27,248,80,158,37,43,194,28,248,80,158,37, 47,193,28,248,80,159,37,8,31,35,248,80,158,38,43,194,248,80,159,37,8, -31,35,248,80,158,38,42,194,11,28,248,80,158,37,50,193,248,22,252,9,2, -28,248,22,41,248,22,210,195,249,22,223,195,20,15,159,39,34,8,43,11,10, +31,35,248,80,158,38,42,194,11,28,248,80,158,37,50,193,248,22,252,15,2, +28,248,22,47,248,22,216,195,249,22,229,195,20,15,159,39,34,8,43,11,10, 27,248,80,158,37,42,194,28,248,80,158,37,47,193,28,248,80,159,37,8,31, 35,248,80,158,38,43,194,248,80,159,37,8,31,35,248,80,158,38,42,194,11, -28,248,80,158,37,50,193,248,22,252,9,2,28,248,22,41,248,22,210,195,249, -22,223,195,20,15,159,39,34,8,43,11,10,11,28,248,80,158,36,50,193,248, -22,252,9,2,28,248,22,41,248,22,210,195,249,22,223,195,20,15,159,38,34, -8,43,11,10,11,28,248,80,158,35,50,194,248,22,252,9,2,28,248,22,41, -248,22,210,196,249,22,223,196,20,15,159,37,34,8,43,11,10,83,159,34,97, +28,248,80,158,37,50,193,248,22,252,15,2,28,248,22,47,248,22,216,195,249, +22,229,195,20,15,159,39,34,8,43,11,10,11,28,248,80,158,36,50,193,248, +22,252,15,2,28,248,22,47,248,22,216,195,249,22,229,195,20,15,159,38,34, +8,43,11,10,11,28,248,80,158,35,50,194,248,22,252,15,2,28,248,22,47, +248,22,216,196,249,22,229,196,20,15,159,37,34,8,43,11,10,83,159,34,97, 80,159,34,8,32,35,80,159,34,8,33,35,80,159,34,8,34,35,80,159,34, -8,35,35,80,159,34,8,36,35,26,8,22,252,91,2,74,115,121,110,116,97, -120,45,109,97,112,112,105,110,103,228,11,36,34,11,9,247,22,252,114,2,89, -162,34,36,44,9,223,8,28,248,80,158,35,50,195,250,22,252,39,2,11,6, +8,35,35,80,159,34,8,36,35,26,8,22,252,97,2,74,115,121,110,116,97, +120,45,109,97,112,112,105,110,103,228,11,36,34,11,9,247,22,252,120,2,89, +162,34,36,44,9,223,8,28,248,80,158,35,50,195,250,22,252,45,2,11,6, 53,53,112,97,116,116,101,114,110,32,118,97,114,105,97,98,108,101,32,99,97, 110,110,111,116,32,98,101,32,117,115,101,100,32,111,117,116,115,105,100,101,32, -111,102,32,97,32,116,101,109,112,108,97,116,101,229,197,251,22,252,39,2,11, +111,102,32,97,32,116,101,109,112,108,97,116,101,229,197,251,22,252,45,2,11, 6,53,53,112,97,116,116,101,114,110,32,118,97,114,105,97,98,108,101,32,99, 97,110,110,111,116,32,98,101,32,117,115,101,100,32,111,117,116,115,105,100,101, -32,111,102,32,97,32,116,101,109,112,108,97,116,101,230,198,28,249,22,225,20, +32,111,102,32,97,32,116,101,109,112,108,97,116,101,230,198,28,249,22,231,20, 15,159,40,36,8,43,248,80,158,41,43,201,248,80,158,39,43,248,80,158,40, 42,200,248,80,158,39,43,199,83,159,34,93,80,159,34,8,37,35,249,22,252, -93,2,80,158,36,8,35,34,83,159,34,93,80,159,34,8,38,35,249,22,252, -93,2,80,158,36,8,35,35,83,159,34,93,80,159,34,8,39,35,89,162,34, -36,40,2,86,223,0,248,22,252,95,3,249,80,158,37,8,33,196,197,83,159, +99,2,80,158,36,8,35,34,83,159,34,93,80,159,34,8,38,35,249,22,252, +99,2,80,158,36,8,35,35,83,159,34,93,80,159,34,8,39,35,89,162,34, +36,40,2,86,223,0,248,22,252,99,3,249,80,158,37,8,33,196,197,83,159, 34,93,80,159,34,8,40,35,89,162,34,35,38,2,88,223,0,28,248,22,252, -96,3,194,248,80,158,35,8,34,248,22,252,97,3,195,11,83,159,34,93,80, +100,3,194,248,80,158,35,8,34,248,22,252,101,3,195,11,83,159,34,93,80, 159,34,8,41,35,89,162,34,35,38,2,90,223,0,248,80,158,35,8,37,248, -22,252,97,3,195,83,159,34,93,80,159,34,8,42,35,89,162,34,35,38,2, -92,223,0,248,80,158,35,8,38,248,22,252,97,3,195,95,2,4,2,20,2, +22,252,101,3,195,83,159,34,93,80,159,34,8,42,35,89,162,34,35,38,2, +92,223,0,248,80,158,35,8,38,248,22,252,101,3,195,95,2,4,2,20,2, 94,9,2,4,0}; EVAL_ONE_SIZED_STR((char *)expr, 13717); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,178,252,176,24,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,55,178,252,176,24,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,69,35,37,115,116, 120,99,97,115,101,1,29,2,11,11,10,10,10,34,80,158,34,34,20,98,159, 34,16,6,30,3,2,2,1,26,100,97,116,117,109,45,62,115,121,110,116,97, @@ -1360,146 +1360,146 @@ 120,17,16,2,11,11,16,2,2,16,2,17,34,36,95,16,5,93,78,112,97, 116,116,101,114,110,45,115,117,98,115,116,105,116,117,116,101,18,87,94,83,159, 34,93,80,159,34,41,35,89,162,8,100,37,45,64,108,111,111,112,19,223,0, -28,248,22,57,196,12,87,94,27,248,22,210,248,22,52,198,27,248,22,78,198, -28,28,248,80,158,37,37,193,10,28,248,80,158,37,38,193,28,249,22,71,248, -22,210,248,80,158,40,34,196,21,102,63,99,97,114,20,64,99,97,100,114,21, +28,248,22,63,196,12,87,94,27,248,22,216,248,22,58,198,27,248,22,84,198, +28,28,248,80,158,37,37,193,10,28,248,80,158,37,38,193,28,249,22,77,248, +22,216,248,80,158,40,34,196,21,102,63,99,97,114,20,64,99,97,100,114,21, 65,99,97,100,100,114,22,66,99,97,100,100,100,114,23,63,99,100,114,24,64, 99,100,100,114,25,65,99,100,100,100,114,26,66,99,100,100,100,100,114,27,68, 108,105,115,116,45,114,101,102,28,69,108,105,115,116,45,116,97,105,108,29,28, 248,80,158,37,38,248,80,158,38,35,194,248,80,158,37,37,248,80,158,38,34, -248,80,158,39,35,195,11,11,11,27,248,22,208,194,27,250,22,116,200,196,11, -28,192,250,22,115,201,198,195,250,22,115,200,196,198,12,250,80,159,37,41,35, -196,197,248,22,80,199,89,162,8,36,35,56,9,223,0,27,248,80,158,36,34, +248,80,158,39,35,195,11,11,11,27,248,22,214,194,27,250,22,122,200,196,11, +28,192,250,22,121,201,198,195,250,22,121,200,196,198,12,250,80,159,37,41,35, +196,197,248,22,86,199,89,162,8,36,35,56,9,223,0,27,248,80,158,36,34, 248,80,158,37,35,196,27,248,80,158,37,36,248,80,158,38,35,248,80,158,39, -35,198,27,248,22,110,65,101,113,117,97,108,30,27,247,22,110,87,94,250,80, -159,41,41,35,196,195,197,27,28,248,22,186,248,22,113,195,196,91,159,35,11, +35,198,27,248,22,116,65,101,113,117,97,108,30,27,247,22,116,87,94,250,80, +159,41,41,35,196,195,197,27,28,248,22,192,248,22,119,195,196,91,159,35,11, 20,12,95,35,248,193,198,89,162,8,64,35,42,2,19,224,2,0,28,248,22, -50,195,27,248,194,248,22,52,197,27,248,195,248,22,53,198,28,28,249,22,252, -11,2,195,248,22,52,199,249,22,252,11,2,194,248,22,53,199,11,196,249,22, -51,195,194,28,248,22,41,195,27,250,22,116,197,198,11,28,192,192,195,28,248, -22,206,195,27,248,194,248,22,210,197,28,249,22,252,11,2,248,22,210,198,194, -195,251,22,209,199,196,199,199,28,248,22,252,222,1,195,248,22,252,230,1,249, -22,2,195,248,22,252,229,1,198,28,248,22,107,195,248,22,105,248,194,248,22, -108,197,194,250,22,209,20,15,159,42,34,39,251,22,61,2,15,199,249,22,59, -65,113,117,111,116,101,31,28,248,22,57,205,9,28,250,22,116,205,248,22,210, -248,22,52,23,17,11,249,32,32,89,162,8,64,36,44,2,19,222,28,248,22, -57,194,9,28,250,22,116,195,248,22,210,248,22,52,198,11,27,248,22,80,195, -28,248,22,57,193,9,28,250,22,116,196,248,22,210,248,22,52,197,11,249,2, -32,195,248,22,80,195,249,22,51,248,22,52,195,249,2,32,197,248,22,80,197, -249,22,51,248,22,52,196,27,248,22,80,197,28,248,22,57,193,9,28,250,22, -116,198,248,22,210,248,22,52,197,11,249,2,32,197,248,22,80,195,249,22,51, -248,22,52,195,249,2,32,199,248,22,80,197,204,248,22,80,23,15,249,22,51, -248,22,52,23,15,249,2,32,206,248,22,80,23,17,28,248,22,57,203,9,28, -250,22,116,203,248,22,210,248,22,52,23,15,11,249,32,33,89,162,8,64,36, -44,2,19,222,28,248,22,57,194,9,28,250,22,116,195,248,22,210,248,22,52, -198,11,27,248,22,80,195,28,248,22,57,193,9,28,250,22,116,196,248,22,210, -248,22,52,197,11,249,2,33,195,248,22,80,195,249,22,51,248,22,78,195,249, -2,33,197,248,22,80,197,249,22,51,248,22,78,196,27,248,22,80,197,28,248, -22,57,193,9,28,250,22,116,198,248,22,210,248,22,52,197,11,249,2,33,197, -248,22,80,195,249,22,51,248,22,78,195,249,2,33,199,248,22,80,197,202,248, -22,80,205,249,22,51,248,22,78,205,249,2,33,204,248,22,80,23,15,201,34, +56,195,27,248,194,248,22,58,197,27,248,195,248,22,59,198,28,28,249,22,252, +17,2,195,248,22,58,199,249,22,252,17,2,194,248,22,59,199,11,196,249,22, +57,195,194,28,248,22,47,195,27,250,22,122,197,198,11,28,192,192,195,28,248, +22,212,195,27,248,194,248,22,216,197,28,249,22,252,17,2,248,22,216,198,194, +195,251,22,215,199,196,199,199,28,248,22,252,228,1,195,248,22,252,236,1,249, +22,2,195,248,22,252,235,1,198,28,248,22,113,195,248,22,111,248,194,248,22, +114,197,194,250,22,215,20,15,159,42,34,39,251,22,67,2,15,199,249,22,65, +65,113,117,111,116,101,31,28,248,22,63,205,9,28,250,22,122,205,248,22,216, +248,22,58,23,17,11,249,32,32,89,162,8,64,36,44,2,19,222,28,248,22, +63,194,9,28,250,22,122,195,248,22,216,248,22,58,198,11,27,248,22,86,195, +28,248,22,63,193,9,28,250,22,122,196,248,22,216,248,22,58,197,11,249,2, +32,195,248,22,86,195,249,22,57,248,22,58,195,249,2,32,197,248,22,86,197, +249,22,57,248,22,58,196,27,248,22,86,197,28,248,22,63,193,9,28,250,22, +122,198,248,22,216,248,22,58,197,11,249,2,32,197,248,22,86,195,249,22,57, +248,22,58,195,249,2,32,199,248,22,86,197,204,248,22,86,23,15,249,22,57, +248,22,58,23,15,249,2,32,206,248,22,86,23,17,28,248,22,63,203,9,28, +250,22,122,203,248,22,216,248,22,58,23,15,11,249,32,33,89,162,8,64,36, +44,2,19,222,28,248,22,63,194,9,28,250,22,122,195,248,22,216,248,22,58, +198,11,27,248,22,86,195,28,248,22,63,193,9,28,250,22,122,196,248,22,216, +248,22,58,197,11,249,2,33,195,248,22,86,195,249,22,57,248,22,84,195,249, +2,33,197,248,22,86,197,249,22,57,248,22,84,196,27,248,22,86,197,28,248, +22,63,193,9,28,250,22,122,198,248,22,216,248,22,58,197,11,249,2,33,197, +248,22,86,195,249,22,57,248,22,84,195,249,2,33,199,248,22,86,197,202,248, +22,86,205,249,22,57,248,22,84,205,249,2,33,204,248,22,86,23,15,201,34, 20,98,159,35,16,5,30,34,65,35,37,115,116,120,35,67,115,116,120,45,99, 97,114,36,5,30,37,2,35,67,115,116,120,45,99,100,114,38,6,30,39,2, 35,69,115,116,120,45,62,108,105,115,116,40,4,30,41,2,35,71,105,100,101, 110,116,105,102,105,101,114,63,42,2,30,43,2,35,69,115,116,120,45,112,97, 105,114,63,44,11,16,1,18,101,64,104,101,114,101,45,43,98,41,10,34,11, 95,159,2,8,9,11,159,74,35,37,115,109,97,108,108,45,115,99,104,101,109, -101,46,9,11,159,2,35,9,11,16,14,2,16,2,2,2,4,2,2,2,6, -2,2,2,18,2,2,2,15,2,2,2,17,2,2,2,13,2,2,98,40,10, +101,46,9,11,159,2,35,9,11,16,14,2,18,2,2,2,16,2,2,2,4, +2,2,2,15,2,2,2,6,2,2,2,17,2,2,2,13,2,2,98,40,10, 35,11,95,159,64,35,37,115,99,47,9,11,159,2,46,9,11,159,2,35,9, 11,16,0,96,39,8,254,1,11,16,0,16,4,38,11,63,115,116,120,48,3, -1,7,101,110,118,50,56,49,51,49,16,6,37,11,63,112,97,116,50,64,115, -117,98,115,51,3,1,7,101,110,118,50,56,49,52,52,2,52,16,6,36,11, +1,7,101,110,118,50,56,53,48,49,16,6,37,11,63,112,97,116,50,64,115, +117,98,115,51,3,1,7,101,110,118,50,56,53,49,52,2,52,16,6,36,11, 69,104,116,45,99,111,109,109,111,110,53,66,104,116,45,109,97,112,54,3,1, -7,101,110,118,50,56,49,53,55,2,55,16,4,35,11,71,110,101,119,45,112, -97,116,116,101,114,110,56,3,1,7,101,110,118,50,56,50,51,57,11,16,5, +7,101,110,118,50,56,53,50,55,2,55,16,4,35,11,71,110,101,119,45,112, +97,116,116,101,114,110,56,3,1,7,101,110,118,50,56,54,48,57,11,16,5, 93,2,16,87,97,83,159,34,93,80,159,34,8,41,35,89,162,8,36,44,8, -41,2,19,223,0,28,248,22,57,200,251,22,59,20,15,159,38,41,43,11,6, +41,2,19,223,0,28,248,22,63,200,251,22,65,20,15,159,38,41,43,11,6, 10,10,98,97,100,32,115,121,110,116,97,120,58,197,27,26,10,80,159,45,8, -41,35,204,205,206,23,15,23,16,23,17,248,22,53,23,19,248,22,53,23,20, -248,22,53,23,21,248,22,53,23,22,27,248,22,52,202,27,248,22,52,204,27, -248,22,52,206,27,248,22,52,23,16,91,159,37,10,90,161,35,34,10,249,22, -2,32,59,89,162,8,36,35,40,9,222,28,248,22,206,193,192,27,248,22,52, -194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,248,32,60, -89,162,8,100,35,40,2,19,222,28,248,22,206,193,192,27,248,22,52,194,28, -248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194, -28,248,22,206,193,192,248,2,60,248,22,52,194,248,22,52,194,198,90,161,35, -35,10,249,22,2,32,61,89,162,8,36,35,38,9,222,250,22,209,195,247,22, -48,11,209,90,161,35,36,10,248,22,171,248,22,64,209,27,28,248,22,52,23, -18,248,22,59,20,15,159,44,42,43,200,27,252,80,158,49,41,23,19,205,205, -248,80,158,50,35,23,21,248,22,252,9,2,23,19,27,28,206,249,22,252,13, +41,35,204,205,206,23,15,23,16,23,17,248,22,59,23,19,248,22,59,23,20, +248,22,59,23,21,248,22,59,23,22,27,248,22,58,202,27,248,22,58,204,27, +248,22,58,206,27,248,22,58,23,16,91,159,37,10,90,161,35,34,10,249,22, +2,32,59,89,162,8,36,35,40,9,222,28,248,22,212,193,192,27,248,22,58, +194,28,248,22,212,193,192,27,248,22,58,194,28,248,22,212,193,192,248,32,60, +89,162,8,100,35,40,2,19,222,28,248,22,212,193,192,27,248,22,58,194,28, +248,22,212,193,192,27,248,22,58,194,28,248,22,212,193,192,27,248,22,58,194, +28,248,22,212,193,192,248,2,60,248,22,58,194,248,22,58,194,198,90,161,35, +35,10,249,22,2,32,61,89,162,8,36,35,38,9,222,250,22,215,195,247,22, +54,11,209,90,161,35,36,10,248,22,177,248,22,70,209,27,28,248,22,58,23, +18,248,22,65,20,15,159,44,42,43,200,27,252,80,158,49,41,23,19,205,205, +248,80,158,50,35,23,21,248,22,252,15,2,23,19,27,28,206,249,22,252,19, 2,195,21,95,66,108,97,109,98,100,97,62,93,61,101,63,2,63,249,22,252, -13,2,195,21,95,2,62,94,2,63,79,109,111,100,117,108,101,45,105,100,101, -110,116,105,102,105,101,114,61,63,64,2,63,27,250,22,59,20,15,159,49,43, -43,248,22,59,249,22,59,23,20,28,199,23,19,250,22,61,250,22,209,20,15, -159,58,44,43,206,23,22,23,22,28,23,24,9,248,22,59,23,28,251,22,59, -20,15,159,53,45,43,28,200,10,23,21,250,22,59,20,15,159,56,46,43,250, -22,2,89,162,8,36,36,47,9,226,25,27,19,17,249,22,59,199,27,249,80, -158,42,42,201,212,27,28,249,22,181,214,195,28,249,22,252,11,2,195,34,64, -116,97,105,108,65,28,249,22,252,11,2,195,35,20,15,159,41,47,43,28,249, -22,252,11,2,195,36,20,15,159,41,48,43,28,249,22,252,11,2,195,37,20, -15,159,41,49,43,28,249,22,252,11,2,195,38,20,15,159,41,50,43,2,65, -28,249,22,252,11,2,195,34,20,15,159,41,51,43,28,249,22,252,11,2,195, -35,20,15,159,41,52,43,28,249,22,252,11,2,195,36,20,15,159,41,53,43, -28,249,22,252,11,2,195,37,20,15,159,41,54,43,11,28,249,22,252,11,2, -194,2,65,28,248,22,186,194,198,250,22,59,20,15,159,44,55,43,201,196,28, -192,249,22,59,194,200,250,22,59,20,15,159,44,56,43,201,196,24,17,24,18, -251,22,59,20,15,159,8,26,57,43,251,22,2,80,159,8,30,8,42,35,24, -22,23,26,24,23,9,28,23,23,251,22,59,20,15,159,8,30,8,26,43,23, -27,23,25,23,21,23,21,202,28,201,250,22,59,20,15,159,49,8,27,43,248, -22,59,249,22,59,68,116,114,121,45,110,101,120,116,66,250,22,59,20,15,159, -55,8,28,43,247,22,59,23,20,195,192,83,159,34,93,80,159,34,8,42,35, -89,162,8,36,37,49,9,223,0,249,22,59,248,22,59,196,250,22,59,20,15, -159,39,58,43,28,248,22,206,200,34,27,248,22,52,201,28,248,22,206,193,35, -27,248,22,52,194,28,248,22,206,193,36,249,32,67,89,162,8,100,36,45,2, -19,222,28,248,22,206,193,193,27,248,22,52,194,27,248,22,170,196,28,248,22, -206,194,192,27,248,22,52,195,27,248,22,170,195,28,248,22,206,194,192,27,248, -22,52,195,27,248,22,170,195,28,248,22,206,194,192,249,2,67,248,22,52,196, -248,22,170,195,248,22,52,195,37,249,22,59,20,15,159,41,59,43,202,83,159, +19,2,195,21,95,2,62,94,2,63,79,109,111,100,117,108,101,45,105,100,101, +110,116,105,102,105,101,114,61,63,64,2,63,27,250,22,65,20,15,159,49,43, +43,248,22,65,249,22,65,23,20,28,199,23,19,250,22,67,250,22,215,20,15, +159,58,44,43,206,23,22,23,22,28,23,24,9,248,22,65,23,28,251,22,65, +20,15,159,53,45,43,28,200,10,23,21,250,22,65,20,15,159,56,46,43,250, +22,2,89,162,8,36,36,47,9,226,25,27,19,17,249,22,65,199,27,249,80, +158,42,42,201,212,27,28,249,22,187,214,195,28,249,22,252,17,2,195,34,64, +116,97,105,108,65,28,249,22,252,17,2,195,35,20,15,159,41,47,43,28,249, +22,252,17,2,195,36,20,15,159,41,48,43,28,249,22,252,17,2,195,37,20, +15,159,41,49,43,28,249,22,252,17,2,195,38,20,15,159,41,50,43,2,65, +28,249,22,252,17,2,195,34,20,15,159,41,51,43,28,249,22,252,17,2,195, +35,20,15,159,41,52,43,28,249,22,252,17,2,195,36,20,15,159,41,53,43, +28,249,22,252,17,2,195,37,20,15,159,41,54,43,11,28,249,22,252,17,2, +194,2,65,28,248,22,192,194,198,250,22,65,20,15,159,44,55,43,201,196,28, +192,249,22,65,194,200,250,22,65,20,15,159,44,56,43,201,196,24,17,24,18, +251,22,65,20,15,159,8,26,57,43,251,22,2,80,159,8,30,8,42,35,24, +22,23,26,24,23,9,28,23,23,251,22,65,20,15,159,8,30,8,26,43,23, +27,23,25,23,21,23,21,202,28,201,250,22,65,20,15,159,49,8,27,43,248, +22,65,249,22,65,68,116,114,121,45,110,101,120,116,66,250,22,65,20,15,159, +55,8,28,43,247,22,65,23,20,195,192,83,159,34,93,80,159,34,8,42,35, +89,162,8,36,37,49,9,223,0,249,22,65,248,22,65,196,250,22,65,20,15, +159,39,58,43,28,248,22,212,200,34,27,248,22,58,201,28,248,22,212,193,35, +27,248,22,58,194,28,248,22,212,193,36,249,32,67,89,162,8,100,36,45,2, +19,222,28,248,22,212,193,193,27,248,22,58,194,27,248,22,176,196,28,248,22, +212,194,192,27,248,22,58,195,27,248,22,176,195,28,248,22,212,194,192,27,248, +22,58,195,27,248,22,176,195,28,248,22,212,194,192,249,2,67,248,22,58,196, +248,22,176,195,248,22,58,195,37,249,22,65,20,15,159,41,59,43,202,83,159, 34,93,80,159,34,8,40,35,89,162,34,35,39,9,223,0,27,248,80,158,36, 39,248,80,158,37,39,196,28,248,80,158,36,38,193,248,80,158,36,37,193,248, 80,158,36,37,248,80,158,37,39,196,83,159,34,93,80,159,34,8,39,35,89, 162,34,35,39,9,223,0,28,248,80,158,35,38,248,80,158,36,39,248,80,158, 37,39,196,248,80,158,35,37,248,80,158,36,39,195,11,89,162,8,36,35,8, 33,9,223,0,91,159,35,10,90,161,35,34,10,28,248,80,158,36,34,195,248, -22,53,248,80,158,37,35,196,11,87,94,28,28,248,80,158,36,34,195,249,22, -183,248,22,64,210,37,11,12,250,22,252,39,2,11,6,8,8,98,97,100,32, -102,111,114,109,68,197,27,248,22,52,209,27,248,22,78,210,27,248,22,87,211, -27,248,22,90,212,27,248,22,90,248,22,53,214,27,248,22,89,248,22,53,215, -87,96,28,248,80,158,42,34,195,12,250,22,252,39,2,248,22,210,201,6,56, +22,59,248,80,158,37,35,196,11,87,94,28,28,248,80,158,36,34,195,249,22, +189,248,22,70,210,37,11,12,250,22,252,45,2,11,6,8,8,98,97,100,32, +102,111,114,109,68,197,27,248,22,58,209,27,248,22,84,210,27,248,22,93,211, +27,248,22,96,212,27,248,22,96,248,22,59,214,27,248,22,95,248,22,59,215, +87,96,28,248,80,158,42,34,195,12,250,22,252,45,2,248,22,216,201,6,56, 56,101,120,112,101,99,116,101,100,32,97,32,112,97,114,101,110,116,104,101,115, 105,122,101,100,32,115,101,113,117,101,110,99,101,32,111,102,32,108,105,116,101, 114,97,108,32,105,100,101,110,116,105,102,105,101,114,115,69,197,249,22,3,89, -162,34,35,41,9,224,9,7,28,248,80,158,36,36,195,12,250,22,252,39,2, -248,22,210,196,6,28,28,108,105,116,101,114,97,108,32,105,115,32,110,111,116, +162,34,35,41,9,224,9,7,28,248,80,158,36,36,195,12,250,22,252,45,2, +248,22,216,196,6,28,28,108,105,116,101,114,97,108,32,105,115,32,110,111,116, 32,97,110,32,105,100,101,110,116,105,102,105,101,114,70,197,248,80,158,44,35, 197,249,22,3,89,162,34,35,42,9,224,9,7,28,28,248,80,158,36,34,195, -250,22,184,36,248,22,64,248,80,158,40,35,199,37,11,12,250,22,252,39,2, -248,22,210,196,6,10,10,98,97,100,32,99,108,97,117,115,101,71,197,194,27, +250,22,190,36,248,22,70,248,80,158,40,35,199,37,11,12,250,22,252,45,2, +248,22,216,196,6,10,10,98,97,100,32,99,108,97,117,115,101,71,197,194,27, 249,22,2,80,158,44,37,195,27,249,22,2,80,159,45,8,39,35,196,27,249, 22,2,80,159,46,8,40,35,197,27,20,15,159,45,34,43,27,20,15,159,46, 35,43,27,249,22,2,89,162,34,35,43,9,225,15,10,13,251,80,158,40,40, 196,199,199,248,80,158,41,35,198,248,80,158,50,35,200,27,28,248,80,158,49, -36,201,249,22,223,202,20,15,159,50,36,43,11,250,22,209,20,15,159,51,37, -43,250,22,59,20,15,159,54,38,43,248,22,59,249,22,59,204,28,248,22,210, -23,21,23,19,250,22,59,20,15,159,8,26,39,43,249,22,59,20,15,159,8, -28,40,43,249,22,209,23,26,2,45,23,22,26,10,80,159,8,30,8,41,35, +36,201,249,22,229,202,20,15,159,50,36,43,11,250,22,215,20,15,159,51,37, +43,250,22,65,20,15,159,54,38,43,248,22,65,249,22,65,204,28,248,22,216, +23,21,23,19,250,22,65,20,15,159,8,26,39,43,249,22,65,20,15,159,8, +28,40,43,249,22,215,23,26,2,45,23,22,26,10,80,159,8,30,8,41,35, 23,19,23,18,23,16,23,28,23,25,23,24,23,22,23,21,23,17,23,20,23, 18,34,20,98,159,38,16,9,30,72,2,35,69,115,116,120,45,108,105,115,116, 63,73,8,2,39,2,41,2,34,2,43,2,37,30,74,2,47,74,103,101,116, 45,109,97,116,99,104,45,118,97,114,115,75,0,30,76,2,47,74,109,97,107, 101,45,109,97,116,99,104,38,101,110,118,77,1,30,78,2,47,72,115,116,120, 45,109,101,109,113,45,112,111,115,79,5,16,29,18,101,63,97,114,103,80,48, -41,40,39,16,4,47,11,61,120,81,3,1,7,101,110,118,50,56,51,53,82, -16,4,46,11,61,108,83,3,1,7,101,110,118,50,56,51,55,84,16,14,45, +41,40,39,16,4,47,11,61,120,81,3,1,7,101,110,118,50,56,55,50,82, +16,4,46,11,61,108,83,3,1,7,101,110,118,50,56,55,52,84,16,14,45, 11,63,119,104,111,85,71,97,114,103,45,105,115,45,115,116,120,63,86,64,101, 120,112,114,87,63,107,119,115,88,68,108,105,116,45,99,111,109,112,89,67,99, -108,97,117,115,101,115,90,3,1,7,101,110,118,50,56,52,48,91,2,91,2, +108,97,117,115,101,115,90,3,1,7,101,110,118,50,56,55,55,91,2,91,2, 91,2,91,2,91,2,91,16,8,44,11,68,112,97,116,116,101,114,110,115,92, 67,102,101,110,100,101,114,115,93,67,97,110,115,119,101,114,115,94,3,1,7, -101,110,118,50,56,52,52,95,2,95,2,95,18,102,64,114,115,108,116,96,50, +101,110,118,50,56,56,49,95,2,95,2,95,18,102,64,114,115,108,116,96,50, 41,40,39,47,46,45,44,16,4,49,11,2,80,3,1,7,101,110,118,50,56, -52,56,97,18,102,2,64,52,41,40,39,47,46,45,44,16,8,51,11,2,80, +56,53,97,18,102,2,64,52,41,40,39,47,46,45,44,16,8,51,11,2,80, 2,96,73,112,97,116,116,101,114,110,45,118,97,114,115,115,98,2,97,2,97, 2,97,18,102,2,45,54,41,40,39,47,46,45,44,16,10,53,11,2,80,2, 96,2,98,76,108,105,116,45,99,111,109,112,45,105,115,45,109,111,100,63,99, @@ -1508,91 +1508,91 @@ 101,99,116,101,54,56,18,16,2,158,72,113,117,111,116,101,45,115,121,110,116, 97,120,102,54,57,18,104,78,114,97,105,115,101,45,115,121,110,116,97,120,45, 101,114,114,111,114,103,8,26,41,40,39,47,46,45,44,53,16,4,59,11,2, -19,3,1,7,101,110,118,50,56,53,48,104,16,4,58,11,1,20,117,110,102, +19,3,1,7,101,110,118,50,56,56,55,104,16,4,58,11,1,20,117,110,102, 108,97,116,45,112,97,116,116,101,114,110,45,118,97,114,115,115,105,3,1,7, -101,110,118,50,56,53,49,106,18,108,2,66,8,31,41,40,39,47,46,45,44, +101,110,118,50,56,56,56,106,18,108,2,66,8,31,41,40,39,47,46,45,44, 53,59,58,16,4,8,30,11,64,114,101,115,116,107,3,1,7,101,110,118,50, -56,53,50,108,16,10,8,29,11,67,112,97,116,116,101,114,110,109,66,102,101, +56,56,57,108,16,10,8,29,11,67,112,97,116,116,101,114,110,109,66,102,101, 110,100,101,114,110,79,117,110,102,108,97,116,45,112,97,116,116,101,114,110,45, 118,97,114,115,111,66,97,110,115,119,101,114,112,3,1,7,101,110,118,50,56, -53,51,113,2,113,2,113,2,113,16,8,8,28,11,76,116,97,105,108,45,112, +57,48,113,2,113,2,113,2,113,16,8,8,28,11,76,116,97,105,108,45,112, 97,116,116,101,114,110,45,118,97,114,114,69,116,101,109,112,45,118,97,114,115, 115,72,112,97,116,116,101,114,110,45,118,97,114,115,116,3,1,7,101,110,118, -50,56,53,57,117,3,1,7,101,110,118,50,56,53,55,118,3,1,7,101,110, -118,50,56,53,53,119,16,8,8,27,11,2,114,2,115,2,116,2,117,2,118, +50,56,57,54,117,3,1,7,101,110,118,50,56,57,52,118,3,1,7,101,110, +118,50,56,57,50,119,16,8,8,27,11,2,114,2,115,2,116,2,117,2,118, 2,119,18,109,2,100,8,34,41,40,39,47,46,45,44,53,59,58,8,30,8, 29,8,28,16,8,8,33,11,2,114,2,115,2,116,2,117,2,118,2,119,16, 8,8,32,11,71,100,111,45,116,114,121,45,110,101,120,116,120,64,109,116,99, 104,121,70,99,97,110,116,45,102,97,105,108,63,122,3,1,7,101,110,118,50, -56,54,54,123,2,123,2,123,18,16,2,158,2,45,8,34,8,35,18,16,2, +57,48,51,123,2,123,2,123,18,16,2,158,2,45,8,34,8,35,18,16,2, 158,62,105,102,124,8,34,8,36,18,16,2,158,2,100,8,34,8,37,18,111, 2,24,8,40,41,40,39,47,46,45,44,53,59,58,8,30,8,29,8,28,8, 33,8,32,16,6,8,39,11,71,112,97,116,116,101,114,110,45,118,97,114,125, -68,116,101,109,112,45,118,97,114,126,3,1,7,101,110,118,50,56,54,55,127, -2,127,16,4,8,38,11,63,112,111,115,128,3,1,7,101,110,118,50,56,54, -56,129,18,16,2,158,2,25,8,40,8,41,18,16,2,158,2,26,8,40,8, +68,116,101,109,112,45,118,97,114,126,3,1,7,101,110,118,50,57,48,52,127, +2,127,16,4,8,38,11,63,112,111,115,128,3,1,7,101,110,118,50,57,48, +53,129,18,16,2,158,2,25,8,40,8,41,18,16,2,158,2,26,8,40,8, 42,18,16,2,158,2,27,8,40,8,43,18,16,2,158,2,20,8,40,8,44, 18,16,2,158,2,21,8,40,8,45,18,16,2,158,2,22,8,40,8,46,18, 16,2,158,2,23,8,40,8,47,18,112,2,29,8,49,41,40,39,47,46,45, 44,53,59,58,8,30,8,29,8,28,8,33,8,32,8,39,8,38,16,4,8, -48,11,68,97,99,99,101,115,115,111,114,130,3,1,7,101,110,118,50,56,54, -57,131,18,16,2,158,2,28,8,49,8,50,18,16,2,158,1,22,108,101,116, +48,11,68,97,99,99,101,115,115,111,114,130,3,1,7,101,110,118,50,57,48, +54,131,18,16,2,158,2,28,8,49,8,50,18,16,2,158,1,22,108,101,116, 114,101,99,45,115,121,110,116,97,120,101,115,43,118,97,108,117,101,115,132,8, 34,8,51,18,110,79,109,97,107,101,45,115,121,110,116,97,120,45,109,97,112, 112,105,110,103,133,8,53,41,40,39,47,46,45,44,53,59,58,8,30,8,29, 8,28,8,33,8,32,16,8,8,52,11,2,125,78,117,110,102,108,97,116,45, 112,97,116,116,101,114,110,45,118,97,114,134,2,126,3,1,7,101,110,118,50, -56,55,48,135,2,135,2,135,18,16,2,158,2,102,8,53,8,54,18,8,36, +57,48,55,135,2,135,2,135,18,16,2,158,2,102,8,53,8,54,18,8,36, 18,109,2,100,8,57,41,40,39,47,46,45,44,53,59,58,8,30,8,29,8, 28,16,8,8,56,11,2,114,2,115,2,116,2,117,2,118,2,119,16,10,8, 55,11,2,120,2,121,2,122,61,109,136,2,123,2,123,2,123,2,123,18,16, 2,158,2,62,8,57,8,58,11,16,5,93,2,17,87,96,83,159,34,93,80, -159,34,51,35,89,162,8,64,37,50,2,19,223,0,28,248,22,57,196,9,28, -248,22,52,196,249,22,51,250,22,209,248,22,52,200,248,22,210,248,80,158,41, -42,248,22,52,203,198,27,248,22,53,198,27,248,22,53,200,28,248,22,57,193, -9,28,248,22,52,193,249,22,51,250,22,209,248,22,52,199,248,22,210,248,80, -158,45,42,248,22,52,200,202,250,80,159,43,51,35,202,248,22,53,199,248,22, -53,198,250,80,159,41,51,35,200,248,22,53,197,248,22,53,196,27,248,22,53, -196,27,248,22,53,198,28,248,22,57,193,9,28,248,22,52,193,249,22,51,250, -22,209,248,22,52,199,248,22,210,248,80,158,43,42,248,22,52,200,200,250,80, -159,41,51,35,200,248,22,53,199,248,22,53,198,250,80,159,39,51,35,198,248, -22,53,197,248,22,53,196,83,159,34,93,80,159,34,50,35,89,162,8,64,36, -58,2,19,223,0,28,248,22,57,195,9,27,249,80,159,37,50,35,248,22,53, -197,248,22,53,198,28,248,22,52,196,249,22,51,27,248,22,52,198,27,248,80, -158,40,41,248,22,52,201,28,248,22,186,193,193,27,248,22,59,195,27,248,22, -171,195,28,248,22,186,193,193,27,248,22,59,195,27,248,22,171,195,28,248,22, -186,193,193,27,248,22,59,195,27,248,22,171,195,28,248,22,186,193,193,27,248, -22,59,195,27,248,22,171,195,28,248,22,186,193,193,27,248,22,59,195,27,248, -22,171,195,28,248,22,186,193,193,27,248,22,59,195,27,248,22,171,195,28,248, -22,186,193,193,249,32,137,89,162,8,64,36,45,2,19,222,28,248,22,186,194, -192,27,248,22,59,194,27,248,22,171,196,28,248,22,186,193,193,27,248,22,59, -195,27,248,22,171,195,28,248,22,186,193,193,27,248,22,59,195,27,248,22,171, -195,28,248,22,186,193,193,249,2,137,248,22,59,196,248,22,171,195,248,22,59, -196,248,22,171,195,194,192,83,159,34,93,80,159,34,49,35,89,162,8,36,35, -39,9,223,0,27,249,22,252,87,3,196,32,138,89,162,8,44,34,34,9,222, +159,34,51,35,89,162,8,64,37,50,2,19,223,0,28,248,22,63,196,9,28, +248,22,58,196,249,22,57,250,22,215,248,22,58,200,248,22,216,248,80,158,41, +42,248,22,58,203,198,27,248,22,59,198,27,248,22,59,200,28,248,22,63,193, +9,28,248,22,58,193,249,22,57,250,22,215,248,22,58,199,248,22,216,248,80, +158,45,42,248,22,58,200,202,250,80,159,43,51,35,202,248,22,59,199,248,22, +59,198,250,80,159,41,51,35,200,248,22,59,197,248,22,59,196,27,248,22,59, +196,27,248,22,59,198,28,248,22,63,193,9,28,248,22,58,193,249,22,57,250, +22,215,248,22,58,199,248,22,216,248,80,158,43,42,248,22,58,200,200,250,80, +159,41,51,35,200,248,22,59,199,248,22,59,198,250,80,159,39,51,35,198,248, +22,59,197,248,22,59,196,83,159,34,93,80,159,34,50,35,89,162,8,64,36, +58,2,19,223,0,28,248,22,63,195,9,27,249,80,159,37,50,35,248,22,59, +197,248,22,59,198,28,248,22,58,196,249,22,57,27,248,22,58,198,27,248,80, +158,40,41,248,22,58,201,28,248,22,192,193,193,27,248,22,65,195,27,248,22, +177,195,28,248,22,192,193,193,27,248,22,65,195,27,248,22,177,195,28,248,22, +192,193,193,27,248,22,65,195,27,248,22,177,195,28,248,22,192,193,193,27,248, +22,65,195,27,248,22,177,195,28,248,22,192,193,193,27,248,22,65,195,27,248, +22,177,195,28,248,22,192,193,193,27,248,22,65,195,27,248,22,177,195,28,248, +22,192,193,193,249,32,137,89,162,8,64,36,45,2,19,222,28,248,22,192,194, +192,27,248,22,65,194,27,248,22,177,196,28,248,22,192,193,193,27,248,22,65, +195,27,248,22,177,195,28,248,22,192,193,193,27,248,22,65,195,27,248,22,177, +195,28,248,22,192,193,193,249,2,137,248,22,65,196,248,22,177,195,248,22,65, +196,248,22,177,195,194,192,83,159,34,93,80,159,34,49,35,89,162,8,36,35, +39,9,223,0,27,249,22,252,91,3,196,32,138,89,162,8,44,34,34,9,222, 11,28,248,80,158,36,39,193,192,11,89,162,8,36,35,56,9,223,0,91,159, 35,10,90,161,35,34,10,20,15,159,35,34,44,87,94,28,28,248,80,158,36, 34,195,27,248,80,158,37,35,196,28,248,80,158,37,34,193,248,80,158,37,36, -248,80,158,38,35,194,11,11,12,250,22,252,39,2,11,6,8,8,98,97,100, -32,102,111,114,109,139,197,250,22,209,210,27,248,80,158,40,37,248,80,158,41, +248,80,158,38,35,194,11,11,12,250,22,252,45,2,11,6,8,8,98,97,100, +32,102,111,114,109,139,197,250,22,215,210,27,248,80,158,40,37,248,80,158,41, 35,200,27,251,80,158,44,38,197,11,9,11,27,249,22,2,80,159,43,49,35, -195,28,28,28,248,22,57,193,10,248,22,252,9,2,249,22,5,32,140,89,162, -8,36,35,35,9,222,192,195,248,80,158,42,40,195,11,249,22,59,20,15,159, -43,35,44,196,27,249,80,159,44,50,35,196,195,27,28,248,22,57,195,9,27, -27,248,22,53,198,27,248,22,53,198,28,248,22,57,193,9,27,249,32,141,89, -162,8,64,36,46,2,19,222,28,248,22,57,194,9,27,27,248,22,53,195,27, -248,22,53,197,28,248,22,57,193,9,27,27,248,22,53,196,27,248,22,53,196, -28,248,22,57,193,9,27,249,2,141,248,22,53,197,248,22,53,196,28,248,22, -52,194,192,249,22,51,248,22,52,197,194,28,248,22,52,194,192,249,22,51,248, -22,52,197,194,28,248,22,52,195,192,249,22,51,248,22,52,196,194,248,22,53, -197,248,22,53,196,28,248,22,52,194,192,249,22,51,248,22,52,197,194,28,248, -22,52,196,192,249,22,51,248,22,52,199,194,27,251,80,158,48,38,201,198,197, -201,27,28,248,22,57,197,9,28,248,22,52,197,249,22,51,250,22,209,248,22, -52,203,248,22,210,248,80,158,52,42,248,22,52,204,23,17,250,80,159,50,51, -35,23,17,248,22,53,203,248,22,53,202,250,80,159,48,51,35,23,15,248,22, -53,201,248,22,53,200,28,248,80,158,46,43,199,248,22,52,193,249,22,59,250, -22,209,24,15,198,203,27,248,22,64,196,28,248,22,186,193,20,15,159,48,36, -44,28,249,22,181,194,35,248,22,52,196,249,22,51,20,15,159,50,37,44,197, +195,28,28,28,248,22,63,193,10,248,22,252,15,2,249,22,5,32,140,89,162, +8,36,35,35,9,222,192,195,248,80,158,42,40,195,11,249,22,65,20,15,159, +43,35,44,196,27,249,80,159,44,50,35,196,195,27,28,248,22,63,195,9,27, +27,248,22,59,198,27,248,22,59,198,28,248,22,63,193,9,27,249,32,141,89, +162,8,64,36,46,2,19,222,28,248,22,63,194,9,27,27,248,22,59,195,27, +248,22,59,197,28,248,22,63,193,9,27,27,248,22,59,196,27,248,22,59,196, +28,248,22,63,193,9,27,249,2,141,248,22,59,197,248,22,59,196,28,248,22, +58,194,192,249,22,57,248,22,58,197,194,28,248,22,58,194,192,249,22,57,248, +22,58,197,194,28,248,22,58,195,192,249,22,57,248,22,58,196,194,248,22,59, +197,248,22,59,196,28,248,22,58,194,192,249,22,57,248,22,58,197,194,28,248, +22,58,196,192,249,22,57,248,22,58,199,194,27,251,80,158,48,38,201,198,197, +201,27,28,248,22,63,197,9,28,248,22,58,197,249,22,57,250,22,215,248,22, +58,203,248,22,216,248,80,158,52,42,248,22,58,204,23,17,250,80,159,50,51, +35,23,17,248,22,59,203,248,22,59,202,250,80,159,48,51,35,23,15,248,22, +59,201,248,22,59,200,28,248,80,158,46,43,199,248,22,58,193,249,22,65,250, +22,215,24,15,198,203,27,248,22,70,196,28,248,22,192,193,20,15,159,48,36, +44,28,249,22,187,194,35,248,22,58,196,249,22,57,20,15,159,50,37,44,197, 197,34,20,98,159,37,16,10,2,43,2,37,30,142,2,35,69,115,116,120,45, 110,117,108,108,63,143,10,2,34,30,144,2,47,72,109,97,107,101,45,112,101, 120,112,97,110,100,145,2,30,146,2,47,75,115,121,110,116,97,120,45,109,97, @@ -1601,54 +1601,54 @@ 112,112,105,110,103,45,100,101,112,116,104,151,6,30,152,2,47,1,21,115,121, 110,116,97,120,45,109,97,112,112,105,110,103,45,118,97,108,118,97,114,153,7, 2,41,16,4,18,100,2,45,8,62,41,40,39,16,4,8,61,11,2,81,3, -1,7,101,110,118,50,56,55,52,154,16,4,8,60,11,68,104,101,114,101,45, -115,116,120,155,3,1,7,101,110,118,50,56,55,54,156,16,4,8,59,11,2, +1,7,101,110,118,50,57,49,49,154,16,4,8,60,11,68,104,101,114,101,45, +115,116,120,155,3,1,7,101,110,118,50,57,49,51,156,16,4,8,59,11,2, 155,2,156,18,102,2,102,8,67,41,40,39,8,61,16,4,8,66,11,2,155, -2,156,16,4,8,65,11,2,109,3,1,7,101,110,118,50,56,56,48,157,16, +2,156,16,4,8,65,11,2,109,3,1,7,101,110,118,50,57,49,55,157,16, 4,8,64,11,71,117,110,105,113,117,101,45,118,97,114,115,158,3,1,7,101, -110,118,50,56,56,49,159,16,4,8,63,11,72,118,97,114,45,98,105,110,100, -105,110,103,115,160,3,1,7,101,110,118,50,56,56,50,161,18,105,9,8,71, +110,118,50,57,49,56,159,16,4,8,63,11,72,118,97,114,45,98,105,110,100, +105,110,103,115,160,3,1,7,101,110,118,50,57,49,57,161,18,105,9,8,71, 41,40,39,8,61,8,66,8,65,8,64,8,63,16,6,8,70,11,67,112,114, 111,116,111,45,114,162,76,110,111,110,45,112,97,116,116,101,114,110,45,118,97, -114,115,163,3,1,7,101,110,118,50,56,56,56,164,2,164,16,6,8,69,11, +114,115,163,3,1,7,101,110,118,50,57,50,53,164,2,164,16,6,8,69,11, 79,98,117,105,108,100,45,102,114,111,109,45,116,101,109,112,108,97,116,101,165, -61,114,166,3,1,7,101,110,118,50,56,57,55,167,2,167,16,4,8,68,11, -63,108,101,110,168,3,1,7,101,110,118,50,57,48,48,169,18,16,2,158,65, +61,114,166,3,1,7,101,110,118,50,57,51,52,167,2,167,16,4,8,68,11, +63,108,101,110,168,3,1,7,101,110,118,50,57,51,55,169,18,16,2,158,65, 108,105,115,116,42,170,8,71,8,72,11,96,83,159,34,93,80,159,34,34,35, -32,171,89,162,8,36,36,41,2,4,222,28,248,22,206,194,193,27,250,22,209, -196,197,196,27,249,22,218,196,71,112,97,114,101,110,45,115,104,97,112,101,172, -28,192,250,22,218,196,2,172,195,193,83,159,34,93,80,159,34,35,35,89,162, -34,37,39,2,6,223,0,247,248,22,9,89,162,8,32,35,44,9,226,1,4, -3,2,20,14,159,80,158,37,36,250,80,158,40,37,249,22,19,11,80,158,42, -36,22,252,185,2,89,162,34,35,39,9,225,5,4,7,248,193,89,162,34,34, -41,9,225,3,2,4,28,248,22,252,182,2,193,248,22,252,187,2,193,251,22, -252,39,2,2,17,6,47,47,105,110,99,111,109,112,97,116,105,98,108,101,32, +32,171,89,162,8,36,36,41,2,4,222,28,248,22,212,194,193,27,250,22,215, +196,197,196,27,249,22,224,196,71,112,97,114,101,110,45,115,104,97,112,101,172, +28,192,250,22,224,196,2,172,195,193,83,159,34,93,80,159,34,35,35,89,162, +34,37,39,2,6,223,0,247,248,22,8,89,162,8,32,35,44,9,226,1,4, +3,2,20,14,159,80,158,37,36,250,80,158,40,37,249,22,25,11,80,158,42, +36,22,252,191,2,89,162,34,35,39,9,225,5,4,7,248,193,89,162,34,34, +41,9,225,3,2,4,28,248,22,252,188,2,193,248,22,252,193,2,193,251,22, +252,45,2,2,17,6,47,47,105,110,99,111,109,112,97,116,105,98,108,101,32, 101,108,108,105,112,115,105,115,32,109,97,116,99,104,32,99,111,117,110,116,115, 32,102,111,114,32,116,101,109,112,108,97,116,101,173,197,198,27,247,193,89,162, 8,36,34,35,9,223,0,192,83,159,34,93,80,159,34,38,35,65,100,117,109, 109,121,174,83,159,34,93,80,159,34,39,35,89,162,8,37,37,40,2,15,223, 0,91,159,35,11,20,12,95,35,248,193,195,89,162,8,64,35,46,2,19,226, -1,4,3,0,28,248,22,50,197,27,248,194,248,22,52,199,27,248,195,248,22, -53,200,28,28,249,22,252,11,2,195,248,22,52,201,249,22,252,11,2,194,248, -22,53,201,11,198,249,22,51,195,194,28,248,22,41,197,28,248,22,57,194,196, -28,249,22,252,11,2,198,248,22,52,196,248,22,52,195,27,248,22,53,195,27, -248,22,53,197,28,248,22,57,194,198,28,249,22,252,11,2,200,248,22,52,196, -248,22,52,193,250,32,175,89,162,8,64,37,45,65,115,108,111,111,112,176,222, -28,248,22,57,194,192,28,249,22,252,11,2,194,248,22,52,196,248,22,52,195, -27,248,22,53,195,27,248,22,53,197,28,248,22,57,194,194,28,249,22,252,11, -2,196,248,22,52,196,248,22,52,193,27,248,22,53,195,27,248,22,53,195,28, -248,22,57,194,196,28,249,22,252,11,2,198,248,22,52,196,248,22,52,193,250, -2,175,199,248,22,53,197,248,22,53,196,201,248,22,53,197,248,22,53,196,28, -248,22,206,197,27,248,194,248,22,210,199,28,249,22,252,11,2,248,22,210,200, -194,197,28,248,22,206,193,192,27,250,22,209,201,196,201,27,249,22,218,201,2, -172,28,192,250,22,218,196,2,172,195,193,28,248,22,252,222,1,197,248,22,252, -230,1,249,22,2,195,248,22,252,229,1,200,28,248,22,107,197,248,22,105,248, -194,248,22,108,199,196,96,68,35,37,107,101,114,110,101,108,177,2,35,2,46, +1,4,3,0,28,248,22,56,197,27,248,194,248,22,58,199,27,248,195,248,22, +59,200,28,28,249,22,252,17,2,195,248,22,58,201,249,22,252,17,2,194,248, +22,59,201,11,198,249,22,57,195,194,28,248,22,47,197,28,248,22,63,194,196, +28,249,22,252,17,2,198,248,22,58,196,248,22,58,195,27,248,22,59,195,27, +248,22,59,197,28,248,22,63,194,198,28,249,22,252,17,2,200,248,22,58,196, +248,22,58,193,250,32,175,89,162,8,64,37,45,65,115,108,111,111,112,176,222, +28,248,22,63,194,192,28,249,22,252,17,2,194,248,22,58,196,248,22,58,195, +27,248,22,59,195,27,248,22,59,197,28,248,22,63,194,194,28,249,22,252,17, +2,196,248,22,58,196,248,22,58,193,27,248,22,59,195,27,248,22,59,195,28, +248,22,63,194,196,28,249,22,252,17,2,198,248,22,58,196,248,22,58,193,250, +2,175,199,248,22,59,197,248,22,59,196,201,248,22,59,197,248,22,59,196,28, +248,22,212,197,27,248,194,248,22,216,199,28,249,22,252,17,2,248,22,216,200, +194,197,28,248,22,212,193,192,27,250,22,215,201,196,201,27,249,22,224,201,2, +172,28,192,250,22,224,196,2,172,195,193,28,248,22,252,228,1,197,248,22,252, +236,1,249,22,2,195,248,22,252,235,1,200,28,248,22,113,197,248,22,111,248, +194,248,22,114,199,196,96,68,35,37,107,101,114,110,101,108,177,2,35,2,46, 2,8,96,2,35,2,46,2,47,2,177,0}; EVAL_ONE_SIZED_STR((char *)expr, 6332); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,82,252,192,6,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,55,82,252,192,6,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,68,35,37,115,116, 120,108,111,99,1,29,2,11,11,10,10,10,34,80,158,34,34,20,98,159,34, 16,2,30,3,2,2,68,108,111,99,45,105,110,115,112,4,254,1,30,5,2, @@ -1662,12 +1662,12 @@ 248,80,158,42,34,193,249,80,158,43,35,248,80,158,44,36,195,27,248,80,158, 45,37,196,28,248,80,158,45,34,193,249,80,158,46,35,248,80,158,47,36,195, 27,248,80,158,48,37,196,28,248,80,158,48,38,193,248,80,158,48,39,193,11, -11,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196, -27,248,22,90,197,27,248,22,89,198,27,252,22,61,202,200,199,198,201,254,80, -158,48,40,20,15,159,48,34,41,21,97,3,1,4,103,52,55,55,10,3,1, -4,103,52,55,54,11,3,1,4,103,52,55,53,12,3,1,4,103,52,55,52, -13,3,1,4,103,52,55,51,14,248,22,52,200,248,22,89,200,248,22,78,200, -248,22,87,200,248,22,90,200,250,22,252,39,2,11,6,10,10,98,97,100,32, +11,11,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,93,196, +27,248,22,96,197,27,248,22,95,198,27,252,22,67,202,198,200,199,201,254,80, +158,48,40,20,15,159,48,34,41,21,97,3,1,4,103,52,56,56,10,3,1, +4,103,52,56,55,11,3,1,4,103,52,56,54,12,3,1,4,103,52,56,53, +13,3,1,4,103,52,56,52,14,248,22,58,200,248,22,95,200,248,22,93,200, +248,22,96,200,248,22,84,200,250,22,252,45,2,11,6,10,10,98,97,100,32, 115,121,110,116,97,120,15,197,34,20,98,159,34,16,7,30,16,65,35,37,115, 116,120,17,69,115,116,120,45,112,97,105,114,63,18,11,30,19,2,17,67,99, 111,110,115,47,35,102,20,1,30,21,2,17,67,115,116,120,45,99,97,114,22, @@ -1681,60 +1681,60 @@ 45,97,110,100,45,111,114,34,9,11,16,10,2,7,2,2,2,8,2,2,2, 6,2,2,2,9,2,2,2,4,2,2,98,39,10,35,11,94,159,64,35,37, 115,99,35,9,11,159,2,30,9,11,16,0,96,38,8,254,1,11,16,0,16, -4,37,11,63,115,116,120,36,3,1,7,101,110,118,50,57,50,50,37,16,12, -36,11,3,1,4,103,52,54,56,38,3,1,4,103,52,54,57,39,3,1,4, -103,52,55,48,40,3,1,4,103,52,55,49,41,3,1,4,103,52,55,50,42, -3,1,7,101,110,118,50,57,51,48,43,2,43,2,43,2,43,2,43,16,12, +4,37,11,63,115,116,120,36,3,1,7,101,110,118,50,57,53,57,37,16,12, +36,11,3,1,4,103,52,55,57,38,3,1,4,103,52,56,48,39,3,1,4, +103,52,56,49,40,3,1,4,103,52,56,50,41,3,1,4,103,52,56,51,42, +3,1,7,101,110,118,50,57,54,55,43,2,43,2,43,2,43,2,43,16,12, 35,11,61,95,44,64,115,116,120,101,45,62,107,108,46,64,105,100,61,63,47, -66,99,108,97,117,115,101,48,3,1,7,101,110,118,50,57,51,49,49,2,49, +66,99,108,97,117,115,101,48,3,1,7,101,110,118,50,57,54,56,49,2,49, 2,49,2,49,2,49,158,2,10,42,158,11,42,158,2,11,42,158,2,12,42, 158,2,13,42,2,14,42,42,11,16,5,93,2,8,89,162,34,35,49,9,223, 0,27,28,248,80,158,36,34,195,249,80,158,37,35,248,80,158,38,36,197,27, 248,80,158,39,37,198,28,248,80,158,39,34,193,249,80,158,40,35,248,80,158, 41,36,195,27,248,80,158,42,37,196,28,248,80,158,42,34,193,249,80,158,43, 35,248,80,158,44,36,195,27,248,80,158,45,37,196,28,248,80,158,45,38,193, -248,80,158,45,39,193,11,11,11,11,28,192,27,248,22,52,194,27,248,22,78, -195,27,248,22,87,196,27,248,22,88,197,27,251,22,61,200,198,197,199,253,80, -158,46,40,20,15,159,46,34,41,21,96,3,1,4,103,52,56,53,50,3,1, -4,103,52,56,52,51,3,1,4,103,52,56,51,52,3,1,4,103,52,56,50, -53,248,22,52,199,248,22,88,199,248,22,78,199,248,22,87,199,250,22,252,39, +248,80,158,45,39,193,11,11,11,11,28,192,27,248,22,58,194,27,248,22,84, +195,27,248,22,93,196,27,248,22,94,197,27,251,22,67,200,197,198,199,253,80, +158,46,40,20,15,159,46,34,41,21,96,3,1,4,103,52,57,54,50,3,1, +4,103,52,57,53,51,3,1,4,103,52,57,52,52,3,1,4,103,52,57,51, +53,248,22,58,199,248,22,94,199,248,22,93,199,248,22,84,199,250,22,252,45, 2,11,2,15,197,34,20,98,159,34,16,7,2,16,2,19,2,21,2,23,2, 25,2,27,2,29,16,1,18,158,165,40,100,2,32,46,40,39,38,16,4,45, -11,2,36,3,1,7,101,110,118,50,57,52,53,54,16,10,44,11,3,1,4, -103,52,55,56,55,3,1,4,103,52,55,57,56,3,1,4,103,52,56,48,57, -3,1,4,103,52,56,49,58,3,1,7,101,110,118,50,57,53,50,59,2,59, +11,2,36,3,1,7,101,110,118,50,57,56,50,54,16,10,44,11,3,1,4, +103,52,56,57,55,3,1,4,103,52,57,48,56,3,1,4,103,52,57,49,57, +3,1,4,103,52,57,50,58,3,1,7,101,110,118,50,57,56,57,59,2,59, 2,59,2,59,16,10,43,11,2,44,2,45,2,46,2,48,3,1,7,101,110, -118,50,57,53,51,60,2,60,2,60,2,60,158,2,50,46,158,11,46,158,2, +118,50,57,57,48,60,2,60,2,60,2,60,158,2,50,46,158,11,46,158,2, 51,46,158,2,52,46,158,79,109,111,100,117,108,101,45,105,100,101,110,116,105, 102,105,101,114,61,63,61,46,2,53,46,46,11,16,5,93,2,7,89,162,34, 35,47,9,223,0,27,28,248,80,158,36,34,195,249,80,158,37,35,248,80,158, 38,36,197,27,248,80,158,39,37,198,28,248,80,158,39,34,193,249,80,158,40, 35,248,80,158,41,36,195,27,248,80,158,42,37,196,28,248,80,158,42,34,193, 249,80,158,43,38,248,80,158,44,36,195,248,80,158,44,39,248,80,158,45,37, -196,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,80,196, -28,28,248,22,41,248,22,210,194,248,80,158,39,40,249,22,252,87,3,195,32, +196,11,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,86,196, +28,28,248,22,47,248,22,216,194,248,80,158,39,40,249,22,252,91,3,195,32, 62,89,162,8,44,34,34,9,222,11,11,250,80,158,41,41,20,15,159,41,34, -42,21,93,3,1,4,103,52,56,57,63,195,27,249,22,61,195,196,251,80,158, -43,41,20,15,159,43,35,42,21,94,3,1,4,103,52,57,49,64,3,1,4, -103,52,57,48,65,248,22,53,197,248,22,52,197,250,22,252,39,2,11,2,15, +42,21,93,3,1,4,103,53,48,48,63,195,27,249,22,67,195,196,251,80,158, +43,41,20,15,159,43,35,42,21,94,3,1,4,103,53,48,50,64,3,1,4, +103,53,48,49,65,248,22,59,197,248,22,58,197,250,22,252,45,2,11,2,15, 197,34,20,98,159,34,16,8,2,16,2,19,2,21,2,23,30,66,2,17,69, 97,112,112,101,110,100,47,35,102,67,0,30,68,2,17,71,115,116,120,45,110, 117,108,108,47,35,102,69,9,30,70,2,35,75,115,121,110,116,97,120,45,109, 97,112,112,105,110,103,63,71,8,2,29,16,2,18,158,94,100,66,115,121,110, -116,97,120,72,50,40,39,38,16,4,49,11,2,36,3,1,7,101,110,118,50, -57,54,53,73,16,8,48,11,3,1,4,103,52,56,54,74,3,1,4,103,52, -56,55,75,3,1,4,103,52,56,56,76,3,1,7,101,110,118,50,57,55,49, +116,97,120,72,50,40,39,38,16,4,49,11,2,36,3,1,7,101,110,118,51, +48,48,50,73,16,8,48,11,3,1,4,103,52,57,55,74,3,1,4,103,52, +57,56,75,3,1,4,103,52,57,57,76,3,1,7,101,110,118,51,48,48,56, 77,2,77,2,77,16,8,47,11,2,44,63,108,111,99,78,67,112,97,116,116, -101,114,110,79,3,1,7,101,110,118,50,57,55,50,80,2,80,2,80,158,2, +101,114,110,79,3,1,7,101,110,118,51,48,48,57,80,2,80,2,80,158,2, 63,50,50,18,158,96,10,2,6,2,64,94,2,72,2,65,50,11,94,83,159, -34,93,80,159,34,34,35,247,22,252,115,2,83,159,34,93,80,159,34,35,35, -89,162,8,36,36,42,2,6,223,0,28,248,22,215,194,27,250,22,209,198,248, -22,210,199,197,251,22,232,196,199,80,158,39,34,11,194,96,68,35,37,107,101, +34,93,80,159,34,34,35,247,22,252,121,2,83,159,34,93,80,159,34,35,35, +89,162,8,36,36,42,2,6,223,0,28,248,22,221,194,27,250,22,215,198,248, +22,216,199,197,251,22,238,196,199,80,158,39,34,11,194,96,68,35,37,107,101, 114,110,101,108,81,2,34,2,30,2,33,95,2,81,2,30,2,35,0}; EVAL_ONE_SIZED_STR((char *)expr, 1740); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,101,252,191,8,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,55,101,252,198,8,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,70,35,37,119,105, 116,104,45,115,116,120,1,29,2,11,11,10,10,10,34,80,158,34,34,20,98, 159,35,16,7,30,3,2,2,76,119,105,116,104,45,115,121,110,116,97,120,45, @@ -1747,44 +1747,44 @@ 2,16,0,11,11,16,3,2,8,2,6,2,4,37,11,16,2,2,10,71,119, 105,116,104,45,115,121,110,116,97,120,18,16,2,11,11,16,2,2,10,2,18, 35,36,93,16,5,93,2,18,87,94,83,159,34,93,80,159,34,56,35,89,162, -8,64,38,58,64,108,111,111,112,19,223,0,28,248,22,57,196,27,249,22,61, -197,196,251,80,158,39,42,20,15,159,39,40,48,21,94,3,1,4,103,53,48, -51,20,3,1,4,103,53,48,50,21,248,22,53,197,248,22,52,197,26,8,22, -59,73,115,121,110,116,97,120,45,99,97,115,101,42,42,22,11,10,248,22,52, +8,64,38,58,64,108,111,111,112,19,223,0,28,248,22,63,196,27,249,22,67, +197,196,251,80,158,39,42,20,15,159,39,40,48,21,94,3,1,4,103,53,49, +52,20,3,1,4,103,53,49,51,21,248,22,59,197,248,22,58,197,26,8,22, +65,73,115,121,110,116,97,120,45,99,97,115,101,42,42,22,11,10,248,22,58, 204,9,79,109,111,100,117,108,101,45,105,100,101,110,116,105,102,105,101,114,61, -63,23,249,22,59,248,22,52,23,15,251,80,159,48,56,35,23,15,23,16,248, -22,53,23,18,248,22,53,23,19,249,22,59,65,95,101,108,115,101,24,249,22, -59,2,4,249,22,59,72,113,117,111,116,101,45,115,121,110,116,97,120,25,250, -22,209,11,248,22,208,248,22,52,23,23,248,22,52,23,22,89,162,34,35,59, -9,223,0,27,249,22,209,20,15,159,37,34,48,196,27,28,248,80,158,37,34, +63,23,249,22,65,248,22,58,23,15,251,80,159,48,56,35,23,15,23,16,248, +22,59,23,18,248,22,59,23,19,249,22,65,65,95,101,108,115,101,24,249,22, +65,2,4,249,22,65,72,113,117,111,116,101,45,115,121,110,116,97,120,25,250, +22,215,11,248,22,214,248,22,58,23,23,248,22,58,23,22,89,162,34,35,59, +9,223,0,27,249,22,215,20,15,159,37,34,48,196,27,28,248,80,158,37,34, 194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40,37,197,28,248, 80,158,40,34,193,28,248,80,158,40,38,248,80,158,41,36,194,27,248,80,158, 41,37,194,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195, 27,248,80,158,44,37,196,28,248,80,158,44,39,193,248,80,158,44,40,193,11, -11,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,80,196, -249,80,158,41,41,200,27,249,22,61,197,198,251,80,158,46,42,20,15,159,46, -35,48,21,94,3,1,4,103,53,48,49,26,3,1,4,103,53,48,48,27,248, -22,53,197,248,22,52,197,27,28,248,80,158,38,34,195,249,80,158,39,35,248, +11,11,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,86,196, +249,80,158,41,41,200,27,249,22,67,197,198,251,80,158,46,42,20,15,159,46, +35,48,21,94,3,1,4,103,53,49,50,26,3,1,4,103,53,49,49,27,248, +22,59,197,248,22,58,197,27,28,248,80,158,38,34,195,249,80,158,39,35,248, 80,158,40,36,197,27,248,80,158,41,37,198,28,248,80,158,41,34,193,249,80, -158,42,43,27,248,80,158,44,36,196,28,248,80,158,44,39,193,248,22,9,89, +158,42,43,27,248,80,158,44,36,196,28,248,80,158,44,39,193,248,22,8,89, 162,34,35,41,9,224,10,1,27,249,22,2,89,162,34,35,46,9,224,4,5, 249,80,158,37,44,28,248,80,158,38,34,197,249,80,158,39,35,248,80,158,40, 36,199,27,248,80,158,41,37,200,28,248,80,158,41,34,193,249,80,158,42,35, 248,80,158,43,36,195,248,80,158,43,38,248,80,158,44,37,196,11,11,194,248, -80,158,39,40,196,28,248,22,57,193,21,94,9,9,248,80,158,37,45,193,11, +80,158,39,40,196,28,248,22,63,193,21,94,9,9,248,80,158,37,45,193,11, 27,248,80,158,44,37,196,28,248,80,158,44,34,193,249,80,158,45,35,248,80, 158,46,36,195,27,248,80,158,47,37,196,28,248,80,158,47,39,193,248,80,158, -47,40,193,11,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248, -22,87,196,27,248,22,90,197,27,248,22,89,198,27,248,22,216,249,80,158,46, +47,40,193,11,11,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248, +22,93,196,27,248,22,96,197,27,248,22,95,198,27,248,22,222,249,80,158,46, 46,20,15,159,46,36,48,198,87,94,251,80,158,47,47,201,206,249,80,158,49, 46,20,15,159,49,37,48,202,9,27,249,22,2,32,28,89,162,8,36,35,36, -9,222,248,22,48,65,119,115,116,109,112,29,195,27,249,22,2,32,30,89,162, -8,36,35,38,9,222,250,22,209,195,64,104,101,114,101,31,195,196,27,248,22, -216,249,80,158,49,46,20,15,159,49,38,48,202,250,22,209,20,15,159,49,39, -48,250,22,59,63,108,101,116,32,251,22,2,32,33,89,162,8,36,37,44,9, -222,249,22,59,194,250,22,59,1,20,100,97,116,117,109,45,62,115,121,110,116, -97,120,45,111,98,106,101,99,116,34,249,22,59,2,25,200,199,204,203,205,251, -80,159,56,56,35,23,15,206,204,202,23,16,250,22,252,39,2,11,6,10,10, +9,222,248,22,54,65,119,115,116,109,112,29,195,27,249,22,2,32,30,89,162, +8,36,35,38,9,222,250,22,215,195,64,104,101,114,101,31,195,196,27,248,22, +222,249,80,158,49,46,20,15,159,49,38,48,202,250,22,215,20,15,159,49,39, +48,250,22,65,63,108,101,116,32,251,22,2,32,33,89,162,8,36,37,44,9, +222,249,22,65,194,250,22,65,1,20,100,97,116,117,109,45,62,115,121,110,116, +97,120,45,111,98,106,101,99,116,34,249,22,65,2,25,200,199,204,203,205,251, +80,159,56,56,35,23,15,206,204,202,23,16,250,22,252,45,2,11,6,10,10, 98,97,100,32,115,121,110,116,97,120,35,197,34,20,98,159,35,16,14,30,36, 2,12,69,115,116,120,45,112,97,105,114,63,37,11,30,38,2,12,67,99,111, 110,115,47,35,102,39,1,30,40,2,12,67,115,116,120,45,99,97,114,41,5, @@ -1805,98 +1805,98 @@ 35,11,97,159,66,35,37,99,111,110,100,66,9,11,159,71,35,37,113,113,45, 97,110,100,45,111,114,67,9,11,159,2,63,9,11,159,2,49,9,11,159,2, 52,9,11,16,0,96,36,8,254,1,11,16,0,16,4,35,11,61,120,68,3, -1,7,101,110,118,50,57,56,55,69,18,158,161,36,100,2,0,43,38,37,36, -35,16,8,42,11,3,1,4,103,52,57,55,70,3,1,4,103,52,57,56,71, -3,1,4,103,52,57,57,72,3,1,7,101,110,118,50,57,57,52,73,2,73, +1,7,101,110,118,51,48,50,52,69,18,158,161,36,100,2,0,43,38,37,36, +35,16,8,42,11,3,1,4,103,53,48,56,70,3,1,4,103,53,48,57,71, +3,1,4,103,53,49,48,72,3,1,7,101,110,118,51,48,51,49,73,2,73, 2,73,16,8,41,11,61,95,74,62,101,49,75,62,101,50,76,3,1,7,101, -110,118,50,57,57,53,77,2,77,2,77,158,2,26,43,2,27,43,43,18,100, -64,100,101,115,116,78,46,38,37,36,35,16,12,45,11,3,1,4,103,52,57, -50,79,3,1,4,103,52,57,51,80,3,1,4,103,52,57,52,81,3,1,4, -103,52,57,53,82,3,1,4,103,52,57,54,83,3,1,7,101,110,118,51,48, -49,52,84,2,84,2,84,2,84,2,84,16,12,44,11,2,74,63,111,117,116, -85,62,105,110,86,2,75,2,76,3,1,7,101,110,118,51,48,49,53,87,2, +110,118,51,48,51,50,77,2,77,2,77,158,2,26,43,2,27,43,43,18,100, +64,100,101,115,116,78,46,38,37,36,35,16,12,45,11,3,1,4,103,53,48, +51,79,3,1,4,103,53,48,52,80,3,1,4,103,53,48,53,81,3,1,4, +103,53,48,54,82,3,1,4,103,53,48,55,83,3,1,7,101,110,118,51,48, +53,49,84,2,84,2,84,2,84,2,84,16,12,44,11,2,74,63,111,117,116, +85,62,105,110,86,2,75,2,76,3,1,7,101,110,118,51,48,53,50,87,2, 87,2,87,2,87,2,87,18,101,2,78,48,38,37,36,35,45,44,16,4,47, -11,63,105,110,115,88,3,1,7,101,110,118,51,48,50,55,89,18,16,2,158, -2,78,48,49,18,102,2,31,51,38,37,36,35,45,44,47,16,8,50,11,64, -116,109,112,115,90,65,104,101,114,101,115,91,64,111,117,116,115,92,3,1,7, -101,110,118,51,48,51,48,93,2,93,2,93,18,158,161,36,103,2,0,53,38, -37,36,35,45,44,47,50,16,4,52,11,2,19,3,1,7,101,110,118,51,48, -51,53,94,158,2,20,53,2,21,53,53,11,97,83,159,34,93,80,159,34,41, -35,89,162,34,35,44,9,223,0,248,247,22,252,93,3,28,248,22,41,195,249, -22,209,11,87,94,83,160,36,11,80,158,37,35,248,22,170,80,158,38,35,248, -22,42,250,22,252,184,1,6,4,4,126,97,126,115,95,200,80,158,41,35,28, -248,22,252,136,1,195,249,22,209,11,87,94,83,160,36,11,80,158,37,35,248, -22,170,80,158,38,35,248,22,42,250,22,252,184,1,2,95,200,80,158,41,35, -28,248,80,158,36,40,195,249,22,209,11,27,248,22,210,198,87,94,83,160,36, -11,80,158,38,35,248,22,170,80,158,39,35,248,22,42,250,22,252,184,1,2, -95,196,80,158,42,35,249,22,209,11,87,94,83,160,36,11,80,158,37,35,248, -22,170,80,158,38,35,248,22,42,250,22,252,184,1,2,95,64,116,101,109,112, -96,80,158,41,35,83,159,34,93,80,159,34,34,35,32,97,89,162,34,35,38, -2,4,222,250,22,252,39,2,2,18,6,20,20,98,105,110,100,105,110,103,32, -109,97,116,99,104,32,102,97,105,108,101,100,98,195,83,159,34,93,80,158,34, -35,34,83,159,34,93,80,159,34,36,35,89,162,34,35,40,2,8,223,0,87, -94,83,160,36,11,80,158,34,35,248,22,170,80,158,35,35,248,22,42,250,22, -252,184,1,2,95,197,80,158,38,35,83,159,34,93,80,159,34,37,35,89,162, -34,35,39,2,10,223,0,87,94,28,248,80,158,35,38,194,12,250,22,252,40, -2,2,10,6,11,11,115,121,110,116,97,120,32,112,97,105,114,99,196,27,248, -80,158,36,39,195,249,22,2,80,159,37,41,35,194,97,68,35,37,107,101,114, -110,101,108,100,2,12,2,49,2,65,2,52,98,2,100,2,52,2,49,2,63, -2,67,2,66,0}; - EVAL_ONE_SIZED_STR((char *)expr, 2251); +11,63,105,110,115,88,3,1,7,101,110,118,51,48,54,52,89,18,16,2,158, +2,78,48,49,18,102,2,31,52,38,37,36,35,45,44,16,4,51,11,2,88, +2,89,16,8,50,11,64,116,109,112,115,90,65,104,101,114,101,115,91,64,111, +117,116,115,92,3,1,7,101,110,118,51,48,54,55,93,2,93,2,93,18,158, +161,36,103,2,0,54,38,37,36,35,45,44,51,50,16,4,53,11,2,19,3, +1,7,101,110,118,51,48,55,50,94,158,2,20,54,2,21,54,54,11,97,83, +159,34,93,80,159,34,41,35,89,162,34,35,44,9,223,0,248,247,22,252,97, +3,28,248,22,47,195,249,22,215,11,87,94,83,160,36,11,80,158,37,35,248, +22,176,80,158,38,35,248,22,48,250,22,252,190,1,6,4,4,126,97,126,115, +95,200,80,158,41,35,28,248,22,252,142,1,195,249,22,215,11,87,94,83,160, +36,11,80,158,37,35,248,22,176,80,158,38,35,248,22,48,250,22,252,190,1, +2,95,200,80,158,41,35,28,248,80,158,36,40,195,249,22,215,11,27,248,22, +216,198,87,94,83,160,36,11,80,158,38,35,248,22,176,80,158,39,35,248,22, +48,250,22,252,190,1,2,95,196,80,158,42,35,249,22,215,11,87,94,83,160, +36,11,80,158,37,35,248,22,176,80,158,38,35,248,22,48,250,22,252,190,1, +2,95,64,116,101,109,112,96,80,158,41,35,83,159,34,93,80,159,34,34,35, +32,97,89,162,34,35,38,2,4,222,250,22,252,45,2,2,18,6,20,20,98, +105,110,100,105,110,103,32,109,97,116,99,104,32,102,97,105,108,101,100,98,195, +83,159,34,93,80,158,34,35,34,83,159,34,93,80,159,34,36,35,89,162,34, +35,40,2,8,223,0,87,94,83,160,36,11,80,158,34,35,248,22,176,80,158, +35,35,248,22,48,250,22,252,190,1,2,95,197,80,158,38,35,83,159,34,93, +80,159,34,37,35,89,162,34,35,39,2,10,223,0,87,94,28,248,80,158,35, +38,194,12,250,22,252,46,2,2,10,6,11,11,115,121,110,116,97,120,32,112, +97,105,114,99,196,27,248,80,158,36,39,195,249,22,2,80,159,37,41,35,194, +97,68,35,37,107,101,114,110,101,108,100,2,12,2,49,2,65,2,52,98,2, +100,2,52,2,49,2,63,2,67,2,66,0}; + EVAL_ONE_SIZED_STR((char *)expr, 2258); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,208,252,145,24,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,55,208,252,16,25,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,76,35,37,115,116, 120,99,97,115,101,45,115,99,104,101,109,101,1,29,2,11,11,10,10,10,34, 80,158,34,34,20,98,159,34,16,2,30,3,2,2,1,26,99,104,101,99,107, 45,100,117,112,108,105,99,97,116,101,45,105,100,101,110,116,105,102,105,101,114, 4,254,1,30,5,65,35,37,115,116,120,6,71,105,100,101,110,116,105,102,105, 101,114,63,7,2,16,0,11,11,16,0,34,11,16,26,2,4,1,20,103,101, -110,101,114,97,116,101,45,116,101,109,112,111,114,97,114,105,101,115,8,72,115, -121,110,116,97,120,45,114,117,108,101,115,9,63,97,110,100,10,66,108,101,116, -114,101,99,11,62,111,114,12,75,115,121,110,116,97,120,45,105,100,45,114,117, -108,101,115,13,70,108,101,116,45,115,121,110,116,97,120,14,73,100,101,102,105, -110,101,45,115,116,114,117,99,116,15,64,119,104,101,110,16,63,108,101,116,17, -66,117,110,108,101,115,115,18,72,115,121,110,116,97,120,45,99,97,115,101,42, -19,66,108,101,116,47,101,99,20,64,99,111,110,100,21,66,115,121,110,116,97, -120,22,71,115,121,110,116,97,120,45,99,97,115,101,23,70,115,121,110,116,97, -120,47,108,111,99,24,64,108,101,116,42,25,74,45,100,101,102,105,110,101,45, -115,121,110,116,97,120,26,75,108,101,116,114,101,99,45,115,121,110,116,97,120, -101,115,27,70,113,117,97,115,105,113,117,111,116,101,28,73,108,101,116,114,101, -99,45,115,121,110,116,97,120,29,71,119,105,116,104,45,115,121,110,116,97,120, -30,72,108,101,116,45,115,121,110,116,97,120,101,115,31,67,45,100,101,102,105, -110,101,32,16,26,11,70,35,37,119,105,116,104,45,115,116,120,33,11,71,35, -37,113,113,45,97,110,100,45,111,114,34,2,34,2,34,11,11,74,35,37,100, -101,102,105,110,101,45,101,116,45,97,108,35,2,35,2,34,2,35,68,35,37, -115,116,120,108,111,99,36,2,35,66,35,37,99,111,110,100,37,69,35,37,115, -116,120,99,97,115,101,38,2,36,2,36,2,34,2,35,11,2,34,11,2,33, -11,2,35,16,26,2,4,2,8,2,9,2,10,2,11,2,12,2,13,2,14, +110,101,114,97,116,101,45,116,101,109,112,111,114,97,114,105,101,115,8,64,99, +111,110,100,9,64,119,104,101,110,10,66,117,110,108,101,115,115,11,63,97,110, +100,12,75,115,121,110,116,97,120,45,105,100,45,114,117,108,101,115,13,70,108, +101,116,45,115,121,110,116,97,120,14,66,108,101,116,47,101,99,15,73,100,101, +102,105,110,101,45,115,116,114,117,99,116,16,62,111,114,17,67,45,100,101,102, +105,110,101,18,63,108,101,116,19,66,115,121,110,116,97,120,20,72,115,121,110, +116,97,120,45,99,97,115,101,42,21,71,115,121,110,116,97,120,45,99,97,115, +101,22,70,115,121,110,116,97,120,47,108,111,99,23,72,115,121,110,116,97,120, +45,114,117,108,101,115,24,64,108,101,116,42,25,74,45,100,101,102,105,110,101, +45,115,121,110,116,97,120,26,66,108,101,116,114,101,99,27,75,108,101,116,114, +101,99,45,115,121,110,116,97,120,101,115,28,70,113,117,97,115,105,113,117,111, +116,101,29,73,108,101,116,114,101,99,45,115,121,110,116,97,120,30,71,119,105, +116,104,45,115,121,110,116,97,120,31,72,108,101,116,45,115,121,110,116,97,120, +101,115,32,16,26,11,70,35,37,119,105,116,104,45,115,116,120,33,66,35,37, +99,111,110,100,34,74,35,37,100,101,102,105,110,101,45,101,116,45,97,108,35, +2,35,71,35,37,113,113,45,97,110,100,45,111,114,36,11,11,2,35,2,35, +2,36,2,35,2,36,69,35,37,115,116,120,99,97,115,101,37,68,35,37,115, +116,120,108,111,99,38,2,38,2,38,11,2,36,2,35,2,36,11,2,36,11, +2,33,11,16,26,2,4,2,8,2,9,2,10,2,11,2,12,2,13,2,14, 2,15,2,16,2,17,2,18,2,19,2,20,2,21,2,22,2,23,2,24,2, 25,2,26,2,27,2,28,2,29,2,30,2,31,2,32,36,8,26,98,16,5, -93,2,27,87,94,83,159,34,93,80,159,34,52,35,89,162,35,35,41,9,223, -0,251,80,158,38,46,20,15,159,38,36,47,21,94,3,1,4,103,53,49,48, -39,3,1,4,103,53,48,57,40,248,22,52,198,248,22,78,198,89,162,34,35, -50,9,223,0,27,249,22,209,20,15,159,37,34,47,196,27,28,248,80,158,37, +93,2,28,87,94,83,159,34,93,80,159,34,52,35,89,162,35,35,41,9,223, +0,251,80,158,38,46,20,15,159,38,36,47,21,94,3,1,4,103,53,50,49, +39,3,1,4,103,53,50,48,40,248,22,58,198,248,22,84,198,89,162,34,35, +50,9,223,0,27,249,22,215,20,15,159,37,34,47,196,27,28,248,80,158,37, 34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40,37,197,28, 248,80,158,40,34,193,249,80,158,41,38,27,248,80,158,43,36,196,28,248,80, -158,43,39,193,248,22,9,89,162,34,35,41,9,224,9,1,27,249,22,2,89, +158,43,39,193,248,22,8,89,162,34,35,41,9,224,9,1,27,249,22,2,89, 162,34,35,46,9,224,4,5,249,80,158,37,40,28,248,80,158,38,34,197,249, -80,158,39,38,27,248,80,158,41,36,200,28,248,80,158,41,39,193,248,22,59, +80,158,39,38,27,248,80,158,41,36,200,28,248,80,158,41,39,193,248,22,65, 248,80,158,42,41,194,11,27,248,80,158,41,37,200,28,248,80,158,41,34,193, 249,80,158,42,35,248,80,158,43,36,195,248,80,158,43,42,248,80,158,44,37, -196,11,11,194,248,80,158,39,41,196,28,248,22,57,193,21,94,9,9,248,80, +196,11,11,194,248,80,158,39,41,196,28,248,22,63,193,21,94,9,9,248,80, 158,37,43,193,11,27,248,80,158,43,37,196,28,248,80,158,43,34,193,249,80, 158,44,35,248,80,158,45,36,195,27,248,80,158,46,37,196,28,248,80,158,46, -39,193,248,80,158,46,41,193,11,11,11,11,28,192,27,248,22,52,194,27,248, -22,78,195,27,248,22,87,196,27,248,22,90,197,27,248,22,89,198,249,80,158, -43,44,202,27,251,22,61,202,201,199,200,250,80,158,47,45,89,162,34,34,45, +39,193,248,80,158,46,41,193,11,11,11,11,28,192,27,248,22,58,194,27,248, +22,84,195,27,248,22,93,196,27,248,22,96,197,27,248,22,95,198,249,80,158, +43,44,202,27,251,22,67,202,201,199,200,250,80,158,47,45,89,162,34,34,45, 9,224,13,3,252,80,158,40,46,20,15,159,40,35,47,21,95,3,1,4,103, -53,49,51,41,3,1,4,103,53,49,50,42,3,1,4,103,53,49,49,43,250, -22,2,80,159,43,52,35,248,22,52,201,248,22,78,201,248,22,88,198,248,22, -87,198,21,98,1,22,108,101,116,114,101,99,45,115,121,110,116,97,120,101,115, +53,50,52,41,3,1,4,103,53,50,51,42,3,1,4,103,53,50,50,43,250, +22,2,80,159,43,52,35,248,22,58,201,248,22,84,201,248,22,94,198,248,22, +93,198,21,98,1,22,108,101,116,114,101,99,45,115,121,110,116,97,120,101,115, 43,118,97,108,117,101,115,44,94,94,94,62,105,100,45,63,46,46,46,46,64, 101,120,112,114,47,2,46,9,65,98,111,100,121,49,48,64,98,111,100,121,49, -2,46,20,15,159,47,37,47,250,22,252,39,2,11,6,10,10,98,97,100,32, +2,46,20,15,159,47,37,47,250,22,252,45,2,11,6,10,10,98,97,100,32, 115,121,110,116,97,120,50,196,34,20,98,159,35,16,13,30,51,2,6,69,115, 116,120,45,112,97,105,114,63,52,11,30,53,2,6,67,99,111,110,115,47,35, 102,54,1,30,55,2,6,67,115,116,120,45,99,97,114,56,5,30,57,2,6, @@ -1905,251 +1905,257 @@ 30,63,2,6,73,115,116,120,45,99,104,101,99,107,47,101,115,99,64,7,30, 65,2,6,69,115,116,120,45,62,108,105,115,116,66,4,30,67,2,6,71,115, 116,120,45,110,117,108,108,47,35,102,68,9,30,69,2,6,70,115,116,120,45, -114,111,116,97,116,101,70,12,30,71,2,36,68,114,101,108,111,99,97,116,101, -72,1,30,73,2,38,1,20,99,97,116,99,104,45,101,108,108,105,112,115,105, -115,45,101,114,114,111,114,74,1,30,75,2,38,1,24,97,112,112,108,121,45, +114,111,116,97,116,101,70,12,30,71,2,38,68,114,101,108,111,99,97,116,101, +72,1,30,73,2,37,1,20,99,97,116,99,104,45,101,108,108,105,112,115,105, +115,45,101,114,114,111,114,74,1,30,75,2,37,1,24,97,112,112,108,121,45, 112,97,116,116,101,114,110,45,115,117,98,115,116,105,116,117,116,101,76,0,16, -4,18,98,64,104,101,114,101,77,40,98,38,10,34,11,97,159,2,36,9,11, -159,2,33,9,11,159,2,38,9,11,159,2,6,9,11,159,74,35,37,115,109, -97,108,108,45,115,99,104,101,109,101,78,9,11,16,14,2,27,2,2,2,9, -2,2,2,29,2,2,2,13,2,2,2,14,2,2,2,31,2,2,2,4,2, -2,98,37,10,35,11,97,159,2,36,9,11,159,2,33,9,11,159,2,38,9, +4,18,98,64,104,101,114,101,77,40,98,38,10,34,11,97,159,2,38,9,11, +159,2,33,9,11,159,2,37,9,11,159,2,6,9,11,159,74,35,37,115,109, +97,108,108,45,115,99,104,101,109,101,78,9,11,16,14,2,28,2,2,2,4, +2,2,2,24,2,2,2,30,2,2,2,13,2,2,2,14,2,2,2,32,2, +2,98,37,10,35,11,97,159,2,38,9,11,159,2,33,9,11,159,2,37,9, 11,159,2,6,9,11,159,2,78,9,11,16,0,96,36,8,254,1,11,16,0, -16,4,35,11,63,115,116,120,79,3,1,7,101,110,118,51,48,52,57,80,18, -158,163,38,100,2,44,43,38,37,36,35,16,12,42,11,3,1,4,103,53,48, -52,81,3,1,4,103,53,48,53,82,3,1,4,103,53,48,54,83,3,1,4, -103,53,48,55,84,3,1,4,103,53,48,56,85,3,1,7,101,110,118,51,48, -54,50,86,2,86,2,86,2,86,2,86,16,12,41,11,61,95,87,2,45,2, -47,2,48,2,49,3,1,7,101,110,118,51,48,54,51,88,2,88,2,88,2, +16,4,35,11,63,115,116,120,79,3,1,7,101,110,118,51,48,56,54,80,18, +158,163,38,100,2,44,43,38,37,36,35,16,12,42,11,3,1,4,103,53,49, +53,81,3,1,4,103,53,49,54,82,3,1,4,103,53,49,55,83,3,1,4, +103,53,49,56,84,3,1,4,103,53,49,57,85,3,1,7,101,110,118,51,48, +57,57,86,2,86,2,86,2,86,2,86,16,12,41,11,61,95,87,2,45,2, +47,2,48,2,49,3,1,7,101,110,118,51,49,48,48,88,2,88,2,88,2, 88,2,88,158,2,41,43,158,9,43,158,2,42,43,2,43,43,43,18,158,95, -10,2,39,2,40,43,18,16,2,96,2,46,45,93,8,252,123,10,16,4,44, -11,61,114,89,3,1,7,101,110,118,51,48,55,53,90,95,9,8,252,123,10, -2,38,11,16,5,93,2,29,87,94,83,159,34,93,80,159,34,52,35,89,162, +10,2,39,2,40,43,18,16,2,96,2,46,45,93,8,252,152,10,16,4,44, +11,61,114,89,3,1,7,101,110,118,51,49,49,50,90,95,9,8,252,152,10, +2,37,11,16,5,93,2,30,87,94,83,159,34,93,80,159,34,52,35,89,162, 35,35,41,9,223,0,251,80,158,38,46,20,15,159,38,36,47,21,94,3,1, -4,103,53,49,57,91,3,1,4,103,53,50,48,92,248,22,52,198,248,22,78, -198,89,162,34,35,50,9,223,0,27,249,22,209,20,15,159,37,34,47,196,27, +4,103,53,51,48,91,3,1,4,103,53,51,49,92,248,22,58,198,248,22,84, +198,89,162,34,35,50,9,223,0,27,249,22,215,20,15,159,37,34,47,196,27, 28,248,80,158,37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80, 158,40,37,197,28,248,80,158,40,34,193,249,80,158,41,38,27,248,80,158,43, -36,196,28,248,80,158,43,39,193,248,22,9,89,162,34,35,41,9,224,9,1, +36,196,28,248,80,158,43,39,193,248,22,8,89,162,34,35,41,9,224,9,1, 27,249,22,2,89,162,34,35,46,9,224,4,5,249,80,158,37,40,28,248,80, 158,38,34,197,249,80,158,39,35,248,80,158,40,36,199,27,248,80,158,41,37, 200,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195,248,80, 158,43,41,248,80,158,44,37,196,11,11,194,248,80,158,39,42,196,28,248,22, -57,193,21,94,9,9,248,80,158,37,43,193,11,27,248,80,158,43,37,196,28, +63,193,21,94,9,9,248,80,158,37,43,193,11,27,248,80,158,43,37,196,28, 248,80,158,43,34,193,249,80,158,44,35,248,80,158,45,36,195,27,248,80,158, 46,37,196,28,248,80,158,46,39,193,248,80,158,46,42,193,11,11,11,11,28, -192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196,27,248,22,90,197, -27,248,22,89,198,249,80,158,43,44,202,27,251,22,61,202,201,199,200,250,80, +192,27,248,22,58,194,27,248,22,84,195,27,248,22,93,196,27,248,22,96,197, +27,248,22,95,198,249,80,158,43,44,202,27,251,22,67,202,201,199,200,250,80, 158,47,45,89,162,34,34,45,9,224,13,3,252,80,158,40,46,20,15,159,40, -35,47,21,95,3,1,4,103,53,50,51,93,3,1,4,103,53,50,50,94,3, -1,4,103,53,50,49,95,250,22,2,80,159,43,52,35,248,22,52,201,248,22, -78,201,248,22,88,198,248,22,87,198,21,98,2,44,94,94,93,2,45,2,47, -2,46,9,2,48,2,49,2,46,20,15,159,47,37,47,250,22,252,39,2,11, +35,47,21,95,3,1,4,103,53,51,52,93,3,1,4,103,53,51,51,94,3, +1,4,103,53,51,50,95,250,22,2,80,159,43,52,35,248,22,58,201,248,22, +84,201,248,22,94,198,248,22,93,198,21,98,2,44,94,94,93,2,45,2,47, +2,46,9,2,48,2,49,2,46,20,15,159,47,37,47,250,22,252,45,2,11, 2,50,196,34,20,98,159,35,16,13,2,51,2,53,2,55,2,57,2,59,2, 61,2,63,2,67,2,65,2,69,2,71,2,73,2,75,16,4,18,98,2,77, -47,38,37,36,16,4,46,11,2,79,3,1,7,101,110,118,51,48,56,48,96, +47,38,37,36,16,4,46,11,2,79,3,1,7,101,110,118,51,49,49,55,96, 18,158,163,38,100,2,44,50,38,37,36,46,16,12,49,11,3,1,4,103,53, -49,52,97,3,1,4,103,53,49,53,98,3,1,4,103,53,49,54,99,3,1, -4,103,53,49,55,100,3,1,4,103,53,49,56,101,3,1,7,101,110,118,51, -48,57,50,102,2,102,2,102,2,102,2,102,16,12,48,11,2,87,2,45,2, -47,2,48,2,49,3,1,7,101,110,118,51,48,57,51,103,2,103,2,103,2, +50,53,97,3,1,4,103,53,50,54,98,3,1,4,103,53,50,55,99,3,1, +4,103,53,50,56,100,3,1,4,103,53,50,57,101,3,1,7,101,110,118,51, +49,50,57,102,2,102,2,102,2,102,2,102,16,12,48,11,2,87,2,45,2, +47,2,48,2,49,3,1,7,101,110,118,51,49,51,48,103,2,103,2,103,2, 103,2,103,158,2,93,50,158,9,50,158,2,94,50,2,95,50,50,18,158,95, -10,93,2,91,2,92,50,18,16,2,96,2,46,52,93,8,252,143,10,16,4, -51,11,2,89,3,1,7,101,110,118,51,49,48,53,104,95,9,8,252,143,10, -2,38,11,16,5,93,2,31,87,96,83,159,34,93,80,159,34,8,29,35,89, +10,93,2,91,2,92,50,18,16,2,96,2,46,52,93,8,252,172,10,16,4, +51,11,2,89,3,1,7,101,110,118,51,49,52,50,104,95,9,8,252,172,10, +2,37,11,16,5,93,2,32,87,96,83,159,34,93,80,159,34,8,29,35,89, 162,35,35,43,9,223,0,251,80,158,38,49,20,15,159,38,39,51,21,94,3, -1,4,103,53,51,54,105,3,1,4,103,53,51,53,106,248,22,52,198,249,22, -2,80,159,40,8,28,35,248,22,78,200,83,159,34,93,80,159,34,8,28,35, +1,4,103,53,52,55,105,3,1,4,103,53,52,54,106,248,22,58,198,249,22, +2,80,159,40,8,28,35,248,22,84,200,83,159,34,93,80,159,34,8,28,35, 89,162,35,35,40,9,223,0,250,80,158,37,49,20,15,159,37,40,51,21,93, -3,1,4,103,53,51,52,107,248,22,52,197,83,159,34,93,80,159,34,8,27, +3,1,4,103,53,52,53,107,248,22,58,197,83,159,34,93,80,159,34,8,27, 35,89,162,35,35,41,9,223,0,251,80,158,38,49,20,15,159,38,38,51,21, -94,3,1,4,103,53,51,51,108,3,1,4,103,53,51,50,109,248,22,52,198, -248,22,78,198,89,162,34,35,53,9,223,0,27,249,22,209,20,15,159,37,34, +94,3,1,4,103,53,52,52,108,3,1,4,103,53,52,51,109,248,22,58,198, +248,22,84,198,89,162,34,35,53,9,223,0,27,249,22,215,20,15,159,37,34, 51,196,27,28,248,80,158,37,34,194,249,80,158,38,35,248,80,158,39,36,196, 27,248,80,158,40,37,197,28,248,80,158,40,34,193,249,80,158,41,38,27,248, -80,158,43,36,196,28,248,80,158,43,39,193,248,22,9,89,162,34,35,41,9, +80,158,43,36,196,28,248,80,158,43,39,193,248,22,8,89,162,34,35,41,9, 224,9,1,27,249,22,2,89,162,34,35,46,9,224,4,5,249,80,158,37,40, 28,248,80,158,38,34,197,249,80,158,39,38,27,248,80,158,41,36,200,28,248, -80,158,41,39,193,248,22,59,248,80,158,42,41,194,11,27,248,80,158,41,37, +80,158,41,39,193,248,22,65,248,80,158,42,41,194,11,27,248,80,158,41,37, 200,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195,248,80, 158,43,42,248,80,158,44,37,196,11,11,194,248,80,158,39,41,196,28,248,22, -57,193,21,94,9,9,248,80,158,37,43,193,11,27,248,80,158,43,37,196,28, +63,193,21,94,9,9,248,80,158,37,43,193,11,27,248,80,158,43,37,196,28, 248,80,158,43,34,193,249,80,158,44,35,248,80,158,45,36,195,27,248,80,158, 46,37,196,28,248,80,158,46,39,193,248,80,158,46,41,193,11,11,11,11,28, -192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196,27,248,22,90,197, -27,248,22,89,198,27,249,22,209,20,15,159,44,35,51,249,22,2,80,158,46, -44,248,22,216,249,80,158,49,45,20,15,159,49,36,51,203,27,28,248,80,158, -44,39,194,248,22,9,89,162,34,35,41,9,224,10,2,27,249,22,2,89,162, +192,27,248,22,58,194,27,248,22,84,195,27,248,22,93,196,27,248,22,96,197, +27,248,22,95,198,27,249,22,215,20,15,159,44,35,51,249,22,2,80,158,46, +44,248,22,222,249,80,158,49,45,20,15,159,49,36,51,203,27,28,248,80,158, +44,39,194,248,22,8,89,162,34,35,41,9,224,10,2,27,249,22,2,89,162, 34,35,41,9,224,4,5,249,80,158,37,40,28,248,80,158,38,39,197,248,22, -59,248,80,158,39,41,198,11,194,248,80,158,39,41,196,28,248,22,57,193,9, -248,80,158,37,46,193,11,28,192,249,80,158,45,47,204,27,252,22,61,202,204, -205,200,203,250,80,158,49,48,89,162,34,34,46,9,224,15,3,253,80,158,41, -49,20,15,159,41,37,51,21,96,3,1,4,103,53,52,48,110,3,1,4,103, -53,51,57,111,3,1,4,103,53,51,56,112,3,1,4,103,53,51,55,113,250, -22,2,80,159,44,8,27,35,248,22,90,202,248,22,78,202,250,22,2,80,159, -44,8,29,35,248,22,87,202,248,22,90,202,248,22,89,199,248,22,52,199,21, +65,248,80,158,39,41,198,11,194,248,80,158,39,41,196,28,248,22,63,193,9, +248,80,158,37,46,193,11,28,192,249,80,158,45,47,204,27,252,22,67,200,204, +205,202,203,250,80,158,49,48,89,162,34,34,46,9,224,15,3,253,80,158,41, +49,20,15,159,41,37,51,21,96,3,1,4,103,53,53,49,110,3,1,4,103, +53,53,48,111,3,1,4,103,53,52,57,112,3,1,4,103,53,52,56,113,250, +22,2,80,159,44,8,27,35,248,22,58,202,248,22,84,202,250,22,2,80,159, +44,8,29,35,248,22,93,202,248,22,58,202,248,22,95,199,248,22,96,199,21, 96,2,44,94,94,94,63,116,109,112,114,2,46,2,47,2,46,9,98,2,44, 94,94,94,2,45,2,46,95,66,118,97,108,117,101,115,115,94,1,23,109,97, 107,101,45,114,101,110,97,109,101,45,116,114,97,110,115,102,111,114,109,101,114, 116,94,72,113,117,111,116,101,45,115,121,110,116,97,120,117,2,114,2,46,2, 46,9,2,48,2,49,2,46,20,15,159,49,41,51,248,80,158,44,50,20,15, -159,44,42,51,250,22,252,39,2,11,2,50,196,34,20,98,159,37,16,17,2, +159,44,42,51,250,22,252,45,2,11,2,50,196,34,20,98,159,37,16,17,2, 51,2,53,2,55,2,57,2,59,2,61,2,63,2,65,2,67,2,69,30,118, -2,33,2,8,0,30,119,2,38,1,26,100,97,116,117,109,45,62,115,121,110, +2,33,2,8,0,30,119,2,37,1,26,100,97,116,117,109,45,62,115,121,110, 116,97,120,45,111,98,106,101,99,116,47,115,104,97,112,101,120,2,30,121,2, 6,71,115,116,120,45,114,111,116,97,116,101,42,122,13,2,71,2,73,2,75, 30,123,2,33,76,119,105,116,104,45,115,121,110,116,97,120,45,102,97,105,108, 124,3,16,9,18,98,2,77,54,38,37,36,16,4,53,11,2,79,3,1,7, -101,110,118,51,49,49,48,125,18,100,2,77,57,38,37,36,53,16,12,56,11, -3,1,4,103,53,50,52,126,3,1,4,103,53,50,53,127,3,1,4,103,53, -50,54,128,3,1,4,103,53,50,55,129,3,1,4,103,53,50,56,130,3,1, -7,101,110,118,51,49,50,51,131,2,131,2,131,2,131,2,131,16,12,55,11, -2,87,2,45,2,47,2,48,2,49,3,1,7,101,110,118,51,49,50,52,132, +101,110,118,51,49,52,55,125,18,100,2,77,57,38,37,36,53,16,12,56,11, +3,1,4,103,53,51,53,126,3,1,4,103,53,51,54,127,3,1,4,103,53, +51,55,128,3,1,4,103,53,51,56,129,3,1,4,103,53,51,57,130,3,1, +7,101,110,118,51,49,54,48,131,2,131,2,131,2,131,2,131,16,12,55,11, +2,87,2,45,2,47,2,48,2,49,3,1,7,101,110,118,51,49,54,49,132, 2,132,2,132,2,132,2,132,18,16,2,158,64,100,101,115,116,133,57,58,18, 158,96,102,2,44,8,27,38,37,36,53,56,55,16,4,8,26,11,3,1,4, -103,53,51,49,134,3,1,7,101,110,118,51,49,52,52,135,16,4,59,11,2, -114,3,1,7,101,110,118,51,49,52,53,136,158,2,110,8,27,158,9,8,27, +103,53,52,50,134,3,1,7,101,110,118,51,49,56,49,135,16,4,59,11,2, +114,3,1,7,101,110,118,51,49,56,50,136,158,2,110,8,27,158,9,8,27, 158,162,10,2,44,2,111,9,2,112,2,113,8,27,8,27,18,158,95,10,2, 108,2,109,8,27,18,158,95,10,2,105,158,2,115,2,106,8,27,18,158,95, 10,2,116,94,2,117,2,107,8,27,18,16,2,96,2,46,8,29,93,8,252, -174,10,16,4,8,28,11,2,89,3,1,7,101,110,118,51,49,52,57,137,95, -9,8,252,174,10,2,38,18,16,2,158,94,158,94,98,2,114,8,33,93,8, -252,162,10,16,4,8,32,11,3,1,8,119,115,116,109,112,53,50,57,138,3, -1,7,101,110,118,51,49,51,54,139,16,4,8,31,11,3,1,4,103,53,51, -48,140,3,1,7,101,110,118,51,49,53,56,141,16,4,8,30,11,65,95,101, -108,115,101,142,3,1,7,101,110,118,51,49,53,57,143,158,2,46,8,33,8, -33,158,2,46,8,33,8,33,95,9,8,252,162,10,2,33,11,16,5,93,2, +203,10,16,4,8,28,11,2,89,3,1,7,101,110,118,51,49,56,54,137,95, +9,8,252,203,10,2,37,18,16,2,158,94,158,94,98,2,114,8,33,93,8, +252,191,10,16,4,8,32,11,3,1,8,119,115,116,109,112,53,52,48,138,3, +1,7,101,110,118,51,49,55,51,139,16,4,8,31,11,3,1,4,103,53,52, +49,140,3,1,7,101,110,118,51,49,57,53,141,16,4,8,30,11,65,95,101, +108,115,101,142,3,1,7,101,110,118,51,49,57,54,143,158,2,46,8,33,8, +33,158,2,46,8,33,8,33,95,9,8,252,191,10,2,33,11,16,5,93,2, 14,87,94,83,159,34,93,80,159,34,52,35,89,162,35,35,41,9,223,0,251, -80,158,38,46,20,15,159,38,36,47,21,94,3,1,4,103,53,52,54,144,3, -1,4,103,53,52,55,145,248,22,52,198,248,22,78,198,89,162,34,35,50,9, -223,0,27,249,22,209,20,15,159,37,34,47,196,27,28,248,80,158,37,34,194, +80,158,38,46,20,15,159,38,36,47,21,94,3,1,4,103,53,53,55,144,3, +1,4,103,53,53,56,145,248,22,58,198,248,22,84,198,89,162,34,35,50,9, +223,0,27,249,22,215,20,15,159,37,34,47,196,27,28,248,80,158,37,34,194, 249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40,37,197,28,248,80, 158,40,34,193,249,80,158,41,38,27,248,80,158,43,36,196,28,248,80,158,43, -39,193,248,22,9,89,162,34,35,41,9,224,9,1,27,249,22,2,89,162,34, +39,193,248,22,8,89,162,34,35,41,9,224,9,1,27,249,22,2,89,162,34, 35,46,9,224,4,5,249,80,158,37,40,28,248,80,158,38,34,197,249,80,158, 39,35,248,80,158,40,36,199,27,248,80,158,41,37,200,28,248,80,158,41,34, 193,249,80,158,42,35,248,80,158,43,36,195,248,80,158,43,41,248,80,158,44, -37,196,11,11,194,248,80,158,39,42,196,28,248,22,57,193,21,94,9,9,248, +37,196,11,11,194,248,80,158,39,42,196,28,248,22,63,193,21,94,9,9,248, 80,158,37,43,193,11,27,248,80,158,43,37,196,28,248,80,158,43,34,193,249, 80,158,44,35,248,80,158,45,36,195,27,248,80,158,46,37,196,28,248,80,158, -46,39,193,248,80,158,46,42,193,11,11,11,11,28,192,27,248,22,52,194,27, -248,22,78,195,27,248,22,87,196,27,248,22,90,197,27,248,22,89,198,249,80, -158,43,44,202,27,251,22,61,202,199,200,201,250,80,158,47,45,89,162,34,34, +46,39,193,248,80,158,46,42,193,11,11,11,11,28,192,27,248,22,58,194,27, +248,22,84,195,27,248,22,93,196,27,248,22,96,197,27,248,22,95,198,249,80, +158,43,44,202,27,251,22,67,202,200,199,201,250,80,158,47,45,89,162,34,34, 45,9,224,13,3,252,80,158,40,46,20,15,159,40,35,47,21,95,3,1,4, -103,53,53,48,146,3,1,4,103,53,52,57,147,3,1,4,103,53,52,56,148, -250,22,2,80,159,43,52,35,248,22,52,201,248,22,88,201,248,22,87,198,248, -22,78,198,21,97,2,31,94,94,93,2,45,2,47,2,46,2,48,2,49,2, -46,20,15,159,47,37,47,250,22,252,39,2,11,2,50,196,34,20,98,159,35, +103,53,54,49,146,3,1,4,103,53,54,48,147,3,1,4,103,53,53,57,148, +250,22,2,80,159,43,52,35,248,22,58,201,248,22,94,201,248,22,84,198,248, +22,93,198,21,97,2,32,94,94,93,2,45,2,47,2,46,2,48,2,49,2, +46,20,15,159,47,37,47,250,22,252,45,2,11,2,50,196,34,20,98,159,35, 16,13,2,51,2,53,2,55,2,57,2,59,2,61,2,63,2,67,2,65,2, 69,2,71,2,73,2,75,16,4,18,98,2,77,8,35,38,37,36,16,4,8, -34,11,2,79,3,1,7,101,110,118,51,49,54,51,149,18,158,162,37,100,2, -31,8,38,38,37,36,8,34,16,12,8,37,11,3,1,4,103,53,52,49,150, -3,1,4,103,53,52,50,151,3,1,4,103,53,52,51,152,3,1,4,103,53, -52,52,153,3,1,4,103,53,52,53,154,3,1,7,101,110,118,51,49,55,53, +34,11,2,79,3,1,7,101,110,118,51,50,48,48,149,18,158,162,37,100,2, +32,8,38,38,37,36,8,34,16,12,8,37,11,3,1,4,103,53,53,50,150, +3,1,4,103,53,53,51,151,3,1,4,103,53,53,52,152,3,1,4,103,53, +53,53,153,3,1,4,103,53,53,54,154,3,1,7,101,110,118,51,50,49,50, 155,2,155,2,155,2,155,2,155,16,12,8,36,11,2,87,2,45,2,47,2, -48,2,49,3,1,7,101,110,118,51,49,55,54,156,2,156,2,156,2,156,2, +48,2,49,3,1,7,101,110,118,51,50,49,51,156,2,156,2,156,2,156,2, 156,158,2,146,8,38,158,2,147,8,38,2,148,8,38,8,38,18,158,95,10, -93,2,144,2,145,8,38,18,16,2,96,2,46,8,40,93,8,252,199,10,16, -4,8,39,11,2,89,3,1,7,101,110,118,51,49,56,56,157,95,9,8,252, -199,10,2,38,11,16,5,93,2,9,87,94,83,159,34,93,80,159,34,58,35, +93,2,144,2,145,8,38,18,16,2,96,2,46,8,40,93,8,252,228,10,16, +4,8,39,11,2,89,3,1,7,101,110,118,51,50,50,53,157,95,9,8,252, +228,10,2,37,11,16,5,93,2,24,87,94,83,159,34,93,80,159,34,58,35, 89,162,35,35,42,9,223,0,252,80,158,39,48,20,15,159,39,38,50,21,95, -3,1,4,103,53,54,48,158,3,1,4,103,53,53,57,159,3,1,4,103,53, -54,49,160,248,22,52,199,248,22,78,199,248,22,87,199,89,162,34,35,52,9, +3,1,4,103,53,55,49,158,3,1,4,103,53,55,48,159,3,1,4,103,53, +55,50,160,248,22,58,199,248,22,84,199,248,22,93,199,89,162,34,35,52,9, 223,0,27,28,248,80,158,36,34,195,249,80,158,37,35,248,80,158,38,36,197, 27,248,80,158,39,37,198,28,248,80,158,39,34,193,249,80,158,40,38,27,248, -80,158,42,36,196,28,248,80,158,42,39,193,248,22,59,248,80,158,43,40,194, -11,27,248,80,158,42,37,196,28,248,80,158,42,39,193,248,22,9,89,162,34, +80,158,42,36,196,28,248,80,158,42,39,193,248,22,65,248,80,158,43,40,194, +11,27,248,80,158,42,37,196,28,248,80,158,42,39,193,248,22,8,89,162,34, 35,41,9,224,8,1,27,249,22,2,89,162,34,35,49,9,224,4,5,249,80, 158,37,41,28,248,80,158,38,34,197,249,80,158,39,38,27,248,80,158,41,36, 200,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195,27,248, -80,158,44,37,196,248,22,59,250,22,209,199,196,199,11,27,248,80,158,41,37, +80,158,44,37,196,248,22,65,250,22,215,199,196,199,11,27,248,80,158,41,37, 200,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195,248,80, 158,43,42,248,80,158,44,37,196,11,11,194,248,80,158,39,40,196,28,248,22, -57,193,21,94,9,9,248,80,158,37,43,193,11,11,11,28,192,27,248,22,52, -194,27,248,22,78,195,27,248,22,87,196,27,248,22,90,197,27,248,22,89,198, -28,249,22,4,80,158,42,44,248,22,216,249,80,158,45,45,20,15,159,45,34, -50,200,27,249,22,209,20,15,159,43,35,50,249,22,2,32,161,89,162,8,36, -35,38,9,222,248,22,43,248,22,44,248,22,210,195,248,22,216,249,80,158,48, -45,20,15,159,48,36,50,202,27,28,248,80,158,43,39,194,248,80,158,43,40, -194,11,28,192,249,80,158,44,46,203,27,252,22,61,205,200,202,206,203,250,80, -158,48,47,89,162,34,34,46,9,224,14,3,252,80,158,40,48,20,15,159,40, -37,50,21,95,3,1,4,103,53,54,52,162,3,1,4,103,53,54,51,163,3, -1,4,103,53,54,50,164,248,22,90,198,248,22,52,198,251,22,2,80,159,44, -58,35,248,22,78,202,248,22,89,202,248,22,87,202,21,95,66,108,97,109,98, -100,97,165,93,61,120,166,100,73,115,121,110,116,97,120,45,99,97,115,101,42, -42,167,2,87,10,2,166,94,61,107,168,2,46,79,109,111,100,117,108,101,45, -105,100,101,110,116,105,102,105,101,114,61,63,169,94,158,65,100,117,109,109,121, -170,67,112,97,116,116,101,114,110,171,95,2,24,2,166,68,116,101,109,112,108, -97,116,101,172,2,46,20,15,159,48,39,50,248,80,158,43,49,20,15,159,43, -40,50,250,22,252,39,2,11,2,50,202,250,22,252,39,2,11,2,50,197,34, -20,98,159,35,16,16,2,51,2,53,2,55,2,57,2,59,2,61,2,65,2, -63,2,67,2,121,30,173,2,6,2,7,2,2,119,2,71,2,73,2,75,2, -123,16,7,18,100,2,133,8,44,38,37,36,16,4,8,43,11,2,166,3,1, -7,101,110,118,51,49,57,51,174,16,12,8,42,11,3,1,4,103,53,53,49, -175,3,1,4,103,53,53,50,176,3,1,4,103,53,53,51,177,3,1,4,103, -53,53,52,178,3,1,4,103,53,53,53,179,3,1,7,101,110,118,51,50,48, -57,180,2,180,2,180,2,180,2,180,16,12,8,41,11,2,87,2,168,67,107, -101,121,119,111,114,100,181,2,171,2,172,3,1,7,101,110,118,51,50,49,48, -182,2,182,2,182,2,182,2,182,18,16,2,158,2,77,8,44,8,45,18,16, -2,158,2,133,8,44,8,46,18,158,95,102,2,165,8,49,38,37,36,8,43, -8,42,8,41,16,4,8,48,11,3,1,4,103,53,53,56,183,3,1,7,101, -110,118,51,50,50,56,184,16,4,8,47,11,2,170,3,1,7,101,110,118,51, -50,50,57,185,158,94,10,2,166,8,49,158,164,10,2,167,2,162,10,2,166, -2,163,2,169,2,164,8,49,8,49,18,158,95,10,158,2,158,2,159,95,2, -24,2,166,2,160,8,49,18,16,2,96,2,46,8,51,93,8,252,229,10,16, -4,8,50,11,2,89,3,1,7,101,110,118,51,50,51,51,186,95,9,8,252, -229,10,2,38,18,16,2,158,94,98,2,170,8,55,93,8,252,221,10,16,4, -8,54,11,3,1,8,119,115,116,109,112,53,53,54,187,3,1,7,101,110,118, -51,50,50,50,188,16,4,8,53,11,3,1,4,103,53,53,55,189,3,1,7, -101,110,118,51,50,51,56,190,16,4,8,52,11,2,142,3,1,7,101,110,118, -51,50,51,57,191,158,2,46,8,55,8,55,95,9,8,252,221,10,2,33,11, -16,5,93,2,13,87,94,83,159,34,93,80,159,34,54,35,89,162,35,35,41, -9,223,0,251,80,158,38,48,20,15,159,38,36,49,21,94,3,1,4,103,53, -55,48,192,3,1,4,103,53,54,57,193,248,22,52,198,248,22,78,198,89,162, -34,35,48,9,223,0,27,28,248,80,158,36,34,195,249,80,158,37,35,248,80, -158,38,36,197,27,248,80,158,39,37,198,28,248,80,158,39,34,193,249,80,158, -40,38,27,248,80,158,42,36,196,28,248,80,158,42,39,193,248,22,59,248,80, -158,43,40,194,11,27,248,80,158,42,37,196,28,248,80,158,42,39,193,248,22, -9,89,162,34,35,41,9,224,8,1,27,249,22,2,89,162,34,35,46,9,224, -4,5,249,80,158,37,41,28,248,80,158,38,34,197,249,80,158,39,35,248,80, -158,40,36,199,27,248,80,158,41,37,200,28,248,80,158,41,34,193,249,80,158, -42,35,248,80,158,43,36,195,248,80,158,43,42,248,80,158,44,37,196,11,11, -194,248,80,158,39,40,196,28,248,22,57,193,21,93,9,248,80,158,37,43,193, -11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196,27, -248,22,88,197,28,249,22,4,80,158,41,44,248,22,216,249,80,158,44,45,20, -15,159,44,34,49,199,249,80,158,41,46,200,27,251,22,61,201,199,202,200,250, -80,158,45,47,89,162,34,34,45,9,224,11,3,252,80,158,40,48,20,15,159, -40,35,49,21,95,3,1,4,103,53,55,51,194,3,1,4,103,53,55,50,195, -3,1,4,103,53,55,49,196,248,22,87,198,248,22,52,198,250,22,2,80,159, -43,54,35,248,22,88,201,248,22,78,201,21,94,1,21,109,97,107,101,45,115, -101,116,33,45,116,114,97,110,115,102,111,114,109,101,114,197,95,2,165,93,2, -166,100,2,167,2,87,10,2,166,94,2,168,2,46,2,169,94,2,171,95,2, -24,2,166,2,172,2,46,20,15,159,45,37,49,250,22,252,39,2,11,2,50, -201,250,22,252,39,2,11,2,50,197,34,20,98,159,35,16,15,2,51,2,53, -2,55,2,57,2,59,2,61,2,65,2,63,2,67,2,121,2,173,2,119,2, -71,2,73,2,75,16,4,18,100,2,133,8,59,38,37,36,16,4,8,58,11, -2,166,3,1,7,101,110,118,51,50,52,51,198,16,10,8,57,11,3,1,4, -103,53,54,53,199,3,1,4,103,53,54,54,200,3,1,4,103,53,54,55,201, -3,1,4,103,53,54,56,202,3,1,7,101,110,118,51,50,53,54,203,2,203, -2,203,2,203,16,10,8,56,11,2,87,2,168,2,171,2,172,3,1,7,101, -110,118,51,50,53,55,204,2,204,2,204,2,204,18,158,95,10,2,197,95,2, -165,93,2,166,163,2,167,2,194,10,2,166,2,195,2,169,2,196,8,59,18, -158,95,10,2,192,95,2,24,2,166,2,193,8,59,18,16,2,96,2,46,8, -61,93,8,252,253,10,16,4,8,60,11,2,89,3,1,7,101,110,118,51,50, -54,55,205,95,9,8,252,253,10,2,38,11,93,83,159,34,93,80,159,34,34, -35,89,162,34,35,37,2,4,223,0,248,22,9,89,162,8,36,35,40,9,224, -1,2,27,247,22,110,87,94,249,22,3,89,162,8,36,35,45,9,226,4,3, -5,2,87,94,28,248,80,158,38,35,197,12,250,22,252,40,2,2,4,6,19, -19,108,105,115,116,32,111,102,32,105,100,101,110,116,105,102,105,101,114,115,206, -197,27,250,22,116,196,248,22,210,201,9,87,94,28,249,22,5,89,162,8,36, -35,38,9,223,7,249,22,221,195,194,194,248,195,198,12,250,22,115,196,248,22, -210,201,249,22,51,202,197,195,11,98,68,35,37,107,101,114,110,101,108,207,2, -78,2,6,2,38,2,33,2,36,98,2,207,2,78,2,6,2,38,2,33,2, -36,0}; - EVAL_ONE_SIZED_STR((char *)expr, 6301); +63,193,21,94,9,9,248,80,158,37,43,193,11,11,11,28,192,27,248,22,58, +194,27,248,22,84,195,27,248,22,93,196,27,248,22,96,197,27,248,22,95,198, +28,249,22,4,80,158,42,44,248,22,222,249,80,158,45,45,20,15,159,45,34, +50,200,27,249,22,215,20,15,159,43,35,50,249,22,2,89,162,8,36,35,41, +9,224,11,12,87,94,28,248,80,158,36,44,195,12,251,22,252,45,2,11,6, +59,59,112,97,116,116,101,114,110,32,109,117,115,116,32,115,116,97,114,116,32, +119,105,116,104,32,97,110,32,105,100,101,110,116,105,102,105,101,114,44,32,102, +111,117,110,100,32,115,111,109,101,116,104,105,110,103,32,101,108,115,101,161,196, +198,248,22,49,248,22,50,248,22,216,197,248,22,222,249,80,158,48,45,20,15, +159,48,36,50,202,27,28,248,80,158,43,39,194,248,80,158,43,40,194,11,28, +192,249,80,158,44,46,203,27,252,22,67,206,203,202,200,205,250,80,158,48,47, +89,162,34,34,46,9,224,14,3,252,80,158,40,48,20,15,159,40,37,50,21, +95,3,1,4,103,53,55,53,162,3,1,4,103,53,55,52,163,3,1,4,103, +53,55,51,164,248,22,58,198,248,22,95,198,251,22,2,80,159,44,58,35,248, +22,96,202,248,22,84,202,248,22,93,202,21,95,66,108,97,109,98,100,97,165, +93,61,120,166,100,73,115,121,110,116,97,120,45,99,97,115,101,42,42,167,2, +87,10,2,166,94,61,107,168,2,46,79,109,111,100,117,108,101,45,105,100,101, +110,116,105,102,105,101,114,61,63,169,94,158,65,100,117,109,109,121,170,67,112, +97,116,116,101,114,110,171,95,2,23,2,166,68,116,101,109,112,108,97,116,101, +172,2,46,20,15,159,48,39,50,248,80,158,43,49,20,15,159,43,40,50,250, +22,252,45,2,11,2,50,202,250,22,252,45,2,11,2,50,197,34,20,98,159, +35,16,16,2,51,2,53,2,55,2,57,2,59,2,61,2,65,2,63,2,67, +2,121,30,173,2,6,2,7,2,2,119,2,71,2,73,2,75,2,123,16,7, +18,100,2,133,8,44,38,37,36,16,4,8,43,11,2,79,3,1,7,101,110, +118,51,50,51,48,174,16,12,8,42,11,3,1,4,103,53,54,50,175,3,1, +4,103,53,54,51,176,3,1,4,103,53,54,52,177,3,1,4,103,53,54,53, +178,3,1,4,103,53,54,54,179,3,1,7,101,110,118,51,50,52,54,180,2, +180,2,180,2,180,2,180,16,12,8,41,11,2,87,2,168,67,107,101,121,119, +111,114,100,181,2,171,2,172,3,1,7,101,110,118,51,50,52,55,182,2,182, +2,182,2,182,2,182,18,16,2,158,2,77,8,44,8,45,18,16,2,158,2, +133,8,44,8,46,18,158,95,102,2,165,8,51,38,37,36,8,43,16,12,8, +50,11,2,175,2,176,2,177,2,178,2,179,2,180,2,180,2,180,2,180,2, +180,16,12,8,49,11,2,87,2,168,2,181,2,171,2,172,2,182,2,182,2, +182,2,182,2,182,16,4,8,48,11,3,1,4,103,53,54,57,183,3,1,7, +101,110,118,51,50,54,54,184,16,4,8,47,11,2,170,3,1,7,101,110,118, +51,50,54,55,185,158,94,10,2,166,8,51,158,164,10,2,167,2,162,10,2, +166,2,163,2,169,2,164,8,51,8,51,18,158,95,10,158,2,158,2,159,95, +2,23,2,166,2,160,8,51,18,16,2,96,2,46,8,53,93,8,252,3,11, +16,4,8,52,11,2,89,3,1,7,101,110,118,51,50,55,49,186,95,9,8, +252,3,11,2,37,18,16,2,158,94,98,2,170,8,57,93,8,252,250,10,16, +4,8,56,11,3,1,8,119,115,116,109,112,53,54,55,187,3,1,7,101,110, +118,51,50,53,57,188,16,4,8,55,11,3,1,4,103,53,54,56,189,3,1, +7,101,110,118,51,50,55,54,190,16,4,8,54,11,2,142,3,1,7,101,110, +118,51,50,55,55,191,158,2,46,8,57,8,57,95,9,8,252,250,10,2,33, +11,16,5,93,2,13,87,94,83,159,34,93,80,159,34,54,35,89,162,35,35, +41,9,223,0,251,80,158,38,48,20,15,159,38,36,49,21,94,3,1,4,103, +53,56,49,192,3,1,4,103,53,56,48,193,248,22,58,198,248,22,84,198,89, +162,34,35,48,9,223,0,27,28,248,80,158,36,34,195,249,80,158,37,35,248, +80,158,38,36,197,27,248,80,158,39,37,198,28,248,80,158,39,34,193,249,80, +158,40,38,27,248,80,158,42,36,196,28,248,80,158,42,39,193,248,22,65,248, +80,158,43,40,194,11,27,248,80,158,42,37,196,28,248,80,158,42,39,193,248, +22,8,89,162,34,35,41,9,224,8,1,27,249,22,2,89,162,34,35,46,9, +224,4,5,249,80,158,37,41,28,248,80,158,38,34,197,249,80,158,39,35,248, +80,158,40,36,199,27,248,80,158,41,37,200,28,248,80,158,41,34,193,249,80, +158,42,35,248,80,158,43,36,195,248,80,158,43,42,248,80,158,44,37,196,11, +11,194,248,80,158,39,40,196,28,248,22,63,193,21,93,9,248,80,158,37,43, +193,11,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,93,196, +27,248,22,94,197,28,249,22,4,80,158,41,44,248,22,222,249,80,158,44,45, +20,15,159,44,34,49,199,249,80,158,41,46,200,27,251,22,67,202,199,200,201, +250,80,158,45,47,89,162,34,34,45,9,224,11,3,252,80,158,40,48,20,15, +159,40,35,49,21,95,3,1,4,103,53,56,52,194,3,1,4,103,53,56,51, +195,3,1,4,103,53,56,50,196,248,22,58,198,248,22,94,198,250,22,2,80, +159,43,54,35,248,22,93,201,248,22,84,201,21,94,1,21,109,97,107,101,45, +115,101,116,33,45,116,114,97,110,115,102,111,114,109,101,114,197,95,2,165,93, +2,166,100,2,167,2,87,10,2,166,94,2,168,2,46,2,169,94,2,171,95, +2,23,2,166,2,172,2,46,20,15,159,45,37,49,250,22,252,45,2,11,2, +50,201,250,22,252,45,2,11,2,50,197,34,20,98,159,35,16,15,2,51,2, +53,2,55,2,57,2,59,2,61,2,65,2,63,2,67,2,121,2,173,2,119, +2,71,2,73,2,75,16,4,18,100,2,133,8,61,38,37,36,16,4,8,60, +11,2,166,3,1,7,101,110,118,51,50,56,49,198,16,10,8,59,11,3,1, +4,103,53,55,54,199,3,1,4,103,53,55,55,200,3,1,4,103,53,55,56, +201,3,1,4,103,53,55,57,202,3,1,7,101,110,118,51,50,57,52,203,2, +203,2,203,2,203,16,10,8,58,11,2,87,2,168,2,171,2,172,3,1,7, +101,110,118,51,50,57,53,204,2,204,2,204,2,204,18,158,95,10,2,197,95, +2,165,93,2,166,163,2,167,2,194,10,2,166,2,195,2,169,2,196,8,61, +18,158,95,10,2,192,95,2,23,2,166,2,193,8,61,18,16,2,96,2,46, +8,63,93,8,252,27,11,16,4,8,62,11,2,89,3,1,7,101,110,118,51, +51,48,53,205,95,9,8,252,27,11,2,37,11,93,83,159,34,93,80,159,34, +34,35,89,162,34,35,37,2,4,223,0,248,22,8,89,162,8,36,35,40,9, +224,1,2,27,247,22,116,87,94,249,22,3,89,162,8,36,35,45,9,226,4, +3,5,2,87,94,28,248,80,158,38,35,197,12,250,22,252,46,2,2,4,6, +19,19,108,105,115,116,32,111,102,32,105,100,101,110,116,105,102,105,101,114,115, +206,197,27,250,22,122,196,248,22,216,201,9,87,94,28,249,22,5,89,162,8, +36,35,38,9,223,7,249,22,227,195,194,194,248,195,198,12,250,22,121,196,248, +22,216,201,249,22,57,202,197,195,11,98,68,35,37,107,101,114,110,101,108,207, +2,78,2,6,2,37,2,33,2,38,98,2,207,2,78,2,6,2,37,2,33, +2,38,0}; + EVAL_ONE_SIZED_STR((char *)expr, 6428); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,112,252,186,12,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,55,112,252,186,12,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,67,35,37,113,113, 115,116,120,1,29,2,11,11,10,10,10,34,80,158,34,34,20,98,159,34,16, 2,30,3,2,2,79,99,104,101,99,107,45,115,112,108,105,99,105,110,103,45, @@ -2159,92 +2165,92 @@ 108,111,99,9,71,113,117,97,115,105,115,121,110,116,97,120,10,77,117,110,115, 121,110,116,97,120,45,115,112,108,105,99,105,110,103,11,16,4,11,11,11,11, 16,4,2,8,2,9,2,10,2,11,34,38,94,16,5,94,2,8,2,11,27, -32,12,89,162,34,35,38,61,102,13,222,250,22,252,39,2,11,6,30,30,105, +32,12,89,162,34,35,38,61,102,13,222,250,22,252,45,2,11,6,30,30,105, 108,108,101,103,97,108,32,111,117,116,115,105,100,101,32,111,102,32,113,117,97, 115,105,115,121,110,116,97,120,14,195,249,22,7,194,194,37,20,98,159,34,16, 0,16,0,11,16,5,94,2,10,2,9,87,96,83,159,34,93,80,159,34,8, -32,35,89,162,8,36,35,38,9,223,0,249,22,59,20,15,159,36,51,43,195, +32,35,89,162,8,36,35,38,9,223,0,249,22,65,20,15,159,36,51,43,195, 83,159,34,93,80,159,34,8,30,35,89,162,34,40,58,64,108,111,111,112,15, -223,0,27,249,22,209,20,15,159,37,35,43,198,27,28,248,80,158,37,34,194, -28,27,248,80,158,38,35,195,28,248,80,158,38,36,193,28,249,22,223,194,20, +223,0,27,249,22,215,20,15,159,37,35,43,198,27,28,248,80,158,37,34,194, +28,27,248,80,158,38,35,195,28,248,80,158,38,36,193,28,249,22,229,194,20, 15,159,39,36,43,9,11,11,27,248,80,158,38,37,195,28,248,80,158,38,34, 193,249,80,158,39,38,248,80,158,40,35,195,248,80,158,40,39,248,80,158,41, -37,196,11,11,11,28,192,28,248,22,186,199,27,248,22,52,248,80,158,39,40, -21,93,62,117,113,16,249,203,194,248,22,59,249,22,59,197,198,253,80,159,42, -8,30,35,201,202,198,248,22,171,205,205,89,162,34,36,48,9,226,8,9,14, -11,249,195,250,22,209,199,249,22,59,248,80,158,45,35,200,203,197,199,27,28, -248,80,158,38,36,195,28,249,22,223,196,20,15,159,39,37,43,9,11,11,28, -192,251,22,252,39,2,11,6,25,25,109,105,115,117,115,101,32,119,105,116,104, +37,196,11,11,11,28,192,28,248,22,192,199,27,248,22,58,248,80,158,39,40, +21,93,62,117,113,16,249,203,194,248,22,65,249,22,65,197,198,253,80,159,42, +8,30,35,201,202,198,248,22,177,205,205,89,162,34,36,48,9,226,8,9,14, +11,249,195,250,22,215,199,249,22,65,248,80,158,45,35,200,203,197,199,27,28, +248,80,158,38,36,195,28,249,22,229,196,20,15,159,39,37,43,9,11,11,28, +192,251,22,252,45,2,11,6,25,25,109,105,115,117,115,101,32,119,105,116,104, 105,110,32,113,117,97,115,105,115,121,110,116,97,120,17,201,202,27,28,248,80, 158,39,34,196,249,80,158,40,38,27,248,80,158,42,35,199,28,248,80,158,42, -34,193,28,27,248,80,158,43,35,194,28,248,80,158,43,36,193,28,249,22,223, +34,193,28,27,248,80,158,43,35,194,28,248,80,158,43,36,193,28,249,22,229, 194,20,15,159,44,38,43,9,11,11,27,248,80,158,43,37,194,28,248,80,158, 43,34,193,249,80,158,44,41,248,80,158,45,35,195,248,80,158,45,39,248,80, -158,46,37,196,11,11,11,27,248,80,158,42,37,199,250,22,209,201,195,201,11, -28,192,27,248,22,52,194,27,248,22,53,195,28,248,22,186,203,27,89,162,34, +158,46,37,196,11,11,11,27,248,80,158,42,37,199,250,22,215,201,195,201,11, +28,192,27,248,22,58,194,27,248,22,59,195,28,248,22,192,203,27,89,162,34, 36,54,71,114,101,115,116,45,100,111,110,101,45,107,18,226,7,13,10,2,27, -249,22,209,20,15,159,40,39,43,248,22,52,248,80,158,42,40,21,93,63,117, -113,115,19,27,249,22,209,20,15,159,41,40,43,250,22,209,199,63,99,116,120, -20,199,249,198,250,22,209,200,250,22,61,201,20,15,159,47,41,43,206,200,249, -22,51,27,250,22,61,200,202,201,253,80,158,50,42,20,15,159,50,42,43,21, -96,3,1,4,103,53,56,54,21,3,1,4,103,53,56,53,22,3,1,4,103, -53,56,56,23,3,1,4,103,53,56,55,24,248,22,80,199,20,15,159,50,43, -43,248,22,78,199,248,22,52,199,203,253,80,159,47,8,30,35,206,23,15,199, +249,22,215,20,15,159,40,39,43,248,22,58,248,80,158,42,40,21,93,63,117, +113,115,19,27,249,22,215,20,15,159,41,40,43,250,22,215,199,63,99,116,120, +20,199,249,198,250,22,215,200,250,22,67,201,20,15,159,47,41,43,206,200,249, +22,57,27,250,22,67,200,202,201,253,80,158,50,42,20,15,159,50,42,43,21, +96,3,1,4,103,53,57,55,21,3,1,4,103,53,57,54,22,3,1,4,103, +53,57,57,23,3,1,4,103,53,57,56,24,248,22,86,199,20,15,159,50,43, +43,248,22,84,199,248,22,58,199,203,253,80,159,47,8,30,35,206,23,15,199, 23,17,89,162,34,34,38,9,224,7,6,249,194,195,9,198,253,80,159,46,8, -30,35,205,206,199,248,22,171,23,17,89,162,34,34,50,9,230,12,14,13,18, +30,35,205,206,199,248,22,177,23,17,89,162,34,34,50,9,230,12,14,13,18, 17,16,15,6,253,80,159,47,8,30,35,203,204,198,200,201,27,248,80,158,49, -35,201,89,162,34,36,46,9,225,11,8,0,249,196,250,22,209,198,249,22,51, -199,202,198,249,22,65,9,200,89,162,34,36,52,9,229,12,14,13,18,16,15, -6,27,27,250,22,209,248,80,158,46,35,199,249,22,59,248,80,158,48,35,248, +35,201,89,162,34,36,46,9,225,11,8,0,249,196,250,22,215,198,249,22,57, +199,202,198,249,22,71,9,200,89,162,34,36,52,9,229,12,14,13,18,16,15, +6,27,27,250,22,215,248,80,158,46,35,199,249,22,65,248,80,158,48,35,248, 80,158,49,35,202,206,248,80,158,46,35,199,89,162,34,36,47,9,226,5,3, -10,0,249,197,250,22,209,199,249,22,51,199,203,199,249,22,65,197,201,253,80, +10,0,249,197,250,22,215,199,249,22,57,199,203,199,249,22,71,197,201,253,80, 159,47,8,30,35,203,204,199,201,89,162,34,34,38,9,224,7,6,249,194,195, -9,198,27,28,248,80,158,40,36,197,28,249,22,223,198,20,15,159,41,44,43, -9,11,11,28,192,251,22,252,39,2,11,6,25,25,109,105,115,117,115,101,32, +9,198,27,28,248,80,158,40,36,197,28,249,22,229,198,20,15,159,41,44,43, +9,11,11,28,192,251,22,252,45,2,11,6,25,25,109,105,115,117,115,101,32, 119,105,116,104,105,110,32,113,117,97,115,105,115,121,110,116,97,120,25,203,204, 27,28,248,80,158,41,34,198,28,27,248,80,158,42,35,199,28,248,80,158,42, -36,193,28,249,22,223,194,20,15,159,43,45,43,9,11,11,27,248,80,158,42, +36,193,28,249,22,229,194,20,15,159,43,45,43,9,11,11,27,248,80,158,42, 37,199,28,248,80,158,42,34,193,249,80,158,43,38,248,80,158,44,35,195,248, 80,158,44,39,248,80,158,45,37,196,11,11,11,28,192,253,80,159,46,8,30, -35,205,206,198,248,22,170,23,17,23,17,89,162,34,36,47,9,225,12,18,15, -249,195,250,22,209,197,249,22,59,248,80,158,44,35,200,202,197,198,28,248,22, -50,248,22,210,203,253,80,159,46,8,31,35,23,16,205,206,248,22,210,23,16, -23,17,89,162,34,36,43,9,224,18,15,249,195,250,22,209,197,199,197,197,28, -248,22,252,222,1,248,22,210,203,253,80,159,46,8,30,35,205,206,250,22,209, -23,18,248,22,252,229,1,248,22,210,23,20,23,18,23,16,23,17,89,162,34, -36,45,9,224,18,15,249,195,250,22,209,197,248,22,252,230,1,248,22,216,201, +35,205,206,198,248,22,176,23,17,23,17,89,162,34,36,47,9,225,12,18,15, +249,195,250,22,215,197,249,22,65,248,80,158,44,35,200,202,197,198,28,248,22, +56,248,22,216,203,253,80,159,46,8,31,35,23,16,205,206,248,22,216,23,16, +23,17,89,162,34,36,43,9,224,18,15,249,195,250,22,215,197,199,197,197,28, +248,22,252,228,1,248,22,216,203,253,80,159,46,8,30,35,205,206,250,22,215, +23,18,248,22,252,235,1,248,22,216,23,20,23,18,23,16,23,17,89,162,34, +36,45,9,224,18,15,249,195,250,22,215,197,248,22,252,236,1,248,22,222,201, 197,197,247,203,83,159,34,93,80,159,34,8,31,35,89,162,8,64,40,50,65, -112,108,111,111,112,26,223,0,28,248,22,50,197,28,27,248,22,52,198,27,28, -248,80,158,37,36,194,27,249,22,223,196,20,15,159,39,46,43,28,192,192,249, -22,223,196,20,15,159,39,47,43,11,28,192,192,28,248,80,158,37,34,194,27, -248,80,158,38,35,195,28,248,80,158,38,36,193,249,22,223,194,20,15,159,39, -48,43,11,11,253,80,159,40,8,30,35,200,201,250,22,209,11,205,11,199,203, -204,253,80,159,40,8,31,35,199,200,201,248,22,53,203,89,162,34,34,48,9, -229,6,9,8,7,12,11,10,253,80,159,46,8,30,35,202,203,248,22,52,199, -201,199,89,162,34,36,46,9,224,8,6,249,195,249,22,51,250,22,209,248,22, -52,200,201,248,22,52,200,248,22,53,197,197,89,162,34,36,49,9,228,6,9, -8,7,12,10,253,80,159,45,8,30,35,201,202,248,22,52,199,200,89,162,34, -34,43,9,226,7,6,13,12,249,197,249,22,51,248,22,52,199,196,195,89,162, -34,36,48,9,226,7,6,13,12,249,197,249,22,51,250,22,209,248,22,52,202, -203,248,22,52,202,196,249,22,65,201,197,28,248,22,57,197,247,197,253,80,159, +112,108,111,111,112,26,223,0,28,248,22,56,197,28,27,248,22,58,198,27,28, +248,80,158,37,36,194,27,249,22,229,196,20,15,159,39,46,43,28,192,192,249, +22,229,196,20,15,159,39,47,43,11,28,192,192,28,248,80,158,37,34,194,27, +248,80,158,38,35,195,28,248,80,158,38,36,193,249,22,229,194,20,15,159,39, +48,43,11,11,253,80,159,40,8,30,35,200,201,250,22,215,11,205,11,199,203, +204,253,80,159,40,8,31,35,199,200,201,248,22,59,203,89,162,34,34,48,9, +229,6,9,8,7,12,11,10,253,80,159,46,8,30,35,202,203,248,22,58,199, +201,199,89,162,34,36,46,9,224,8,6,249,195,249,22,57,250,22,215,248,22, +58,200,201,248,22,58,200,248,22,59,197,197,89,162,34,36,49,9,228,6,9, +8,7,12,10,253,80,159,45,8,30,35,201,202,248,22,58,199,200,89,162,34, +34,43,9,226,7,6,13,12,249,197,249,22,57,248,22,58,199,196,195,89,162, +34,36,48,9,226,7,6,13,12,249,197,249,22,57,250,22,215,248,22,58,202, +203,248,22,58,202,196,249,22,71,201,197,28,248,22,63,197,247,197,253,80,159, 40,8,30,35,200,201,202,199,203,204,27,89,162,34,37,46,62,113,113,27,223, 1,27,20,15,159,35,34,43,253,80,159,41,8,30,35,198,200,201,34,89,162, -8,36,34,42,9,226,10,9,8,6,250,22,209,195,248,199,198,196,89,162,8, -36,36,47,9,226,7,10,8,6,250,22,209,195,250,22,59,20,15,159,43,49, +8,36,34,42,9,226,10,9,8,6,250,22,215,195,248,199,198,196,89,162,8, +36,36,47,9,226,7,10,8,6,250,22,215,195,250,22,65,20,15,159,43,49, 43,203,248,201,203,196,249,22,7,89,162,34,35,46,9,224,3,2,27,249,22, -209,20,15,159,38,50,43,197,27,28,248,80,158,38,34,194,249,80,158,39,41, +215,20,15,159,38,50,43,197,27,28,248,80,158,38,34,194,249,80,158,39,41, 248,80,158,40,35,196,27,248,80,158,41,37,197,28,248,80,158,41,34,193,249, 80,158,42,38,248,80,158,43,35,195,248,80,158,43,39,248,80,158,44,37,196, -11,11,28,192,27,248,22,52,194,27,248,22,53,195,250,199,201,195,80,159,42, -8,32,35,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97, -120,28,196,89,162,34,35,49,9,224,3,2,27,249,22,209,20,15,159,38,52, +11,11,28,192,27,248,22,58,194,27,248,22,59,195,250,199,201,195,80,159,42, +8,32,35,250,22,252,45,2,11,6,10,10,98,97,100,32,115,121,110,116,97, +120,28,196,89,162,34,35,49,9,224,3,2,27,249,22,215,20,15,159,38,52, 43,197,27,28,248,80,158,38,34,194,249,80,158,39,41,248,80,158,40,35,196, 27,248,80,158,41,37,197,28,248,80,158,41,34,193,249,80,158,42,41,248,80, 158,43,35,195,27,248,80,158,44,37,196,28,248,80,158,44,34,193,249,80,158, 45,38,248,80,158,46,35,195,248,80,158,46,39,248,80,158,47,37,196,11,11, -11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,80,196,250,200,202, -195,89,162,8,36,35,40,9,224,9,4,250,22,59,20,15,159,38,53,43,195, -197,250,22,252,39,2,11,2,28,196,37,20,98,159,37,16,9,30,29,2,6, +11,28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,86,196,250,200,202, +195,89,162,8,36,35,40,9,224,9,4,250,22,65,20,15,159,38,53,43,195, +197,250,22,252,45,2,11,2,28,196,37,20,98,159,37,16,9,30,29,2,6, 69,115,116,120,45,112,97,105,114,63,30,11,30,31,2,6,67,115,116,120,45, 99,97,114,32,5,30,33,2,6,71,105,100,101,110,116,105,102,105,101,114,63, 34,2,30,35,2,6,67,115,116,120,45,99,100,114,36,6,30,37,2,6,69, @@ -2259,177 +2265,177 @@ 8,2,2,2,9,2,2,2,10,2,2,2,4,2,2,2,11,2,2,98,37, 10,35,11,94,159,2,6,9,11,159,2,50,9,11,16,0,96,36,8,254,1, 11,16,0,16,8,35,11,68,111,114,105,103,45,115,116,120,51,64,98,111,100, -121,52,68,109,107,45,102,105,110,97,108,53,3,1,7,101,110,118,51,50,56, -53,54,2,54,2,54,18,101,2,49,44,38,37,36,35,16,4,43,11,68,104, -101,114,101,45,115,116,120,55,3,1,7,101,110,118,51,50,56,54,56,16,4, -42,11,2,15,3,1,7,101,110,118,51,50,56,55,57,16,10,41,11,63,115, +121,52,68,109,107,45,102,105,110,97,108,53,3,1,7,101,110,118,51,51,50, +51,54,2,54,2,54,18,101,2,49,44,38,37,36,35,16,4,43,11,68,104, +101,114,101,45,115,116,120,55,3,1,7,101,110,118,51,51,50,52,56,16,4, +42,11,2,15,3,1,7,101,110,118,51,51,50,53,57,16,10,41,11,63,115, 116,120,58,65,100,101,112,116,104,59,66,115,97,109,101,45,107,60,69,99,111, -110,118,101,114,116,45,107,61,3,1,7,101,110,118,51,50,56,56,62,2,62, +110,118,101,114,116,45,107,61,3,1,7,101,110,118,51,51,50,54,62,2,62, 2,62,2,62,18,16,2,158,2,8,44,45,18,45,18,16,2,158,2,11,44, 46,18,104,2,49,50,38,37,36,35,43,42,41,16,6,49,11,3,1,4,103, -53,55,54,63,3,1,4,103,53,55,55,64,3,1,7,101,110,118,51,51,49, -48,65,2,65,16,6,48,11,61,120,66,64,114,101,115,116,67,3,1,7,101, -110,118,51,51,49,49,68,2,68,16,6,47,11,66,114,101,115,116,45,118,69, -68,98,105,110,100,105,110,103,115,70,3,1,7,101,110,118,51,51,49,55,71, +53,56,55,63,3,1,4,103,53,56,56,64,3,1,7,101,110,118,51,51,52, +56,65,2,65,16,6,48,11,61,120,66,64,114,101,115,116,67,3,1,7,101, +110,118,51,51,52,57,68,2,68,16,6,47,11,66,114,101,115,116,45,118,69, +68,98,105,110,100,105,110,103,115,70,3,1,7,101,110,118,51,51,53,53,71, 2,71,18,16,2,158,2,49,50,51,18,108,63,46,46,46,72,56,38,37,36, -35,43,42,41,49,48,47,16,4,55,11,3,1,4,103,53,56,50,73,3,1, -7,101,110,118,51,51,50,54,74,16,4,54,11,64,116,101,109,112,75,3,1, -7,101,110,118,51,51,50,55,76,16,4,53,11,3,1,4,103,53,56,52,77, -3,1,7,101,110,118,51,51,51,56,78,16,4,52,11,2,20,3,1,7,101, -110,118,51,51,51,57,79,18,158,95,10,94,2,21,2,22,95,2,4,2,23, +35,43,42,41,49,48,47,16,4,55,11,3,1,4,103,53,57,51,73,3,1, +7,101,110,118,51,51,54,52,74,16,4,54,11,64,116,101,109,112,75,3,1, +7,101,110,118,51,51,54,53,76,16,4,53,11,3,1,4,103,53,57,53,77, +3,1,7,101,110,118,51,51,55,54,78,16,4,52,11,2,20,3,1,7,101, +110,118,51,51,55,55,79,18,158,95,10,94,2,21,2,22,95,2,4,2,23, 94,72,113,117,111,116,101,45,115,121,110,116,97,120,80,2,24,56,18,16,2, 158,2,72,56,57,18,46,18,16,2,158,2,10,44,58,18,106,2,8,8,30, -38,37,36,35,43,42,41,16,4,8,29,11,3,1,4,103,53,55,52,81,3, -1,7,101,110,118,51,51,54,52,82,16,4,8,28,11,65,95,101,108,115,101, -83,3,1,7,101,110,118,51,51,54,53,84,16,4,8,27,11,2,26,3,1, -7,101,110,118,51,51,54,57,85,16,4,8,26,11,61,108,86,3,1,7,101, -110,118,51,51,55,48,87,16,4,59,11,61,97,88,3,1,7,101,110,118,51, -51,55,49,89,18,16,2,158,2,10,8,30,8,31,18,16,2,158,2,11,8, +38,37,36,35,43,42,41,16,4,8,29,11,3,1,4,103,53,56,53,81,3, +1,7,101,110,118,51,52,48,50,82,16,4,8,28,11,65,95,101,108,115,101, +83,3,1,7,101,110,118,51,52,48,51,84,16,4,8,27,11,2,26,3,1, +7,101,110,118,51,52,48,55,85,16,4,8,26,11,61,108,86,3,1,7,101, +110,118,51,52,48,56,87,16,4,59,11,61,97,88,3,1,7,101,110,118,51, +52,48,57,89,18,16,2,158,2,10,8,30,8,31,18,16,2,158,2,11,8, 30,8,32,18,100,71,119,105,116,104,45,115,121,110,116,97,120,90,8,34,38, -37,36,35,43,16,4,8,33,11,2,70,3,1,7,101,110,118,51,51,56,51, +37,36,35,43,16,4,8,33,11,2,70,3,1,7,101,110,118,51,52,50,49, 91,18,99,2,49,8,37,38,37,36,16,4,8,36,11,2,27,3,1,7,101, -110,118,51,50,56,52,92,16,4,8,35,11,2,51,3,1,7,101,110,118,51, -51,56,52,93,18,102,66,115,121,110,116,97,120,94,8,41,38,37,36,8,36, -8,35,16,6,8,40,11,3,1,4,103,53,56,57,95,3,1,4,103,53,57, -48,96,3,1,7,101,110,118,51,51,56,57,97,2,97,16,6,8,39,11,61, -95,98,2,58,3,1,7,101,110,118,51,51,57,48,99,2,99,16,4,8,38, -11,2,52,3,1,7,101,110,118,51,51,57,53,100,18,99,2,49,8,43,38, -37,36,8,36,16,4,8,42,11,2,51,3,1,7,101,110,118,51,51,57,54, +110,118,51,51,50,50,92,16,4,8,35,11,2,51,3,1,7,101,110,118,51, +52,50,50,93,18,102,66,115,121,110,116,97,120,94,8,41,38,37,36,8,36, +8,35,16,6,8,40,11,3,1,4,103,54,48,48,95,3,1,4,103,54,48, +49,96,3,1,7,101,110,118,51,52,50,55,97,2,97,16,6,8,39,11,61, +95,98,2,58,3,1,7,101,110,118,51,52,50,56,99,2,99,16,4,8,38, +11,2,52,3,1,7,101,110,118,51,52,51,51,100,18,99,2,49,8,43,38, +37,36,8,36,16,4,8,42,11,2,51,3,1,7,101,110,118,51,52,51,52, 101,18,102,70,115,121,110,116,97,120,47,108,111,99,102,8,47,38,37,36,8, -36,8,42,16,8,8,46,11,3,1,4,103,53,57,49,103,3,1,4,103,53, -57,50,104,3,1,4,103,53,57,51,105,3,1,7,101,110,118,51,52,48,50, +36,8,42,16,8,8,46,11,3,1,4,103,54,48,50,103,3,1,4,103,54, +48,51,104,3,1,4,103,54,48,52,105,3,1,7,101,110,118,51,52,52,48, 106,2,106,2,106,16,8,8,45,11,2,98,63,108,111,99,107,2,58,3,1, -7,101,110,118,51,52,48,51,108,2,108,2,108,16,4,8,44,11,2,52,3, -1,7,101,110,118,51,52,49,48,109,11,93,83,159,34,93,80,159,34,34,35, +7,101,110,118,51,52,52,49,108,2,108,2,108,16,4,8,44,11,2,52,3, +1,7,101,110,118,51,52,52,56,109,11,93,83,159,34,93,80,159,34,34,35, 89,162,8,36,36,40,2,4,223,0,87,94,28,248,80,158,35,35,194,12,250, -22,252,40,2,2,11,6,18,18,112,114,111,112,101,114,32,115,121,110,116,97, -120,32,108,105,115,116,110,196,250,22,209,197,196,197,95,68,35,37,107,101,114, +22,252,46,2,2,11,6,18,18,112,114,111,112,101,114,32,115,121,110,116,97, +120,32,108,105,115,116,110,196,250,22,215,197,196,197,95,68,35,37,107,101,114, 110,101,108,111,2,50,2,6,95,2,111,2,50,2,6,0}; EVAL_ONE_SIZED_STR((char *)expr, 3270); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,204,252,159,24,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,55,204,252,159,24,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,68,35,37,100,101, 102,105,110,101,1,29,2,11,11,10,10,10,34,80,158,34,34,20,98,159,34, -16,0,16,0,11,11,16,0,34,11,16,4,76,98,101,103,105,110,45,102,111, -114,45,115,121,110,116,97,120,3,77,100,101,102,105,110,101,45,102,111,114,45, -115,121,110,116,97,120,4,73,100,101,102,105,110,101,45,115,121,110,116,97,120, -5,66,100,101,102,105,110,101,6,16,4,11,11,11,11,16,4,2,3,2,4, -2,5,2,6,34,38,94,16,5,95,2,6,2,5,2,4,87,99,83,159,34, +16,0,16,0,11,11,16,0,34,11,16,4,73,100,101,102,105,110,101,45,115, +121,110,116,97,120,3,66,100,101,102,105,110,101,4,77,100,101,102,105,110,101, +45,102,111,114,45,115,121,110,116,97,120,5,76,98,101,103,105,110,45,102,111, +114,45,115,121,110,116,97,120,6,16,4,11,11,11,11,16,4,2,3,2,4, +2,5,2,6,34,38,94,16,5,95,2,4,2,3,2,5,87,99,83,159,34, 93,80,159,34,8,42,35,89,162,34,37,59,68,116,114,121,45,110,101,120,116, 7,223,0,27,28,248,80,158,36,34,195,249,80,158,37,35,248,80,158,38,36, -197,27,248,80,158,39,37,198,28,248,80,158,39,34,193,27,28,248,22,206,194, +197,27,248,80,158,39,37,198,28,248,80,158,39,34,193,27,28,248,22,212,194, 193,198,249,80,158,41,35,248,80,158,42,36,196,27,248,80,158,43,37,197,250, -22,209,198,195,198,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248, -22,80,196,28,248,80,158,39,45,194,250,22,252,39,2,11,27,249,22,209,20, +22,215,198,195,198,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248, +22,86,196,28,248,80,158,39,45,194,250,22,252,45,2,11,27,249,22,215,20, 15,159,44,49,49,204,27,28,248,80,158,44,34,194,249,80,158,45,35,248,80, 158,46,36,196,27,248,80,158,47,37,197,28,248,80,158,47,34,193,249,80,158, 48,44,248,80,158,49,36,195,248,80,158,49,48,248,80,158,50,37,196,11,11, -28,192,27,248,22,52,194,27,248,22,53,195,6,46,46,98,97,100,32,115,121, +28,192,27,248,22,58,194,27,248,22,59,195,6,46,46,98,97,100,32,115,121, 110,116,97,120,32,40,122,101,114,111,32,101,120,112,114,101,115,115,105,111,110, 115,32,97,102,116,101,114,32,105,100,101,110,116,105,102,105,101,114,41,8,27, 28,248,80,158,45,34,195,249,80,158,46,35,248,80,158,47,36,197,27,248,80, 158,48,37,198,28,248,80,158,48,34,193,249,80,158,49,35,248,80,158,50,36, 195,27,248,80,158,51,37,196,28,248,80,158,51,38,193,248,80,158,51,39,193, -11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,80,196,6, +11,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,86,196,6, 50,50,98,97,100,32,115,121,110,116,97,120,32,40,109,117,108,116,105,112,108, 101,32,101,120,112,114,101,115,115,105,111,110,115,32,97,102,116,101,114,32,105, 100,101,110,116,105,102,105,101,114,41,9,27,28,248,80,158,46,34,196,249,80, 158,47,35,248,80,158,48,36,198,27,248,80,158,49,37,199,28,248,80,158,49, -34,193,27,28,248,22,206,194,193,199,249,80,158,51,35,248,80,158,52,36,196, -27,248,80,158,53,37,197,250,22,209,198,195,198,11,11,28,192,27,248,22,52, -194,27,248,22,78,195,27,248,22,80,196,6,31,31,98,97,100,32,115,121,110, +34,193,27,28,248,22,212,194,193,199,249,80,158,51,35,248,80,158,52,36,196, +27,248,80,158,53,37,197,250,22,215,198,195,198,11,11,28,192,27,248,22,58, +194,27,248,22,84,195,27,248,22,86,196,6,31,31,98,97,100,32,115,121,110, 116,97,120,32,40,105,108,108,101,103,97,108,32,117,115,101,32,111,102,32,96, -46,39,41,10,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116, +46,39,41,10,250,22,252,45,2,11,6,10,10,98,97,100,32,115,121,110,116, 97,120,11,198,201,250,80,159,41,8,41,35,200,201,202,250,80,159,38,8,41, 35,197,198,199,83,159,34,93,80,159,34,8,41,35,89,162,34,37,49,2,7, 223,0,27,28,248,80,158,36,34,195,249,80,158,37,35,248,80,158,38,36,197, -27,248,80,158,39,37,198,28,248,80,158,39,34,193,27,28,248,22,206,194,193, +27,248,80,158,39,37,198,28,248,80,158,39,34,193,27,28,248,22,212,194,193, 198,249,80,158,41,35,248,80,158,42,36,196,27,248,80,158,43,37,197,250,22, -209,198,195,198,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22, -80,196,28,248,80,158,39,34,194,250,80,159,41,8,40,35,200,201,202,251,22, -252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,12,202,197,250, +215,198,195,198,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248,22, +86,196,28,248,80,158,39,34,194,250,80,159,41,8,40,35,200,201,202,251,22, +252,45,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,12,202,197,250, 80,159,38,8,40,35,197,198,199,83,159,34,93,80,159,34,8,40,35,89,162, 34,37,56,2,7,223,0,27,28,248,80,158,36,34,195,249,80,158,37,35,248, 80,158,38,36,197,27,248,80,158,39,37,198,28,248,80,158,39,34,193,27,28, -248,22,206,194,193,198,249,80,158,41,35,248,80,158,42,36,196,27,248,80,158, -43,37,197,250,22,209,198,195,198,11,11,28,192,27,248,22,52,194,27,248,22, -78,195,27,248,22,80,196,91,159,36,11,90,161,36,34,11,249,80,159,42,8, -38,35,202,197,87,95,28,248,80,158,41,38,195,12,250,22,252,39,2,11,6, +248,22,212,194,193,198,249,80,158,41,35,248,80,158,42,36,196,27,248,80,158, +43,37,197,250,22,215,198,195,198,11,11,28,192,27,248,22,58,194,27,248,22, +84,195,27,248,22,86,196,91,159,36,11,90,161,36,34,11,249,80,159,42,8, +38,35,202,197,87,95,28,248,80,158,41,38,195,12,250,22,252,45,2,11,6, 50,50,98,97,100,32,115,121,110,116,97,120,32,40,105,108,108,101,103,97,108, 32,117,115,101,32,111,102,32,96,46,39,32,102,111,114,32,112,114,111,99,101, 100,117,114,101,32,98,111,100,121,41,13,203,28,248,80,158,41,47,195,250,22, -252,39,2,11,6,46,46,98,97,100,32,115,121,110,116,97,120,32,40,110,111, +252,45,2,11,6,46,46,98,97,100,32,115,121,110,116,97,120,32,40,110,111, 32,101,120,112,114,101,115,115,105,111,110,115,32,102,111,114,32,112,114,111,99, -101,100,117,114,101,32,98,111,100,121,41,14,203,12,27,249,22,209,20,15,159, -43,45,49,204,27,249,22,209,20,15,159,44,46,49,196,27,249,22,209,20,15, -159,45,47,49,248,199,200,249,80,158,45,41,205,27,250,22,61,198,199,200,252, -80,158,51,42,20,15,159,51,48,49,21,95,3,1,4,103,54,52,50,15,3, -1,4,103,54,52,48,16,3,1,4,103,54,52,49,17,248,22,80,198,248,22, -78,198,248,22,52,198,250,22,252,39,2,11,2,11,197,83,159,34,93,80,159, +101,100,117,114,101,32,98,111,100,121,41,14,203,12,27,249,22,215,20,15,159, +43,45,49,204,27,249,22,215,20,15,159,44,46,49,196,27,249,22,215,20,15, +159,45,47,49,248,199,200,249,80,158,45,41,205,27,250,22,67,200,198,199,252, +80,158,51,42,20,15,159,51,48,49,21,95,3,1,4,103,54,53,51,15,3, +1,4,103,54,53,49,16,3,1,4,103,54,53,50,17,248,22,58,198,248,22, +86,198,248,22,84,198,250,22,252,45,2,11,2,11,197,83,159,34,93,80,159, 34,8,38,35,89,162,34,36,45,73,103,101,110,101,114,97,108,45,112,114,111, -116,111,18,223,0,27,249,22,209,20,15,159,37,43,49,197,27,28,248,80,158, +116,111,18,223,0,27,249,22,215,20,15,159,37,43,49,197,27,28,248,80,158, 37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40,37,197, -250,22,209,199,195,199,11,28,192,27,248,22,52,194,27,248,22,53,195,28,248, +250,22,215,199,195,199,11,28,192,27,248,22,58,194,27,248,22,59,195,28,248, 80,158,39,45,194,249,22,7,195,249,80,159,42,8,37,35,201,202,250,80,159, 41,8,39,35,198,201,200,250,80,159,39,8,39,35,196,199,198,83,159,34,93, 80,159,34,8,39,35,89,162,34,37,52,2,7,223,0,27,28,248,80,158,36, 34,195,249,80,158,37,44,27,248,80,158,39,36,198,28,248,80,158,39,34,193, -249,80,158,40,35,248,80,158,41,36,195,27,248,80,158,42,37,196,248,22,59, -250,22,209,199,196,199,11,27,248,80,158,39,37,198,250,22,209,200,195,200,11, -28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,80,196,91,159,36,11, -90,161,36,34,11,249,80,159,42,8,38,35,203,27,249,22,61,201,200,251,80, -158,47,42,20,15,159,47,44,49,21,94,3,1,4,103,54,51,48,19,3,1, -4,103,54,50,57,20,248,22,52,197,248,22,53,197,27,249,80,159,43,8,37, -35,204,203,249,22,7,195,89,162,34,35,40,9,224,4,2,248,194,248,22,59, +249,80,158,40,35,248,80,158,41,36,195,27,248,80,158,42,37,196,248,22,65, +250,22,215,199,196,199,11,27,248,80,158,39,37,198,250,22,215,200,195,200,11, +28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,86,196,91,159,36,11, +90,161,36,34,11,249,80,159,42,8,38,35,203,27,249,22,67,201,200,251,80, +158,47,42,20,15,159,47,44,49,21,94,3,1,4,103,54,52,49,19,3,1, +4,103,54,52,48,20,248,22,58,197,248,22,59,197,27,249,80,159,43,8,37, +35,204,203,249,22,7,195,89,162,34,35,40,9,224,4,2,248,194,248,22,65, 248,195,197,27,28,248,80,158,37,34,196,249,80,158,38,35,248,80,158,39,36, -198,27,248,80,158,40,37,199,250,22,209,201,195,201,11,28,192,27,248,22,52, -194,27,248,22,53,195,251,22,252,39,2,11,6,82,82,98,97,100,32,115,121, +198,27,248,80,158,40,37,199,250,22,215,201,195,201,11,28,192,27,248,22,58, +194,27,248,22,59,195,251,22,252,45,2,11,6,82,82,98,97,100,32,115,121, 110,116,97,120,32,40,110,111,116,32,97,110,32,105,100,101,110,116,105,102,105, 101,114,32,102,111,114,32,112,114,111,99,101,100,117,114,101,32,110,97,109,101, 44,32,97,110,100,32,110,111,116,32,97,32,110,101,115,116,101,100,32,112,114, -111,99,101,100,117,114,101,32,102,111,114,109,41,21,203,197,250,22,252,39,2, +111,99,101,100,117,114,101,32,102,111,114,109,41,21,203,197,250,22,252,45,2, 11,2,11,198,83,159,34,93,80,159,34,8,37,35,89,162,8,100,36,57,72, 115,105,109,112,108,101,45,112,114,111,116,111,22,223,0,91,159,36,11,90,161, -36,34,11,27,249,22,209,20,15,159,39,35,49,199,27,28,248,80,158,39,34, +36,34,11,27,249,22,215,20,15,159,39,35,49,199,27,28,248,80,158,39,34, 194,249,80,158,40,35,248,80,158,41,36,196,27,248,80,158,42,37,197,28,248, -80,158,42,38,193,248,80,158,42,39,193,11,11,28,192,27,248,22,52,194,27, -248,22,53,195,249,22,7,248,22,216,249,80,158,45,40,20,15,159,45,36,49, -197,89,162,34,35,47,9,225,8,9,2,27,249,22,209,20,15,159,39,37,49, -198,249,80,158,39,41,196,27,249,22,61,198,197,251,80,158,44,42,20,15,159, -44,38,49,21,94,3,1,4,103,54,49,53,23,3,1,4,103,54,49,52,24, -248,22,52,197,248,22,53,197,27,28,248,80,158,40,34,195,249,80,158,41,35, +80,158,42,38,193,248,80,158,42,39,193,11,11,28,192,27,248,22,58,194,27, +248,22,59,195,249,22,7,248,22,222,249,80,158,45,40,20,15,159,45,36,49, +197,89,162,34,35,47,9,225,8,9,2,27,249,22,215,20,15,159,39,37,49, +198,249,80,158,39,41,196,27,249,22,67,197,198,251,80,158,44,42,20,15,159, +44,38,49,21,94,3,1,4,103,54,50,54,23,3,1,4,103,54,50,53,24, +248,22,59,197,248,22,58,197,27,28,248,80,158,40,34,195,249,80,158,41,35, 248,80,158,42,36,197,27,248,80,158,43,37,198,91,159,37,11,90,161,37,34, -11,250,80,158,48,43,198,35,11,28,194,27,28,248,22,206,197,196,201,249,80, -158,48,44,28,248,80,158,49,38,196,248,22,59,248,80,158,50,39,197,11,250, -22,209,197,199,197,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248, -22,80,196,249,22,7,248,22,216,27,249,22,61,199,198,249,80,158,48,40,20, -15,159,48,39,49,249,22,65,248,22,52,197,250,80,158,53,42,20,15,159,53, -40,49,21,93,3,1,4,103,54,49,54,25,248,22,53,200,89,162,34,35,50, -9,226,10,11,2,3,27,249,22,209,20,15,159,40,41,49,199,249,80,158,40, -41,197,27,250,22,61,199,198,200,251,80,158,45,42,20,15,159,45,42,49,21, -94,3,1,4,103,54,50,49,26,3,1,4,103,54,50,48,27,249,22,65,248, -22,52,199,248,22,80,199,248,22,78,197,250,22,252,39,2,11,2,11,197,87, +11,250,80,158,48,43,198,35,11,28,194,27,28,248,22,212,197,196,201,249,80, +158,48,44,28,248,80,158,49,38,196,248,22,65,248,80,158,50,39,197,11,250, +22,215,197,199,197,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248, +22,86,196,249,22,7,248,22,222,27,249,22,67,198,199,249,80,158,48,40,20, +15,159,48,39,49,249,22,71,248,22,59,197,250,80,158,53,42,20,15,159,53, +40,49,21,93,3,1,4,103,54,50,55,25,248,22,58,200,89,162,34,35,50, +9,226,10,11,2,3,27,249,22,215,20,15,159,40,41,49,199,249,80,158,40, +41,197,27,250,22,67,200,198,199,251,80,158,45,42,20,15,159,45,42,49,21, +94,3,1,4,103,54,51,50,26,3,1,4,103,54,51,49,27,249,22,71,248, +22,86,199,248,22,58,199,248,22,84,197,250,22,252,45,2,11,2,11,197,87, 95,249,22,3,89,162,34,35,41,9,224,4,5,28,248,80,158,36,45,195,12, -251,22,252,39,2,11,6,40,40,110,111,116,32,97,110,32,105,100,101,110,116, +251,22,252,45,2,11,6,40,40,110,111,116,32,97,110,32,105,100,101,110,116, 105,102,105,101,114,32,102,111,114,32,112,114,111,99,101,100,117,114,101,32,97, 114,103,117,109,101,110,116,28,196,198,194,27,248,80,158,38,46,194,28,192,251, -22,252,39,2,11,6,29,29,100,117,112,108,105,99,97,116,101,32,97,114,103, +22,252,45,2,11,6,29,29,100,117,112,108,105,99,97,116,101,32,97,114,103, 117,109,101,110,116,32,105,100,101,110,116,105,102,105,101,114,29,200,196,12,193, 27,89,162,8,36,35,36,62,109,107,30,223,1,89,162,34,35,52,9,224,0, -1,87,94,28,249,22,71,247,22,252,89,3,21,93,70,101,120,112,114,101,115, -115,105,111,110,31,250,22,252,39,2,11,6,36,36,110,111,116,32,97,108,108, +1,87,94,28,249,22,77,247,22,252,93,3,21,93,70,101,120,112,114,101,115, +115,105,111,110,31,250,22,252,45,2,11,6,36,36,110,111,116,32,97,108,108, 111,119,101,100,32,105,110,32,97,110,32,101,120,112,114,101,115,115,105,111,110, -32,99,111,110,116,101,120,116,32,197,12,27,249,22,209,20,15,159,38,34,49, +32,99,111,110,116,101,120,116,32,197,12,27,249,22,215,20,15,159,38,34,49, 197,27,28,248,80,158,38,34,194,249,80,158,39,35,248,80,158,40,36,196,27, 248,80,158,41,37,197,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158, 43,36,195,27,248,80,158,44,37,196,28,248,80,158,44,34,193,249,80,158,45, 44,248,80,158,46,36,195,248,80,158,46,48,248,80,158,47,37,196,11,11,11, -28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,80,196,28,248,80,158, -41,45,194,27,249,22,209,20,15,159,43,50,49,200,249,80,158,43,41,202,27, -250,22,61,200,199,198,252,80,158,49,42,20,15,159,49,51,49,21,95,3,1, -4,103,54,53,54,33,3,1,4,103,54,53,52,34,3,1,4,103,54,53,53, -35,248,22,80,198,248,22,52,198,248,22,78,198,250,80,159,43,8,42,35,199, +28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,86,196,28,248,80,158, +41,45,194,27,249,22,215,20,15,159,43,50,49,200,249,80,158,43,41,202,27, +250,22,67,200,198,199,252,80,158,49,42,20,15,159,49,51,49,21,95,3,1, +4,103,54,54,55,33,3,1,4,103,54,54,53,34,3,1,4,103,54,54,54, +35,248,22,84,198,248,22,58,198,248,22,86,198,250,80,159,43,8,42,35,199, 202,200,250,80,159,40,8,42,35,196,199,197,250,22,7,248,196,20,15,159,39, 52,49,248,196,20,15,159,39,53,49,248,196,20,15,159,39,54,49,39,20,98, 159,40,16,15,30,36,65,35,37,115,116,120,37,69,115,116,120,45,112,97,105, @@ -2452,126 +2458,126 @@ 2,2,4,2,2,2,5,2,2,2,6,2,2,98,38,10,35,11,95,159,67, 35,37,113,113,115,116,120,71,9,11,159,2,37,9,11,159,2,64,9,11,16, 0,96,37,8,254,1,11,16,0,16,4,36,11,77,100,101,102,105,110,101,45, -118,97,108,117,101,115,45,115,116,120,72,3,1,7,101,110,118,51,52,49,54, -73,16,4,35,11,63,115,116,120,74,3,1,7,101,110,118,51,52,49,55,75, -18,102,2,70,45,39,38,37,36,35,16,8,44,11,3,1,4,103,53,57,52, -76,3,1,4,103,53,57,53,77,3,1,4,103,53,57,54,78,3,1,7,101, -110,118,51,52,51,50,79,2,79,2,79,16,8,43,11,61,95,80,65,112,114, -111,116,111,81,64,98,111,100,121,82,3,1,7,101,110,118,51,52,51,51,83, -2,83,2,83,16,6,42,11,2,22,2,18,3,1,7,101,110,118,51,52,52, -49,84,2,84,18,104,64,100,101,115,116,85,48,39,38,37,36,35,44,43,42, -16,6,47,11,3,1,4,103,54,48,57,86,3,1,4,103,54,49,48,87,3, -1,7,101,110,118,51,52,52,56,88,2,88,16,6,46,11,62,105,100,89,63, -97,114,103,90,3,1,7,101,110,118,51,52,52,57,91,2,91,18,16,2,158, +118,97,108,117,101,115,45,115,116,120,72,3,1,7,101,110,118,51,52,53,52, +73,16,4,35,11,63,115,116,120,74,3,1,7,101,110,118,51,52,53,53,75, +18,102,2,70,45,39,38,37,36,35,16,8,44,11,3,1,4,103,54,48,53, +76,3,1,4,103,54,48,54,77,3,1,4,103,54,48,55,78,3,1,7,101, +110,118,51,52,55,48,79,2,79,2,79,16,8,43,11,61,95,80,65,112,114, +111,116,111,81,64,98,111,100,121,82,3,1,7,101,110,118,51,52,55,49,83, +2,83,2,83,16,6,42,11,2,22,2,18,3,1,7,101,110,118,51,52,55, +57,84,2,84,18,104,64,100,101,115,116,85,48,39,38,37,36,35,44,43,42, +16,6,47,11,3,1,4,103,54,50,48,86,3,1,4,103,54,50,49,87,3, +1,7,101,110,118,51,52,56,54,88,2,88,16,6,46,11,62,105,100,89,63, +97,114,103,90,3,1,7,101,110,118,51,52,56,55,91,2,91,18,16,2,158, 2,70,48,49,18,158,160,10,66,108,97,109,98,100,97,92,2,23,2,24,48, 18,104,2,85,52,39,38,37,36,35,44,43,42,16,8,51,11,3,1,4,103, -54,48,54,93,3,1,4,103,54,48,55,94,3,1,4,103,54,48,56,95,3, -1,7,101,110,118,51,52,55,56,96,2,96,2,96,16,8,50,11,2,89,2, -90,64,114,101,115,116,97,3,1,7,101,110,118,51,52,55,57,98,2,98,2, +54,49,55,93,3,1,4,103,54,49,56,94,3,1,4,103,54,49,57,95,3, +1,7,101,110,118,51,53,49,54,96,2,96,2,96,16,8,50,11,2,89,2, +90,64,114,101,115,116,97,3,1,7,101,110,118,51,53,49,55,98,2,98,2, 98,18,16,2,158,93,103,2,25,8,26,98,59,10,34,11,95,159,68,35,37, 112,97,114,97,109,122,99,9,11,159,74,35,37,115,109,97,108,108,45,115,99, -104,101,109,101,100,9,11,159,2,37,9,11,16,14,73,115,121,110,116,97,120, -45,99,97,115,101,42,42,101,29,102,11,11,2,51,2,102,1,20,99,97,116, -99,104,45,101,108,108,105,112,115,105,115,45,101,114,114,111,114,103,2,102,78, -112,97,116,116,101,114,110,45,115,117,98,115,116,105,116,117,116,101,104,2,102, -2,56,2,102,66,115,121,110,116,97,120,105,2,102,75,115,117,98,115,116,105, +104,101,109,101,100,9,11,159,2,37,9,11,16,14,78,112,97,116,116,101,114, +110,45,115,117,98,115,116,105,116,117,116,101,101,29,102,11,11,73,115,121,110, +116,97,120,45,99,97,115,101,42,42,103,2,102,2,51,2,102,2,56,2,102, +1,20,99,97,116,99,104,45,101,108,108,105,112,115,105,115,45,101,114,114,111, +114,104,2,102,66,115,121,110,116,97,120,105,2,102,75,115,117,98,115,116,105, 116,117,116,101,45,115,116,111,112,106,2,102,98,58,10,35,11,95,159,64,35, 37,115,99,107,9,11,159,2,100,9,11,159,2,37,9,11,16,0,96,57,8, 254,1,11,16,0,16,4,56,11,61,120,108,3,1,6,101,110,118,52,53,52, 109,16,4,55,11,68,104,101,114,101,45,115,116,120,110,3,1,6,101,110,118, 52,53,54,111,16,4,54,11,2,110,2,111,13,16,4,35,2,102,2,50,11, -93,8,252,168,11,16,4,53,11,61,114,112,3,1,7,101,110,118,51,52,56, -54,113,8,26,95,9,8,252,168,11,2,50,18,16,2,158,2,70,52,8,27, +93,8,252,198,11,16,4,53,11,61,114,112,3,1,7,101,110,118,51,53,50, +52,113,8,26,95,9,8,252,198,11,2,50,18,16,2,158,2,70,52,8,27, 18,158,160,10,2,92,2,26,2,27,52,18,16,2,158,2,70,45,8,28,18, 158,160,35,104,2,19,8,32,39,38,37,36,35,44,43,16,6,8,31,11,2, -22,2,18,2,84,2,84,16,8,8,30,11,3,1,4,103,54,50,52,114,3, -1,4,103,54,50,53,115,3,1,4,103,54,50,54,116,3,1,7,101,110,118, -51,53,49,53,117,2,117,2,117,16,8,8,29,11,69,115,111,109,101,116,104, -105,110,103,118,64,109,111,114,101,119,2,97,3,1,7,101,110,118,51,53,49, -54,120,2,120,2,120,2,20,8,32,8,32,18,102,2,70,8,34,39,38,37, +22,2,18,2,84,2,84,16,8,8,30,11,3,1,4,103,54,51,53,114,3, +1,4,103,54,51,54,115,3,1,4,103,54,51,55,116,3,1,7,101,110,118, +51,53,53,51,117,2,117,2,117,16,8,8,29,11,69,115,111,109,101,116,104, +105,110,103,118,64,109,111,114,101,119,2,97,3,1,7,101,110,118,51,53,53, +52,120,2,120,2,120,2,20,8,32,8,32,18,102,2,70,8,34,39,38,37, 36,35,44,43,16,6,8,33,11,2,89,66,109,107,45,114,104,115,121,3,1, -7,101,110,118,51,52,52,48,122,2,122,18,16,2,158,2,70,8,34,8,35, +7,101,110,118,51,52,55,56,122,2,122,18,16,2,158,2,70,8,34,8,35, 18,8,35,18,158,96,10,2,15,93,2,16,2,17,8,34,18,101,2,70,8, -38,39,38,37,36,35,16,8,8,37,11,3,1,4,103,54,48,48,123,3,1, -4,103,54,48,49,124,3,1,4,103,54,48,50,125,3,1,7,101,110,118,51, -54,48,54,126,2,126,2,126,16,8,8,36,11,2,80,2,89,2,97,3,1, -7,101,110,118,51,54,48,55,127,2,127,2,127,18,101,2,70,8,41,39,38, -37,36,35,16,8,8,40,11,3,1,4,103,54,48,51,128,3,1,4,103,54, -48,52,129,3,1,4,103,54,48,53,130,3,1,7,101,110,118,51,54,53,52, +38,39,38,37,36,35,16,8,8,37,11,3,1,4,103,54,49,49,123,3,1, +4,103,54,49,50,124,3,1,4,103,54,49,51,125,3,1,7,101,110,118,51, +54,52,52,126,2,126,2,126,16,8,8,36,11,2,80,2,89,2,97,3,1, +7,101,110,118,51,54,52,53,127,2,127,2,127,18,101,2,70,8,41,39,38, +37,36,35,16,8,8,40,11,3,1,4,103,54,49,52,128,3,1,4,103,54, +49,53,129,3,1,4,103,54,49,54,130,3,1,7,101,110,118,51,54,57,50, 131,2,131,2,131,16,8,8,39,11,2,80,2,89,64,101,120,112,114,132,3, -1,7,101,110,118,51,54,53,53,133,2,133,2,133,18,158,96,10,2,33,93, +1,7,101,110,118,51,54,57,51,133,2,133,2,133,18,158,96,10,2,33,93, 2,34,2,35,8,41,18,98,73,100,101,102,105,110,101,45,118,97,108,117,101, 115,134,8,43,39,38,37,16,4,8,42,11,2,30,3,1,7,101,110,118,51, -52,49,53,135,18,16,2,158,75,100,101,102,105,110,101,45,115,121,110,116,97, +52,53,51,135,18,16,2,158,75,100,101,102,105,110,101,45,115,121,110,116,97, 120,101,115,136,8,43,8,44,18,16,2,158,1,24,100,101,102,105,110,101,45, 118,97,108,117,101,115,45,102,111,114,45,115,121,110,116,97,120,137,8,43,8, -45,11,16,5,93,2,3,87,95,83,159,34,93,80,159,34,8,29,35,89,162, +45,11,16,5,93,2,6,87,95,83,159,34,93,80,159,34,8,29,35,89,162, 34,36,47,2,7,223,0,27,28,248,80,158,36,34,195,249,80,158,37,39,248, 80,158,38,36,197,27,248,80,158,39,38,198,28,248,80,158,39,40,193,248,80, -158,39,41,193,11,11,28,192,27,248,22,52,194,27,248,22,53,195,249,80,158, +158,39,41,193,11,11,28,192,27,248,22,58,194,27,248,22,59,195,249,80,158, 39,42,199,250,80,158,42,43,20,15,159,42,36,45,21,93,3,1,4,103,54, -54,51,138,249,22,2,80,159,44,8,28,35,199,250,22,252,39,2,11,2,11, +55,52,138,249,22,2,80,159,44,8,28,35,199,250,22,252,45,2,11,2,11, 197,83,159,34,93,80,159,34,8,28,35,89,162,35,35,40,9,223,0,250,80, -158,37,43,20,15,159,37,37,45,21,93,3,1,4,103,54,54,50,139,248,22, -52,197,89,162,34,35,57,9,223,0,27,247,22,252,89,3,87,94,28,249,22, -71,194,21,95,66,109,111,100,117,108,101,140,72,109,111,100,117,108,101,45,98, -101,103,105,110,141,69,116,111,112,45,108,101,118,101,108,142,12,250,22,252,39, +158,37,43,20,15,159,37,37,45,21,93,3,1,4,103,54,55,51,139,248,22, +58,197,89,162,34,35,57,9,223,0,27,247,22,252,93,3,87,94,28,249,22, +77,194,21,95,66,109,111,100,117,108,101,140,72,109,111,100,117,108,101,45,98, +101,103,105,110,141,69,116,111,112,45,108,101,118,101,108,142,12,250,22,252,45, 2,11,6,51,51,97,108,108,111,119,101,100,32,111,110,108,121,32,97,116,32, 116,104,101,32,116,111,112,45,108,101,118,101,108,32,111,114,32,97,32,109,111, -100,117,108,101,32,116,111,112,45,108,101,118,101,108,143,197,27,249,22,209,20, +100,117,108,101,32,116,111,112,45,108,101,118,101,108,143,197,27,249,22,215,20, 15,159,38,34,45,197,27,28,248,80,158,38,34,194,249,80,158,39,35,248,80, 158,40,36,196,248,80,158,40,37,248,80,158,41,38,197,11,28,192,20,15,159, 37,35,45,27,28,248,80,158,39,34,195,249,80,158,40,39,248,80,158,41,36, 197,27,248,80,158,42,38,198,28,248,80,158,42,34,193,249,80,158,43,35,248, 80,158,44,36,195,248,80,158,44,37,248,80,158,45,38,196,11,11,28,192,27, -248,22,52,194,27,248,22,53,195,28,249,22,252,11,2,199,2,141,249,80,159, -42,8,29,35,198,201,27,250,22,252,25,2,196,201,248,22,216,20,15,159,45, -38,45,27,249,22,209,20,15,159,44,39,45,195,27,28,248,80,158,44,34,194, -28,27,248,80,158,45,36,195,28,248,80,158,45,44,193,28,249,22,224,194,20, +248,22,58,194,27,248,22,59,195,28,249,22,252,17,2,199,2,141,249,80,159, +42,8,29,35,198,201,27,250,22,252,31,2,196,201,248,22,222,20,15,159,45, +38,45,27,249,22,215,20,15,159,44,39,45,195,27,28,248,80,158,44,34,194, +28,27,248,80,158,45,36,195,28,248,80,158,45,44,193,28,249,22,230,194,20, 15,159,46,40,45,9,11,11,27,248,80,158,45,38,195,28,248,80,158,45,40, 193,248,80,158,45,41,193,11,11,11,28,192,250,80,158,46,43,20,15,159,46, -41,45,21,93,3,1,4,103,54,55,50,144,195,27,28,248,80,158,45,34,195, -28,27,248,80,158,46,36,196,28,248,80,158,46,44,193,28,249,22,224,194,20, +41,45,21,93,3,1,4,103,54,56,51,144,195,27,28,248,80,158,45,34,195, +28,27,248,80,158,46,36,196,28,248,80,158,46,44,193,28,249,22,230,194,20, 15,159,47,42,45,9,11,11,27,248,80,158,46,38,196,28,248,80,158,46,34, 193,249,80,158,47,35,27,248,80,158,49,36,196,28,248,80,158,49,40,193,248, -22,59,248,80,158,50,41,194,11,27,248,80,158,49,38,196,28,248,80,158,49, +22,65,248,80,158,50,41,194,11,27,248,80,158,49,38,196,28,248,80,158,49, 34,193,249,80,158,50,35,248,80,158,51,36,195,248,80,158,51,37,248,80,158, -52,38,196,11,11,11,11,28,192,27,248,22,52,194,27,248,22,53,195,27,249, -22,61,196,195,251,80,158,51,43,20,15,159,51,43,45,21,94,3,1,4,103, -54,55,52,145,3,1,4,103,54,55,51,146,248,22,52,197,248,22,53,197,27, +52,38,196,11,11,11,11,28,192,27,248,22,58,194,27,248,22,59,195,27,249, +22,67,196,195,251,80,158,51,43,20,15,159,51,43,45,21,94,3,1,4,103, +54,56,53,145,3,1,4,103,54,56,52,146,248,22,58,197,248,22,59,197,27, 28,248,80,158,46,34,196,28,27,248,80,158,47,36,197,28,248,80,158,47,44, -193,28,249,22,224,194,20,15,159,48,44,45,9,11,11,27,248,80,158,47,38, +193,28,249,22,230,194,20,15,159,48,44,45,9,11,11,27,248,80,158,47,38, 197,28,248,80,158,47,40,193,248,80,158,47,41,193,11,11,11,28,192,250,80, -158,48,43,20,15,159,48,45,45,21,93,3,1,4,103,54,55,53,147,195,27, +158,48,43,20,15,159,48,45,45,21,93,3,1,4,103,54,56,54,147,195,27, 28,248,80,158,47,34,197,28,27,248,80,158,48,36,198,28,248,80,158,48,44, -193,28,249,22,224,194,20,15,159,49,46,45,9,11,11,27,248,80,158,48,38, +193,28,249,22,230,194,20,15,159,49,46,45,9,11,11,27,248,80,158,48,38, 198,28,248,80,158,48,40,193,248,80,158,48,41,193,11,11,11,28,192,250,80, -158,49,43,20,15,159,49,47,45,21,93,3,1,4,103,54,55,54,148,195,27, +158,49,43,20,15,159,49,47,45,21,93,3,1,4,103,54,56,55,148,195,27, 28,248,80,158,48,34,198,28,27,248,80,158,49,36,199,28,248,80,158,49,44, -193,28,249,22,224,194,20,15,159,50,48,45,9,11,11,27,248,80,158,49,38, +193,28,249,22,230,194,20,15,159,50,48,45,9,11,11,27,248,80,158,49,38, 199,28,248,80,158,49,34,193,249,80,158,50,35,27,248,80,158,52,36,196,28, -248,80,158,52,40,193,248,22,59,248,80,158,53,41,194,11,27,248,80,158,52, +248,80,158,52,40,193,248,22,65,248,80,158,53,41,194,11,27,248,80,158,52, 38,196,28,248,80,158,52,34,193,249,80,158,53,35,248,80,158,54,36,195,248, -80,158,54,37,248,80,158,55,38,196,11,11,11,11,28,192,27,248,22,52,194, -27,248,22,53,195,250,22,252,39,2,11,6,54,54,115,121,110,116,97,120,32, +80,158,54,37,248,80,158,55,38,196,11,11,11,11,28,192,27,248,22,58,194, +27,248,22,59,195,250,22,252,45,2,11,6,54,54,115,121,110,116,97,120,32, 100,101,102,105,110,105,116,105,111,110,115,32,110,111,116,32,97,108,108,111,119, 101,100,32,119,105,116,104,105,110,32,98,101,103,105,110,45,102,111,114,45,115, 121,110,116,97,120,149,204,250,80,158,50,43,20,15,159,50,49,45,21,93,3, -1,4,103,54,55,55,150,200,249,80,159,40,8,29,35,196,199,34,20,98,159, +1,4,103,54,56,56,150,200,249,80,159,40,8,29,35,196,199,34,20,98,159, 36,16,11,2,36,2,59,2,41,2,68,2,43,2,39,2,45,2,47,2,52, 2,55,2,61,16,16,18,99,2,70,8,48,39,38,37,16,4,8,47,11,2, -74,3,1,7,101,110,118,51,54,55,55,151,16,4,8,46,11,63,99,116,120, -152,3,1,7,101,110,118,51,54,55,56,153,18,158,93,101,2,0,8,51,39, -38,37,8,47,8,46,16,4,8,50,11,3,1,4,103,54,54,49,154,3,1, -7,101,110,118,51,54,56,51,155,16,4,8,49,11,2,80,3,1,7,101,110, -118,51,54,56,52,156,8,51,18,158,160,35,101,2,0,8,54,39,38,37,8, -47,8,46,16,6,8,53,11,3,1,4,103,54,53,55,157,3,1,4,103,54, -53,56,158,3,1,7,101,110,118,51,54,57,51,159,2,159,16,6,8,52,11, -2,80,64,101,108,101,109,160,3,1,7,101,110,118,51,54,57,52,161,2,161, -2,138,8,54,8,54,18,158,95,10,2,3,2,139,8,54,18,158,110,101,2, -0,8,57,39,38,37,8,47,8,46,16,6,8,56,11,3,1,4,103,54,53, -57,162,3,1,4,103,54,54,48,163,3,1,7,101,110,118,51,55,48,54,164, -2,164,16,6,8,55,11,2,80,2,160,3,1,7,101,110,118,51,55,48,55, +74,3,1,7,101,110,118,51,55,49,53,151,16,4,8,46,11,63,99,116,120, +152,3,1,7,101,110,118,51,55,49,54,153,18,158,93,101,2,0,8,51,39, +38,37,8,47,8,46,16,4,8,50,11,3,1,4,103,54,55,50,154,3,1, +7,101,110,118,51,55,50,49,155,16,4,8,49,11,2,80,3,1,7,101,110, +118,51,55,50,50,156,8,51,18,158,160,35,101,2,0,8,54,39,38,37,8, +47,8,46,16,6,8,53,11,3,1,4,103,54,54,56,157,3,1,4,103,54, +54,57,158,3,1,7,101,110,118,51,55,51,49,159,2,159,16,6,8,52,11, +2,80,64,101,108,101,109,160,3,1,7,101,110,118,51,55,51,50,161,2,161, +2,138,8,54,8,54,18,158,95,10,2,6,2,139,8,54,18,158,110,101,2, +0,8,57,39,38,37,8,47,8,46,16,6,8,56,11,3,1,4,103,54,55, +48,162,3,1,4,103,54,55,49,163,3,1,7,101,110,118,51,55,52,52,164, +2,164,16,6,8,55,11,2,80,2,160,3,1,7,101,110,118,51,55,52,53, 165,2,165,158,2,134,8,57,158,2,136,8,57,158,2,137,8,57,158,64,115, 101,116,33,166,8,57,158,70,108,101,116,45,118,97,108,117,101,115,167,8,57, 158,71,108,101,116,42,45,118,97,108,117,101,115,168,8,57,158,73,108,101,116, @@ -2584,38 +2590,38 @@ 8,57,158,65,35,37,97,112,112,176,8,57,158,65,35,37,116,111,112,177,8, 57,158,67,35,37,100,97,116,117,109,178,8,57,8,57,18,102,2,70,8,59, 39,38,37,8,47,8,46,8,56,8,55,16,4,8,58,11,61,101,179,3,1, -7,101,110,118,51,55,49,50,180,18,16,2,158,2,0,8,59,8,60,18,158, -160,35,104,2,3,8,63,39,38,37,8,47,8,46,8,56,8,55,8,58,16, -4,8,62,11,3,1,4,103,54,55,49,181,3,1,7,101,110,118,51,55,49, -56,182,16,4,8,61,11,61,118,183,3,1,7,101,110,118,51,55,49,57,184, +7,101,110,118,51,55,53,48,180,18,16,2,158,2,0,8,59,8,60,18,158, +160,35,104,2,6,8,63,39,38,37,8,47,8,46,8,56,8,55,8,58,16, +4,8,62,11,3,1,4,103,54,56,50,181,3,1,7,101,110,118,51,55,53, +54,182,16,4,8,61,11,61,118,183,3,1,7,101,110,118,51,55,53,55,184, 2,144,8,63,8,63,18,16,2,158,2,134,8,59,8,64,18,158,95,104,2, 137,8,67,39,38,37,8,47,8,46,8,56,8,55,8,58,16,6,8,66,11, -3,1,4,103,54,54,57,185,3,1,4,103,54,55,48,186,3,1,7,101,110, -118,51,55,51,48,187,2,187,16,6,8,65,11,2,89,2,132,3,1,7,101, -110,118,51,55,51,49,188,2,188,158,2,145,8,67,158,2,146,8,67,8,67, +3,1,4,103,54,56,48,185,3,1,4,103,54,56,49,186,3,1,7,101,110, +118,51,55,54,56,187,2,187,16,6,8,65,11,2,89,2,132,3,1,7,101, +110,118,51,55,54,57,188,2,188,158,2,145,8,67,158,2,146,8,67,8,67, 18,16,2,158,67,114,101,113,117,105,114,101,189,8,59,8,68,18,158,160,35, 104,78,114,101,113,117,105,114,101,45,102,111,114,45,115,121,110,116,97,120,190, 8,71,39,38,37,8,47,8,46,8,56,8,55,8,58,16,4,8,70,11,3, -1,4,103,54,54,56,191,3,1,7,101,110,118,51,55,52,50,192,16,4,8, -69,11,2,183,3,1,7,101,110,118,51,55,52,51,193,2,147,8,71,8,71, +1,4,103,54,55,57,191,3,1,7,101,110,118,51,55,56,48,192,16,4,8, +69,11,2,183,3,1,7,101,110,118,51,55,56,49,193,2,147,8,71,8,71, 18,16,2,158,1,20,114,101,113,117,105,114,101,45,102,111,114,45,116,101,109, 112,108,97,116,101,194,8,59,8,72,18,158,160,35,104,2,189,8,75,39,38, 37,8,47,8,46,8,56,8,55,8,58,16,4,8,74,11,3,1,4,103,54, -54,55,195,3,1,7,101,110,118,51,55,53,50,196,16,4,8,73,11,2,183, -3,1,7,101,110,118,51,55,53,51,197,2,148,8,75,8,75,18,16,2,158, +55,56,195,3,1,7,101,110,118,51,55,57,48,196,16,4,8,73,11,2,183, +3,1,7,101,110,118,51,55,57,49,197,2,148,8,75,8,75,18,16,2,158, 2,136,8,59,8,76,18,158,95,104,2,137,8,79,39,38,37,8,47,8,46, -8,56,8,55,8,58,16,4,8,78,11,3,1,4,103,54,54,52,198,3,1, -7,101,110,118,51,55,55,49,199,16,4,8,77,11,65,111,116,104,101,114,200, -3,1,7,101,110,118,51,55,55,50,201,158,9,8,79,158,96,10,2,0,2, +8,56,8,55,8,58,16,4,8,78,11,3,1,4,103,54,55,53,198,3,1, +7,101,110,118,51,56,48,57,199,16,4,8,77,11,65,111,116,104,101,114,200, +3,1,7,101,110,118,51,56,49,48,201,158,9,8,79,158,96,10,2,0,2, 150,93,66,118,97,108,117,101,115,202,8,79,8,79,11,9,93,68,35,37,107, 101,114,110,101,108,203,96,2,203,2,64,2,37,2,71,0}; EVAL_ONE_SIZED_STR((char *)expr, 6315); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,252,228,1,252,129,63,159,34,20,98,159,34,16, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,55,252,254,1,252,44,67,159,34,20,98,159,34,16, 1,20,24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,73,35,37, 109,111,114,101,45,115,99,104,101,109,101,1,29,2,11,11,10,10,10,48,80, -158,34,34,20,98,159,34,16,24,30,3,2,2,74,115,116,114,117,99,116,58, +158,34,34,20,98,159,34,16,28,30,3,2,2,74,115,116,114,117,99,116,58, 112,114,111,109,105,115,101,4,254,1,30,5,2,2,72,109,97,107,101,45,112, 114,111,109,105,115,101,6,254,1,30,7,2,2,68,112,114,111,109,105,115,101, 63,8,254,1,30,9,2,2,69,112,114,111,109,105,115,101,45,112,10,254,1, @@ -2647,750 +2653,795 @@ 107,45,101,110,97,98,108,101,100,45,107,101,121,47,254,1,30,48,2,2,1, 32,99,97,108,108,45,119,105,116,104,45,98,114,101,97,107,45,112,97,114,97, 109,101,116,101,114,105,122,97,116,105,111,110,49,254,1,30,50,2,18,75,99, -104,101,99,107,45,102,111,114,45,98,114,101,97,107,51,254,1,16,0,11,11, -16,14,2,41,2,39,2,31,2,33,2,29,2,37,2,27,2,6,2,10,2, -43,2,12,2,35,2,25,2,4,48,11,16,18,2,49,2,23,2,45,2,16, -2,14,2,8,73,119,105,116,104,45,104,97,110,100,108,101,114,115,52,71,115, -101,116,33,45,118,97,108,117,101,115,53,74,119,105,116,104,45,104,97,110,100, -108,101,114,115,42,54,62,100,111,55,66,108,101,116,47,99,99,56,64,99,97, -115,101,57,78,112,97,114,97,109,101,116,101,114,105,122,101,45,98,114,101,97, -107,58,70,108,101,116,45,115,116,114,117,99,116,59,64,116,105,109,101,60,72, -112,97,114,97,109,101,116,101,114,105,122,101,61,69,102,108,117,105,100,45,108, -101,116,62,65,100,101,108,97,121,63,16,18,11,11,11,11,11,11,11,11,11, -11,11,11,11,11,11,11,11,11,16,18,2,49,2,23,2,45,2,16,2,14, -2,8,2,52,2,53,2,54,2,55,2,56,2,57,2,58,2,59,2,60,2, -61,2,62,2,63,40,52,106,16,5,93,69,99,97,115,101,45,116,101,115,116, -64,89,162,34,35,51,9,223,0,27,249,22,209,20,15,159,37,34,43,196,27, +104,101,99,107,45,102,111,114,45,98,114,101,97,107,51,254,1,30,52,2,2, +1,24,115,101,108,101,99,116,45,104,97,110,100,108,101,114,47,110,111,45,98, +114,101,97,107,115,53,254,1,30,54,2,2,1,27,115,101,108,101,99,116,45, +104,97,110,100,108,101,114,47,98,114,101,97,107,115,45,97,115,45,105,115,55, +254,1,30,56,2,2,78,104,97,110,100,108,101,114,45,112,114,111,109,112,116, +45,107,101,121,57,254,1,30,58,2,2,77,102,97,108,115,101,45,116,104,114, +101,97,100,45,99,101,108,108,59,254,1,16,0,11,11,16,18,2,41,2,39, +2,31,2,33,2,29,2,59,2,57,2,37,2,27,2,6,2,10,2,55,2, +53,2,43,2,12,2,35,2,25,2,4,52,11,16,18,2,49,2,23,2,45, +2,16,2,14,2,8,72,112,97,114,97,109,101,116,101,114,105,122,101,60,62, +100,111,61,74,119,105,116,104,45,104,97,110,100,108,101,114,115,42,62,64,116, +105,109,101,63,65,100,101,108,97,121,64,78,112,97,114,97,109,101,116,101,114, +105,122,101,45,98,114,101,97,107,65,73,119,105,116,104,45,104,97,110,100,108, +101,114,115,66,66,108,101,116,47,99,99,67,70,108,101,116,45,115,116,114,117, +99,116,68,64,99,97,115,101,69,71,115,101,116,33,45,118,97,108,117,101,115, +70,69,102,108,117,105,100,45,108,101,116,71,16,18,11,11,11,11,11,11,11, +11,11,11,11,11,11,11,11,11,11,11,16,18,2,49,2,23,2,45,2,16, +2,14,2,8,2,60,2,61,2,62,2,63,2,64,2,65,2,66,2,67,2, +68,2,69,2,70,2,71,40,52,106,16,5,93,69,99,97,115,101,45,116,101, +115,116,72,89,162,34,35,51,9,223,0,27,249,22,215,20,15,159,37,34,43, +196,27,28,248,80,158,37,34,194,249,80,158,38,35,248,80,158,39,36,196,27, +248,80,158,40,37,197,28,248,80,158,40,34,193,249,80,158,41,35,248,80,158, +42,36,195,27,248,80,158,43,37,196,28,248,80,158,43,34,193,249,80,158,44, +38,27,248,80,158,46,36,196,28,248,80,158,46,34,193,249,80,158,47,38,248, +80,158,48,36,195,248,80,158,48,39,248,80,158,49,37,196,11,248,80,158,45, +39,248,80,158,46,37,196,11,11,11,28,192,27,248,22,58,194,27,248,22,84, +195,27,248,22,86,196,28,248,22,47,248,22,216,194,27,249,22,67,195,196,251, +80,158,44,40,20,15,159,44,35,43,21,94,3,1,4,103,54,57,54,73,3, +1,4,103,54,57,53,74,248,22,59,197,248,22,58,197,27,249,22,67,195,196, +251,80,158,44,40,20,15,159,44,36,43,21,94,3,1,4,103,54,57,56,75, +3,1,4,103,54,57,55,76,248,22,59,197,248,22,58,197,27,28,248,80,158, +38,34,195,249,80,158,39,35,248,80,158,40,36,197,27,248,80,158,41,37,198, +28,248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195,27,248,80, +158,44,37,196,28,248,80,158,44,34,193,249,80,158,45,38,27,248,80,158,47, +36,196,28,248,80,158,47,41,193,248,80,158,47,42,193,11,248,80,158,46,39, +248,80,158,47,37,196,11,11,11,28,192,27,248,22,58,194,27,248,22,84,195, +27,248,22,86,196,27,249,22,67,195,196,251,80,158,45,40,20,15,159,45,37, +43,21,94,3,1,4,103,55,48,48,77,3,1,4,103,54,57,57,78,248,22, +59,197,248,22,58,197,250,22,252,45,2,11,6,10,10,98,97,100,32,115,121, +110,116,97,120,79,197,34,20,98,159,34,16,9,30,80,65,35,37,115,116,120, +81,69,115,116,120,45,112,97,105,114,63,82,11,30,83,2,81,67,99,111,110, +115,47,35,102,84,1,30,85,2,81,67,115,116,120,45,99,97,114,86,5,30, +87,2,81,67,115,116,120,45,99,100,114,88,6,30,89,2,81,69,97,112,112, +101,110,100,47,35,102,90,0,30,91,2,81,71,115,116,120,45,110,117,108,108, +47,35,102,92,9,30,93,69,35,37,115,116,120,99,97,115,101,94,1,24,97, +112,112,108,121,45,112,97,116,116,101,114,110,45,115,117,98,115,116,105,116,117, +116,101,95,0,30,96,2,81,69,115,116,120,45,108,105,115,116,63,97,8,30, +98,2,81,69,115,116,120,45,62,108,105,115,116,99,4,16,4,18,98,64,104, +101,114,101,100,40,98,38,10,34,11,95,159,2,18,9,11,159,68,35,37,100, +101,102,105,110,101,101,9,11,159,74,35,37,115,109,97,108,108,45,115,99,104, +101,109,101,102,9,11,16,78,2,61,2,2,2,59,2,2,2,41,2,2,1, +22,98,114,101,97,107,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105, +111,110,103,2,2,2,4,2,2,2,70,2,2,2,53,2,2,2,49,2,2, +2,71,2,2,2,65,2,2,2,39,2,2,2,68,2,2,2,67,2,2,2, +43,2,2,2,69,2,2,2,25,2,2,2,12,2,2,2,55,2,2,2,57, +2,2,2,27,2,2,2,16,2,2,2,60,2,2,2,63,2,2,2,66,2, +2,2,72,2,2,2,31,2,2,2,29,2,2,2,64,2,2,2,62,2,2, +2,33,2,2,67,112,114,111,109,105,115,101,104,2,2,2,35,2,2,2,14, +2,2,2,23,2,2,2,6,2,2,2,8,2,2,2,37,2,2,2,10,2, +2,2,45,2,2,98,37,10,35,11,95,159,67,35,37,113,113,115,116,120,105, +9,11,159,76,35,37,115,116,120,99,97,115,101,45,115,99,104,101,109,101,106, +9,11,159,2,81,9,11,16,0,96,36,8,254,1,11,16,0,16,4,35,11, +61,120,107,3,1,7,101,110,118,51,56,49,54,108,18,158,95,100,63,101,113, +63,109,43,38,37,36,35,16,8,42,11,3,1,4,103,54,57,50,110,3,1, +4,103,54,57,51,111,3,1,4,103,54,57,52,112,3,1,7,101,110,118,51, +56,50,51,113,2,113,2,113,16,6,41,11,61,95,114,61,107,115,3,1,7, +101,110,118,51,56,50,52,116,2,116,158,2,73,43,158,95,10,65,113,117,111, +116,101,117,2,74,43,43,18,158,96,10,64,101,113,118,63,118,2,75,94,2, +117,2,76,43,18,158,95,100,64,109,101,109,118,119,46,38,37,36,35,16,8, +45,11,3,1,4,103,54,56,57,120,3,1,4,103,54,57,48,121,3,1,4, +103,54,57,49,122,3,1,7,101,110,118,51,56,51,56,123,2,123,2,123,16, +6,44,11,2,114,2,115,3,1,7,101,110,118,51,56,51,57,124,2,124,158, +2,77,46,158,95,10,2,117,2,78,46,46,11,16,5,93,2,69,89,162,34, +35,8,27,9,223,0,27,249,22,215,20,15,159,37,34,46,196,27,28,248,80, +158,37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40,37, +197,28,248,80,158,40,34,193,249,80,158,41,38,248,80,158,42,36,195,248,80, +158,42,39,248,80,158,43,37,196,11,11,28,192,27,248,22,58,194,27,248,22, +59,195,250,80,158,41,40,20,15,159,41,35,46,21,93,3,1,4,103,55,51, +49,125,195,27,28,248,80,158,38,34,195,249,80,158,39,35,248,80,158,40,36, +197,27,248,80,158,41,37,198,28,248,80,158,41,34,193,249,80,158,42,35,248, +80,158,43,36,195,27,248,80,158,44,37,196,28,248,80,158,44,34,193,249,80, +158,45,38,27,248,80,158,47,36,196,28,248,80,158,47,34,193,28,27,248,80, +158,48,36,194,28,248,80,158,48,41,193,28,249,22,229,194,20,15,159,49,36, +46,9,11,11,27,248,80,158,48,37,194,28,248,80,158,48,34,193,249,80,158, +49,35,248,80,158,50,36,195,27,248,80,158,51,37,196,28,248,80,158,51,42, +193,248,80,158,51,43,193,11,11,11,11,248,80,158,46,39,248,80,158,47,37, +196,11,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,93,196, +27,248,22,94,197,249,80,158,43,44,202,27,250,22,67,200,198,199,252,80,158, +49,40,20,15,159,49,37,46,21,95,3,1,4,103,55,51,52,126,3,1,4, +103,55,51,51,127,3,1,4,103,55,51,50,128,248,22,58,198,248,22,86,198, +248,22,84,198,27,28,248,80,158,39,34,196,249,80,158,40,35,248,80,158,41, +36,198,27,248,80,158,42,37,199,28,248,80,158,42,34,193,249,80,158,43,35, +248,80,158,44,36,195,27,248,80,158,45,37,196,28,248,80,158,45,34,193,249, +80,158,46,38,27,248,80,158,48,36,196,28,248,80,158,48,34,193,249,80,158, +49,38,27,248,80,158,51,36,196,28,248,80,158,51,42,193,248,22,65,248,80, +158,52,43,194,11,27,248,80,158,51,37,196,28,248,80,158,51,34,193,249,80, +158,52,35,248,80,158,53,36,195,27,248,80,158,54,37,196,28,248,80,158,54, +42,193,248,80,158,54,43,193,11,11,11,248,80,158,47,39,248,80,158,48,37, +196,11,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,93,196, +27,248,22,96,197,27,248,22,95,198,249,80,158,45,44,204,27,251,22,67,202, +200,201,199,250,80,158,49,45,89,162,34,34,43,9,224,15,3,253,80,158,41, +40,20,15,159,41,38,46,21,96,3,1,4,103,55,51,54,129,3,1,4,103, +55,51,53,130,3,1,4,103,55,51,56,131,3,1,4,103,55,51,55,132,248, +22,58,199,248,22,93,199,248,22,84,199,248,22,94,199,21,95,62,105,102,133, +95,2,72,61,118,134,94,2,115,63,46,46,46,135,96,2,0,62,101,49,136, +62,101,50,137,2,135,20,15,159,49,39,46,27,28,248,80,158,40,34,197,249, +80,158,41,35,248,80,158,42,36,199,27,248,80,158,43,37,200,28,248,80,158, +43,34,193,249,80,158,44,35,248,80,158,45,36,195,27,248,80,158,46,37,196, +28,248,80,158,46,34,193,249,80,158,47,38,27,248,80,158,49,36,196,28,248, +80,158,49,34,193,249,80,158,50,38,27,248,80,158,52,36,196,28,248,80,158, +52,42,193,248,22,65,248,80,158,53,43,194,11,27,248,80,158,52,37,196,28, +248,80,158,52,34,193,249,80,158,53,35,248,80,158,54,36,195,27,248,80,158, +55,37,196,28,248,80,158,55,42,193,248,22,65,248,80,158,56,43,194,11,11, +11,27,248,80,158,49,37,196,28,248,80,158,49,34,193,249,80,158,50,35,248, +80,158,51,36,195,27,248,80,158,52,37,196,28,248,80,158,52,42,193,248,80, +158,52,43,193,11,11,11,11,11,28,192,27,248,22,58,194,27,248,22,84,195, +27,248,22,93,196,27,248,22,96,197,27,249,22,76,199,38,27,249,22,76,200, +39,27,249,22,75,201,40,249,80,158,48,44,23,15,27,253,22,67,206,203,204, +205,202,201,250,80,158,52,45,89,162,34,34,46,9,224,18,3,26,8,80,158, +43,40,20,15,159,43,40,46,21,98,3,1,4,103,55,51,57,138,3,1,4, +103,55,52,48,139,3,1,4,103,55,52,50,140,3,1,4,103,55,52,49,141, +3,1,4,103,55,52,52,142,3,1,4,103,55,52,51,143,248,22,58,201,248, +22,96,201,248,22,93,201,248,22,84,201,249,22,76,202,38,249,22,75,202,39, +21,95,63,108,101,116,144,93,94,2,107,2,134,96,2,133,95,2,72,2,107, +94,2,115,2,135,96,2,0,2,136,2,137,2,135,97,2,69,2,107,62,99, +49,145,62,99,50,146,2,135,20,15,159,52,41,46,27,28,248,80,158,41,34, +198,249,80,158,42,35,248,80,158,43,36,200,27,248,80,158,44,37,201,28,248, +80,158,44,34,193,27,28,248,22,212,194,193,201,249,80,158,46,35,248,80,158, +47,36,196,27,248,80,158,48,37,197,28,248,80,158,48,34,193,27,28,248,22, +212,194,193,196,249,80,158,50,38,27,248,80,158,52,36,197,28,248,80,158,52, +34,193,249,80,158,53,35,248,80,158,54,36,195,27,248,80,158,55,37,196,28, +248,80,158,55,34,193,249,80,158,56,35,248,80,158,57,36,195,27,248,80,158, +58,37,196,28,248,80,158,58,42,193,248,22,65,248,80,158,59,43,194,11,11, +11,27,248,80,158,52,37,197,250,22,215,198,195,198,11,11,11,28,192,27,248, +22,58,194,27,248,22,84,195,27,248,22,93,196,27,248,22,96,197,27,249,22, +76,199,38,27,249,22,75,200,39,251,22,252,45,2,11,6,33,33,98,97,100, +32,115,121,110,116,97,120,32,40,110,111,116,32,97,32,100,97,116,117,109,32, +115,101,113,117,101,110,99,101,41,147,23,17,199,27,28,248,80,158,42,34,199, +249,80,158,43,35,248,80,158,44,36,201,27,248,80,158,45,37,202,28,248,80, +158,45,34,193,27,28,248,22,212,194,193,202,249,80,158,47,35,248,80,158,48, +36,196,27,248,80,158,49,37,197,28,248,80,158,49,34,193,27,28,248,22,212, +194,193,196,249,80,158,51,35,248,80,158,52,36,196,27,248,80,158,53,37,197, +250,22,215,198,195,198,11,11,11,28,192,27,248,22,58,194,27,248,22,84,195, +27,248,22,93,196,27,248,22,94,197,251,22,252,45,2,11,6,52,52,98,97, +100,32,115,121,110,116,97,120,32,40,109,105,115,115,105,110,103,32,101,120,112, +114,101,115,115,105,111,110,32,97,102,116,101,114,32,100,97,116,117,109,32,115, +101,113,117,101,110,99,101,41,148,23,16,197,27,28,248,80,158,43,34,200,249, +80,158,44,35,248,80,158,45,36,202,27,248,80,158,46,37,203,250,22,215,205, +195,205,11,28,192,27,248,22,58,194,27,248,22,59,195,28,248,22,63,248,22, +216,194,250,22,252,45,2,11,2,79,204,250,22,252,45,2,11,6,31,31,98, +97,100,32,115,121,110,116,97,120,32,40,105,108,108,101,103,97,108,32,117,115, +101,32,111,102,32,96,46,39,41,149,206,250,22,252,45,2,11,2,79,202,34, +20,98,159,34,16,12,2,80,2,83,2,85,2,87,2,89,2,91,2,93,30, +150,2,81,71,105,100,101,110,116,105,102,105,101,114,63,151,2,2,96,2,98, +30,152,68,35,37,115,116,120,108,111,99,153,68,114,101,108,111,99,97,116,101, +154,1,30,155,2,94,1,20,99,97,116,99,104,45,101,108,108,105,112,115,105, +115,45,101,114,114,111,114,156,1,16,8,18,98,2,100,48,38,37,36,16,4, +47,11,2,107,3,1,7,101,110,118,51,56,52,57,157,18,158,95,100,2,0, +51,38,37,36,47,16,6,50,11,3,1,4,103,55,50,57,158,3,1,4,103, +55,51,48,159,3,1,7,101,110,118,51,56,53,52,160,2,160,16,6,49,11, +2,114,2,134,3,1,7,101,110,118,51,56,53,53,161,2,161,158,2,125,51, +158,94,10,64,99,111,110,100,162,51,51,18,16,2,158,64,101,108,115,101,163, +48,52,18,158,162,37,100,2,0,55,38,37,36,47,16,10,54,11,3,1,4, +103,55,50,53,164,3,1,4,103,55,50,54,165,3,1,4,103,55,50,55,166, +3,1,4,103,55,50,56,167,3,1,7,101,110,118,51,56,55,48,168,2,168, +2,168,2,168,16,10,53,11,2,114,2,134,2,136,2,137,3,1,7,101,110, +118,51,56,55,49,169,2,169,2,169,2,169,158,2,126,55,158,2,127,55,2, +128,55,55,18,158,95,100,2,133,58,38,37,36,47,16,12,57,11,3,1,4, +103,55,50,48,170,3,1,4,103,55,50,49,171,3,1,4,103,55,50,50,172, +3,1,4,103,55,50,51,173,3,1,4,103,55,50,52,174,3,1,7,101,110, +118,51,56,57,48,175,2,175,2,175,2,175,2,175,16,12,56,11,2,114,2, +134,2,115,2,136,2,137,3,1,7,101,110,118,51,56,57,49,176,2,176,2, +176,2,176,2,176,158,96,10,2,72,2,129,2,130,58,158,160,10,2,0,2, +131,2,132,58,58,18,16,2,96,2,135,8,26,93,8,252,214,12,16,4,59, +11,61,114,177,3,1,7,101,110,118,51,57,48,51,178,95,9,8,252,214,12, +2,94,18,158,95,100,2,144,8,29,38,37,36,47,16,16,8,28,11,3,1, +4,103,55,49,51,179,3,1,4,103,55,49,52,180,3,1,4,103,55,49,53, +181,3,1,4,103,55,49,54,182,3,1,4,103,55,49,55,183,3,1,4,103, +55,49,56,184,3,1,4,103,55,49,57,185,3,1,7,101,110,118,51,57,49, +53,186,2,186,2,186,2,186,2,186,2,186,2,186,16,16,8,27,11,2,114, +2,134,2,115,2,136,2,137,2,145,2,146,3,1,7,101,110,118,51,57,49, +54,187,2,187,2,187,2,187,2,187,2,187,2,187,158,94,10,94,2,107,2, +138,8,29,158,97,10,2,133,95,2,72,2,107,2,139,159,2,0,2,140,2, +141,160,2,69,2,107,2,142,2,143,8,29,8,29,18,16,2,96,2,135,8, +31,93,8,252,219,12,16,4,8,30,11,2,177,3,1,7,101,110,118,51,57, +51,50,188,95,9,8,252,219,12,2,94,11,16,5,93,2,61,87,95,83,159, +34,93,80,159,34,8,33,35,89,162,35,35,41,9,223,0,251,80,158,38,47, +20,15,159,38,46,49,21,94,3,1,4,103,55,54,54,189,3,1,4,103,55, +54,53,190,248,22,58,198,248,22,84,198,83,159,34,93,80,159,34,8,32,35, +89,162,35,35,41,9,223,0,251,80,158,38,47,20,15,159,38,42,49,21,94, +3,1,4,103,55,54,48,191,3,1,4,103,55,53,57,192,248,22,58,198,248, +22,84,198,89,162,34,35,8,28,9,223,0,27,249,22,215,20,15,159,37,34, +49,196,27,28,248,80,158,37,34,194,249,80,158,38,35,248,80,158,39,36,196, +27,248,80,158,40,37,197,28,248,80,158,40,34,193,249,80,158,41,38,27,248, +80,158,43,36,196,28,248,80,158,43,39,193,248,22,8,89,162,34,35,41,9, +224,9,1,27,249,22,2,89,162,34,35,50,9,224,4,5,249,80,158,37,40, +28,248,80,158,38,34,197,249,80,158,39,35,248,80,158,40,36,199,27,248,80, +158,41,37,200,28,248,80,158,41,34,193,27,28,248,22,212,194,193,200,249,80, +158,43,35,248,80,158,44,36,196,27,248,80,158,45,37,197,248,22,65,250,22, +215,199,196,199,11,11,194,248,80,158,39,41,196,28,248,22,63,193,21,95,9, +9,9,248,80,158,37,42,193,11,27,248,80,158,43,37,196,28,248,80,158,43, +34,193,249,80,158,44,38,27,248,80,158,46,36,196,28,248,80,158,46,34,193, +249,80,158,47,35,248,80,158,48,36,195,27,248,80,158,49,37,196,28,248,80, +158,49,39,193,248,22,65,248,80,158,50,41,194,11,11,27,248,80,158,46,37, +196,28,248,80,158,46,39,193,248,80,158,46,41,193,11,11,11,11,28,192,27, +248,22,58,194,27,248,22,84,195,27,248,22,93,196,27,248,22,96,197,27,249, +22,76,199,38,27,249,22,76,200,39,27,249,22,75,201,40,27,249,22,215,20, +15,159,46,35,49,250,22,2,89,162,34,36,45,9,224,15,16,27,249,22,215, +20,15,159,38,36,49,198,27,248,80,158,38,43,194,28,192,196,27,28,248,80, +158,39,34,195,249,80,158,40,38,248,80,158,41,36,197,248,80,158,41,43,248, +80,158,42,37,198,11,28,192,192,250,22,252,45,2,11,6,19,19,98,97,100, +32,118,97,114,105,97,98,108,101,32,115,121,110,116,97,120,193,198,248,22,222, +249,80,158,52,44,20,15,159,52,37,49,206,248,22,222,249,80,158,52,44,20, +15,159,52,38,49,204,27,28,248,80,158,46,39,194,248,80,158,46,41,194,11, +28,192,27,249,22,215,20,15,159,48,39,49,249,80,158,50,44,20,15,159,50, +40,49,200,27,248,80,158,48,43,194,28,192,249,80,158,49,45,23,16,27,252, +22,67,204,202,23,17,206,23,16,250,80,158,53,46,89,162,34,34,47,9,224, +19,3,252,80,158,40,47,20,15,159,40,41,49,21,95,3,1,4,103,55,54, +52,194,3,1,4,103,55,54,49,195,3,1,4,103,55,54,51,196,250,22,2, +80,159,43,8,32,35,248,22,93,201,248,22,95,201,248,22,96,198,249,22,71, +248,22,58,200,250,80,158,45,47,20,15,159,45,43,49,21,93,3,1,4,103, +55,54,50,197,248,22,84,203,21,96,2,144,66,100,111,108,111,111,112,198,94, +94,63,118,97,114,199,64,105,110,105,116,200,2,135,95,2,133,94,63,110,111, +116,201,62,101,48,202,96,2,0,61,99,203,2,135,95,2,198,64,115,116,101, +112,204,2,135,20,15,159,53,44,49,27,28,248,80,158,49,34,195,249,80,158, +50,35,248,80,158,51,36,197,27,248,80,158,52,37,198,28,248,80,158,52,39, +193,248,80,158,52,41,193,11,11,28,192,27,248,22,58,194,27,248,22,59,195, +249,80,158,52,45,23,19,27,254,22,67,23,15,203,23,19,23,22,23,17,202, +23,21,250,80,158,56,46,89,162,34,34,49,9,224,22,3,254,80,158,42,47, +20,15,159,42,45,49,21,97,3,1,4,103,55,55,50,205,3,1,4,103,55, +55,49,206,3,1,4,103,55,54,56,207,3,1,4,103,55,54,55,208,3,1, +4,103,55,55,48,209,250,22,2,80,159,45,8,33,35,248,22,96,203,249,22, +75,204,40,248,22,93,200,248,22,84,200,249,22,76,201,39,249,22,71,249,22, +76,203,38,250,80,158,47,47,20,15,159,47,47,49,21,93,3,1,4,103,55, +54,57,210,248,22,58,205,21,96,2,144,2,198,94,94,2,199,2,200,2,135, +96,2,133,2,202,96,2,0,2,136,2,137,2,135,96,2,0,2,203,2,135, +95,2,198,2,204,2,135,20,15,159,56,48,49,250,22,252,45,2,11,2,79, +197,248,80,158,46,48,20,15,159,46,49,49,250,22,252,45,2,11,2,79,196, +34,20,98,159,36,16,15,2,80,2,83,2,85,2,87,2,89,2,96,30,211, +2,81,73,115,116,120,45,99,104,101,99,107,47,101,115,99,212,7,2,98,30, +213,2,81,70,115,116,120,45,114,111,116,97,116,101,214,12,2,91,30,215,2, +94,1,26,100,97,116,117,109,45,62,115,121,110,116,97,120,45,111,98,106,101, +99,116,47,115,104,97,112,101,216,2,2,152,2,155,2,93,30,217,70,35,37, +119,105,116,104,45,115,116,120,218,76,119,105,116,104,45,115,121,110,116,97,120, +45,102,97,105,108,219,3,16,16,18,98,2,100,8,33,38,37,36,16,4,8, +32,11,66,111,114,105,103,45,120,220,3,1,7,101,110,118,51,57,57,48,221, +18,100,2,100,8,36,38,37,36,8,32,16,16,8,35,11,3,1,4,103,55, +52,53,222,3,1,4,103,55,52,54,223,3,1,4,103,55,52,55,224,3,1, +4,103,55,52,56,225,3,1,4,103,55,52,57,226,3,1,4,103,55,53,48, +227,3,1,4,103,55,53,49,228,3,1,7,101,110,118,52,48,48,55,229,2, +229,2,229,2,229,2,229,2,229,2,229,16,16,8,34,11,2,114,2,199,2, +200,2,204,2,202,2,136,2,203,3,1,7,101,110,118,52,48,48,56,230,2, +230,2,230,2,230,2,230,2,230,2,230,18,101,2,100,8,38,38,37,36,8, +32,8,35,8,34,16,6,8,37,11,2,134,61,115,231,3,1,7,101,110,118, +52,48,50,53,232,2,232,18,16,2,158,64,100,101,115,116,233,8,36,8,39, +18,8,39,18,101,2,100,8,41,38,37,36,8,32,8,35,8,34,16,4,8, +40,11,3,1,4,103,55,53,54,234,3,1,7,101,110,118,52,48,52,55,235, +18,16,2,158,2,233,8,41,8,42,18,158,97,10,2,144,2,198,2,194,95, +2,133,94,2,201,2,195,158,2,0,2,196,8,41,18,158,95,10,2,191,2, +192,8,41,18,16,2,103,93,158,159,10,2,198,2,197,8,41,8,50,98,8, +49,10,34,11,95,159,2,18,9,11,159,2,102,9,11,159,2,81,9,11,16, +14,78,112,97,116,116,101,114,110,45,115,117,98,115,116,105,116,117,116,101,236, +29,237,11,11,73,115,121,110,116,97,120,45,99,97,115,101,42,42,238,2,237, +2,216,2,237,2,95,2,237,2,156,2,237,66,115,121,110,116,97,120,239,2, +237,75,115,117,98,115,116,105,116,117,116,101,45,115,116,111,112,240,2,237,98, +8,48,10,35,11,95,159,64,35,37,115,99,241,9,11,159,2,102,9,11,159, +2,81,9,11,16,0,96,8,47,8,254,1,11,16,0,16,4,8,46,11,2, +107,3,1,6,101,110,118,52,53,52,242,16,4,8,45,11,68,104,101,114,101, +45,115,116,120,243,3,1,6,101,110,118,52,53,54,244,16,4,8,44,11,2, +243,2,244,13,16,4,35,2,237,2,94,11,93,8,252,25,13,16,4,8,43, +11,2,177,3,1,7,101,110,118,52,48,53,56,245,95,9,8,252,25,13,2, +94,18,16,2,96,2,135,8,52,93,8,252,25,13,16,4,8,51,11,2,177, +2,245,95,9,8,252,25,13,2,94,18,158,96,103,2,144,8,55,38,37,36, +8,32,8,35,8,34,8,40,16,6,8,54,11,3,1,4,103,55,53,55,246, +3,1,4,103,55,53,56,247,3,1,7,101,110,118,52,48,54,53,248,2,248, +16,4,8,53,11,2,137,3,1,7,101,110,118,52,48,54,54,249,158,2,198, +8,55,158,2,205,8,55,158,97,10,2,133,2,206,159,2,0,2,207,2,208, +158,2,0,2,209,8,55,8,55,18,158,95,10,2,189,2,190,8,55,18,16, +2,103,93,158,159,10,2,198,2,210,8,55,8,57,8,49,8,48,8,47,8, +46,8,45,8,44,13,16,4,35,2,237,2,94,11,93,8,252,32,13,16,4, +8,56,11,2,177,3,1,7,101,110,118,52,48,55,50,250,95,9,8,252,32, +13,2,94,18,16,2,96,2,135,8,59,93,8,252,32,13,16,4,8,58,11, +2,177,2,250,95,9,8,252,32,13,2,94,18,16,2,158,94,98,2,204,8, +63,93,8,252,0,13,16,4,8,62,11,3,1,8,119,115,116,109,112,55,53, +50,251,3,1,7,101,110,118,52,48,50,52,252,252,0,16,4,8,61,11,3, +1,4,103,55,53,53,252,253,0,3,1,7,101,110,118,52,48,55,55,252,254, +0,16,4,8,60,11,65,95,101,108,115,101,252,255,0,3,1,7,101,110,118, +52,48,55,56,252,0,1,158,2,135,8,63,8,63,95,9,8,252,0,13,2, +218,11,16,5,93,2,64,89,162,34,35,45,9,223,0,27,249,22,215,20,15, +159,37,34,42,196,27,28,248,80,158,37,34,194,249,80,158,38,35,248,80,158, +39,36,196,27,248,80,158,40,37,197,28,248,80,158,40,34,193,249,80,158,41, +38,248,80,158,42,36,195,248,80,158,42,39,248,80,158,43,37,196,11,11,28, +192,27,248,22,58,194,27,248,22,59,195,249,80,158,40,40,199,250,80,158,43, +41,20,15,159,43,35,42,21,93,3,1,4,103,55,55,53,252,1,1,197,250, +22,252,45,2,11,2,79,196,34,20,98,159,34,16,8,2,80,2,83,2,85, +2,87,2,89,2,91,2,152,2,93,16,2,18,98,2,100,8,65,38,37,36, +16,4,8,64,11,2,107,3,1,7,101,110,118,52,48,56,50,252,2,1,18, +158,94,100,2,6,8,68,38,37,36,8,64,16,6,8,67,11,3,1,4,103, +55,55,51,252,3,1,3,1,4,103,55,55,52,252,4,1,3,1,7,101,110, +118,52,48,56,55,252,5,1,2,252,5,1,16,6,8,66,11,2,64,63,101, +120,112,252,6,1,3,1,7,101,110,118,52,48,56,56,252,7,1,2,252,7, +1,158,96,10,66,108,97,109,98,100,97,252,8,1,9,2,252,1,1,8,68, +8,68,11,16,5,93,2,104,27,247,22,252,98,3,253,22,66,248,199,20,15, +159,42,34,34,248,199,20,15,159,42,35,34,248,199,20,15,159,42,36,34,248, +22,66,248,200,20,15,159,43,37,34,248,22,66,248,200,20,15,159,43,38,34, +10,43,20,98,159,34,16,0,16,5,18,97,2,4,8,69,38,37,36,18,16, +2,158,2,6,8,69,8,70,18,16,2,158,2,8,8,69,8,71,18,16,2, +158,2,10,8,69,8,72,18,16,2,158,2,12,8,69,8,73,11,16,5,93, +2,60,89,162,34,35,55,9,223,0,27,249,22,215,20,15,159,37,34,49,196, +27,28,248,80,158,37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248, +80,158,40,37,197,28,248,80,158,40,34,193,28,248,80,158,40,38,248,80,158, +41,36,194,27,248,80,158,41,37,194,28,248,80,158,41,34,193,249,80,158,42, +35,248,80,158,43,36,195,27,248,80,158,44,37,196,28,248,80,158,44,39,193, +248,80,158,44,40,193,11,11,11,11,11,28,192,27,248,22,58,194,27,248,22, +84,195,27,248,22,86,196,27,249,22,67,195,196,251,80,158,44,41,20,15,159, +44,35,49,21,94,3,1,4,103,55,56,54,252,9,1,3,1,4,103,55,56, +53,252,10,1,248,22,59,197,248,22,58,197,27,28,248,80,158,38,34,195,249, +80,158,39,35,248,80,158,40,36,197,27,248,80,158,41,37,198,28,248,80,158, +41,34,193,249,80,158,42,42,27,248,80,158,44,36,196,28,248,80,158,44,39, +193,248,22,8,89,162,34,35,41,9,224,10,1,27,249,22,2,89,162,34,35, +46,9,224,4,5,249,80,158,37,43,28,248,80,158,38,34,197,249,80,158,39, +35,248,80,158,40,36,199,27,248,80,158,41,37,200,28,248,80,158,41,34,193, +249,80,158,42,35,248,80,158,43,36,195,248,80,158,43,38,248,80,158,44,37, +196,11,11,194,248,80,158,39,40,196,28,248,22,63,193,21,94,9,9,248,80, +158,37,44,193,11,27,248,80,158,44,37,196,28,248,80,158,44,34,193,249,80, +158,45,35,248,80,158,46,36,195,27,248,80,158,47,37,196,28,248,80,158,47, +39,193,248,80,158,47,40,193,11,11,11,11,28,192,27,248,22,58,194,27,248, +22,84,195,27,248,22,93,196,27,248,22,96,197,27,248,22,95,198,27,249,22, +215,20,15,159,45,36,49,249,22,1,22,71,250,22,2,22,65,248,22,222,249, +80,158,53,45,20,15,159,53,37,49,206,248,22,222,249,80,158,53,45,20,15, +159,53,38,49,205,27,28,248,80,158,45,39,194,248,80,158,45,40,194,11,28, +192,249,80,158,46,46,205,27,250,22,67,200,201,198,250,80,158,50,47,89,162, +34,34,42,9,224,16,3,252,80,158,40,41,20,15,159,40,39,49,21,95,3, +1,4,103,55,57,48,252,11,1,3,1,4,103,55,57,50,252,12,1,3,1, +4,103,55,57,49,252,13,1,248,22,86,198,248,22,84,198,248,22,58,198,21, +96,1,22,119,105,116,104,45,99,111,110,116,105,110,117,97,116,105,111,110,45, +109,97,114,107,252,14,1,2,21,96,2,19,95,1,27,99,111,110,116,105,110, +117,97,116,105,111,110,45,109,97,114,107,45,115,101,116,45,102,105,114,115,116, +252,15,1,11,2,21,63,112,47,118,252,16,1,2,135,97,2,144,9,65,101, +120,112,114,49,252,17,1,64,101,120,112,114,252,18,1,2,135,20,15,159,50, +40,49,248,80,158,45,48,20,15,159,45,41,49,250,22,252,45,2,11,2,79, +197,34,20,98,159,34,16,15,2,80,2,83,2,85,2,87,2,91,2,96,2, +98,2,93,2,89,2,211,2,213,2,215,2,152,2,155,2,217,16,8,18,98, +2,100,8,75,38,37,36,16,4,8,74,11,63,115,116,120,252,19,1,3,1, +7,101,110,118,52,48,57,56,252,20,1,18,158,162,37,100,2,144,8,78,38, +37,36,8,74,16,8,8,77,11,3,1,4,103,55,56,50,252,21,1,3,1, +4,103,55,56,51,252,22,1,3,1,4,103,55,56,52,252,23,1,3,1,7, +101,110,118,52,49,48,53,252,24,1,2,252,24,1,2,252,24,1,16,8,8, +76,11,2,114,2,252,17,1,2,252,18,1,3,1,7,101,110,118,52,49,48, +54,252,25,1,2,252,25,1,2,252,25,1,158,9,8,78,158,2,252,9,1, +8,78,2,252,10,1,8,78,8,78,18,100,2,100,8,81,38,37,36,8,74, +16,12,8,80,11,3,1,4,103,55,55,55,252,26,1,3,1,4,103,55,55, +56,252,27,1,3,1,4,103,55,55,57,252,28,1,3,1,4,103,55,56,48, +252,29,1,3,1,4,103,55,56,49,252,30,1,3,1,7,101,110,118,52,49, +50,53,252,31,1,2,252,31,1,2,252,31,1,2,252,31,1,2,252,31,1, +16,12,8,79,11,2,114,65,112,97,114,97,109,252,32,1,63,118,97,108,252, +33,1,2,252,17,1,2,252,18,1,3,1,7,101,110,118,52,49,50,54,252, +34,1,2,252,34,1,2,252,34,1,2,252,34,1,2,252,34,1,18,16,2, +158,2,233,8,81,8,82,18,8,82,18,158,96,102,2,252,14,1,8,85,38, +37,36,8,74,8,80,8,79,16,4,8,84,11,3,1,4,103,55,56,57,252, +35,1,3,1,7,101,110,118,52,49,52,52,252,36,1,16,4,8,83,11,2, +252,16,1,3,1,7,101,110,118,52,49,52,53,252,37,1,158,2,21,8,85, +158,160,10,2,19,95,2,252,15,1,11,2,21,2,252,11,1,8,85,158,161, +10,2,144,9,2,252,12,1,2,252,13,1,8,85,8,85,18,16,2,96,2, +135,8,87,93,8,252,98,13,16,4,8,86,11,2,177,3,1,7,101,110,118, +52,49,52,57,252,38,1,95,9,8,252,98,13,2,94,18,16,2,158,94,98, +2,252,16,1,8,91,93,8,252,89,13,16,4,8,90,11,3,1,8,119,115, +116,109,112,55,56,55,252,39,1,3,1,7,101,110,118,52,49,51,56,252,40, +1,16,4,8,89,11,3,1,4,103,55,56,56,252,41,1,3,1,7,101,110, +118,52,49,53,50,252,42,1,16,4,8,88,11,2,252,255,0,3,1,7,101, +110,118,52,49,53,51,252,43,1,158,2,135,8,91,8,91,95,9,8,252,89, +13,2,218,11,16,5,93,2,65,89,162,34,35,51,9,223,0,27,249,22,215, +20,15,159,37,34,42,196,27,28,248,80,158,37,34,194,249,80,158,38,35,248, +80,158,39,36,196,27,248,80,158,40,37,197,28,248,80,158,40,34,193,249,80, +158,41,35,248,80,158,42,36,195,27,248,80,158,43,37,196,28,248,80,158,43, +34,193,249,80,158,44,35,248,80,158,45,36,195,27,248,80,158,46,37,196,28, +248,80,158,46,38,193,248,80,158,46,39,193,11,11,11,11,28,192,27,248,22, +58,194,27,248,22,84,195,27,248,22,93,196,27,248,22,94,197,249,80,158,42, +40,201,27,250,22,67,200,198,199,252,80,158,48,41,20,15,159,48,35,42,21, +95,3,1,4,103,55,57,55,252,44,1,3,1,4,103,55,57,57,252,45,1, +3,1,4,103,55,57,56,252,46,1,248,22,58,198,248,22,86,198,248,22,84, +198,250,22,252,45,2,11,2,79,196,34,20,98,159,34,16,8,2,80,2,83, +2,85,2,87,2,96,2,98,2,152,2,93,16,2,18,98,2,100,8,93,38, +37,36,16,4,8,92,11,2,252,19,1,3,1,7,101,110,118,52,49,53,55, +252,47,1,18,158,96,100,2,252,14,1,8,96,38,37,36,8,92,16,10,8, +95,11,3,1,4,103,55,57,51,252,48,1,3,1,4,103,55,57,52,252,49, +1,3,1,4,103,55,57,53,252,50,1,3,1,4,103,55,57,54,252,51,1, +3,1,7,101,110,118,52,49,54,52,252,52,1,2,252,52,1,2,252,52,1, +2,252,52,1,16,10,8,94,11,2,114,69,98,111,111,108,45,101,120,112,114, +252,53,1,2,252,17,1,2,252,18,1,3,1,7,101,110,118,52,49,54,53, +252,54,1,2,252,54,1,2,252,54,1,2,252,54,1,158,2,47,8,96,158, +95,10,76,109,97,107,101,45,116,104,114,101,97,100,45,99,101,108,108,252,55, +1,95,63,97,110,100,252,56,1,2,252,44,1,10,8,96,158,96,10,2,0, +93,2,51,160,2,144,9,2,252,45,1,2,252,46,1,8,96,8,96,11,16, +5,93,2,103,27,247,22,252,98,3,253,22,66,248,199,20,15,159,42,34,34, +248,199,20,15,159,42,35,34,248,199,20,15,159,42,36,34,248,22,66,248,200, +20,15,159,43,37,34,248,22,66,248,200,20,15,159,43,38,34,10,43,20,98, +159,34,16,0,16,5,18,16,2,158,2,35,8,69,8,97,18,16,2,158,2, +37,8,69,8,98,18,16,2,158,2,39,8,69,8,99,18,16,2,158,2,41, +8,69,8,100,18,16,2,158,2,43,8,69,8,101,11,16,5,94,2,66,2, +62,87,96,83,159,34,93,80,159,34,8,35,35,89,162,35,35,41,9,223,0, +251,80,158,38,42,20,15,159,38,46,50,21,94,3,1,4,103,56,50,53,252, +57,1,3,1,4,103,56,50,52,252,58,1,248,22,58,198,248,22,84,198,83, +159,34,93,80,159,34,8,34,35,89,162,35,35,41,9,223,0,251,80,158,38, +42,20,15,159,38,45,50,21,94,3,1,4,103,56,50,49,252,59,1,3,1, +4,103,56,50,48,252,60,1,248,22,58,198,248,22,84,198,83,159,34,93,80, +159,34,8,33,35,89,162,35,35,41,9,223,0,251,80,158,38,42,20,15,159, +38,44,50,21,94,3,1,4,103,56,50,51,252,61,1,3,1,4,103,56,50, +50,252,62,1,248,22,58,198,248,22,84,198,27,89,162,8,36,35,36,62,119, +104,252,63,1,223,1,89,162,34,35,8,26,9,224,0,1,27,249,22,215,20, +15,159,38,34,50,197,27,28,248,80,158,38,34,194,249,80,158,39,35,248,80, +158,40,36,196,27,248,80,158,41,37,197,28,248,80,158,41,34,193,28,248,80, +158,41,38,248,80,158,42,36,194,27,248,80,158,42,37,194,28,248,80,158,42, +34,193,249,80,158,43,35,248,80,158,44,36,195,27,248,80,158,45,37,196,28, +248,80,158,45,39,193,248,80,158,45,40,193,11,11,11,11,11,28,192,27,248, +22,58,194,27,248,22,84,195,27,248,22,86,196,249,80,158,42,41,201,27,249, +22,67,197,198,251,80,158,47,42,20,15,159,47,35,50,21,94,3,1,4,103, +56,49,48,252,64,1,3,1,4,103,56,48,57,252,65,1,248,22,59,197,248, +22,58,197,27,28,248,80,158,39,34,195,249,80,158,40,35,248,80,158,41,36, +197,27,248,80,158,42,37,198,28,248,80,158,42,34,193,249,80,158,43,43,27, +248,80,158,45,36,196,28,248,80,158,45,39,193,248,22,8,89,162,34,35,41, +9,224,11,1,27,249,22,2,89,162,34,35,46,9,224,4,5,249,80,158,37, +44,28,248,80,158,38,34,197,249,80,158,39,35,248,80,158,40,36,199,27,248, +80,158,41,37,200,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158,43, +36,195,248,80,158,43,38,248,80,158,44,37,196,11,11,194,248,80,158,39,40, +196,28,248,22,63,193,21,94,9,9,248,80,158,37,45,193,11,27,248,80,158, +45,37,196,28,248,80,158,45,34,193,249,80,158,46,35,248,80,158,47,36,195, +27,248,80,158,48,37,196,28,248,80,158,48,39,193,248,80,158,48,40,193,11, +11,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,93,196,27, +248,22,96,197,27,248,22,95,198,27,249,22,215,20,15,159,46,36,50,248,80, +158,47,46,249,22,2,32,252,66,1,89,162,8,44,35,35,9,222,1,23,119, +105,116,104,45,104,97,110,100,108,101,114,115,45,112,114,101,100,105,99,97,116, +101,252,67,1,248,22,222,249,80,158,52,47,20,15,159,52,37,50,204,27,249, +22,215,20,15,159,47,38,50,248,80,158,48,46,249,22,2,32,252,68,1,89, +162,8,44,35,35,9,222,1,21,119,105,116,104,45,104,97,110,100,108,101,114, +115,45,104,97,110,100,108,101,114,252,69,1,248,22,222,249,80,158,53,47,20, +15,159,53,39,50,204,27,28,248,80,158,47,39,195,248,80,158,47,40,195,11, +28,192,27,28,248,80,158,48,39,195,248,80,158,48,40,195,11,28,192,27,249, +22,215,20,15,159,50,40,50,28,23,15,20,15,159,50,41,50,20,15,159,50, +42,50,249,80,158,50,41,23,17,27,254,22,67,23,15,23,17,204,202,23,18, +23,16,203,250,80,158,54,48,89,162,34,34,50,9,224,20,3,254,80,158,42, +42,20,15,159,42,43,50,21,97,3,1,4,103,56,51,48,252,70,1,3,1, +4,103,56,50,55,252,71,1,3,1,4,103,56,50,54,252,72,1,3,1,4, +103,56,50,57,252,73,1,3,1,4,103,56,50,56,252,74,1,249,22,71,250, +22,2,80,159,47,8,33,35,248,22,93,205,249,22,76,206,38,250,22,2,80, +159,47,8,34,35,249,22,75,206,40,248,22,84,205,248,22,96,200,250,22,2, +80,159,45,8,35,35,248,22,93,203,249,22,75,204,40,249,22,76,201,39,248, +22,58,200,21,95,2,144,96,94,69,112,114,101,100,45,110,97,109,101,252,75, +1,64,112,114,101,100,252,76,1,2,135,94,72,104,97,110,100,108,101,114,45, +110,97,109,101,252,77,1,67,104,97,110,100,108,101,114,252,78,1,2,135,95, +2,144,93,94,63,98,112,122,252,79,1,95,2,252,15,1,11,2,47,96,2, +252,14,1,2,47,2,59,96,1,29,99,97,108,108,45,119,105,116,104,45,99, +111,110,116,105,110,117,97,116,105,111,110,45,112,114,111,109,112,116,252,80,1, +95,2,252,8,1,9,96,2,252,14,1,2,47,2,252,79,1,97,2,60,93, +94,1,25,99,117,114,114,101,110,116,45,101,120,99,101,112,116,105,111,110,45, +104,97,110,100,108,101,114,252,81,1,95,2,252,8,1,93,61,101,252,82,1, +95,1,26,97,98,111,114,116,45,99,117,114,114,101,110,116,45,99,111,110,116, +105,110,117,97,116,105,111,110,252,83,1,2,57,95,2,252,8,1,9,96,63, +117,113,49,252,84,1,2,252,82,1,2,252,79,1,95,64,108,105,115,116,252, +85,1,95,64,99,111,110,115,252,86,1,2,252,75,1,2,252,77,1,2,135, +2,252,17,1,2,252,18,1,2,135,2,57,95,2,252,8,1,93,65,116,104, +117,110,107,252,87,1,93,2,252,87,1,20,15,159,54,47,50,248,80,158,48, +49,20,15,159,48,48,50,248,80,158,47,49,20,15,159,47,49,50,250,22,252, +45,2,11,2,79,197,249,22,7,248,195,10,248,195,11,38,20,98,159,37,16, +16,2,80,2,83,2,85,2,87,2,91,2,96,2,98,2,152,2,93,2,89, +2,211,2,213,30,252,88,1,2,218,1,20,103,101,110,101,114,97,116,101,45, +116,101,109,112,111,114,97,114,105,101,115,252,89,1,0,2,215,2,155,2,217, +16,16,18,99,2,100,8,104,38,37,36,16,4,8,103,11,74,100,105,115,97, +98,108,101,45,98,114,101,97,107,63,252,90,1,3,1,7,101,110,118,52,49, +56,48,252,91,1,16,4,8,102,11,2,252,19,1,3,1,7,101,110,118,52, +49,56,49,252,92,1,18,158,162,37,101,2,144,8,107,38,37,36,8,103,8, +102,16,8,8,106,11,3,1,4,103,56,48,54,252,93,1,3,1,4,103,56, +48,55,252,94,1,3,1,4,103,56,48,56,252,95,1,3,1,7,101,110,118, +52,49,56,56,252,96,1,2,252,96,1,2,252,96,1,16,8,8,105,11,2, +114,2,252,17,1,2,252,18,1,3,1,7,101,110,118,52,49,56,57,252,97, +1,2,252,97,1,2,252,97,1,158,9,8,107,158,2,252,64,1,8,107,2, +252,65,1,8,107,8,107,18,101,2,100,8,110,38,37,36,8,103,8,102,16, +12,8,109,11,3,1,4,103,56,48,49,252,98,1,3,1,4,103,56,48,50, +252,99,1,3,1,4,103,56,48,51,252,100,1,3,1,4,103,56,48,52,252, +101,1,3,1,4,103,56,48,53,252,102,1,3,1,7,101,110,118,52,50,48, +56,252,103,1,2,252,103,1,2,252,103,1,2,252,103,1,2,252,103,1,16, +12,8,108,11,2,114,2,252,76,1,2,252,78,1,2,252,17,1,2,252,18, +1,3,1,7,101,110,118,52,50,48,57,252,104,1,2,252,104,1,2,252,104, +1,2,252,104,1,2,252,104,1,18,16,2,158,2,233,8,110,8,111,18,16, +2,158,2,100,8,110,8,112,18,8,111,18,105,2,100,8,117,38,37,36,8, +103,8,102,8,109,8,108,16,4,8,116,11,3,1,4,103,56,49,52,252,105, +1,3,1,7,101,110,118,52,50,50,57,252,106,1,16,4,8,115,11,2,252, +75,1,3,1,7,101,110,118,52,50,51,48,252,107,1,16,4,8,114,11,3, +1,4,103,56,49,54,252,108,1,3,1,7,101,110,118,52,50,51,55,252,109, +1,16,4,8,113,11,2,252,77,1,3,1,7,101,110,118,52,50,51,56,252, +110,1,18,16,2,158,2,53,8,117,8,118,18,16,2,158,2,55,8,117,8, +119,18,158,96,10,2,144,2,252,70,1,95,2,144,93,94,2,252,79,1,95, +2,252,15,1,11,2,47,96,2,252,14,1,2,47,2,59,96,2,252,80,1, +95,2,252,8,1,9,96,2,252,14,1,2,47,2,252,79,1,160,2,60,93, +94,2,252,81,1,95,2,252,8,1,93,2,252,82,1,95,2,252,83,1,2, +57,95,2,252,8,1,9,96,2,252,71,1,2,252,82,1,2,252,79,1,158, +2,252,85,1,2,252,72,1,2,252,73,1,2,252,74,1,2,57,95,2,252, +8,1,93,2,252,87,1,93,2,252,87,1,8,117,18,158,95,10,2,252,61, +1,2,252,62,1,8,117,18,158,95,10,2,252,59,1,2,252,60,1,8,117, +18,158,96,10,2,252,86,1,2,252,57,1,2,252,58,1,8,117,18,16,2, +96,2,135,8,121,93,8,252,187,13,16,4,8,120,11,2,177,3,1,7,101, +110,118,52,50,53,53,252,111,1,95,9,8,252,187,13,2,94,18,16,2,158, +94,98,2,252,77,1,8,125,93,8,252,162,13,16,6,8,124,11,3,1,8, +119,115,116,109,112,56,49,49,252,112,1,3,1,8,119,115,116,109,112,56,49, +50,252,113,1,3,1,7,101,110,118,52,50,50,49,252,114,1,2,252,114,1, +16,4,8,123,11,3,1,4,103,56,49,53,252,115,1,3,1,7,101,110,118, +52,50,54,52,252,116,1,16,4,8,122,11,2,252,255,0,3,1,7,101,110, +118,52,50,54,53,252,117,1,158,2,135,8,125,8,125,95,9,8,252,162,13, +2,218,18,16,2,158,94,98,2,252,75,1,8,129,93,8,252,162,13,16,6, +8,128,11,2,252,112,1,2,252,113,1,2,252,114,1,2,252,114,1,16,4, +8,127,11,3,1,4,103,56,49,51,252,118,1,3,1,7,101,110,118,52,50, +54,57,252,119,1,16,4,8,126,11,2,252,255,0,3,1,7,101,110,118,52, +50,55,48,252,120,1,158,2,135,8,129,8,129,95,9,8,252,162,13,2,218, +11,16,5,93,2,70,87,95,83,159,34,93,80,159,34,8,28,35,89,162,34, +36,49,68,116,114,121,45,110,101,120,116,252,121,1,223,0,27,28,248,80,158, +36,34,195,249,80,158,37,35,248,80,158,38,36,197,27,248,80,158,39,37,198, +28,248,80,158,39,34,193,249,80,158,40,39,27,248,80,158,42,36,196,28,248, +80,158,42,41,193,248,22,65,248,80,158,43,42,194,11,27,248,80,158,42,37, +196,28,248,80,158,42,34,193,249,80,158,43,39,248,80,158,44,36,195,248,80, +158,44,38,248,80,158,45,37,196,11,11,11,28,192,27,248,22,58,194,27,248, +22,84,195,27,248,22,86,196,28,27,248,80,158,40,42,249,80,158,42,43,20, +15,159,42,36,50,197,87,94,249,22,3,89,162,34,35,41,9,224,7,9,28, +248,80,158,36,44,195,12,251,22,252,45,2,11,6,17,17,110,111,116,32,97, +110,32,105,100,101,110,116,105,102,105,101,114,252,122,1,196,198,194,27,248,80, +158,41,45,194,28,192,251,22,252,45,2,11,6,20,20,100,117,112,108,105,99, +97,116,101,32,105,100,101,110,116,105,102,105,101,114,252,123,1,204,196,12,27, +249,22,215,20,15,159,41,37,50,248,80,158,42,46,249,80,158,44,43,20,15, +159,44,38,50,199,27,28,248,80,158,41,41,194,248,80,158,41,42,194,11,28, +192,249,80,158,42,47,202,27,250,22,67,200,201,198,250,80,158,46,48,89,162, +34,34,45,9,224,12,3,252,80,158,40,40,20,15,159,40,39,50,21,95,3, +1,4,103,56,52,52,252,124,1,3,1,4,103,56,52,51,252,125,1,3,1, +4,103,56,52,55,252,126,1,248,22,86,198,248,22,58,198,250,22,2,80,159, +43,8,27,35,248,22,84,201,248,22,86,201,21,96,70,108,101,116,45,118,97, +108,117,101,115,252,127,1,93,94,94,64,116,101,109,112,252,128,1,2,135,2, +252,18,1,95,64,115,101,116,33,252,129,1,62,105,100,252,130,1,2,252,128, +1,2,135,20,15,159,46,41,50,248,80,158,41,49,20,15,159,41,42,50,250, +22,252,45,2,11,2,79,200,250,22,252,45,2,11,2,79,197,83,159,34,93, +80,159,34,8,27,35,89,162,35,35,41,9,223,0,251,80,158,38,40,20,15, +159,38,40,50,21,94,3,1,4,103,56,52,54,252,131,1,3,1,4,103,56, +52,53,252,132,1,248,22,58,198,248,22,84,198,89,162,34,35,49,9,223,0, +27,249,22,215,20,15,159,37,34,50,196,27,28,248,80,158,37,34,194,249,80, +158,38,35,248,80,158,39,36,196,27,248,80,158,40,37,197,28,248,80,158,40, +34,193,28,248,80,158,40,38,248,80,158,41,36,194,27,248,80,158,41,37,194, +28,248,80,158,41,34,193,249,80,158,42,39,248,80,158,43,36,195,248,80,158, +43,38,248,80,158,44,37,196,11,11,11,11,28,192,27,248,22,58,194,27,248, +22,59,195,250,80,158,41,40,20,15,159,41,35,50,21,93,3,1,4,103,56, +51,57,252,133,1,195,27,28,248,80,158,38,34,195,249,80,158,39,35,248,80, +158,40,36,197,27,248,80,158,41,37,198,28,248,80,158,41,34,193,249,80,158, +42,39,27,248,80,158,44,36,196,28,248,80,158,44,34,193,249,80,158,45,35, +248,80,158,46,36,195,248,80,158,46,38,248,80,158,47,37,196,11,27,248,80, +158,44,37,196,28,248,80,158,44,34,193,249,80,158,45,39,248,80,158,46,36, +195,248,80,158,46,38,248,80,158,47,37,196,11,11,11,28,192,27,248,22,58, +194,27,248,22,84,195,27,248,22,86,196,28,248,80,158,41,44,194,27,249,22, +67,196,195,251,80,158,45,40,20,15,159,45,43,50,21,94,3,1,4,103,56, +52,57,252,134,1,3,1,4,103,56,52,56,252,135,1,248,22,58,197,248,22, +59,197,249,80,159,42,8,28,35,199,201,249,80,159,39,8,28,35,196,198,34, +20,98,159,36,16,16,2,80,2,83,2,85,2,87,2,91,2,89,2,93,2, +96,2,98,2,215,2,150,30,252,136,1,2,106,1,26,99,104,101,99,107,45, +100,117,112,108,105,99,97,116,101,45,105,100,101,110,116,105,102,105,101,114,252, +137,1,0,2,252,88,1,2,152,2,155,2,217,16,10,18,98,2,100,8,131, +38,37,36,16,4,8,130,11,2,252,19,1,3,1,7,101,110,118,52,50,55, +52,252,138,1,18,158,95,100,2,252,127,1,8,134,38,37,36,8,130,16,6, +8,133,11,3,1,4,103,56,51,55,252,139,1,3,1,4,103,56,51,56,252, +140,1,3,1,7,101,110,118,52,50,56,48,252,141,1,2,252,141,1,16,6, +8,132,11,2,114,2,252,18,1,3,1,7,101,110,118,52,50,56,49,252,142, +1,2,252,142,1,158,94,10,94,9,2,252,133,1,8,134,158,94,10,64,118, +111,105,100,252,143,1,8,134,8,134,18,100,2,233,8,137,38,37,36,8,130, +16,8,8,136,11,3,1,4,103,56,51,49,252,144,1,3,1,4,103,56,51, +50,252,145,1,3,1,4,103,56,51,51,252,146,1,3,1,7,101,110,118,52, +50,57,55,252,147,1,2,252,147,1,2,252,147,1,16,8,8,135,11,2,114, +2,252,130,1,2,252,18,1,3,1,7,101,110,118,52,50,57,56,252,148,1, +2,252,148,1,2,252,148,1,18,16,2,158,2,100,8,137,8,138,18,16,2, +158,2,233,8,137,8,139,18,158,161,36,102,2,252,127,1,8,142,38,37,36, +8,130,8,136,8,135,16,4,8,141,11,3,1,4,103,56,52,50,252,149,1, +3,1,7,101,110,118,52,51,49,52,252,150,1,16,4,8,140,11,2,252,128, +1,3,1,7,101,110,118,52,51,49,53,252,151,1,158,94,10,94,2,252,124, +1,2,252,125,1,8,142,2,252,126,1,8,142,8,142,18,158,96,10,2,252, +129,1,2,252,131,1,2,252,132,1,8,142,18,16,2,96,2,135,8,144,93, +8,252,239,13,16,4,8,143,11,2,177,3,1,7,101,110,118,52,51,49,57, +252,152,1,95,9,8,252,239,13,2,94,18,16,2,158,94,98,2,252,128,1, +8,148,93,8,252,231,13,16,4,8,147,11,3,1,8,119,115,116,109,112,56, +52,48,252,153,1,3,1,7,101,110,118,52,51,48,57,252,154,1,16,4,8, +146,11,3,1,4,103,56,52,49,252,155,1,3,1,7,101,110,118,52,51,50, +52,252,156,1,16,4,8,145,11,2,252,255,0,3,1,7,101,110,118,52,51, +50,53,252,157,1,158,2,135,8,148,8,148,95,9,8,252,231,13,2,218,18, +158,95,100,2,252,129,1,8,151,38,37,36,8,130,16,8,8,150,11,3,1, +4,103,56,51,52,252,158,1,3,1,4,103,56,51,53,252,159,1,3,1,4, +103,56,51,54,252,160,1,3,1,7,101,110,118,52,51,51,51,252,161,1,2, +252,161,1,2,252,161,1,16,8,8,149,11,2,114,2,252,130,1,2,252,18, +1,3,1,7,101,110,118,52,51,51,52,252,162,1,2,252,162,1,2,252,162, +1,158,2,252,134,1,8,151,158,2,252,135,1,8,151,8,151,11,16,5,93, +2,67,89,162,34,35,51,9,223,0,27,249,22,215,20,15,159,37,34,42,196, +27,28,248,80,158,37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248, +80,158,40,37,197,28,248,80,158,40,34,193,249,80,158,41,35,248,80,158,42, +36,195,27,248,80,158,43,37,196,28,248,80,158,43,34,193,249,80,158,44,35, +248,80,158,45,36,195,27,248,80,158,46,37,196,28,248,80,158,46,38,193,248, +80,158,46,39,193,11,11,11,11,28,192,27,248,22,58,194,27,248,22,84,195, +27,248,22,93,196,27,248,22,94,197,249,80,158,42,40,201,27,250,22,67,198, +200,199,252,80,158,48,41,20,15,159,48,35,42,21,95,3,1,4,103,56,53, +52,252,163,1,3,1,4,103,56,53,54,252,164,1,3,1,4,103,56,53,53, +252,165,1,248,22,84,198,248,22,86,198,248,22,58,198,250,22,252,45,2,11, +2,79,196,34,20,98,159,34,16,8,2,80,2,83,2,85,2,87,2,96,2, +98,2,152,2,93,16,2,18,98,2,100,8,153,38,37,36,16,4,8,152,11, +2,252,19,1,3,1,7,101,110,118,52,51,52,51,252,166,1,18,158,94,100, +67,99,97,108,108,47,99,99,252,167,1,8,156,38,37,36,8,152,16,10,8, +155,11,3,1,4,103,56,53,48,252,168,1,3,1,4,103,56,53,49,252,169, +1,3,1,4,103,56,53,50,252,170,1,3,1,4,103,56,53,51,252,171,1, +3,1,7,101,110,118,52,51,53,48,252,172,1,2,252,172,1,2,252,172,1, +2,252,172,1,16,10,8,154,11,2,114,2,199,65,98,111,100,121,49,252,173, +1,64,98,111,100,121,252,174,1,3,1,7,101,110,118,52,51,53,49,252,175, +1,2,252,175,1,2,252,175,1,2,252,175,1,158,161,10,2,252,8,1,93, +2,252,163,1,2,252,164,1,2,252,165,1,8,156,8,156,11,16,5,93,2, +68,89,162,34,35,51,9,223,0,27,249,22,215,20,15,159,37,34,44,196,27, 28,248,80,158,37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80, 158,40,37,197,28,248,80,158,40,34,193,249,80,158,41,35,248,80,158,42,36, 195,27,248,80,158,43,37,196,28,248,80,158,43,34,193,249,80,158,44,38,27, -248,80,158,46,36,196,28,248,80,158,46,34,193,249,80,158,47,38,248,80,158, -48,36,195,248,80,158,48,39,248,80,158,49,37,196,11,248,80,158,45,39,248, -80,158,46,37,196,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27, -248,22,80,196,28,248,22,41,248,22,210,194,27,249,22,61,195,196,251,80,158, -44,40,20,15,159,44,35,43,21,94,3,1,4,103,54,56,53,65,3,1,4, -103,54,56,52,66,248,22,53,197,248,22,52,197,27,249,22,61,195,196,251,80, -158,44,40,20,15,159,44,36,43,21,94,3,1,4,103,54,56,55,67,3,1, -4,103,54,56,54,68,248,22,53,197,248,22,52,197,27,28,248,80,158,38,34, -195,249,80,158,39,35,248,80,158,40,36,197,27,248,80,158,41,37,198,28,248, -80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195,27,248,80,158,44, -37,196,28,248,80,158,44,34,193,249,80,158,45,38,27,248,80,158,47,36,196, -28,248,80,158,47,41,193,248,80,158,47,42,193,11,248,80,158,46,39,248,80, -158,47,37,196,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248, -22,80,196,27,249,22,61,195,196,251,80,158,45,40,20,15,159,45,37,43,21, -94,3,1,4,103,54,56,57,69,3,1,4,103,54,56,56,70,248,22,53,197, -248,22,52,197,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116, -97,120,71,197,34,20,98,159,34,16,9,30,72,65,35,37,115,116,120,73,69, -115,116,120,45,112,97,105,114,63,74,11,30,75,2,73,67,99,111,110,115,47, -35,102,76,1,30,77,2,73,67,115,116,120,45,99,97,114,78,5,30,79,2, -73,67,115,116,120,45,99,100,114,80,6,30,81,2,73,69,97,112,112,101,110, -100,47,35,102,82,0,30,83,2,73,71,115,116,120,45,110,117,108,108,47,35, -102,84,9,30,85,69,35,37,115,116,120,99,97,115,101,86,1,24,97,112,112, -108,121,45,112,97,116,116,101,114,110,45,115,117,98,115,116,105,116,117,116,101, -87,0,30,88,2,73,69,115,116,120,45,108,105,115,116,63,89,8,30,90,2, -73,69,115,116,120,45,62,108,105,115,116,91,4,16,4,18,98,64,104,101,114, -101,92,40,98,38,10,34,11,95,159,2,18,9,11,159,68,35,37,100,101,102, -105,110,101,93,9,11,159,74,35,37,115,109,97,108,108,45,115,99,104,101,109, -101,94,9,11,16,70,2,23,2,2,2,53,2,2,1,22,98,114,101,97,107, -45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,95,2,2,2, -6,2,2,2,55,2,2,2,43,2,2,2,60,2,2,2,12,2,2,2,61, -2,2,2,59,2,2,2,52,2,2,2,56,2,2,2,62,2,2,2,54,2, -2,2,29,2,2,2,35,2,2,2,64,2,2,2,4,2,2,2,8,2,2, -2,25,2,2,2,58,2,2,2,10,2,2,2,27,2,2,2,63,2,2,2, -37,2,2,67,112,114,111,109,105,115,101,96,2,2,2,45,2,2,2,31,2, -2,2,57,2,2,2,14,2,2,2,16,2,2,2,49,2,2,2,33,2,2, -2,41,2,2,2,39,2,2,98,37,10,35,11,95,159,67,35,37,113,113,115, -116,120,97,9,11,159,76,35,37,115,116,120,99,97,115,101,45,115,99,104,101, -109,101,98,9,11,159,2,73,9,11,16,0,96,36,8,254,1,11,16,0,16, -4,35,11,61,120,99,3,1,7,101,110,118,51,55,55,56,100,18,158,95,100, -63,101,113,63,101,43,38,37,36,35,16,8,42,11,3,1,4,103,54,56,49, -102,3,1,4,103,54,56,50,103,3,1,4,103,54,56,51,104,3,1,7,101, -110,118,51,55,56,53,105,2,105,2,105,16,6,41,11,61,95,106,61,107,107, -3,1,7,101,110,118,51,55,56,54,108,2,108,158,2,65,43,158,95,10,65, -113,117,111,116,101,109,2,66,43,43,18,158,96,10,64,101,113,118,63,110,2, -67,94,2,109,2,68,43,18,158,95,100,64,109,101,109,118,111,46,38,37,36, -35,16,8,45,11,3,1,4,103,54,55,56,112,3,1,4,103,54,55,57,113, -3,1,4,103,54,56,48,114,3,1,7,101,110,118,51,56,48,48,115,2,115, -2,115,16,6,44,11,2,106,2,107,3,1,7,101,110,118,51,56,48,49,116, -2,116,158,2,69,46,158,95,10,2,109,2,70,46,46,11,16,5,93,2,57, -89,162,34,35,8,27,9,223,0,27,249,22,209,20,15,159,37,34,46,196,27, -28,248,80,158,37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80, -158,40,37,197,28,248,80,158,40,34,193,249,80,158,41,38,248,80,158,42,36, -195,248,80,158,42,39,248,80,158,43,37,196,11,11,28,192,27,248,22,52,194, -27,248,22,53,195,250,80,158,41,40,20,15,159,41,35,46,21,93,3,1,4, -103,55,50,48,117,195,27,28,248,80,158,38,34,195,249,80,158,39,35,248,80, -158,40,36,197,27,248,80,158,41,37,198,28,248,80,158,41,34,193,249,80,158, -42,35,248,80,158,43,36,195,27,248,80,158,44,37,196,28,248,80,158,44,34, -193,249,80,158,45,38,27,248,80,158,47,36,196,28,248,80,158,47,34,193,28, -27,248,80,158,48,36,194,28,248,80,158,48,41,193,28,249,22,223,194,20,15, -159,49,36,46,9,11,11,27,248,80,158,48,37,194,28,248,80,158,48,34,193, -249,80,158,49,35,248,80,158,50,36,195,27,248,80,158,51,37,196,28,248,80, -158,51,42,193,248,80,158,51,43,193,11,11,11,11,248,80,158,46,39,248,80, -158,47,37,196,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248, -22,87,196,27,248,22,88,197,249,80,158,43,44,202,27,250,22,61,198,200,199, -252,80,158,49,40,20,15,159,49,37,46,21,95,3,1,4,103,55,50,51,118, -3,1,4,103,55,50,50,119,3,1,4,103,55,50,49,120,248,22,78,198,248, -22,80,198,248,22,52,198,27,28,248,80,158,39,34,196,249,80,158,40,35,248, -80,158,41,36,198,27,248,80,158,42,37,199,28,248,80,158,42,34,193,249,80, -158,43,35,248,80,158,44,36,195,27,248,80,158,45,37,196,28,248,80,158,45, -34,193,249,80,158,46,38,27,248,80,158,48,36,196,28,248,80,158,48,34,193, -249,80,158,49,38,27,248,80,158,51,36,196,28,248,80,158,51,42,193,248,22, -59,248,80,158,52,43,194,11,27,248,80,158,51,37,196,28,248,80,158,51,34, -193,249,80,158,52,35,248,80,158,53,36,195,27,248,80,158,54,37,196,28,248, -80,158,54,42,193,248,80,158,54,43,193,11,11,11,248,80,158,47,39,248,80, -158,48,37,196,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248, -22,87,196,27,248,22,90,197,27,248,22,89,198,249,80,158,45,44,204,27,251, -22,61,201,200,199,202,250,80,158,49,45,89,162,34,34,43,9,224,15,3,253, -80,158,41,40,20,15,159,41,38,46,21,96,3,1,4,103,55,50,53,121,3, -1,4,103,55,50,52,122,3,1,4,103,55,50,55,123,3,1,4,103,55,50, -54,124,248,22,88,199,248,22,52,199,248,22,78,199,248,22,87,199,21,95,62, -105,102,125,95,2,64,61,118,126,94,2,107,63,46,46,46,127,96,2,0,62, -101,49,128,62,101,50,129,2,127,20,15,159,49,39,46,27,28,248,80,158,40, -34,197,249,80,158,41,35,248,80,158,42,36,199,27,248,80,158,43,37,200,28, -248,80,158,43,34,193,249,80,158,44,35,248,80,158,45,36,195,27,248,80,158, -46,37,196,28,248,80,158,46,34,193,249,80,158,47,38,27,248,80,158,49,36, -196,28,248,80,158,49,34,193,249,80,158,50,38,27,248,80,158,52,36,196,28, -248,80,158,52,42,193,248,22,59,248,80,158,53,43,194,11,27,248,80,158,52, -37,196,28,248,80,158,52,34,193,249,80,158,53,35,248,80,158,54,36,195,27, -248,80,158,55,37,196,28,248,80,158,55,42,193,248,22,59,248,80,158,56,43, -194,11,11,11,27,248,80,158,49,37,196,28,248,80,158,49,34,193,249,80,158, -50,35,248,80,158,51,36,195,27,248,80,158,52,37,196,28,248,80,158,52,42, -193,248,80,158,52,43,193,11,11,11,11,11,28,192,27,248,22,52,194,27,248, -22,78,195,27,248,22,87,196,27,248,22,90,197,27,249,22,70,199,38,27,249, -22,70,200,39,27,249,22,69,201,40,249,80,158,48,44,23,15,27,253,22,61, -202,205,201,203,206,204,250,80,158,52,45,89,162,34,34,46,9,224,18,3,26, -8,80,158,43,40,20,15,159,43,40,46,21,98,3,1,4,103,55,50,56,130, -3,1,4,103,55,50,57,131,3,1,4,103,55,51,49,132,3,1,4,103,55, -51,48,133,3,1,4,103,55,51,51,134,3,1,4,103,55,51,50,135,249,22, -70,202,38,248,22,78,201,249,22,69,202,39,248,22,90,201,248,22,52,201,248, -22,87,201,21,95,63,108,101,116,136,93,94,2,99,2,126,96,2,125,95,2, -64,2,99,94,2,107,2,127,96,2,0,2,128,2,129,2,127,97,2,57,2, -99,62,99,49,137,62,99,50,138,2,127,20,15,159,52,41,46,27,28,248,80, -158,41,34,198,249,80,158,42,35,248,80,158,43,36,200,27,248,80,158,44,37, -201,28,248,80,158,44,34,193,27,28,248,22,206,194,193,201,249,80,158,46,35, -248,80,158,47,36,196,27,248,80,158,48,37,197,28,248,80,158,48,34,193,27, -28,248,22,206,194,193,196,249,80,158,50,38,27,248,80,158,52,36,197,28,248, -80,158,52,34,193,249,80,158,53,35,248,80,158,54,36,195,27,248,80,158,55, -37,196,28,248,80,158,55,34,193,249,80,158,56,35,248,80,158,57,36,195,27, -248,80,158,58,37,196,28,248,80,158,58,42,193,248,22,59,248,80,158,59,43, -194,11,11,11,27,248,80,158,52,37,197,250,22,209,198,195,198,11,11,11,28, -192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196,27,248,22,90,197, -27,249,22,70,199,38,27,249,22,69,200,39,251,22,252,39,2,11,6,33,33, -98,97,100,32,115,121,110,116,97,120,32,40,110,111,116,32,97,32,100,97,116, -117,109,32,115,101,113,117,101,110,99,101,41,139,23,17,199,27,28,248,80,158, -42,34,199,249,80,158,43,35,248,80,158,44,36,201,27,248,80,158,45,37,202, -28,248,80,158,45,34,193,27,28,248,22,206,194,193,202,249,80,158,47,35,248, -80,158,48,36,196,27,248,80,158,49,37,197,28,248,80,158,49,34,193,27,28, -248,22,206,194,193,196,249,80,158,51,35,248,80,158,52,36,196,27,248,80,158, -53,37,197,250,22,209,198,195,198,11,11,11,28,192,27,248,22,52,194,27,248, -22,78,195,27,248,22,87,196,27,248,22,88,197,251,22,252,39,2,11,6,52, -52,98,97,100,32,115,121,110,116,97,120,32,40,109,105,115,115,105,110,103,32, -101,120,112,114,101,115,115,105,111,110,32,97,102,116,101,114,32,100,97,116,117, -109,32,115,101,113,117,101,110,99,101,41,140,23,16,197,27,28,248,80,158,43, -34,200,249,80,158,44,35,248,80,158,45,36,202,27,248,80,158,46,37,203,250, -22,209,205,195,205,11,28,192,27,248,22,52,194,27,248,22,53,195,28,248,22, -57,248,22,210,194,250,22,252,39,2,11,2,71,204,250,22,252,39,2,11,6, -31,31,98,97,100,32,115,121,110,116,97,120,32,40,105,108,108,101,103,97,108, -32,117,115,101,32,111,102,32,96,46,39,41,141,206,250,22,252,39,2,11,2, -71,202,34,20,98,159,34,16,12,2,72,2,75,2,77,2,79,2,81,2,83, -2,85,30,142,2,73,71,105,100,101,110,116,105,102,105,101,114,63,143,2,2, -88,2,90,30,144,68,35,37,115,116,120,108,111,99,145,68,114,101,108,111,99, -97,116,101,146,1,30,147,2,86,1,20,99,97,116,99,104,45,101,108,108,105, -112,115,105,115,45,101,114,114,111,114,148,1,16,8,18,98,2,92,48,38,37, -36,16,4,47,11,2,99,3,1,7,101,110,118,51,56,49,49,149,18,158,95, -100,2,0,51,38,37,36,47,16,6,50,11,3,1,4,103,55,49,56,150,3, -1,4,103,55,49,57,151,3,1,7,101,110,118,51,56,49,54,152,2,152,16, -6,49,11,2,106,2,126,3,1,7,101,110,118,51,56,49,55,153,2,153,158, -2,117,51,158,94,10,64,99,111,110,100,154,51,51,18,16,2,158,64,101,108, -115,101,155,48,52,18,158,162,37,100,2,0,55,38,37,36,47,16,10,54,11, -3,1,4,103,55,49,52,156,3,1,4,103,55,49,53,157,3,1,4,103,55, -49,54,158,3,1,4,103,55,49,55,159,3,1,7,101,110,118,51,56,51,50, -160,2,160,2,160,2,160,16,10,53,11,2,106,2,126,2,128,2,129,3,1, -7,101,110,118,51,56,51,51,161,2,161,2,161,2,161,158,2,118,55,158,2, -119,55,2,120,55,55,18,158,95,100,2,125,58,38,37,36,47,16,12,57,11, -3,1,4,103,55,48,57,162,3,1,4,103,55,49,48,163,3,1,4,103,55, -49,49,164,3,1,4,103,55,49,50,165,3,1,4,103,55,49,51,166,3,1, -7,101,110,118,51,56,53,50,167,2,167,2,167,2,167,2,167,16,12,56,11, -2,106,2,126,2,107,2,128,2,129,3,1,7,101,110,118,51,56,53,51,168, -2,168,2,168,2,168,2,168,158,96,10,2,64,2,121,2,122,58,158,160,10, -2,0,2,123,2,124,58,58,18,16,2,96,2,127,8,26,93,8,252,184,12, -16,4,59,11,61,114,169,3,1,7,101,110,118,51,56,54,53,170,95,9,8, -252,184,12,2,86,18,158,95,100,2,136,8,29,38,37,36,47,16,16,8,28, -11,3,1,4,103,55,48,50,171,3,1,4,103,55,48,51,172,3,1,4,103, -55,48,52,173,3,1,4,103,55,48,53,174,3,1,4,103,55,48,54,175,3, -1,4,103,55,48,55,176,3,1,4,103,55,48,56,177,3,1,7,101,110,118, -51,56,55,55,178,2,178,2,178,2,178,2,178,2,178,2,178,16,16,8,27, -11,2,106,2,126,2,107,2,128,2,129,2,137,2,138,3,1,7,101,110,118, -51,56,55,56,179,2,179,2,179,2,179,2,179,2,179,2,179,158,94,10,94, -2,99,2,130,8,29,158,97,10,2,125,95,2,64,2,99,2,131,159,2,0, -2,132,2,133,160,2,57,2,99,2,134,2,135,8,29,8,29,18,16,2,96, -2,127,8,31,93,8,252,189,12,16,4,8,30,11,2,169,3,1,7,101,110, -118,51,56,57,52,180,95,9,8,252,189,12,2,86,11,16,5,93,2,55,87, -95,83,159,34,93,80,159,34,8,33,35,89,162,35,35,41,9,223,0,251,80, -158,38,47,20,15,159,38,46,49,21,94,3,1,4,103,55,53,53,181,3,1, -4,103,55,53,52,182,248,22,52,198,248,22,78,198,83,159,34,93,80,159,34, -8,32,35,89,162,35,35,41,9,223,0,251,80,158,38,47,20,15,159,38,42, -49,21,94,3,1,4,103,55,52,57,183,3,1,4,103,55,52,56,184,248,22, -52,198,248,22,78,198,89,162,34,35,8,28,9,223,0,27,249,22,209,20,15, -159,37,34,49,196,27,28,248,80,158,37,34,194,249,80,158,38,35,248,80,158, -39,36,196,27,248,80,158,40,37,197,28,248,80,158,40,34,193,249,80,158,41, -38,27,248,80,158,43,36,196,28,248,80,158,43,39,193,248,22,9,89,162,34, -35,41,9,224,9,1,27,249,22,2,89,162,34,35,50,9,224,4,5,249,80, -158,37,40,28,248,80,158,38,34,197,249,80,158,39,35,248,80,158,40,36,199, -27,248,80,158,41,37,200,28,248,80,158,41,34,193,27,28,248,22,206,194,193, -200,249,80,158,43,35,248,80,158,44,36,196,27,248,80,158,45,37,197,248,22, -59,250,22,209,199,196,199,11,11,194,248,80,158,39,41,196,28,248,22,57,193, -21,95,9,9,9,248,80,158,37,42,193,11,27,248,80,158,43,37,196,28,248, -80,158,43,34,193,249,80,158,44,38,27,248,80,158,46,36,196,28,248,80,158, -46,34,193,249,80,158,47,35,248,80,158,48,36,195,27,248,80,158,49,37,196, -28,248,80,158,49,39,193,248,22,59,248,80,158,50,41,194,11,11,27,248,80, -158,46,37,196,28,248,80,158,46,39,193,248,80,158,46,41,193,11,11,11,11, -28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196,27,248,22,90, -197,27,249,22,70,199,38,27,249,22,70,200,39,27,249,22,69,201,40,27,249, -22,209,20,15,159,46,35,49,250,22,2,89,162,34,36,45,9,224,15,16,27, -249,22,209,20,15,159,38,36,49,198,27,248,80,158,38,43,194,28,192,196,27, -28,248,80,158,39,34,195,249,80,158,40,38,248,80,158,41,36,197,248,80,158, -41,43,248,80,158,42,37,198,11,28,192,192,250,22,252,39,2,11,6,19,19, -98,97,100,32,118,97,114,105,97,98,108,101,32,115,121,110,116,97,120,185,198, -248,22,216,249,80,158,52,44,20,15,159,52,37,49,206,248,22,216,249,80,158, -52,44,20,15,159,52,38,49,204,27,28,248,80,158,46,39,194,248,80,158,46, -41,194,11,28,192,27,249,22,209,20,15,159,48,39,49,249,80,158,50,44,20, -15,159,50,40,49,200,27,248,80,158,48,43,194,28,192,249,80,158,49,45,23, -16,27,252,22,61,23,17,202,206,204,23,16,250,80,158,53,46,89,162,34,34, -47,9,224,19,3,252,80,158,40,47,20,15,159,40,41,49,21,95,3,1,4, -103,55,53,51,186,3,1,4,103,55,53,48,187,3,1,4,103,55,53,50,188, -250,22,2,80,159,43,8,32,35,248,22,52,201,248,22,89,201,248,22,87,198, -249,22,65,248,22,90,200,250,80,158,45,47,20,15,159,45,43,49,21,93,3, -1,4,103,55,53,49,189,248,22,78,203,21,96,2,136,66,100,111,108,111,111, -112,190,94,94,63,118,97,114,191,64,105,110,105,116,192,2,127,95,2,125,94, -63,110,111,116,193,62,101,48,194,96,2,0,61,99,195,2,127,95,2,190,64, -115,116,101,112,196,2,127,20,15,159,53,44,49,27,28,248,80,158,49,34,195, -249,80,158,50,35,248,80,158,51,36,197,27,248,80,158,52,37,198,28,248,80, -158,52,39,193,248,80,158,52,41,193,11,11,28,192,27,248,22,52,194,27,248, -22,53,195,249,80,158,52,45,23,19,27,254,22,61,23,22,202,23,15,23,17, -23,19,203,23,21,250,80,158,56,46,89,162,34,34,49,9,224,22,3,254,80, -158,42,47,20,15,159,42,45,49,21,97,3,1,4,103,55,54,49,197,3,1, -4,103,55,54,48,198,3,1,4,103,55,53,55,199,3,1,4,103,55,53,54, -200,3,1,4,103,55,53,57,201,250,22,2,80,159,45,8,33,35,248,22,52, -203,249,22,69,204,40,249,22,70,201,38,249,22,70,201,39,248,22,78,200,249, -22,65,248,22,90,202,250,80,158,47,47,20,15,159,47,47,49,21,93,3,1, -4,103,55,53,56,202,248,22,87,205,21,96,2,136,2,190,94,94,2,191,2, -192,2,127,96,2,125,2,194,96,2,0,2,128,2,129,2,127,96,2,0,2, -195,2,127,95,2,190,2,196,2,127,20,15,159,56,48,49,250,22,252,39,2, -11,2,71,197,248,80,158,46,48,20,15,159,46,49,49,250,22,252,39,2,11, -2,71,196,34,20,98,159,36,16,15,2,72,2,75,2,77,2,79,2,81,2, -88,30,203,2,73,73,115,116,120,45,99,104,101,99,107,47,101,115,99,204,7, -2,90,30,205,2,73,70,115,116,120,45,114,111,116,97,116,101,206,12,2,83, -30,207,2,86,1,26,100,97,116,117,109,45,62,115,121,110,116,97,120,45,111, -98,106,101,99,116,47,115,104,97,112,101,208,2,2,144,2,147,2,85,30,209, -70,35,37,119,105,116,104,45,115,116,120,210,76,119,105,116,104,45,115,121,110, -116,97,120,45,102,97,105,108,211,3,16,16,18,98,2,92,8,33,38,37,36, -16,4,8,32,11,66,111,114,105,103,45,120,212,3,1,7,101,110,118,51,57, -53,50,213,18,100,2,92,8,36,38,37,36,8,32,16,16,8,35,11,3,1, -4,103,55,51,52,214,3,1,4,103,55,51,53,215,3,1,4,103,55,51,54, -216,3,1,4,103,55,51,55,217,3,1,4,103,55,51,56,218,3,1,4,103, -55,51,57,219,3,1,4,103,55,52,48,220,3,1,7,101,110,118,51,57,54, -57,221,2,221,2,221,2,221,2,221,2,221,2,221,16,16,8,34,11,2,106, -2,191,2,192,2,196,2,194,2,128,2,195,3,1,7,101,110,118,51,57,55, -48,222,2,222,2,222,2,222,2,222,2,222,2,222,18,101,2,92,8,38,38, -37,36,8,32,8,35,8,34,16,6,8,37,11,2,126,61,115,223,3,1,7, -101,110,118,51,57,56,55,224,2,224,18,16,2,158,64,100,101,115,116,225,8, -36,8,39,18,8,39,18,101,2,92,8,41,38,37,36,8,32,8,35,8,34, -16,4,8,40,11,3,1,4,103,55,52,53,226,3,1,7,101,110,118,52,48, -48,57,227,18,16,2,158,2,225,8,41,8,42,18,158,97,10,2,136,2,190, -2,186,95,2,125,94,2,193,2,187,158,2,0,2,188,8,41,18,158,95,10, -2,183,2,184,8,41,18,16,2,103,93,158,159,10,2,190,2,189,8,41,8, -50,98,8,49,10,34,11,95,159,2,18,9,11,159,2,94,9,11,159,2,73, -9,11,16,14,73,115,121,110,116,97,120,45,99,97,115,101,42,42,228,29,229, -11,11,2,208,2,229,2,148,2,229,78,112,97,116,116,101,114,110,45,115,117, -98,115,116,105,116,117,116,101,230,2,229,2,87,2,229,66,115,121,110,116,97, -120,231,2,229,75,115,117,98,115,116,105,116,117,116,101,45,115,116,111,112,232, -2,229,98,8,48,10,35,11,95,159,64,35,37,115,99,233,9,11,159,2,94, -9,11,159,2,73,9,11,16,0,96,8,47,8,254,1,11,16,0,16,4,8, -46,11,2,99,3,1,6,101,110,118,52,53,52,234,16,4,8,45,11,68,104, -101,114,101,45,115,116,120,235,3,1,6,101,110,118,52,53,54,236,16,4,8, -44,11,2,235,2,236,13,16,4,35,2,229,2,86,11,93,8,252,251,12,16, -4,8,43,11,2,169,3,1,7,101,110,118,52,48,50,48,237,95,9,8,252, -251,12,2,86,18,16,2,96,2,127,8,52,93,8,252,251,12,16,4,8,51, -11,2,169,2,237,95,9,8,252,251,12,2,86,18,158,96,103,2,136,8,55, -38,37,36,8,32,8,35,8,34,8,40,16,6,8,54,11,3,1,4,103,55, -52,54,238,3,1,4,103,55,52,55,239,3,1,7,101,110,118,52,48,50,55, -240,2,240,16,4,8,53,11,2,129,3,1,7,101,110,118,52,48,50,56,241, -158,2,190,8,55,158,2,197,8,55,158,97,10,2,125,2,198,159,2,0,2, -199,2,200,158,2,0,2,201,8,55,8,55,18,158,95,10,2,181,2,182,8, -55,18,16,2,103,93,158,159,10,2,190,2,202,8,55,8,57,8,49,8,48, -8,47,8,46,8,45,8,44,13,16,4,35,2,229,2,86,11,93,8,252,2, -13,16,4,8,56,11,2,169,3,1,7,101,110,118,52,48,51,52,242,95,9, -8,252,2,13,2,86,18,16,2,96,2,127,8,59,93,8,252,2,13,16,4, -8,58,11,2,169,2,242,95,9,8,252,2,13,2,86,18,16,2,158,94,98, -2,196,8,63,93,8,252,226,12,16,4,8,62,11,3,1,8,119,115,116,109, -112,55,52,49,243,3,1,7,101,110,118,51,57,56,54,244,16,4,8,61,11, -3,1,4,103,55,52,52,245,3,1,7,101,110,118,52,48,51,57,246,16,4, -8,60,11,65,95,101,108,115,101,247,3,1,7,101,110,118,52,48,52,48,248, -158,2,127,8,63,8,63,95,9,8,252,226,12,2,210,11,16,5,93,2,63, -89,162,34,35,45,9,223,0,27,249,22,209,20,15,159,37,34,42,196,27,28, -248,80,158,37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158, -40,37,197,28,248,80,158,40,34,193,249,80,158,41,38,248,80,158,42,36,195, -248,80,158,42,39,248,80,158,43,37,196,11,11,28,192,27,248,22,52,194,27, -248,22,53,195,249,80,158,40,40,199,250,80,158,43,41,20,15,159,43,35,42, -21,93,3,1,4,103,55,54,52,249,197,250,22,252,39,2,11,2,71,196,34, -20,98,159,34,16,8,2,72,2,75,2,77,2,79,2,81,2,83,2,144,2, -85,16,2,18,98,2,92,8,65,38,37,36,16,4,8,64,11,2,99,3,1, -7,101,110,118,52,48,52,52,250,18,158,94,100,2,6,8,68,38,37,36,8, -64,16,6,8,67,11,3,1,4,103,55,54,50,251,3,1,4,103,55,54,51, -252,252,0,3,1,7,101,110,118,52,48,52,57,252,253,0,2,252,253,0,16, -6,8,66,11,2,63,63,101,120,112,252,254,0,3,1,7,101,110,118,52,48, -53,48,252,255,0,2,252,255,0,158,96,10,66,108,97,109,98,100,97,252,0, -1,9,2,249,8,68,8,68,11,16,5,93,2,96,27,247,22,252,94,3,253, -22,60,248,199,20,15,159,42,34,34,248,199,20,15,159,42,35,34,248,199,20, -15,159,42,36,34,248,22,60,248,200,20,15,159,43,37,34,248,22,60,248,200, -20,15,159,43,38,34,10,43,20,98,159,34,16,0,16,5,18,97,2,4,8, -69,38,37,36,18,16,2,158,2,6,8,69,8,70,18,16,2,158,2,8,8, -69,8,71,18,16,2,158,2,10,8,69,8,72,18,16,2,158,2,12,8,69, -8,73,11,16,5,93,2,61,89,162,34,35,55,9,223,0,27,249,22,209,20, -15,159,37,34,49,196,27,28,248,80,158,37,34,194,249,80,158,38,35,248,80, -158,39,36,196,27,248,80,158,40,37,197,28,248,80,158,40,34,193,28,248,80, -158,40,38,248,80,158,41,36,194,27,248,80,158,41,37,194,28,248,80,158,41, -34,193,249,80,158,42,35,248,80,158,43,36,195,27,248,80,158,44,37,196,28, -248,80,158,44,39,193,248,80,158,44,40,193,11,11,11,11,11,28,192,27,248, -22,52,194,27,248,22,78,195,27,248,22,80,196,27,249,22,61,196,195,251,80, -158,44,41,20,15,159,44,35,49,21,94,3,1,4,103,55,55,53,252,1,1, -3,1,4,103,55,55,52,252,2,1,248,22,52,197,248,22,53,197,27,28,248, -80,158,38,34,195,249,80,158,39,35,248,80,158,40,36,197,27,248,80,158,41, -37,198,28,248,80,158,41,34,193,249,80,158,42,42,27,248,80,158,44,36,196, -28,248,80,158,44,39,193,248,22,9,89,162,34,35,41,9,224,10,1,27,249, -22,2,89,162,34,35,46,9,224,4,5,249,80,158,37,43,28,248,80,158,38, -34,197,249,80,158,39,35,248,80,158,40,36,199,27,248,80,158,41,37,200,28, -248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195,248,80,158,43, -38,248,80,158,44,37,196,11,11,194,248,80,158,39,40,196,28,248,22,57,193, -21,94,9,9,248,80,158,37,44,193,11,27,248,80,158,44,37,196,28,248,80, -158,44,34,193,249,80,158,45,35,248,80,158,46,36,195,27,248,80,158,47,37, -196,28,248,80,158,47,39,193,248,80,158,47,40,193,11,11,11,11,28,192,27, -248,22,52,194,27,248,22,78,195,27,248,22,87,196,27,248,22,90,197,27,248, -22,89,198,27,249,22,209,20,15,159,45,36,49,249,22,1,22,65,250,22,2, -22,59,248,22,216,249,80,158,53,45,20,15,159,53,37,49,206,248,22,216,249, -80,158,53,45,20,15,159,53,38,49,205,27,28,248,80,158,45,39,194,248,80, -158,45,40,194,11,28,192,249,80,158,46,46,205,27,250,22,61,198,200,201,250, -80,158,50,47,89,162,34,34,42,9,224,16,3,252,80,158,40,41,20,15,159, -40,39,49,21,95,3,1,4,103,55,55,57,252,3,1,3,1,4,103,55,56, -49,252,4,1,3,1,4,103,55,56,48,252,5,1,248,22,52,198,248,22,80, -198,248,22,78,198,21,96,1,22,119,105,116,104,45,99,111,110,116,105,110,117, -97,116,105,111,110,45,109,97,114,107,252,6,1,2,21,96,2,19,95,1,27, -99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107,45,115,101,116, -45,102,105,114,115,116,252,7,1,11,2,21,63,112,47,118,252,8,1,2,127, -97,2,136,9,65,101,120,112,114,49,252,9,1,64,101,120,112,114,252,10,1, -2,127,20,15,159,50,40,49,248,80,158,45,48,20,15,159,45,41,49,250,22, -252,39,2,11,2,71,197,34,20,98,159,34,16,15,2,72,2,75,2,77,2, -79,2,83,2,88,2,90,2,85,2,81,2,203,2,205,2,207,2,144,2,147, -2,209,16,8,18,98,2,92,8,75,38,37,36,16,4,8,74,11,63,115,116, -120,252,11,1,3,1,7,101,110,118,52,48,54,48,252,12,1,18,158,162,37, -100,2,136,8,78,38,37,36,8,74,16,8,8,77,11,3,1,4,103,55,55, -49,252,13,1,3,1,4,103,55,55,50,252,14,1,3,1,4,103,55,55,51, -252,15,1,3,1,7,101,110,118,52,48,54,55,252,16,1,2,252,16,1,2, -252,16,1,16,8,8,76,11,2,106,2,252,9,1,2,252,10,1,3,1,7, -101,110,118,52,48,54,56,252,17,1,2,252,17,1,2,252,17,1,158,9,8, -78,158,2,252,1,1,8,78,2,252,2,1,8,78,8,78,18,100,2,92,8, -81,38,37,36,8,74,16,12,8,80,11,3,1,4,103,55,54,54,252,18,1, -3,1,4,103,55,54,55,252,19,1,3,1,4,103,55,54,56,252,20,1,3, -1,4,103,55,54,57,252,21,1,3,1,4,103,55,55,48,252,22,1,3,1, -7,101,110,118,52,48,56,55,252,23,1,2,252,23,1,2,252,23,1,2,252, -23,1,2,252,23,1,16,12,8,79,11,2,106,65,112,97,114,97,109,252,24, -1,63,118,97,108,252,25,1,2,252,9,1,2,252,10,1,3,1,7,101,110, -118,52,48,56,56,252,26,1,2,252,26,1,2,252,26,1,2,252,26,1,2, -252,26,1,18,16,2,158,2,225,8,81,8,82,18,8,82,18,158,96,102,2, -252,6,1,8,85,38,37,36,8,74,8,80,8,79,16,4,8,84,11,3,1, -4,103,55,55,56,252,27,1,3,1,7,101,110,118,52,49,48,54,252,28,1, -16,4,8,83,11,2,252,8,1,3,1,7,101,110,118,52,49,48,55,252,29, -1,158,2,21,8,85,158,160,10,2,19,95,2,252,7,1,11,2,21,2,252, -3,1,8,85,158,161,10,2,136,9,2,252,4,1,2,252,5,1,8,85,8, -85,18,16,2,96,2,127,8,87,93,8,252,68,13,16,4,8,86,11,2,169, -3,1,7,101,110,118,52,49,49,49,252,30,1,95,9,8,252,68,13,2,86, -18,16,2,158,94,98,2,252,8,1,8,91,93,8,252,59,13,16,4,8,90, -11,3,1,8,119,115,116,109,112,55,55,54,252,31,1,3,1,7,101,110,118, -52,49,48,48,252,32,1,16,4,8,89,11,3,1,4,103,55,55,55,252,33, -1,3,1,7,101,110,118,52,49,49,52,252,34,1,16,4,8,88,11,2,247, -3,1,7,101,110,118,52,49,49,53,252,35,1,158,2,127,8,91,8,91,95, -9,8,252,59,13,2,210,11,16,5,93,2,58,89,162,34,35,51,9,223,0, -27,249,22,209,20,15,159,37,34,42,196,27,28,248,80,158,37,34,194,249,80, -158,38,35,248,80,158,39,36,196,27,248,80,158,40,37,197,28,248,80,158,40, -34,193,249,80,158,41,35,248,80,158,42,36,195,27,248,80,158,43,37,196,28, -248,80,158,43,34,193,249,80,158,44,35,248,80,158,45,36,195,27,248,80,158, -46,37,196,28,248,80,158,46,38,193,248,80,158,46,39,193,11,11,11,11,28, -192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196,27,248,22,88,197, -249,80,158,42,40,201,27,250,22,61,199,198,200,252,80,158,48,41,20,15,159, -48,35,42,21,95,3,1,4,103,55,56,54,252,36,1,3,1,4,103,55,56, -56,252,37,1,3,1,4,103,55,56,55,252,38,1,248,22,80,198,248,22,52, -198,248,22,78,198,250,22,252,39,2,11,2,71,196,34,20,98,159,34,16,8, -2,72,2,75,2,77,2,79,2,88,2,90,2,144,2,85,16,2,18,98,2, -92,8,93,38,37,36,16,4,8,92,11,2,252,11,1,3,1,7,101,110,118, -52,49,49,57,252,39,1,18,158,96,100,2,252,6,1,8,96,38,37,36,8, -92,16,10,8,95,11,3,1,4,103,55,56,50,252,40,1,3,1,4,103,55, -56,51,252,41,1,3,1,4,103,55,56,52,252,42,1,3,1,4,103,55,56, -53,252,43,1,3,1,7,101,110,118,52,49,50,54,252,44,1,2,252,44,1, -2,252,44,1,2,252,44,1,16,10,8,94,11,2,106,69,98,111,111,108,45, -101,120,112,114,252,45,1,2,252,9,1,2,252,10,1,3,1,7,101,110,118, -52,49,50,55,252,46,1,2,252,46,1,2,252,46,1,2,252,46,1,158,2, -47,8,96,158,95,10,76,109,97,107,101,45,116,104,114,101,97,100,45,99,101, -108,108,252,47,1,95,63,97,110,100,252,48,1,2,252,36,1,10,8,96,158, -96,10,2,0,93,2,51,160,2,136,9,2,252,37,1,2,252,38,1,8,96, -8,96,11,16,5,93,2,95,27,247,22,252,94,3,253,22,60,248,199,20,15, -159,42,34,34,248,199,20,15,159,42,35,34,248,199,20,15,159,42,36,34,248, -22,60,248,200,20,15,159,43,37,34,248,22,60,248,200,20,15,159,43,38,34, -10,43,20,98,159,34,16,0,16,5,18,16,2,158,2,35,8,69,8,97,18, -16,2,158,2,37,8,69,8,98,18,16,2,158,2,39,8,69,8,99,18,16, -2,158,2,41,8,69,8,100,18,16,2,158,2,43,8,69,8,101,11,16,5, -94,2,52,2,54,87,94,83,159,34,93,80,159,34,56,35,89,162,35,35,41, -9,223,0,251,80,158,38,42,20,15,159,38,40,47,21,94,3,1,4,103,56, -48,52,252,49,1,3,1,4,103,56,48,51,252,50,1,248,22,52,198,248,22, -78,198,27,89,162,8,36,35,36,62,119,104,252,51,1,223,1,89,162,34,35, -54,9,224,0,1,27,249,22,209,20,15,159,38,34,47,197,27,28,248,80,158, -38,34,194,249,80,158,39,35,248,80,158,40,36,196,27,248,80,158,41,37,197, -28,248,80,158,41,34,193,28,248,80,158,41,38,248,80,158,42,36,194,27,248, -80,158,42,37,194,28,248,80,158,42,34,193,249,80,158,43,35,248,80,158,44, -36,195,27,248,80,158,45,37,196,28,248,80,158,45,39,193,248,80,158,45,40, -193,11,11,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22, -80,196,249,80,158,42,41,201,27,249,22,61,198,197,251,80,158,47,42,20,15, -159,47,35,47,21,94,3,1,4,103,55,57,57,252,52,1,3,1,4,103,55, -57,56,252,53,1,248,22,52,197,248,22,53,197,27,28,248,80,158,39,34,195, -249,80,158,40,35,248,80,158,41,36,197,27,248,80,158,42,37,198,28,248,80, -158,42,34,193,249,80,158,43,43,27,248,80,158,45,36,196,28,248,80,158,45, -39,193,248,22,9,89,162,34,35,41,9,224,11,1,27,249,22,2,89,162,34, -35,46,9,224,4,5,249,80,158,37,44,28,248,80,158,38,34,197,249,80,158, -39,35,248,80,158,40,36,199,27,248,80,158,41,37,200,28,248,80,158,41,34, -193,249,80,158,42,35,248,80,158,43,36,195,248,80,158,43,38,248,80,158,44, -37,196,11,11,194,248,80,158,39,40,196,28,248,22,57,193,21,94,9,9,248, -80,158,37,45,193,11,27,248,80,158,45,37,196,28,248,80,158,45,34,193,249, -80,158,46,35,248,80,158,47,36,195,27,248,80,158,48,37,196,28,248,80,158, -48,39,193,248,80,158,48,40,193,11,11,11,11,28,192,27,248,22,52,194,27, -248,22,78,195,27,248,22,87,196,27,248,22,90,197,27,248,22,89,198,27,249, -22,209,20,15,159,46,36,47,28,203,20,15,159,46,37,47,20,15,159,46,38, -47,249,80,158,46,41,205,27,252,22,61,203,201,202,204,200,250,80,158,50,46, -89,162,34,34,46,9,224,16,3,253,80,158,41,42,20,15,159,41,39,47,21, -96,3,1,4,103,56,48,53,252,54,1,3,1,4,103,56,48,54,252,55,1, -3,1,4,103,56,48,56,252,56,1,3,1,4,103,56,48,55,252,57,1,250, -22,2,80,159,44,56,35,248,22,90,202,248,22,52,202,248,22,89,199,248,22, -87,199,248,22,78,199,21,95,2,136,93,94,61,108,252,58,1,95,64,108,105, -115,116,252,59,1,95,64,99,111,110,115,252,60,1,64,112,114,101,100,252,61, -1,67,104,97,110,100,108,101,114,252,62,1,2,127,95,2,136,93,94,63,98, -112,122,252,63,1,95,2,252,7,1,11,2,47,96,2,252,6,1,2,47,94, -2,252,47,1,11,93,94,67,99,97,108,108,47,101,99,252,64,1,95,2,252, -0,1,93,2,107,96,2,252,6,1,2,47,2,252,63,1,95,2,61,93,94, -1,25,99,117,114,114,101,110,116,45,101,120,99,101,112,116,105,111,110,45,104, -97,110,100,108,101,114,252,65,1,95,2,252,0,1,93,61,101,252,66,1,94, -2,107,95,2,252,0,1,9,96,2,136,64,108,111,111,112,252,67,1,93,94, -2,252,58,1,2,252,58,1,96,2,154,94,94,65,110,117,108,108,63,252,68, -1,2,252,58,1,94,65,114,97,105,115,101,252,69,1,2,252,66,1,94,94, -94,64,99,97,97,114,252,70,1,2,252,58,1,2,252,66,1,63,117,113,49, -252,71,1,94,2,155,94,2,252,67,1,94,63,99,100,114,252,72,1,2,252, -58,1,95,76,99,97,108,108,45,119,105,116,104,45,118,97,108,117,101,115,252, -73,1,97,2,252,0,1,9,2,252,9,1,2,252,10,1,2,127,95,2,252, -0,1,64,97,114,103,115,252,74,1,95,2,252,0,1,9,95,65,97,112,112, -108,121,252,75,1,66,118,97,108,117,101,115,252,76,1,2,252,74,1,20,15, -159,50,41,47,250,22,252,39,2,11,2,71,197,249,22,7,248,195,10,248,195, -11,38,20,98,159,35,16,13,2,72,2,75,2,77,2,79,2,83,2,88,2, -90,2,144,2,85,2,81,2,203,2,205,2,147,16,8,18,99,2,92,8,104, -38,37,36,16,4,8,103,11,74,100,105,115,97,98,108,101,45,98,114,101,97, -107,63,252,77,1,3,1,7,101,110,118,52,49,52,50,252,78,1,16,4,8, -102,11,2,252,11,1,3,1,7,101,110,118,52,49,52,51,252,79,1,18,158, -162,37,101,2,136,8,107,38,37,36,8,103,8,102,16,8,8,106,11,3,1, -4,103,55,57,53,252,80,1,3,1,4,103,55,57,54,252,81,1,3,1,4, -103,55,57,55,252,82,1,3,1,7,101,110,118,52,49,53,48,252,83,1,2, -252,83,1,2,252,83,1,16,8,8,105,11,2,106,2,252,9,1,2,252,10, -1,3,1,7,101,110,118,52,49,53,49,252,84,1,2,252,84,1,2,252,84, -1,158,9,8,107,158,2,252,52,1,8,107,2,252,53,1,8,107,8,107,18, -101,2,92,8,110,38,37,36,8,103,8,102,16,12,8,109,11,3,1,4,103, -55,57,48,252,85,1,3,1,4,103,55,57,49,252,86,1,3,1,4,103,55, -57,50,252,87,1,3,1,4,103,55,57,51,252,88,1,3,1,4,103,55,57, -52,252,89,1,3,1,7,101,110,118,52,49,55,48,252,90,1,2,252,90,1, -2,252,90,1,2,252,90,1,2,252,90,1,16,12,8,108,11,2,106,2,252, -61,1,2,252,62,1,2,252,9,1,2,252,10,1,3,1,7,101,110,118,52, -49,55,49,252,91,1,2,252,91,1,2,252,91,1,2,252,91,1,2,252,91, -1,18,158,96,10,66,98,101,103,105,110,48,252,92,1,94,94,64,99,100,97, -114,252,93,1,2,252,58,1,2,252,66,1,96,2,252,6,1,2,47,2,252, -63,1,93,2,51,8,110,18,158,97,10,2,252,6,1,2,47,2,252,63,1, -95,2,0,93,2,51,94,94,2,252,93,1,2,252,58,1,2,252,66,1,8, -110,18,158,96,10,2,136,93,94,2,252,58,1,158,2,252,59,1,2,252,54, -1,95,2,136,93,94,2,252,63,1,95,2,252,7,1,11,2,47,96,2,252, -6,1,2,47,94,2,252,47,1,11,93,94,2,252,64,1,95,2,252,0,1, -93,2,107,96,2,252,6,1,2,47,2,252,63,1,95,2,61,93,94,2,252, -65,1,95,2,252,0,1,93,2,252,66,1,94,2,107,95,2,252,0,1,9, -96,2,136,2,252,67,1,93,94,2,252,58,1,2,252,58,1,96,2,154,94, -94,2,252,68,1,2,252,58,1,94,2,252,69,1,2,252,66,1,94,94,94, -2,252,70,1,2,252,58,1,2,252,66,1,2,252,55,1,94,2,155,94,2, -252,67,1,94,2,252,72,1,2,252,58,1,95,2,252,73,1,160,2,252,0, -1,9,2,252,56,1,2,252,57,1,95,2,252,0,1,2,252,74,1,95,2, -252,0,1,9,95,2,252,75,1,2,252,76,1,2,252,74,1,8,110,18,158, -96,10,2,252,60,1,2,252,49,1,2,252,50,1,8,110,18,16,2,96,2, -127,8,112,93,8,252,141,13,16,4,8,111,11,2,169,3,1,7,101,110,118, -52,49,57,54,252,94,1,95,9,8,252,141,13,2,86,11,16,5,93,2,53, -87,95,83,159,34,93,80,159,34,8,28,35,89,162,34,36,49,68,116,114,121, -45,110,101,120,116,252,95,1,223,0,27,28,248,80,158,36,34,195,249,80,158, -37,35,248,80,158,38,36,197,27,248,80,158,39,37,198,28,248,80,158,39,34, -193,249,80,158,40,39,27,248,80,158,42,36,196,28,248,80,158,42,41,193,248, -22,59,248,80,158,43,42,194,11,27,248,80,158,42,37,196,28,248,80,158,42, -34,193,249,80,158,43,39,248,80,158,44,36,195,248,80,158,44,38,248,80,158, -45,37,196,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22, -80,196,28,27,248,80,158,40,42,249,80,158,42,43,20,15,159,42,36,50,197, -87,94,249,22,3,89,162,34,35,41,9,224,7,9,28,248,80,158,36,44,195, -12,251,22,252,39,2,11,6,17,17,110,111,116,32,97,110,32,105,100,101,110, -116,105,102,105,101,114,252,96,1,196,198,194,27,248,80,158,41,45,194,28,192, -251,22,252,39,2,11,6,20,20,100,117,112,108,105,99,97,116,101,32,105,100, -101,110,116,105,102,105,101,114,252,97,1,204,196,12,27,249,22,209,20,15,159, -41,37,50,248,80,158,42,46,249,80,158,44,43,20,15,159,44,38,50,199,27, -28,248,80,158,41,41,194,248,80,158,41,42,194,11,28,192,249,80,158,42,47, -202,27,250,22,61,200,201,198,250,80,158,46,48,89,162,34,34,45,9,224,12, -3,252,80,158,40,40,20,15,159,40,39,50,21,95,3,1,4,103,56,50,50, -252,98,1,3,1,4,103,56,50,49,252,99,1,3,1,4,103,56,50,53,252, -100,1,248,22,80,198,248,22,52,198,250,22,2,80,159,43,8,27,35,248,22, -78,201,248,22,80,201,21,96,70,108,101,116,45,118,97,108,117,101,115,252,101, -1,93,94,94,64,116,101,109,112,252,102,1,2,127,2,252,10,1,95,64,115, -101,116,33,252,103,1,62,105,100,252,104,1,2,252,102,1,2,127,20,15,159, -46,41,50,248,80,158,41,49,20,15,159,41,42,50,250,22,252,39,2,11,2, -71,200,250,22,252,39,2,11,2,71,197,83,159,34,93,80,159,34,8,27,35, -89,162,35,35,41,9,223,0,251,80,158,38,40,20,15,159,38,40,50,21,94, -3,1,4,103,56,50,52,252,105,1,3,1,4,103,56,50,51,252,106,1,248, -22,52,198,248,22,78,198,89,162,34,35,49,9,223,0,27,249,22,209,20,15, -159,37,34,50,196,27,28,248,80,158,37,34,194,249,80,158,38,35,248,80,158, -39,36,196,27,248,80,158,40,37,197,28,248,80,158,40,34,193,28,248,80,158, -40,38,248,80,158,41,36,194,27,248,80,158,41,37,194,28,248,80,158,41,34, -193,249,80,158,42,39,248,80,158,43,36,195,248,80,158,43,38,248,80,158,44, -37,196,11,11,11,11,28,192,27,248,22,52,194,27,248,22,53,195,250,80,158, -41,40,20,15,159,41,35,50,21,93,3,1,4,103,56,49,55,252,107,1,195, -27,28,248,80,158,38,34,195,249,80,158,39,35,248,80,158,40,36,197,27,248, -80,158,41,37,198,28,248,80,158,41,34,193,249,80,158,42,39,27,248,80,158, -44,36,196,28,248,80,158,44,34,193,249,80,158,45,35,248,80,158,46,36,195, -248,80,158,46,38,248,80,158,47,37,196,11,27,248,80,158,44,37,196,28,248, -80,158,44,34,193,249,80,158,45,39,248,80,158,46,36,195,248,80,158,46,38, -248,80,158,47,37,196,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195, -27,248,22,80,196,28,248,80,158,41,44,194,27,249,22,61,196,195,251,80,158, -45,40,20,15,159,45,43,50,21,94,3,1,4,103,56,50,55,252,108,1,3, -1,4,103,56,50,54,252,109,1,248,22,52,197,248,22,53,197,249,80,159,42, -8,28,35,199,201,249,80,159,39,8,28,35,196,198,34,20,98,159,36,16,16, -2,72,2,75,2,77,2,79,2,83,2,81,2,85,2,88,2,90,2,207,2, -142,30,252,110,1,2,98,1,26,99,104,101,99,107,45,100,117,112,108,105,99, -97,116,101,45,105,100,101,110,116,105,102,105,101,114,252,111,1,0,30,252,112, -1,2,210,1,20,103,101,110,101,114,97,116,101,45,116,101,109,112,111,114,97, -114,105,101,115,252,113,1,0,2,144,2,147,2,209,16,10,18,98,2,92,8, -114,38,37,36,16,4,8,113,11,2,252,11,1,3,1,7,101,110,118,52,50, -48,49,252,114,1,18,158,95,100,2,252,101,1,8,117,38,37,36,8,113,16, -6,8,116,11,3,1,4,103,56,49,53,252,115,1,3,1,4,103,56,49,54, -252,116,1,3,1,7,101,110,118,52,50,48,55,252,117,1,2,252,117,1,16, -6,8,115,11,2,106,2,252,10,1,3,1,7,101,110,118,52,50,48,56,252, -118,1,2,252,118,1,158,94,10,94,9,2,252,107,1,8,117,158,94,10,64, -118,111,105,100,252,119,1,8,117,8,117,18,100,2,225,8,120,38,37,36,8, -113,16,8,8,119,11,3,1,4,103,56,48,57,252,120,1,3,1,4,103,56, -49,48,252,121,1,3,1,4,103,56,49,49,252,122,1,3,1,7,101,110,118, -52,50,50,52,252,123,1,2,252,123,1,2,252,123,1,16,8,8,118,11,2, -106,2,252,104,1,2,252,10,1,3,1,7,101,110,118,52,50,50,53,252,124, -1,2,252,124,1,2,252,124,1,18,16,2,158,2,92,8,120,8,121,18,16, -2,158,2,225,8,120,8,122,18,158,161,36,102,2,252,101,1,8,125,38,37, -36,8,113,8,119,8,118,16,4,8,124,11,3,1,4,103,56,50,48,252,125, -1,3,1,7,101,110,118,52,50,52,49,252,126,1,16,4,8,123,11,2,252, -102,1,3,1,7,101,110,118,52,50,52,50,252,127,1,158,94,10,94,2,252, -98,1,2,252,99,1,8,125,2,252,100,1,8,125,8,125,18,158,96,10,2, -252,103,1,2,252,105,1,2,252,106,1,8,125,18,16,2,96,2,127,8,127, -93,8,252,186,13,16,4,8,126,11,2,169,3,1,7,101,110,118,52,50,52, -54,252,128,1,95,9,8,252,186,13,2,86,18,16,2,158,94,98,2,252,102, -1,8,131,93,8,252,178,13,16,4,8,130,11,3,1,8,119,115,116,109,112, -56,49,56,252,129,1,3,1,7,101,110,118,52,50,51,54,252,130,1,16,4, -8,129,11,3,1,4,103,56,49,57,252,131,1,3,1,7,101,110,118,52,50, -53,49,252,132,1,16,4,8,128,11,2,247,3,1,7,101,110,118,52,50,53, -50,252,133,1,158,2,127,8,131,8,131,95,9,8,252,178,13,2,210,18,158, -95,100,2,252,103,1,8,134,38,37,36,8,113,16,8,8,133,11,3,1,4, -103,56,49,50,252,134,1,3,1,4,103,56,49,51,252,135,1,3,1,4,103, -56,49,52,252,136,1,3,1,7,101,110,118,52,50,54,48,252,137,1,2,252, -137,1,2,252,137,1,16,8,8,132,11,2,106,2,252,104,1,2,252,10,1, -3,1,7,101,110,118,52,50,54,49,252,138,1,2,252,138,1,2,252,138,1, -158,2,252,108,1,8,134,158,2,252,109,1,8,134,8,134,11,16,5,93,2, -56,89,162,34,35,51,9,223,0,27,249,22,209,20,15,159,37,34,42,196,27, -28,248,80,158,37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80, -158,40,37,197,28,248,80,158,40,34,193,249,80,158,41,35,248,80,158,42,36, -195,27,248,80,158,43,37,196,28,248,80,158,43,34,193,249,80,158,44,35,248, -80,158,45,36,195,27,248,80,158,46,37,196,28,248,80,158,46,38,193,248,80, -158,46,39,193,11,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27, -248,22,87,196,27,248,22,88,197,249,80,158,42,40,201,27,250,22,61,198,200, -199,252,80,158,48,41,20,15,159,48,35,42,21,95,3,1,4,103,56,51,50, -252,139,1,3,1,4,103,56,51,52,252,140,1,3,1,4,103,56,51,51,252, -141,1,248,22,78,198,248,22,80,198,248,22,52,198,250,22,252,39,2,11,2, -71,196,34,20,98,159,34,16,8,2,72,2,75,2,77,2,79,2,88,2,90, -2,144,2,85,16,2,18,98,2,92,8,136,38,37,36,16,4,8,135,11,2, -252,11,1,3,1,7,101,110,118,52,50,55,48,252,142,1,18,158,94,100,67, -99,97,108,108,47,99,99,252,143,1,8,139,38,37,36,8,135,16,10,8,138, -11,3,1,4,103,56,50,56,252,144,1,3,1,4,103,56,50,57,252,145,1, -3,1,4,103,56,51,48,252,146,1,3,1,4,103,56,51,49,252,147,1,3, -1,7,101,110,118,52,50,55,55,252,148,1,2,252,148,1,2,252,148,1,2, -252,148,1,16,10,8,137,11,2,106,2,191,65,98,111,100,121,49,252,149,1, -64,98,111,100,121,252,150,1,3,1,7,101,110,118,52,50,55,56,252,151,1, -2,252,151,1,2,252,151,1,2,252,151,1,158,161,10,2,252,0,1,93,2, -252,139,1,2,252,140,1,2,252,141,1,8,139,8,139,11,16,5,93,2,59, -89,162,34,35,51,9,223,0,27,249,22,209,20,15,159,37,34,44,196,27,28, -248,80,158,37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158, -40,37,197,28,248,80,158,40,34,193,249,80,158,41,35,248,80,158,42,36,195, -27,248,80,158,43,37,196,28,248,80,158,43,34,193,249,80,158,44,38,27,248, -80,158,46,36,196,28,248,80,158,46,39,193,248,22,59,248,80,158,47,40,194, -11,27,248,80,158,46,37,196,28,248,80,158,46,34,193,249,80,158,47,35,248, -80,158,48,36,195,27,248,80,158,49,37,196,28,248,80,158,49,39,193,248,80, -158,49,40,193,11,11,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195, -27,248,22,87,196,27,248,22,90,197,27,248,22,89,198,249,80,158,43,41,202, -27,251,22,61,202,199,200,201,250,80,158,47,42,89,162,34,34,43,9,224,13, -3,253,80,158,41,43,20,15,159,41,35,44,21,96,3,1,4,103,56,52,49, -252,152,1,3,1,4,103,56,52,48,252,153,1,3,1,4,103,56,52,51,252, -154,1,3,1,4,103,56,52,50,252,155,1,248,22,52,199,248,22,88,199,248, -22,87,199,248,22,78,199,21,98,2,136,9,95,73,100,101,102,105,110,101,45, -115,116,114,117,99,116,252,156,1,64,98,97,115,101,252,157,1,94,65,102,105, -101,108,100,252,158,1,2,127,2,252,149,1,2,252,150,1,2,127,20,15,159, -47,36,44,250,22,252,39,2,11,2,71,196,34,20,98,159,34,16,10,2,72, -2,75,2,77,2,79,2,81,2,88,2,90,2,144,2,147,2,85,16,3,18, -98,2,92,8,141,38,37,36,16,4,8,140,11,2,252,11,1,3,1,7,101, -110,118,52,50,57,48,252,159,1,18,158,163,38,100,2,136,8,144,38,37,36, -8,140,16,12,8,143,11,3,1,4,103,56,51,53,252,160,1,3,1,4,103, -56,51,54,252,161,1,3,1,4,103,56,51,55,252,162,1,3,1,4,103,56, -51,56,252,163,1,3,1,4,103,56,51,57,252,164,1,3,1,7,101,110,118, -52,50,57,57,252,165,1,2,252,165,1,2,252,165,1,2,252,165,1,2,252, -165,1,16,12,8,142,11,2,106,2,252,157,1,2,252,158,1,2,252,149,1, -2,252,150,1,3,1,7,101,110,118,52,51,48,48,252,166,1,2,252,166,1, -2,252,166,1,2,252,166,1,2,252,166,1,158,9,8,144,158,96,10,2,252, -156,1,2,252,152,1,2,252,153,1,8,144,158,2,252,154,1,8,144,2,252, -155,1,8,144,8,144,18,16,2,96,2,127,8,146,93,8,252,225,13,16,4, -8,145,11,2,169,3,1,7,101,110,118,52,51,49,50,252,167,1,95,9,8, -252,225,13,2,86,11,16,5,93,2,62,87,95,83,159,34,93,80,159,34,8, -27,35,89,162,35,35,41,9,223,0,251,80,158,38,42,20,15,159,38,40,50, -21,94,3,1,4,103,56,53,57,252,168,1,3,1,4,103,56,54,48,252,169, -1,248,22,52,198,248,22,87,198,83,159,34,93,80,159,34,8,26,35,89,162, -35,35,41,9,223,0,251,80,158,38,42,20,15,159,38,39,50,21,94,3,1, -4,103,56,53,56,252,170,1,3,1,4,103,56,53,55,252,171,1,248,22,52, -198,248,22,78,198,89,162,34,35,54,9,223,0,27,249,22,209,20,15,159,37, -34,50,196,27,28,248,80,158,37,34,194,249,80,158,38,35,248,80,158,39,36, -196,27,248,80,158,40,37,197,28,248,80,158,40,34,193,28,248,80,158,40,38, -248,80,158,41,36,194,27,248,80,158,41,37,194,28,248,80,158,41,34,193,249, -80,158,42,35,248,80,158,43,36,195,27,248,80,158,44,37,196,28,248,80,158, -44,39,193,248,80,158,44,40,193,11,11,11,11,11,28,192,27,248,22,52,194, -27,248,22,78,195,27,248,22,80,196,249,80,158,41,41,200,27,249,22,61,197, -198,251,80,158,46,42,20,15,159,46,35,50,21,94,3,1,4,103,56,53,51, -252,172,1,3,1,4,103,56,53,50,252,173,1,248,22,53,197,248,22,52,197, -27,28,248,80,158,38,34,195,249,80,158,39,35,248,80,158,40,36,197,27,248, -80,158,41,37,198,28,248,80,158,41,34,193,249,80,158,42,43,27,248,80,158, -44,36,196,28,248,80,158,44,39,193,248,22,9,89,162,34,35,41,9,224,10, -1,27,249,22,2,89,162,34,35,46,9,224,4,5,249,80,158,37,44,28,248, -80,158,38,34,197,249,80,158,39,35,248,80,158,40,36,199,27,248,80,158,41, -37,200,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195,248, -80,158,43,38,248,80,158,44,37,196,11,11,194,248,80,158,39,40,196,28,248, -22,57,193,21,94,9,9,248,80,158,37,45,193,11,27,248,80,158,44,37,196, -28,248,80,158,44,34,193,249,80,158,45,35,248,80,158,46,36,195,27,248,80, -158,47,37,196,28,248,80,158,47,39,193,248,80,158,47,40,193,11,11,11,11, -28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196,27,248,22,90, -197,27,248,22,89,198,27,249,22,209,20,15,159,45,36,50,248,80,158,46,46, -249,80,158,48,47,20,15,159,48,37,50,201,27,28,248,80,158,45,39,194,248, -80,158,45,40,194,11,28,192,249,80,158,46,41,205,27,252,22,61,204,205,200, -202,203,250,80,158,50,48,89,162,34,34,48,9,224,16,3,253,80,158,41,42, -20,15,159,41,38,50,21,96,3,1,4,103,56,54,54,252,174,1,3,1,4, -103,56,54,51,252,175,1,3,1,4,103,56,54,53,252,176,1,3,1,4,103, -56,54,52,252,177,1,250,22,2,80,159,44,8,26,35,248,22,87,202,248,22, -52,202,252,22,2,80,159,46,8,27,35,248,22,87,204,248,22,87,204,248,22, -78,204,248,22,78,204,248,22,89,199,248,22,90,199,21,95,2,136,94,94,63, -116,109,112,252,178,1,2,252,25,1,2,127,95,2,136,93,94,64,115,119,97, -112,252,179,1,96,2,252,0,1,9,96,2,136,93,94,2,223,2,252,178,1, -95,2,252,103,1,2,252,178,1,64,110,97,109,101,252,180,1,95,2,252,103, -1,2,252,180,1,2,223,2,127,96,72,100,121,110,97,109,105,99,45,119,105, -110,100,252,181,1,2,252,179,1,97,2,252,0,1,9,2,252,149,1,2,252, -150,1,2,127,2,252,179,1,20,15,159,50,41,50,248,80,158,45,49,20,15, -159,45,42,50,250,22,252,39,2,11,2,71,197,34,20,98,159,36,16,16,2, -72,2,75,2,77,2,79,2,83,2,88,2,90,2,144,2,85,2,81,2,203, -2,205,2,252,112,1,2,207,2,147,2,209,16,9,18,98,2,92,8,148,38, -37,36,16,4,8,147,11,2,252,11,1,3,1,7,101,110,118,52,51,49,53, -252,182,1,18,158,162,37,100,2,136,8,151,38,37,36,8,147,16,8,8,150, -11,3,1,4,103,56,52,57,252,183,1,3,1,4,103,56,53,48,252,184,1, -3,1,4,103,56,53,49,252,185,1,3,1,7,101,110,118,52,51,50,50,252, -186,1,2,252,186,1,2,252,186,1,16,8,8,149,11,2,106,2,252,149,1, -2,252,150,1,3,1,7,101,110,118,52,51,50,51,252,187,1,2,252,187,1, -2,252,187,1,158,9,8,151,158,2,252,172,1,8,151,2,252,173,1,8,151, -8,151,18,100,2,92,8,154,38,37,36,8,147,16,12,8,153,11,3,1,4, -103,56,52,52,252,188,1,3,1,4,103,56,52,53,252,189,1,3,1,4,103, -56,52,54,252,190,1,3,1,4,103,56,52,55,252,191,1,3,1,4,103,56, -52,56,252,192,1,3,1,7,101,110,118,52,51,52,50,252,193,1,2,252,193, -1,2,252,193,1,2,252,193,1,2,252,193,1,16,12,8,152,11,2,106,2, -252,180,1,2,252,25,1,2,252,149,1,2,252,150,1,3,1,7,101,110,118, -52,51,52,51,252,194,1,2,252,194,1,2,252,194,1,2,252,194,1,2,252, -194,1,18,16,2,158,2,225,8,154,8,155,18,158,95,102,2,136,8,158,38, -37,36,8,147,8,153,8,152,16,4,8,157,11,3,1,4,103,56,53,54,252, -195,1,3,1,7,101,110,118,52,51,54,48,252,196,1,16,4,8,156,11,2, -252,178,1,3,1,7,101,110,118,52,51,54,49,252,197,1,158,2,252,174,1, -8,158,158,96,10,2,136,93,94,2,252,179,1,159,2,252,0,1,9,2,252, -175,1,96,2,252,181,1,2,252,179,1,160,2,252,0,1,9,2,252,176,1, -2,252,177,1,2,252,179,1,8,158,8,158,18,158,95,10,2,252,170,1,2, -252,171,1,8,158,18,158,97,10,2,136,93,94,2,223,2,252,168,1,95,2, -252,103,1,2,252,168,1,2,252,169,1,95,2,252,103,1,2,252,169,1,2, -223,8,158,18,16,2,96,2,127,8,160,93,8,252,5,14,16,4,8,159,11, -2,169,3,1,7,101,110,118,52,51,54,53,252,198,1,95,9,8,252,5,14, -2,86,18,16,2,158,94,98,2,252,178,1,8,164,93,8,252,253,13,16,4, -8,163,11,3,1,8,119,115,116,109,112,56,53,52,252,199,1,3,1,7,101, -110,118,52,51,53,53,252,200,1,16,4,8,162,11,3,1,4,103,56,53,53, -252,201,1,3,1,7,101,110,118,52,51,55,50,252,202,1,16,4,8,161,11, -2,247,3,1,7,101,110,118,52,51,55,51,252,203,1,158,2,127,8,164,8, -164,95,9,8,252,253,13,2,210,11,16,5,93,2,60,89,162,34,35,49,9, -223,0,27,249,22,209,20,15,159,37,34,42,196,27,28,248,80,158,37,34,194, -249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40,37,197,28,248,80, -158,40,34,193,249,80,158,41,35,248,80,158,42,36,195,27,248,80,158,43,37, -196,28,248,80,158,43,38,193,248,80,158,43,39,193,11,11,11,28,192,27,248, -22,52,194,27,248,22,78,195,27,248,22,80,196,249,80,158,41,40,200,27,249, -22,61,197,198,251,80,158,46,41,20,15,159,46,35,42,21,94,3,1,4,103, -56,55,49,252,204,1,3,1,4,103,56,55,48,252,205,1,248,22,53,197,248, -22,52,197,250,22,252,39,2,11,2,71,196,34,20,98,159,34,16,8,2,72, -2,75,2,77,2,79,2,88,2,90,2,144,2,85,16,2,18,98,2,92,8, -166,38,37,36,16,4,8,165,11,2,252,11,1,3,1,7,101,110,118,52,51, -55,55,252,206,1,18,158,96,100,2,252,101,1,8,169,38,37,36,8,165,16, -8,8,168,11,3,1,4,103,56,54,55,252,207,1,3,1,4,103,56,54,56, -252,208,1,3,1,4,103,56,54,57,252,209,1,3,1,7,101,110,118,52,51, -56,51,252,210,1,2,252,210,1,2,252,210,1,16,8,8,167,11,2,106,2, -252,9,1,2,252,10,1,3,1,7,101,110,118,52,51,56,52,252,211,1,2, -252,211,1,2,252,211,1,158,94,10,94,96,2,126,63,99,112,117,252,212,1, -64,117,115,101,114,252,213,1,62,103,99,252,214,1,95,70,116,105,109,101,45, -97,112,112,108,121,252,215,1,160,2,252,0,1,9,2,252,204,1,2,252,205, -1,64,110,117,108,108,252,216,1,8,169,158,98,10,66,112,114,105,110,116,102, -252,217,1,6,40,40,99,112,117,32,116,105,109,101,58,32,126,115,32,114,101, -97,108,32,116,105,109,101,58,32,126,115,32,103,99,32,116,105,109,101,58,32, -126,115,126,110,252,218,1,2,252,212,1,2,252,213,1,2,252,214,1,8,169, -158,96,10,2,252,75,1,2,252,76,1,2,126,8,169,8,169,11,100,83,159, -34,97,80,159,34,34,35,80,159,34,35,35,80,159,34,36,35,80,159,34,37, -35,80,159,34,38,35,27,247,22,252,114,2,87,94,28,192,28,248,22,252,113, -2,193,12,250,22,252,40,2,2,252,156,1,6,15,15,105,110,115,112,101,99, -116,111,114,32,111,114,32,35,102,252,219,1,195,12,91,159,39,11,90,161,39, -34,11,254,22,252,91,2,2,96,11,35,34,11,9,204,252,22,7,197,198,199, -250,22,252,93,2,203,34,61,112,252,220,1,250,22,252,94,2,204,34,2,252, -220,1,83,159,34,93,80,159,34,39,35,89,162,34,35,41,2,14,223,0,87, -94,28,248,80,158,35,36,194,12,250,22,252,40,2,2,14,6,7,7,112,114, -111,109,105,115,101,252,221,1,196,27,248,80,158,36,37,195,28,248,22,0,193, -27,249,22,6,195,22,59,87,94,28,248,22,0,248,80,158,38,37,197,249,80, -158,38,38,197,194,12,249,22,1,22,7,248,80,158,39,37,198,249,22,1,22, -7,194,83,159,34,93,80,159,34,40,35,89,162,34,34,38,2,16,223,0,248, -80,158,35,41,249,22,19,11,80,158,37,42,83,159,34,93,80,159,34,43,35, -89,162,34,36,42,2,23,223,0,87,95,28,248,22,252,223,2,194,12,252,22, -252,40,2,2,23,6,16,16,112,97,114,97,109,101,116,101,114,105,122,97,116, -105,111,110,252,222,1,34,198,199,28,28,248,22,0,195,249,22,34,196,34,11, -12,252,22,252,40,2,2,23,6,19,19,112,114,111,99,101,100,117,114,101,32, -40,97,114,105,116,121,32,48,41,252,223,1,35,198,199,20,14,159,80,158,34, -42,193,247,194,83,159,34,97,80,159,34,44,35,80,159,34,45,35,80,159,34, -46,35,80,159,34,47,35,80,159,34,48,35,252,22,252,91,2,2,95,11,35, -34,11,83,159,34,97,80,159,34,49,35,80,159,34,50,35,80,159,34,51,35, -80,159,34,52,35,80,159,34,53,35,27,247,22,252,114,2,87,94,28,192,28, -248,22,252,9,2,248,22,252,113,2,194,250,22,252,40,2,2,252,156,1,2, -252,219,1,195,12,12,91,159,39,11,90,161,39,34,11,254,22,252,91,2,2, -95,11,35,34,11,9,204,252,22,7,197,198,199,250,22,252,93,2,203,34,64, -99,101,108,108,252,224,1,250,22,252,94,2,204,34,2,252,224,1,83,159,34, -93,80,159,34,54,35,89,162,34,34,38,2,45,223,0,248,80,158,35,45,249, -22,19,11,80,158,37,55,83,159,34,93,80,159,34,56,35,89,162,38,36,42, -2,49,223,0,87,95,28,248,80,158,35,46,194,12,252,22,252,40,2,2,49, -6,22,22,98,114,101,97,107,32,112,97,114,97,109,101,116,101,114,105,122,97, -116,105,111,110,252,225,1,34,198,199,28,28,248,22,0,195,249,22,34,196,34, -11,12,252,22,252,40,2,2,23,6,19,19,112,114,111,99,101,100,117,114,101, -32,40,97,114,105,116,121,32,48,41,252,226,1,35,198,199,83,158,38,20,93, -94,20,14,159,80,158,34,55,249,80,158,36,47,195,34,87,94,247,80,158,34, -57,247,194,247,80,158,34,57,96,68,35,37,107,101,114,110,101,108,252,227,1, -2,94,2,93,2,18,96,2,252,227,1,2,73,2,98,2,97,0}; - EVAL_ONE_SIZED_STR((char *)expr, 16271); +248,80,158,46,36,196,28,248,80,158,46,39,193,248,22,65,248,80,158,47,40, +194,11,27,248,80,158,46,37,196,28,248,80,158,46,34,193,249,80,158,47,35, +248,80,158,48,36,195,27,248,80,158,49,37,196,28,248,80,158,49,39,193,248, +80,158,49,40,193,11,11,11,11,11,28,192,27,248,22,58,194,27,248,22,84, +195,27,248,22,93,196,27,248,22,96,197,27,248,22,95,198,249,80,158,43,41, +202,27,251,22,67,199,201,200,202,250,80,158,47,42,89,162,34,34,43,9,224, +13,3,253,80,158,41,43,20,15,159,41,35,44,21,96,3,1,4,103,56,54, +51,252,176,1,3,1,4,103,56,54,50,252,177,1,3,1,4,103,56,54,53, +252,178,1,3,1,4,103,56,54,52,252,179,1,248,22,94,199,248,22,84,199, +248,22,93,199,248,22,58,199,21,98,2,144,9,95,73,100,101,102,105,110,101, +45,115,116,114,117,99,116,252,180,1,64,98,97,115,101,252,181,1,94,65,102, +105,101,108,100,252,182,1,2,135,2,252,173,1,2,252,174,1,2,135,20,15, +159,47,36,44,250,22,252,45,2,11,2,79,196,34,20,98,159,34,16,10,2, +80,2,83,2,85,2,87,2,89,2,96,2,98,2,152,2,155,2,93,16,3, +18,98,2,100,8,158,38,37,36,16,4,8,157,11,2,252,19,1,3,1,7, +101,110,118,52,51,54,51,252,183,1,18,158,163,38,100,2,144,8,161,38,37, +36,8,157,16,12,8,160,11,3,1,4,103,56,53,55,252,184,1,3,1,4, +103,56,53,56,252,185,1,3,1,4,103,56,53,57,252,186,1,3,1,4,103, +56,54,48,252,187,1,3,1,4,103,56,54,49,252,188,1,3,1,7,101,110, +118,52,51,55,50,252,189,1,2,252,189,1,2,252,189,1,2,252,189,1,2, +252,189,1,16,12,8,159,11,2,114,2,252,181,1,2,252,182,1,2,252,173, +1,2,252,174,1,3,1,7,101,110,118,52,51,55,51,252,190,1,2,252,190, +1,2,252,190,1,2,252,190,1,2,252,190,1,158,9,8,161,158,96,10,2, +252,180,1,2,252,176,1,2,252,177,1,8,161,158,2,252,178,1,8,161,2, +252,179,1,8,161,8,161,18,16,2,96,2,135,8,163,93,8,252,22,14,16, +4,8,162,11,2,177,3,1,7,101,110,118,52,51,56,53,252,191,1,95,9, +8,252,22,14,2,94,11,16,5,93,2,71,87,95,83,159,34,93,80,159,34, +8,27,35,89,162,35,35,41,9,223,0,251,80,158,38,42,20,15,159,38,40, +50,21,94,3,1,4,103,56,56,49,252,192,1,3,1,4,103,56,56,50,252, +193,1,248,22,58,198,248,22,93,198,83,159,34,93,80,159,34,8,26,35,89, +162,35,35,41,9,223,0,251,80,158,38,42,20,15,159,38,39,50,21,94,3, +1,4,103,56,56,48,252,194,1,3,1,4,103,56,55,57,252,195,1,248,22, +58,198,248,22,84,198,89,162,34,35,54,9,223,0,27,249,22,215,20,15,159, +37,34,50,196,27,28,248,80,158,37,34,194,249,80,158,38,35,248,80,158,39, +36,196,27,248,80,158,40,37,197,28,248,80,158,40,34,193,28,248,80,158,40, +38,248,80,158,41,36,194,27,248,80,158,41,37,194,28,248,80,158,41,34,193, +249,80,158,42,35,248,80,158,43,36,195,27,248,80,158,44,37,196,28,248,80, +158,44,39,193,248,80,158,44,40,193,11,11,11,11,11,28,192,27,248,22,58, +194,27,248,22,84,195,27,248,22,86,196,249,80,158,41,41,200,27,249,22,67, +197,198,251,80,158,46,42,20,15,159,46,35,50,21,94,3,1,4,103,56,55, +53,252,196,1,3,1,4,103,56,55,52,252,197,1,248,22,59,197,248,22,58, +197,27,28,248,80,158,38,34,195,249,80,158,39,35,248,80,158,40,36,197,27, +248,80,158,41,37,198,28,248,80,158,41,34,193,249,80,158,42,43,27,248,80, +158,44,36,196,28,248,80,158,44,39,193,248,22,8,89,162,34,35,41,9,224, +10,1,27,249,22,2,89,162,34,35,46,9,224,4,5,249,80,158,37,44,28, +248,80,158,38,34,197,249,80,158,39,35,248,80,158,40,36,199,27,248,80,158, +41,37,200,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195, +248,80,158,43,38,248,80,158,44,37,196,11,11,194,248,80,158,39,40,196,28, +248,22,63,193,21,94,9,9,248,80,158,37,45,193,11,27,248,80,158,44,37, +196,28,248,80,158,44,34,193,249,80,158,45,35,248,80,158,46,36,195,27,248, +80,158,47,37,196,28,248,80,158,47,39,193,248,80,158,47,40,193,11,11,11, +11,28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,93,196,27,248,22, +96,197,27,248,22,95,198,27,249,22,215,20,15,159,45,36,50,248,80,158,46, +46,249,80,158,48,47,20,15,159,48,37,50,201,27,28,248,80,158,45,39,194, +248,80,158,45,40,194,11,28,192,249,80,158,46,41,205,27,252,22,67,200,203, +205,204,202,250,80,158,50,48,89,162,34,34,48,9,224,16,3,253,80,158,41, +42,20,15,159,41,38,50,21,96,3,1,4,103,56,56,56,252,198,1,3,1, +4,103,56,56,53,252,199,1,3,1,4,103,56,56,55,252,200,1,3,1,4, +103,56,56,54,252,201,1,250,22,2,80,159,44,8,26,35,248,22,58,202,248, +22,96,202,252,22,2,80,159,46,8,27,35,248,22,58,204,248,22,58,204,248, +22,93,204,248,22,93,204,248,22,84,199,248,22,95,199,21,95,2,144,94,94, +63,116,109,112,252,202,1,2,252,33,1,2,135,95,2,144,93,94,64,115,119, +97,112,252,203,1,96,2,252,8,1,9,96,2,144,93,94,2,231,2,252,202, +1,95,2,252,129,1,2,252,202,1,64,110,97,109,101,252,204,1,95,2,252, +129,1,2,252,204,1,2,231,2,135,96,72,100,121,110,97,109,105,99,45,119, +105,110,100,252,205,1,2,252,203,1,97,2,252,8,1,9,2,252,173,1,2, +252,174,1,2,135,2,252,203,1,20,15,159,50,41,50,248,80,158,45,49,20, +15,159,45,42,50,250,22,252,45,2,11,2,79,197,34,20,98,159,36,16,16, +2,80,2,83,2,85,2,87,2,91,2,96,2,98,2,152,2,93,2,89,2, +211,2,213,2,252,88,1,2,215,2,155,2,217,16,9,18,98,2,100,8,165, +38,37,36,16,4,8,164,11,2,252,19,1,3,1,7,101,110,118,52,51,56, +56,252,206,1,18,158,162,37,100,2,144,8,168,38,37,36,8,164,16,8,8, +167,11,3,1,4,103,56,55,49,252,207,1,3,1,4,103,56,55,50,252,208, +1,3,1,4,103,56,55,51,252,209,1,3,1,7,101,110,118,52,51,57,53, +252,210,1,2,252,210,1,2,252,210,1,16,8,8,166,11,2,114,2,252,173, +1,2,252,174,1,3,1,7,101,110,118,52,51,57,54,252,211,1,2,252,211, +1,2,252,211,1,158,9,8,168,158,2,252,196,1,8,168,2,252,197,1,8, +168,8,168,18,100,2,100,8,171,38,37,36,8,164,16,12,8,170,11,3,1, +4,103,56,54,54,252,212,1,3,1,4,103,56,54,55,252,213,1,3,1,4, +103,56,54,56,252,214,1,3,1,4,103,56,54,57,252,215,1,3,1,4,103, +56,55,48,252,216,1,3,1,7,101,110,118,52,52,49,53,252,217,1,2,252, +217,1,2,252,217,1,2,252,217,1,2,252,217,1,16,12,8,169,11,2,114, +2,252,204,1,2,252,33,1,2,252,173,1,2,252,174,1,3,1,7,101,110, +118,52,52,49,54,252,218,1,2,252,218,1,2,252,218,1,2,252,218,1,2, +252,218,1,18,16,2,158,2,233,8,171,8,172,18,158,95,102,2,144,8,175, +38,37,36,8,164,8,170,8,169,16,4,8,174,11,3,1,4,103,56,55,56, +252,219,1,3,1,7,101,110,118,52,52,51,51,252,220,1,16,4,8,173,11, +2,252,202,1,3,1,7,101,110,118,52,52,51,52,252,221,1,158,2,252,198, +1,8,175,158,96,10,2,144,93,94,2,252,203,1,159,2,252,8,1,9,2, +252,199,1,96,2,252,205,1,2,252,203,1,160,2,252,8,1,9,2,252,200, +1,2,252,201,1,2,252,203,1,8,175,8,175,18,158,95,10,2,252,194,1, +2,252,195,1,8,175,18,158,97,10,2,144,93,94,2,231,2,252,192,1,95, +2,252,129,1,2,252,192,1,2,252,193,1,95,2,252,129,1,2,252,193,1, +2,231,8,175,18,16,2,96,2,135,8,177,93,8,252,58,14,16,4,8,176, +11,2,177,3,1,7,101,110,118,52,52,51,56,252,222,1,95,9,8,252,58, +14,2,94,18,16,2,158,94,98,2,252,202,1,8,181,93,8,252,50,14,16, +4,8,180,11,3,1,8,119,115,116,109,112,56,55,54,252,223,1,3,1,7, +101,110,118,52,52,50,56,252,224,1,16,4,8,179,11,3,1,4,103,56,55, +55,252,225,1,3,1,7,101,110,118,52,52,52,53,252,226,1,16,4,8,178, +11,2,252,255,0,3,1,7,101,110,118,52,52,52,54,252,227,1,158,2,135, +8,181,8,181,95,9,8,252,50,14,2,218,11,16,5,93,2,63,89,162,34, +35,49,9,223,0,27,249,22,215,20,15,159,37,34,42,196,27,28,248,80,158, +37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40,37,197, +28,248,80,158,40,34,193,249,80,158,41,35,248,80,158,42,36,195,27,248,80, +158,43,37,196,28,248,80,158,43,38,193,248,80,158,43,39,193,11,11,11,28, +192,27,248,22,58,194,27,248,22,84,195,27,248,22,86,196,249,80,158,41,40, +200,27,249,22,67,198,197,251,80,158,46,41,20,15,159,46,35,42,21,94,3, +1,4,103,56,57,51,252,228,1,3,1,4,103,56,57,50,252,229,1,248,22, +58,197,248,22,59,197,250,22,252,45,2,11,2,79,196,34,20,98,159,34,16, +8,2,80,2,83,2,85,2,87,2,96,2,98,2,152,2,93,16,2,18,98, +2,100,8,183,38,37,36,16,4,8,182,11,2,252,19,1,3,1,7,101,110, +118,52,52,53,48,252,230,1,18,158,96,100,2,252,127,1,8,186,38,37,36, +8,182,16,8,8,185,11,3,1,4,103,56,56,57,252,231,1,3,1,4,103, +56,57,48,252,232,1,3,1,4,103,56,57,49,252,233,1,3,1,7,101,110, +118,52,52,53,54,252,234,1,2,252,234,1,2,252,234,1,16,8,8,184,11, +2,114,2,252,17,1,2,252,18,1,3,1,7,101,110,118,52,52,53,55,252, +235,1,2,252,235,1,2,252,235,1,158,94,10,94,96,2,134,63,99,112,117, +252,236,1,64,117,115,101,114,252,237,1,62,103,99,252,238,1,95,70,116,105, +109,101,45,97,112,112,108,121,252,239,1,160,2,252,8,1,9,2,252,228,1, +2,252,229,1,64,110,117,108,108,252,240,1,8,186,158,98,10,66,112,114,105, +110,116,102,252,241,1,6,40,40,99,112,117,32,116,105,109,101,58,32,126,115, +32,114,101,97,108,32,116,105,109,101,58,32,126,115,32,103,99,32,116,105,109, +101,58,32,126,115,126,110,252,242,1,2,252,236,1,2,252,237,1,2,252,238, +1,8,186,158,96,10,65,97,112,112,108,121,252,243,1,66,118,97,108,117,101, +115,252,244,1,2,134,8,186,8,186,11,104,83,159,34,97,80,159,34,34,35, +80,159,34,35,35,80,159,34,36,35,80,159,34,37,35,80,159,34,38,35,27, +247,22,252,120,2,87,94,28,192,28,248,22,252,119,2,193,12,250,22,252,46, +2,2,252,180,1,6,15,15,105,110,115,112,101,99,116,111,114,32,111,114,32, +35,102,252,245,1,195,12,91,159,39,11,90,161,39,34,11,254,22,252,97,2, +2,104,11,35,34,11,9,204,252,22,7,197,198,199,250,22,252,99,2,203,34, +61,112,252,246,1,250,22,252,100,2,204,34,2,252,246,1,83,159,34,93,80, +159,34,39,35,89,162,34,35,41,2,14,223,0,87,94,28,248,80,158,35,36, +194,12,250,22,252,46,2,2,14,6,7,7,112,114,111,109,105,115,101,252,247, +1,196,27,248,80,158,36,37,195,28,248,22,0,193,27,249,22,6,195,22,65, +87,94,28,248,22,0,248,80,158,38,37,197,249,80,158,38,38,197,194,12,249, +22,1,22,7,248,80,158,39,37,198,249,22,1,22,7,194,83,159,34,93,80, +159,34,40,35,89,162,34,34,38,2,16,223,0,248,80,158,35,41,249,22,25, +11,80,158,37,42,83,159,34,93,80,159,34,43,35,89,162,34,36,42,2,23, +223,0,87,95,28,248,22,252,229,2,194,12,252,22,252,46,2,2,23,6,16, +16,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,252,248,1,34, +198,199,28,28,248,22,0,195,249,22,40,196,34,11,12,252,22,252,46,2,2, +23,6,19,19,112,114,111,99,101,100,117,114,101,32,40,97,114,105,116,121,32, +48,41,252,249,1,35,198,199,20,14,159,80,158,34,42,193,247,194,83,159,34, +97,80,159,34,44,35,80,159,34,45,35,80,159,34,46,35,80,159,34,47,35, +80,159,34,48,35,252,22,252,97,2,2,103,11,35,34,11,83,159,34,97,80, +159,34,49,35,80,159,34,50,35,80,159,34,51,35,80,159,34,52,35,80,159, +34,53,35,27,247,22,252,120,2,87,94,28,192,28,248,22,252,15,2,248,22, +252,119,2,194,250,22,252,46,2,2,252,180,1,2,252,245,1,195,12,12,91, +159,39,11,90,161,39,34,11,254,22,252,97,2,2,103,11,35,34,11,9,204, +252,22,7,197,198,199,250,22,252,99,2,203,34,64,99,101,108,108,252,250,1, +250,22,252,100,2,204,34,2,252,250,1,83,159,34,93,80,159,34,54,35,89, +162,34,34,38,2,45,223,0,248,80,158,35,45,249,22,25,11,80,158,37,55, +83,159,34,93,80,159,34,56,35,89,162,38,36,42,2,49,223,0,87,95,28, +248,80,158,35,46,194,12,252,22,252,46,2,2,49,6,22,22,98,114,101,97, +107,32,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,252,251,1, +34,198,199,28,28,248,22,0,195,249,22,40,196,34,11,12,252,22,252,46,2, +2,23,6,19,19,112,114,111,99,101,100,117,114,101,32,40,97,114,105,116,121, +32,48,41,252,252,1,35,198,199,83,158,38,20,93,94,20,14,159,80,158,34, +55,249,80,158,36,47,195,34,87,94,247,80,158,34,57,247,194,247,80,158,34, +57,83,159,34,93,80,159,34,58,35,89,162,34,37,42,2,53,223,0,28,248, +22,63,196,248,22,252,193,2,194,28,248,248,22,83,197,194,83,158,38,20,93, +94,248,248,22,85,197,194,20,14,159,80,158,34,55,194,247,80,158,34,57,250, +80,158,37,58,196,197,248,22,59,199,83,159,34,93,80,159,34,59,35,89,162, +34,37,42,2,55,223,0,28,248,22,63,196,248,22,252,193,2,194,28,248,248, +22,83,197,194,20,14,159,80,158,34,55,194,87,94,247,80,158,34,57,248,248, +22,85,197,194,250,80,158,37,59,196,197,248,22,59,199,83,159,34,93,80,159, +34,8,26,35,247,22,17,83,159,34,93,80,159,34,8,27,35,248,22,252,231, +2,11,96,68,35,37,107,101,114,110,101,108,252,253,1,2,102,2,101,2,18, +96,2,252,253,1,2,81,2,106,2,105,0}; + EVAL_ONE_SIZED_STR((char *)expr, 17210); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,252,243,1,252,231,52,159,34,20,98,159,34,16, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,55,252,243,1,252,88,52,159,34,20,98,159,34,16, 1,20,24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,66,35,37, 109,105,115,99,1,29,2,11,11,10,10,10,46,80,158,34,34,20,98,159,39, 16,47,30,3,2,2,72,112,97,116,104,45,115,116,114,105,110,103,63,4,254, @@ -3400,23 +3451,23 @@ 110,111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,12,254,1,30,13, 2,2,71,114,97,116,105,111,110,97,108,105,122,101,14,254,1,30,15,2,2, 1,20,114,101,97,100,45,101,118,97,108,45,112,114,105,110,116,45,108,111,111, -112,16,254,1,30,17,2,2,67,108,111,97,100,47,99,100,18,254,1,30,19, -2,2,65,45,108,111,97,100,20,254,1,30,21,2,2,73,108,111,97,100,45, -114,101,108,97,116,105,118,101,22,254,1,30,23,2,2,1,23,108,111,97,100, -45,114,101,108,97,116,105,118,101,45,101,120,116,101,110,115,105,111,110,24,254, -1,30,25,2,2,1,27,112,97,116,104,45,108,105,115,116,45,115,116,114,105, -110,103,45,62,112,97,116,104,45,108,105,115,116,26,254,1,30,27,2,2,1, -20,102,105,110,100,45,101,120,101,99,117,116,97,98,108,101,45,112,97,116,104, -28,254,1,30,29,2,2,74,45,99,104,101,99,107,45,114,101,108,112,97,116, -104,30,254,1,30,31,2,2,77,45,99,104,101,99,107,45,99,111,108,108,101, -99,116,105,111,110,32,254,1,30,33,2,2,69,45,102,105,110,100,45,99,111, -108,34,254,1,30,35,2,2,70,100,108,108,45,115,117,102,102,105,120,36,254, -1,30,37,2,2,70,95,108,111,97,100,101,114,46,115,111,38,254,1,30,39, -2,2,1,25,99,117,114,114,101,110,116,45,108,111,97,100,47,117,115,101,45, -99,111,109,112,105,108,101,100,40,254,1,30,41,68,35,37,112,97,114,97,109, -122,42,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45, -107,101,121,43,254,1,30,44,2,42,1,23,101,120,116,101,110,100,45,112,97, -114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,254,1,30,46,2,2, +112,16,254,1,30,17,68,35,37,112,97,114,97,109,122,18,1,20,112,97,114, +97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,19,254,1,30, +20,2,18,1,23,101,120,116,101,110,100,45,112,97,114,97,109,101,116,101,114, +105,122,97,116,105,111,110,21,254,1,30,22,2,2,67,108,111,97,100,47,99, +100,23,254,1,30,24,2,2,65,45,108,111,97,100,25,254,1,30,26,2,2, +73,108,111,97,100,45,114,101,108,97,116,105,118,101,27,254,1,30,28,2,2, +1,23,108,111,97,100,45,114,101,108,97,116,105,118,101,45,101,120,116,101,110, +115,105,111,110,29,254,1,30,30,2,2,1,27,112,97,116,104,45,108,105,115, +116,45,115,116,114,105,110,103,45,62,112,97,116,104,45,108,105,115,116,31,254, +1,30,32,2,2,1,20,102,105,110,100,45,101,120,101,99,117,116,97,98,108, +101,45,112,97,116,104,33,254,1,30,34,2,2,74,45,99,104,101,99,107,45, +114,101,108,112,97,116,104,35,254,1,30,36,2,2,77,45,99,104,101,99,107, +45,99,111,108,108,101,99,116,105,111,110,37,254,1,30,38,2,2,69,45,102, +105,110,100,45,99,111,108,39,254,1,30,40,2,2,70,100,108,108,45,115,117, +102,102,105,120,41,254,1,30,42,2,2,70,95,108,111,97,100,101,114,46,115, +111,43,254,1,30,44,2,2,1,25,99,117,114,114,101,110,116,45,108,111,97, +100,47,117,115,101,45,99,111,109,112,105,108,101,100,45,254,1,30,46,2,2, 75,99,111,108,108,101,99,116,105,111,110,45,112,97,116,104,47,254,1,30,48, 2,2,77,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,49, 254,1,30,50,2,2,67,45,114,101,58,100,105,114,51,254,1,30,52,2,2, @@ -3444,28 +3495,28 @@ 91,254,1,30,92,2,2,1,25,115,99,104,101,109,101,45,114,101,112,111,114, 116,45,101,110,118,105,114,111,110,109,101,110,116,93,254,1,30,94,2,2,67, 109,107,45,114,53,114,115,95,254,1,30,96,2,2,76,110,117,108,108,45,101, -110,118,105,114,111,110,109,101,110,116,97,254,1,16,0,11,11,16,22,2,32, -2,30,2,34,2,20,2,61,2,57,2,59,2,63,2,65,2,53,2,51,2, -55,2,6,2,38,2,10,2,36,2,79,2,81,2,77,2,75,2,95,2,73, -56,11,16,24,2,85,2,89,2,87,2,47,2,40,2,28,2,69,2,83,2, -91,2,22,2,24,2,18,2,49,2,67,2,12,2,97,2,26,2,8,2,4, +110,118,105,114,111,110,109,101,110,116,97,254,1,16,0,11,11,16,22,2,37, +2,35,2,39,2,25,2,61,2,57,2,59,2,63,2,65,2,53,2,51,2, +55,2,6,2,43,2,10,2,41,2,79,2,81,2,77,2,75,2,95,2,73, +56,11,16,24,2,85,2,89,2,87,2,47,2,45,2,33,2,69,2,83,2, +91,2,27,2,29,2,23,2,49,2,67,2,12,2,97,2,31,2,8,2,4, 2,71,2,14,2,16,2,93,79,109,101,109,111,114,121,45,116,114,97,99,101, 45,108,97,109,98,100,97,98,16,24,11,11,11,11,11,11,11,11,11,11,11, 11,11,11,11,11,11,11,11,11,11,11,11,11,16,24,2,85,2,89,2,87, -2,47,2,40,2,28,2,69,2,83,2,91,2,22,2,24,2,18,2,49,2, -67,2,12,2,97,2,26,2,8,2,4,2,71,2,14,2,16,2,93,2,98, -57,58,93,16,5,93,2,98,89,162,34,35,53,9,223,0,27,249,22,209,20, +2,47,2,45,2,33,2,69,2,83,2,91,2,27,2,29,2,23,2,49,2, +67,2,12,2,97,2,31,2,8,2,4,2,71,2,14,2,16,2,93,2,98, +57,58,93,16,5,93,2,98,89,162,34,35,53,9,223,0,27,249,22,215,20, 15,159,37,34,41,196,27,28,248,80,158,37,34,194,249,80,158,38,35,248,80, 158,39,36,196,27,248,80,158,40,37,197,28,248,80,158,40,34,193,249,80,158, 41,35,248,80,158,42,36,195,27,248,80,158,43,37,196,28,248,80,158,43,38, -193,248,80,158,43,39,193,11,11,11,28,192,27,248,22,52,194,27,248,22,78, -195,27,248,22,80,196,27,249,22,209,20,15,159,42,35,41,249,22,209,203,247, -22,48,27,249,22,209,20,15,159,43,36,41,249,22,209,204,247,22,48,27,249, -22,209,20,15,159,44,37,41,249,22,209,205,247,22,48,27,252,22,61,199,202, -200,198,201,254,80,158,50,40,20,15,159,50,38,41,21,97,3,1,4,103,56, -56,52,99,3,1,4,103,56,57,48,100,3,1,4,103,56,56,57,101,3,1, -4,103,56,56,54,102,3,1,4,103,56,56,55,103,248,22,87,200,248,22,52, -200,248,22,78,200,248,22,90,200,248,22,89,200,250,22,252,39,2,11,6,10, +193,248,80,158,43,39,193,11,11,11,28,192,27,248,22,58,194,27,248,22,84, +195,27,248,22,86,196,27,249,22,215,20,15,159,42,35,41,249,22,215,203,247, +22,54,27,249,22,215,20,15,159,43,36,41,249,22,215,204,247,22,54,27,249, +22,215,20,15,159,44,37,41,249,22,215,205,247,22,54,27,252,22,67,198,200, +202,201,199,254,80,158,50,40,20,15,159,50,38,41,21,97,3,1,4,103,57, +48,54,99,3,1,4,103,57,49,50,100,3,1,4,103,57,49,49,101,3,1, +4,103,57,48,56,102,3,1,4,103,57,48,57,103,248,22,84,200,248,22,95, +200,248,22,93,200,248,22,58,200,248,22,96,200,250,22,252,45,2,11,6,10, 10,98,97,100,32,115,121,110,116,97,120,104,196,34,20,98,159,34,16,7,30, 105,65,35,37,115,116,120,106,69,115,116,120,45,112,97,105,114,63,107,11,30, 108,2,106,67,99,111,110,115,47,35,102,109,1,30,110,2,106,67,115,116,120, @@ -3477,30 +3528,30 @@ 38,10,34,11,96,159,68,35,37,100,101,102,105,110,101,122,9,11,159,70,35, 37,109,101,109,116,114,97,99,101,123,9,11,159,74,35,37,115,109,97,108,108, 45,115,99,104,101,109,101,124,9,11,159,73,35,37,109,111,114,101,45,115,99, -104,101,109,101,125,9,11,16,92,2,28,2,2,2,16,2,2,2,59,2,2, -2,69,2,2,2,93,2,2,2,63,2,2,2,40,2,2,2,10,2,2,2, -8,2,2,2,18,2,2,2,77,2,2,2,22,2,2,2,30,2,2,2,79, -2,2,2,55,2,2,2,85,2,2,2,14,2,2,2,91,2,2,2,51,2, -2,2,75,2,2,2,87,2,2,2,34,2,2,2,36,2,2,2,67,2,2, -2,32,2,2,2,24,2,2,2,38,2,2,2,26,2,2,2,47,2,2,2, -98,2,2,2,81,2,2,2,20,2,2,2,49,2,2,2,83,2,2,2,12, -2,2,2,71,2,2,2,65,2,2,2,6,2,2,2,89,2,2,2,61,2, -2,2,95,2,2,2,57,2,2,2,97,2,2,2,73,2,2,2,53,2,2, -2,4,2,2,98,37,10,35,11,94,159,76,35,37,115,116,120,99,97,115,101, +104,101,109,101,125,9,11,16,92,2,41,2,2,2,98,2,2,2,59,2,2, +2,4,2,2,2,43,2,2,2,63,2,2,2,97,2,2,2,69,2,2,2, +91,2,2,2,71,2,2,2,51,2,2,2,27,2,2,2,37,2,2,2,10, +2,2,2,61,2,2,2,35,2,2,2,73,2,2,2,8,2,2,2,47,2, +2,2,67,2,2,2,79,2,2,2,85,2,2,2,77,2,2,2,49,2,2, +2,81,2,2,2,29,2,2,2,16,2,2,2,75,2,2,2,83,2,2,2, +23,2,2,2,12,2,2,2,57,2,2,2,6,2,2,2,14,2,2,2,39, +2,2,2,25,2,2,2,55,2,2,2,65,2,2,2,45,2,2,2,33,2, +2,2,53,2,2,2,93,2,2,2,31,2,2,2,89,2,2,2,87,2,2, +2,95,2,2,98,37,10,35,11,94,159,76,35,37,115,116,120,99,97,115,101, 45,115,99,104,101,109,101,126,9,11,159,2,106,9,11,16,0,96,36,8,254, -1,11,16,0,16,4,35,11,61,120,127,3,1,7,101,110,118,52,52,49,55, -128,18,100,2,121,43,38,37,36,35,16,8,42,11,3,1,4,103,56,55,50, -129,3,1,4,103,56,55,51,130,3,1,4,103,56,55,52,131,3,1,7,101, -110,118,52,52,50,51,132,2,132,2,132,16,8,41,11,61,95,133,64,97,114, -103,115,134,64,98,111,100,121,135,3,1,7,101,110,118,52,52,50,52,136,2, +1,11,16,0,16,4,35,11,61,120,127,3,1,7,101,110,118,52,52,57,54, +128,18,100,2,121,43,38,37,36,35,16,8,42,11,3,1,4,103,56,57,52, +129,3,1,4,103,56,57,53,130,3,1,4,103,56,57,54,131,3,1,7,101, +110,118,52,53,48,50,132,2,132,2,132,16,8,41,11,61,95,133,64,97,114, +103,115,134,64,98,111,100,121,135,3,1,7,101,110,118,52,53,48,51,136,2, 136,2,136,18,16,2,158,2,121,43,44,18,44,18,158,95,106,63,108,101,116, -137,51,38,37,36,35,42,41,16,4,50,11,3,1,4,103,56,55,57,138,3, -1,7,101,110,118,52,52,52,48,139,16,4,49,11,68,99,111,110,116,109,97, -114,107,140,3,1,7,101,110,118,52,52,52,49,141,16,4,48,11,3,1,4, -103,56,56,49,142,3,1,7,101,110,118,52,52,53,50,143,16,4,47,11,64, -102,117,110,99,144,3,1,7,101,110,118,52,52,53,51,145,16,4,46,11,3, -1,4,103,56,56,51,146,3,1,7,101,110,118,52,52,54,52,147,16,4,45, -11,67,110,101,119,109,97,114,107,148,3,1,7,101,110,118,52,52,54,53,149, +137,51,38,37,36,35,42,41,16,4,50,11,3,1,4,103,57,48,49,138,3, +1,7,101,110,118,52,53,49,57,139,16,4,49,11,68,99,111,110,116,109,97, +114,107,140,3,1,7,101,110,118,52,53,50,48,141,16,4,48,11,3,1,4, +103,57,48,51,142,3,1,7,101,110,118,52,53,51,49,143,16,4,47,11,64, +102,117,110,99,144,3,1,7,101,110,118,52,53,51,50,145,16,4,46,11,3, +1,4,103,57,48,53,146,3,1,7,101,110,118,52,53,52,51,147,16,4,45, +11,67,110,101,119,109,97,114,107,148,3,1,7,101,110,118,52,53,52,52,149, 158,94,10,94,2,99,11,51,158,97,10,2,137,93,94,2,100,95,66,108,97, 109,98,100,97,150,2,101,95,2,137,93,94,2,102,94,1,31,117,110,105,111, 110,101,100,45,109,101,109,116,114,97,99,101,45,116,114,97,99,107,105,110,103, @@ -3511,535 +3562,528 @@ 110,101,119,45,109,101,109,116,114,97,99,101,45,116,114,97,99,107,105,110,103, 45,102,117,110,99,116,105,111,110,155,2,100,2,100,51,51,11,139,83,159,34, 93,80,159,34,8,51,35,89,162,8,64,35,44,64,108,111,111,112,156,223,0, -28,248,22,57,194,9,27,248,22,52,195,27,28,248,22,252,40,3,194,193,28, -248,22,252,39,3,194,249,22,252,41,3,195,250,80,158,41,46,248,22,252,54, -3,69,101,120,101,99,45,102,105,108,101,157,11,10,250,80,158,39,46,248,22, -252,54,3,2,157,196,10,28,192,249,22,51,248,22,252,43,3,249,22,252,41, -3,197,247,22,252,55,3,248,80,159,39,8,51,35,248,22,53,199,248,80,159, -37,8,51,35,248,22,53,197,83,159,34,93,80,159,34,8,50,35,89,162,34, -35,47,67,103,101,116,45,100,105,114,158,223,0,27,28,194,28,249,22,252,11, -2,196,80,158,37,8,29,80,158,35,8,30,27,248,22,252,213,1,248,22,44, -197,28,249,22,252,68,3,33,8,35,114,120,35,34,94,44,34,159,194,91,159, -37,11,90,161,37,34,11,248,22,252,37,3,248,22,252,29,3,250,22,252,197, -1,200,35,248,22,252,191,1,201,87,95,83,160,36,11,80,158,39,8,29,198, -83,160,36,11,80,158,39,8,30,192,192,11,11,28,192,192,27,247,22,252,90, -1,28,192,192,247,22,252,55,3,83,159,34,93,80,159,34,8,49,35,89,162, -34,35,43,9,223,0,87,94,28,27,248,22,252,25,3,195,28,192,192,28,248, -22,252,136,1,195,27,248,22,252,38,3,196,28,192,192,248,22,252,39,3,196, -11,12,250,22,252,40,2,2,47,6,25,25,112,97,116,104,32,111,114,32,118, +28,248,22,63,194,9,27,248,22,58,195,27,28,248,22,252,46,3,194,193,28, +248,22,252,45,3,194,249,22,252,47,3,195,250,80,158,41,48,248,22,252,60, +3,69,101,120,101,99,45,102,105,108,101,157,11,10,250,80,158,39,48,248,22, +252,60,3,2,157,196,10,28,192,249,22,57,248,22,252,49,3,249,22,252,47, +3,197,247,22,252,61,3,248,80,159,39,8,51,35,248,22,59,199,248,80,159, +37,8,51,35,248,22,59,197,83,159,34,93,80,159,34,8,50,35,89,162,34, +35,47,67,103,101,116,45,100,105,114,158,223,0,27,28,194,28,249,22,252,17, +2,196,80,158,37,8,29,80,158,35,8,30,27,248,22,252,219,1,248,22,50, +197,28,249,22,252,72,3,33,8,35,114,120,35,34,94,44,34,159,194,91,159, +37,11,90,161,37,34,11,248,22,252,43,3,248,22,252,35,3,250,22,252,203, +1,200,35,248,22,252,197,1,201,87,95,83,160,36,11,80,158,39,8,29,198, +83,160,36,11,80,158,39,8,30,192,192,11,11,28,192,192,27,247,22,252,96, +1,28,192,192,247,22,252,61,3,83,159,34,93,80,159,34,8,49,35,89,162, +34,35,43,9,223,0,87,94,28,27,248,22,252,31,3,195,28,192,192,28,248, +22,252,142,1,195,27,248,22,252,44,3,196,28,192,192,248,22,252,45,3,196, +11,12,250,22,252,46,2,2,47,6,25,25,112,97,116,104,32,111,114,32,118, 97,108,105,100,45,112,97,116,104,32,115,116,114,105,110,103,160,196,28,248,22, -252,38,3,194,12,248,22,252,187,2,249,22,252,131,2,248,22,252,165,1,250, -22,252,184,1,6,29,29,126,97,58,32,105,110,118,97,108,105,100,32,114,101, +252,44,3,194,12,248,22,252,193,2,249,22,252,137,2,248,22,252,171,1,250, +22,252,190,1,6,29,29,126,97,58,32,105,110,118,97,108,105,100,32,114,101, 108,97,116,105,118,101,32,112,97,116,104,58,32,126,115,161,2,47,200,247,22, -15,83,159,34,93,80,159,34,8,48,35,89,162,34,36,42,68,119,105,116,104, -45,100,105,114,162,223,0,20,14,159,80,158,34,53,250,80,158,37,54,249,22, -19,11,80,158,39,53,22,252,90,1,28,248,22,252,25,3,197,196,247,22,252, -55,3,247,194,83,159,34,93,80,159,34,8,47,35,89,162,8,36,37,38,66, +21,83,159,34,93,80,159,34,8,48,35,89,162,34,36,42,68,119,105,116,104, +45,100,105,114,162,223,0,20,14,159,80,158,34,41,250,80,158,37,42,249,22, +25,11,80,158,39,41,22,252,96,1,28,248,22,252,31,3,197,196,247,22,252, +61,3,247,194,83,159,34,93,80,159,34,8,47,35,89,162,8,36,37,38,66, 103,101,116,45,115,111,163,223,0,89,162,34,35,46,9,226,0,1,3,2,252, -22,252,36,3,199,201,6,6,6,110,97,116,105,118,101,164,247,22,252,220,1, -28,198,249,80,159,44,36,35,199,80,158,44,50,197,83,159,34,93,80,159,34, -34,35,32,165,89,162,34,35,38,2,4,222,27,248,22,252,25,3,194,28,192, -192,28,248,22,252,136,1,194,27,248,22,252,38,3,195,28,192,192,248,22,252, -39,3,195,11,83,159,34,93,80,159,34,35,35,33,18,35,114,120,35,34,40, +22,252,42,3,199,201,6,6,6,110,97,116,105,118,101,164,247,22,252,226,1, +28,198,249,80,159,44,36,35,199,80,158,44,52,197,83,159,34,93,80,159,34, +34,35,32,165,89,162,34,35,38,2,4,222,27,248,22,252,31,3,194,28,192, +192,28,248,22,252,142,1,194,27,248,22,252,44,3,195,28,192,192,248,22,252, +45,3,195,11,83,159,34,93,80,159,34,35,35,33,18,35,114,120,35,34,40, 91,46,93,91,94,46,93,42,124,41,36,34,166,83,159,34,93,80,159,34,36, -35,89,162,34,36,47,2,8,223,0,87,95,28,27,248,22,252,25,3,195,28, -192,192,28,248,22,252,136,1,195,27,248,22,252,38,3,196,28,192,192,248,22, -252,39,3,196,11,12,252,22,252,40,2,2,8,6,25,25,112,97,116,104,32, +35,89,162,34,36,47,2,8,223,0,87,95,28,27,248,22,252,31,3,195,28, +192,192,28,248,22,252,142,1,195,27,248,22,252,44,3,196,28,192,192,248,22, +252,45,3,196,11,12,252,22,252,46,2,2,8,6,25,25,112,97,116,104,32, 111,114,32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105,110,103,167, -34,198,199,28,28,248,22,252,136,1,195,10,248,22,252,188,1,195,12,252,22, -252,40,2,2,8,6,21,21,115,116,114,105,110,103,32,111,114,32,98,121,116, +34,198,199,28,28,248,22,252,142,1,195,10,248,22,252,194,1,195,12,252,22, +252,46,2,2,8,6,21,21,115,116,114,105,110,103,32,111,114,32,98,121,116, 101,32,115,116,114,105,110,103,168,35,198,199,91,159,37,11,90,161,37,34,11, -248,22,252,37,3,197,87,94,28,192,12,250,22,252,41,2,2,8,6,36,36, +248,22,252,43,3,197,87,94,28,192,12,250,22,252,47,2,2,8,6,36,36, 99,97,110,110,111,116,32,97,100,100,32,97,32,115,117,102,102,105,120,32,116, 111,32,97,32,114,111,111,116,32,112,97,116,104,58,32,169,199,27,248,22,252, -29,3,250,22,252,74,3,2,166,248,22,252,27,3,199,28,248,22,252,136,1, -203,249,22,252,212,1,204,8,63,202,28,248,22,252,25,3,194,249,22,252,36, -3,195,194,192,83,159,34,93,80,159,34,37,35,249,22,252,138,1,7,92,7, +35,3,250,22,252,78,3,2,166,248,22,252,33,3,199,28,248,22,252,142,1, +203,249,22,252,218,1,204,8,63,202,28,248,22,252,31,3,194,249,22,252,42, +3,195,194,192,83,159,34,93,80,159,34,37,35,249,22,252,144,1,7,92,7, 92,83,159,34,93,80,159,34,38,35,89,162,34,35,45,2,12,223,0,87,94, -28,27,248,22,252,25,3,195,28,192,192,28,248,22,252,136,1,195,27,248,22, -252,38,3,196,28,192,192,248,22,252,39,3,196,11,12,250,22,252,40,2,76, +28,27,248,22,252,31,3,195,28,192,192,28,248,22,252,142,1,195,27,248,22, +252,44,3,196,28,192,192,248,22,252,45,3,196,11,12,250,22,252,46,2,76, 110,111,114,109,97,108,45,112,97,116,104,45,99,97,115,101,170,6,25,25,112, 97,116,104,32,111,114,32,118,97,108,105,100,45,112,97,116,104,32,115,116,114, -105,110,103,171,196,28,249,22,252,11,2,247,22,252,219,1,67,119,105,110,100, -111,119,115,172,27,28,248,22,252,136,1,195,194,248,22,252,26,3,195,28,249, -22,252,68,3,33,21,35,114,120,34,94,91,92,92,93,91,92,92,93,91,63, -93,91,92,92,93,34,173,194,28,248,22,252,136,1,195,248,22,252,28,3,195, -194,27,248,22,252,175,1,194,248,22,252,28,3,250,22,252,75,3,33,6,35, -114,120,34,47,34,174,28,249,22,252,68,3,33,22,35,114,120,34,91,47,92, +105,110,103,171,196,28,249,22,252,17,2,247,22,252,225,1,67,119,105,110,100, +111,119,115,172,27,28,248,22,252,142,1,195,194,248,22,252,32,3,195,28,249, +22,252,72,3,33,21,35,114,120,34,94,91,92,92,93,91,92,92,93,91,63, +93,91,92,92,93,34,173,194,28,248,22,252,142,1,195,248,22,252,34,3,195, +194,27,248,22,252,181,1,194,248,22,252,34,3,250,22,252,79,3,33,6,35, +114,120,34,47,34,174,28,249,22,252,72,3,33,22,35,114,120,34,91,47,92, 92,93,91,46,32,93,43,91,47,92,92,93,42,36,34,175,198,196,250,22,252, -75,3,33,19,35,114,120,34,91,32,46,93,43,40,91,47,92,92,93,42,41, -36,34,176,199,6,2,2,92,49,177,80,158,40,37,28,249,22,252,11,2,247, -22,252,219,1,65,109,97,99,111,115,178,248,22,252,28,3,248,22,252,175,1, -28,248,22,252,136,1,196,195,248,22,252,26,3,196,28,248,22,252,136,1,194, -248,22,252,28,3,194,193,83,159,34,93,80,159,34,39,35,91,159,36,11,90, +79,3,33,19,35,114,120,34,91,32,46,93,43,40,91,47,92,92,93,42,41, +36,34,176,199,6,2,2,92,49,177,80,158,40,37,28,249,22,252,17,2,247, +22,252,225,1,65,109,97,99,111,115,178,248,22,252,34,3,248,22,252,181,1, +28,248,22,252,142,1,196,195,248,22,252,32,3,196,28,248,22,252,142,1,194, +248,22,252,34,3,194,193,83,159,34,93,80,159,34,39,35,91,159,36,11,90, 161,35,35,11,32,179,89,162,8,64,35,38,65,99,104,101,99,107,180,222,28, -248,22,130,193,12,250,22,252,40,2,2,14,6,4,4,114,101,97,108,181,195, -20,12,95,35,89,162,8,36,36,53,2,14,223,0,87,95,28,248,22,130,194, -12,250,22,252,40,2,2,14,2,181,196,28,248,22,130,195,12,250,22,252,40, -2,2,14,2,181,197,27,248,22,176,196,27,249,22,173,197,195,27,249,22,172, -198,196,28,249,22,181,198,198,28,250,22,184,196,34,195,28,248,22,133,197,34, -33,3,48,46,48,182,28,248,22,188,194,248,22,173,27,248,22,173,195,27,248, -22,173,197,28,248,22,132,194,193,27,248,22,144,195,27,248,22,144,195,28,249, -22,182,195,194,248,22,170,194,249,22,172,195,248,22,175,249,205,248,22,175,249, -22,173,202,201,248,22,175,249,22,173,203,201,28,248,22,132,194,193,27,248,22, -144,195,27,248,22,144,195,28,249,22,182,195,194,248,22,170,194,249,22,172,195, -248,22,175,249,202,248,22,175,249,22,173,202,201,248,22,175,249,22,173,203,201, +248,22,136,193,12,250,22,252,46,2,2,14,6,4,4,114,101,97,108,181,195, +20,12,95,35,89,162,8,36,36,53,2,14,223,0,87,95,28,248,22,136,194, +12,250,22,252,46,2,2,14,2,181,196,28,248,22,136,195,12,250,22,252,46, +2,2,14,2,181,197,27,248,22,182,196,27,249,22,179,197,195,27,249,22,178, +198,196,28,249,22,187,198,198,28,250,22,190,196,34,195,28,248,22,139,197,34, +33,3,48,46,48,182,28,248,22,194,194,248,22,179,27,248,22,179,195,27,248, +22,179,197,28,248,22,138,194,193,27,248,22,150,195,27,248,22,150,195,28,249, +22,188,195,194,248,22,176,194,249,22,178,195,248,22,181,249,205,248,22,181,249, +22,179,202,201,248,22,181,249,22,179,203,201,28,248,22,138,194,193,27,248,22, +150,195,27,248,22,150,195,28,249,22,188,195,194,248,22,176,194,249,22,178,195, +248,22,181,249,202,248,22,181,249,22,179,202,201,248,22,181,249,22,179,203,201, 33,6,43,110,97,110,46,48,183,89,162,8,36,36,54,72,102,105,110,100,45, -98,101,116,119,101,101,110,184,223,0,28,248,22,132,194,193,27,248,22,144,195, -27,248,22,144,197,28,249,22,182,195,194,248,22,170,194,249,22,172,195,248,22, -175,27,248,22,175,249,22,173,203,200,27,248,22,175,249,22,173,203,201,28,248, -22,132,194,193,27,248,22,144,195,27,248,22,144,195,28,249,22,182,195,194,248, -22,170,194,249,22,172,195,248,22,175,249,206,248,22,175,249,22,173,202,201,248, -22,175,249,22,173,203,201,83,159,34,93,80,159,34,40,35,32,185,89,162,34, -34,41,2,16,222,91,159,38,11,90,161,35,34,11,83,160,40,34,35,11,90, -161,35,35,11,83,160,40,34,35,11,90,161,35,36,11,83,160,40,34,35,11, -90,161,35,37,11,89,162,34,34,35,1,24,114,101,112,45,101,114,114,111,114, -45,101,115,99,97,112,101,45,104,97,110,100,108,101,114,186,223,1,247,207,250, -22,31,89,162,34,34,38,9,225,6,5,3,90,161,35,34,10,247,22,252,45, -2,90,161,35,35,10,247,22,252,31,2,87,94,248,22,252,45,2,195,248,22, -252,31,2,11,89,162,34,34,37,9,224,5,4,248,22,9,89,162,8,36,35, -41,9,224,2,1,250,32,187,89,163,8,102,37,40,69,114,101,112,108,45,108, -111,111,112,188,34,223,6,87,94,248,22,9,89,162,34,35,41,9,225,3,2, -1,250,22,31,89,162,8,36,34,38,9,225,5,4,6,87,94,248,22,252,31, -2,210,90,161,35,35,10,192,12,89,162,34,34,38,9,223,3,27,247,247,22, -40,87,94,28,248,22,252,70,1,193,248,194,12,12,83,159,45,32,189,89,162, -35,35,37,9,222,249,22,3,247,22,39,194,248,247,22,252,32,2,28,248,22, -206,194,248,22,252,30,2,194,193,89,162,8,36,34,37,9,224,5,4,90,161, -35,35,10,247,22,252,31,2,87,94,248,22,252,31,2,11,90,161,35,34,10, -11,12,250,2,187,195,196,197,197,195,196,89,162,8,36,34,38,9,225,5,4, -3,87,95,248,22,252,45,2,208,248,22,252,31,2,210,90,161,35,35,10,11, -90,161,35,34,10,11,12,83,159,34,93,80,159,34,41,35,32,190,89,162,34, -35,45,2,18,222,87,94,28,27,248,22,252,25,3,194,28,192,192,28,248,22, -252,136,1,194,27,248,22,252,38,3,195,28,192,192,248,22,252,39,3,195,11, -12,250,22,252,40,2,2,18,6,25,25,112,97,116,104,32,111,114,32,115,116, -114,105,110,103,32,40,115,97,110,115,32,110,117,108,41,191,195,91,159,37,11, -90,161,37,34,11,248,22,252,37,3,196,28,194,248,22,252,187,2,249,22,252, -161,2,248,22,252,165,1,249,22,252,184,1,6,36,36,108,111,97,100,47,99, -100,58,32,99,97,110,110,111,116,32,111,112,101,110,32,97,32,100,105,114,101, -99,116,111,114,121,58,32,126,115,192,201,247,22,15,28,248,22,252,25,3,193, -87,94,28,248,22,252,31,3,193,12,248,22,252,187,2,249,22,252,161,2,248, -22,252,165,1,250,22,252,184,1,6,65,65,108,111,97,100,47,99,100,58,32, -100,105,114,101,99,116,111,114,121,32,111,102,32,126,115,32,100,111,101,115,32, -110,111,116,32,101,120,105,115,116,32,40,99,117,114,114,101,110,116,32,100,105, -114,101,99,116,111,114,121,32,105,115,32,126,115,41,193,202,247,22,252,55,3, -247,22,15,27,247,22,252,55,3,250,22,31,89,162,34,34,36,9,223,4,248, -22,252,55,3,193,89,162,34,34,36,9,223,5,248,22,252,88,1,193,89,162, -34,34,36,9,223,3,248,22,252,55,3,193,248,22,252,88,1,196,83,159,34, -93,80,159,34,42,35,32,194,89,162,34,37,41,2,20,222,87,94,28,27,248, -22,252,25,3,196,28,192,192,28,248,22,252,136,1,196,27,248,22,252,38,3, -197,28,192,192,248,22,252,39,3,197,11,12,250,22,252,40,2,196,6,25,25, -112,97,116,104,32,111,114,32,115,116,114,105,110,103,32,40,115,97,110,115,32, -110,117,108,41,195,197,28,248,22,252,40,3,195,248,193,195,27,247,22,252,90, -1,248,194,28,193,249,22,252,41,3,198,195,196,83,159,34,93,80,159,34,43, -35,89,162,34,35,40,2,22,223,0,87,94,28,27,248,22,252,25,3,195,28, -192,192,28,248,22,252,136,1,195,27,248,22,252,38,3,196,28,192,192,248,22, -252,39,3,196,11,12,250,22,252,40,2,2,22,2,195,196,28,248,22,252,40, -3,194,248,22,252,88,1,194,27,247,22,252,90,1,248,22,252,88,1,28,193, -249,22,252,41,3,197,195,195,83,159,34,93,80,159,34,44,35,89,162,34,35, -40,2,24,223,0,87,94,28,27,248,22,252,25,3,195,28,192,192,28,248,22, -252,136,1,195,27,248,22,252,38,3,196,28,192,192,248,22,252,39,3,196,11, -12,250,22,252,40,2,2,24,2,195,196,28,248,22,252,40,3,194,248,22,252, -59,3,194,27,247,22,252,90,1,248,22,252,59,3,28,193,249,22,252,41,3, -197,195,195,83,159,34,93,80,159,34,45,35,27,248,22,252,63,3,248,22,252, -211,1,27,27,247,22,252,219,1,28,249,22,72,194,21,96,64,117,110,105,120, -196,64,98,101,111,115,197,65,111,115,107,105,116,198,66,109,97,99,111,115,120, -199,6,1,1,58,200,28,249,22,72,194,21,94,2,172,2,178,6,1,1,59, -201,12,250,22,252,184,1,6,14,14,40,91,94,126,97,93,42,41,126,97,40, -46,42,41,202,195,195,89,162,8,36,36,42,2,26,223,0,87,95,28,28,248, -22,252,188,1,194,10,248,22,252,136,1,194,12,250,22,252,40,2,2,26,6, -21,21,98,121,116,101,32,115,116,114,105,110,103,32,111,114,32,115,116,114,105, -110,103,203,196,28,28,248,22,58,195,249,22,4,22,252,25,3,196,11,12,250, -22,252,40,2,2,26,6,13,13,108,105,115,116,32,111,102,32,112,97,116,104, -115,204,197,250,32,205,89,162,8,64,37,44,2,156,222,27,249,22,252,67,3, -196,197,28,192,27,248,22,78,194,27,250,2,205,198,199,248,22,87,198,28,249, -22,252,194,1,195,5,0,206,249,22,65,197,194,249,22,51,248,22,252,29,3, -196,194,28,249,22,252,194,1,197,2,206,249,22,65,195,9,249,22,51,248,22, -252,29,3,198,9,197,195,28,248,22,252,136,1,197,248,22,252,211,1,197,196, -83,159,34,93,80,159,34,46,35,83,158,37,20,92,96,2,28,89,162,8,36, -37,49,9,223,0,87,95,28,27,248,22,252,25,3,195,28,192,192,28,248,22, -252,136,1,195,27,248,22,252,38,3,196,28,192,192,248,22,252,39,3,196,11, -12,250,22,252,40,2,2,28,6,25,25,112,97,116,104,32,111,114,32,115,116, -114,105,110,103,32,40,115,97,110,115,32,110,117,108,41,207,196,28,28,194,28, -27,248,22,252,25,3,196,28,192,192,28,248,22,252,136,1,196,27,248,22,252, -38,3,197,28,192,192,248,22,252,39,3,197,11,248,22,252,38,3,195,11,10, -12,250,22,252,40,2,2,28,6,29,29,35,102,32,111,114,32,114,101,108,97, -116,105,118,101,32,112,97,116,104,32,111,114,32,115,116,114,105,110,103,208,197, -28,28,248,22,252,38,3,194,91,159,37,11,90,161,37,34,11,248,22,252,37, -3,197,249,22,252,11,2,194,68,114,101,108,97,116,105,118,101,209,11,27,248, -22,252,217,1,6,4,4,80,65,84,72,210,27,28,193,27,249,80,158,39,45, -196,9,28,249,22,252,11,2,247,22,252,219,1,2,172,249,22,51,248,22,252, -29,3,5,1,46,211,194,192,9,28,248,22,57,193,11,27,248,22,252,41,3, -248,22,52,195,27,249,22,252,36,3,195,199,28,248,22,252,30,3,193,250,32, -212,89,162,8,100,37,48,70,102,111,117,110,100,45,101,120,101,99,213,222,28, -192,91,159,37,11,90,161,37,34,11,248,22,252,37,3,198,27,28,197,27,248, -22,252,42,3,200,28,249,22,252,13,2,194,201,11,28,248,22,252,38,3,193, -250,2,212,200,201,249,22,252,36,3,199,197,250,2,212,200,201,195,11,28,192, -192,27,28,248,22,252,25,3,195,27,249,22,252,36,3,197,200,28,28,248,22, -252,31,3,193,10,248,22,252,30,3,193,192,11,11,28,192,192,28,198,11,27, -248,22,252,42,3,201,28,249,22,252,13,2,194,202,11,28,248,22,252,38,3, -193,250,2,212,201,202,249,22,252,36,3,200,197,250,2,212,201,202,195,194,201, -202,195,251,32,214,89,162,8,100,38,48,2,156,222,28,248,22,57,196,11,27, -248,22,252,41,3,248,22,52,198,27,249,22,252,36,3,195,196,28,248,22,252, -30,3,193,250,2,212,198,199,195,27,248,22,53,199,28,248,22,57,193,11,27, -248,22,252,41,3,248,22,52,195,27,249,22,252,36,3,195,199,28,248,22,252, -30,3,193,250,2,212,201,202,195,251,2,214,201,202,203,248,22,53,199,201,202, -203,248,22,53,199,27,248,22,252,41,3,195,28,248,22,252,30,3,193,250,2, -212,198,199,195,11,89,162,34,36,40,9,223,0,250,80,158,37,46,196,197,11, -89,162,34,35,39,9,223,0,250,80,158,37,46,196,11,11,83,159,34,93,80, -159,34,47,35,32,215,89,162,34,36,43,2,30,222,87,94,28,27,248,22,252, -25,3,195,28,192,192,28,248,22,252,136,1,195,27,248,22,252,38,3,196,28, -192,192,248,22,252,39,3,196,11,12,250,22,252,40,2,195,2,160,196,28,248, -22,252,38,3,194,12,248,22,252,187,2,249,22,252,131,2,248,22,252,165,1, -250,22,252,184,1,2,161,199,200,247,22,15,83,159,34,93,80,159,34,48,35, -89,162,34,37,45,2,32,223,0,87,94,87,94,28,27,248,22,252,25,3,196, -28,192,192,28,248,22,252,136,1,196,27,248,22,252,38,3,197,28,192,192,248, -22,252,39,3,197,11,12,250,22,252,40,2,196,2,160,197,28,248,22,252,38, -3,195,12,248,22,252,187,2,249,22,252,131,2,248,22,252,165,1,250,22,252, -184,1,2,161,200,201,247,22,15,249,22,3,89,162,34,35,44,9,224,2,3, -87,94,28,27,248,22,252,25,3,196,28,192,192,28,248,22,252,136,1,196,27, -248,22,252,38,3,197,28,192,192,248,22,252,39,3,197,11,12,250,22,252,40, -2,195,2,160,197,28,248,22,252,38,3,195,12,248,22,252,187,2,249,22,252, -131,2,248,22,252,165,1,250,22,252,184,1,2,161,199,201,247,22,15,197,83, -159,34,93,80,159,34,49,35,32,216,89,162,34,37,44,2,34,222,27,247,22, -252,56,3,252,32,217,89,162,8,64,39,50,65,99,108,111,111,112,218,222,28, -248,22,57,197,248,22,252,187,2,249,22,252,161,2,248,22,252,165,1,251,22, -252,184,1,6,42,42,126,97,58,32,99,111,108,108,101,99,116,105,111,110,32, -110,111,116,32,102,111,117,110,100,58,32,126,115,32,105,110,32,97,110,121,32, -111,102,58,32,126,115,219,201,28,248,22,57,204,202,250,22,1,22,252,36,3, -205,206,200,247,22,15,27,249,22,252,36,3,248,22,52,200,197,28,248,22,252, -31,3,193,27,250,22,1,22,252,36,3,196,200,28,248,22,252,31,3,193,192, -252,2,217,199,200,201,202,248,22,53,204,252,2,217,198,199,200,201,248,22,53, -203,197,198,199,200,197,83,159,34,93,80,159,34,50,35,27,247,22,252,219,1, -28,249,22,252,11,2,194,2,172,5,4,46,100,108,108,220,28,249,22,72,194, -21,94,2,199,2,178,5,6,46,100,121,108,105,98,221,5,3,46,115,111,222, -83,159,34,93,80,159,34,51,35,249,80,159,36,36,35,248,22,252,29,3,5, -10,95,108,111,97,100,101,114,46,115,115,223,80,158,36,50,83,159,34,93,80, -159,34,52,35,249,22,252,221,2,27,89,162,34,36,8,28,1,25,100,101,102, -97,117,108,116,45,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101, -100,224,223,3,87,94,28,27,248,22,252,25,3,195,28,192,192,28,248,22,252, -136,1,195,27,248,22,252,38,3,196,28,192,192,248,22,252,39,3,196,11,12, -250,22,252,40,2,2,49,6,25,25,112,97,116,104,32,111,114,32,118,97,108, -105,100,45,112,97,116,104,32,115,116,114,105,110,103,225,196,91,159,40,11,90, -161,35,34,11,28,248,22,252,40,3,200,199,27,247,22,252,90,1,28,192,249, -22,252,41,3,202,194,200,90,161,37,35,11,248,22,252,37,3,193,90,161,35, -38,11,28,249,22,252,11,2,195,2,209,64,115,97,109,101,226,193,90,161,35, -39,11,247,22,252,57,3,27,89,162,34,35,43,62,122,111,227,225,7,5,3, -250,22,252,36,3,196,198,249,80,159,41,36,35,197,5,3,46,122,111,228,27, -89,162,34,35,45,9,225,8,6,4,252,22,252,36,3,198,200,2,164,247,22, -252,220,1,249,80,159,43,36,35,199,80,158,43,50,27,27,80,158,44,51,89, -162,34,35,43,9,225,10,8,0,252,22,252,36,3,198,200,2,164,247,22,252, -220,1,197,27,249,22,5,89,162,34,35,41,9,223,6,27,193,27,250,22,252, -50,3,196,11,32,229,89,162,8,44,34,34,9,222,11,28,192,249,22,51,195, -194,11,203,27,27,28,195,27,249,22,5,89,162,34,35,41,9,223,6,27,248, -194,195,27,250,22,252,50,3,196,11,32,230,89,162,8,44,34,34,9,222,11, -28,192,249,22,51,195,194,11,206,27,28,196,11,193,28,192,192,28,193,28,196, -28,249,22,185,248,22,53,196,248,22,53,199,193,11,11,11,11,28,192,27,248, -22,252,59,3,248,22,52,195,91,159,36,11,90,161,36,34,11,248,195,248,22, -42,248,22,252,210,1,248,22,252,27,3,249,80,159,55,36,35,23,17,5,0, -231,28,192,87,94,28,23,17,28,249,22,252,11,2,195,23,19,12,248,22,252, -187,2,249,22,252,128,2,248,22,252,165,1,251,22,252,184,1,6,81,81,108, -111,97,100,45,101,120,116,101,110,115,105,111,110,58,32,101,120,112,101,99,116, -101,100,32,109,111,100,117,108,101,32,100,101,99,108,97,114,97,116,105,111,110, -32,102,111,114,32,96,126,97,39,44,32,102,111,117,110,100,32,126,97,32,116, -104,114,111,117,103,104,32,108,111,97,100,101,114,58,32,126,101,232,23,25,28, -201,249,22,252,184,1,6,27,27,109,111,100,117,108,101,32,100,101,99,108,97, -114,97,116,105,111,110,32,102,111,114,32,96,126,97,39,233,203,6,4,4,110, -111,110,101,234,248,22,52,204,247,22,15,12,192,11,11,28,192,249,80,159,47, -8,48,35,203,194,27,28,196,27,249,22,5,89,162,34,35,41,9,223,7,27, -248,194,195,27,250,22,252,50,3,196,11,32,235,89,162,8,44,34,34,9,222, -11,28,192,249,22,51,195,194,11,206,27,28,196,11,193,28,192,192,28,193,28, -196,28,249,22,185,248,22,53,196,248,22,53,199,193,11,11,11,11,28,192,249, -80,159,48,8,48,35,204,89,162,34,34,39,9,224,16,2,249,247,22,252,60, -3,248,22,52,195,195,27,28,198,27,249,22,5,89,162,34,35,41,9,223,9, -27,248,194,195,27,250,22,252,50,3,196,11,32,236,89,162,8,44,34,34,9, -222,11,28,192,249,22,51,195,194,11,23,15,27,28,197,11,193,28,192,192,28, -193,28,197,28,249,22,185,248,22,53,196,248,22,53,200,193,11,11,11,11,28, -192,249,80,159,49,8,48,35,205,89,162,34,34,39,9,224,17,2,249,247,22, -252,89,1,248,22,52,195,195,249,80,159,49,8,48,35,205,89,162,34,34,38, -9,224,17,9,249,247,22,252,89,1,194,195,192,32,237,89,162,8,36,35,38, -9,222,87,94,28,28,248,22,0,193,249,22,34,194,36,11,12,250,22,252,40, -2,2,40,6,19,19,112,114,111,99,101,100,117,114,101,32,40,97,114,105,116, -121,32,50,41,238,195,192,83,159,34,93,80,159,34,55,35,89,162,8,37,36, -44,2,47,223,0,87,94,87,94,87,94,28,27,248,22,252,25,3,195,28,192, -192,28,248,22,252,136,1,195,27,248,22,252,38,3,196,28,192,192,248,22,252, -39,3,196,11,12,250,22,252,40,2,2,47,2,160,196,28,248,22,252,38,3, -194,12,248,22,252,187,2,249,22,252,131,2,248,22,252,165,1,250,22,252,184, -1,2,161,2,47,200,247,22,15,249,22,3,80,159,36,8,49,35,196,27,247, -22,252,56,3,251,32,239,89,162,8,64,38,49,2,218,222,28,248,22,57,196, -248,22,252,187,2,249,22,252,161,2,248,22,252,165,1,251,22,252,184,1,2, -219,2,47,28,248,22,57,203,201,250,22,1,22,252,36,3,204,205,200,247,22, -15,27,249,22,252,36,3,248,22,52,199,196,28,248,22,252,31,3,193,27,250, -22,1,22,252,36,3,196,199,28,248,22,252,31,3,193,192,251,2,239,198,199, -200,248,22,53,202,251,2,239,197,198,199,248,22,53,201,196,198,199,196,83,159, -34,93,80,159,34,56,35,89,162,34,35,38,2,49,223,0,249,247,80,158,36, -52,195,11,248,22,252,3,3,32,240,89,162,8,36,35,35,1,20,100,101,102, -97,117,108,116,45,114,101,97,100,101,114,45,103,117,97,114,100,241,222,192,83, -159,34,93,80,159,34,57,35,33,17,35,114,120,35,34,40,46,43,63,41,47, -43,40,46,42,41,34,242,83,159,34,93,80,159,34,58,35,2,159,83,159,34, -93,80,159,34,59,35,33,45,35,114,120,35,34,94,91,45,97,45,122,65,45, -90,48,45,57,95,46,32,93,43,40,47,43,91,45,97,45,122,65,45,90,48, -45,57,95,46,32,93,43,41,42,36,34,243,83,159,34,93,80,159,34,8,26, -35,248,22,110,64,119,101,97,107,244,83,159,34,93,80,159,34,8,27,35,249, -22,110,2,244,65,101,113,117,97,108,245,83,159,34,93,80,159,34,8,28,35, -247,22,48,83,159,34,93,80,158,34,8,29,11,83,159,34,93,80,158,34,8, -30,11,83,159,34,93,80,159,34,8,31,35,89,162,8,36,35,38,2,67,223, -0,91,159,36,10,90,161,35,34,10,11,90,161,35,35,10,83,158,37,20,92, -96,1,29,115,116,97,110,100,97,114,100,45,109,111,100,117,108,101,45,110,97, -109,101,45,114,101,115,111,108,118,101,114,246,89,162,8,36,35,44,9,224,2, -0,87,94,28,207,248,208,195,12,27,27,250,22,116,80,158,40,8,26,248,22, -252,85,3,247,22,252,212,2,11,28,192,192,27,247,22,110,87,94,250,22,115, -80,158,41,8,26,248,22,252,85,3,247,22,252,212,2,195,192,250,22,115,195, -198,66,97,116,116,97,99,104,247,89,162,34,37,42,9,223,1,251,211,197,198, -199,10,89,162,34,38,8,28,9,225,2,3,0,28,28,248,22,50,196,249,22, -252,11,2,248,22,52,198,66,112,108,97,110,101,116,248,11,87,94,28,207,12, -20,14,159,80,158,36,53,250,80,158,39,54,249,22,19,11,80,158,41,53,22, -252,212,2,196,90,161,35,34,10,249,22,235,21,95,63,108,105,98,249,6,11, -11,114,101,115,111,108,118,101,114,46,115,115,250,6,6,6,112,108,97,110,101, -116,251,1,27,112,108,97,110,101,116,45,109,111,100,117,108,101,45,110,97,109, -101,45,114,101,115,111,108,118,101,114,252,252,0,12,251,211,199,200,201,202,27, -28,248,22,252,136,1,197,27,248,80,159,39,8,50,35,199,27,250,22,116,80, -158,42,8,27,249,22,51,203,198,11,28,192,192,27,248,22,252,211,1,200,28, -249,22,252,68,3,2,243,194,27,249,22,252,67,3,2,242,195,28,192,249,32, -252,253,0,89,162,8,64,36,47,2,156,222,27,249,22,252,67,3,2,242,196, -28,192,27,249,22,252,36,3,196,27,248,22,78,197,28,249,22,252,194,1,194, -5,1,46,252,254,0,2,226,28,249,22,252,194,1,194,5,2,46,46,252,255, -0,62,117,112,252,0,1,248,22,252,29,3,193,27,248,22,87,195,27,249,22, -252,67,3,2,242,195,28,192,249,2,252,253,0,249,22,252,36,3,198,27,248, -22,78,198,28,249,22,252,194,1,194,2,252,254,0,2,226,28,249,22,252,194, -1,194,2,252,255,0,2,252,0,1,248,22,252,29,3,193,248,22,87,195,249, -22,252,36,3,196,248,22,252,29,3,196,249,22,252,36,3,195,248,22,252,29, -3,197,249,22,252,36,3,199,27,248,22,78,198,28,249,22,252,194,1,194,2, -252,254,0,2,226,28,249,22,252,194,1,194,2,252,255,0,2,252,0,1,248, -22,252,29,3,193,248,22,87,195,249,22,252,36,3,197,248,22,252,29,3,196, -248,22,59,249,22,252,159,1,6,72,72,32,40,114,101,108,97,116,105,118,101, -32,115,116,114,105,110,103,32,102,111,114,109,32,109,117,115,116,32,99,111,110, -116,97,105,110,32,111,110,108,121,32,97,45,122,44,32,65,45,90,44,32,48, -45,57,44,32,45,44,32,95,44,32,46,44,32,47,44,32,97,110,100,32,252, -1,1,6,37,37,115,112,97,99,101,44,32,119,105,116,104,32,110,111,32,108, -101,97,100,105,110,103,32,111,114,32,116,114,97,105,108,105,110,103,32,47,41, -252,2,1,28,248,22,252,25,3,197,28,248,22,252,39,3,197,196,248,22,59, -6,25,25,40,97,32,112,97,116,104,32,109,117,115,116,32,98,101,32,97,98, -115,111,108,117,116,101,41,252,3,1,28,28,248,22,50,197,248,22,252,9,2, -248,22,58,198,10,11,28,249,22,252,11,2,248,22,52,199,2,249,27,250,22, -116,80,158,41,8,27,249,22,51,202,247,22,252,56,3,11,28,192,192,27,27, -248,22,64,200,28,249,22,181,194,36,248,22,59,6,5,5,109,122,108,105,98, -252,4,1,28,249,22,183,194,36,248,22,80,200,11,28,192,28,249,22,4,32, -252,5,1,89,162,34,35,36,9,222,28,248,22,252,136,1,193,248,22,252,38, -3,193,11,194,28,248,22,252,136,1,248,22,78,200,28,248,22,252,38,3,248, -22,78,200,27,27,248,22,52,195,27,248,22,53,196,27,247,22,252,56,3,251, -32,252,6,1,89,162,8,64,38,49,2,218,222,28,248,22,57,196,248,22,252, -187,2,249,22,252,161,2,248,22,252,165,1,251,22,252,184,1,2,219,2,246, -28,248,22,57,203,201,250,22,1,22,252,36,3,204,205,200,247,22,15,27,249, -22,252,36,3,248,22,52,199,196,28,248,22,252,31,3,193,27,250,22,1,22, -252,36,3,196,199,28,248,22,252,31,3,193,192,251,2,252,6,1,198,199,200, -248,22,53,202,251,2,252,6,1,197,198,199,248,22,53,201,196,198,197,196,249, -22,252,36,3,194,248,22,78,202,11,11,11,11,28,249,22,252,11,2,248,22, -52,199,64,102,105,108,101,252,7,1,28,249,22,181,248,22,64,199,36,27,248, -22,78,198,28,248,22,252,136,1,193,28,27,248,22,252,25,3,194,28,192,192, -28,248,22,252,136,1,194,27,248,22,252,38,3,195,28,192,192,248,22,252,39, -3,195,11,249,22,252,41,3,194,248,80,159,41,8,50,35,201,11,11,11,11, -87,94,28,28,248,22,252,25,3,193,10,248,22,252,222,1,193,12,28,198,250, -22,252,39,2,67,114,101,113,117,105,114,101,252,8,1,249,22,252,184,1,6, -17,17,98,97,100,32,109,111,100,117,108,101,32,112,97,116,104,126,97,252,9, -1,28,197,248,22,52,198,6,0,0,252,10,1,201,250,22,252,40,2,2,246, -249,22,252,184,1,6,13,13,109,111,100,117,108,101,32,112,97,116,104,126,97, -252,11,1,28,197,248,22,52,198,6,0,0,252,12,1,199,27,28,248,22,252, -222,1,194,249,22,252,227,1,195,34,248,22,252,43,3,248,22,252,44,3,195, -27,28,248,22,252,222,1,195,249,22,252,227,1,196,35,248,80,159,40,38,35, -194,91,159,37,11,90,161,37,34,11,28,248,22,252,222,1,198,250,22,7,67, -105,103,110,111,114,101,100,252,13,1,249,22,252,227,1,202,36,2,252,13,1, -248,22,252,37,3,197,27,28,248,22,252,222,1,199,249,22,252,227,1,200,37, -249,80,159,45,36,35,196,5,0,252,14,1,27,28,248,22,252,222,1,200,249, -22,252,227,1,201,38,249,22,252,184,1,6,3,3,44,126,97,252,15,1,248, -22,252,210,1,248,22,252,27,3,248,80,159,49,38,35,199,27,28,248,22,252, -222,1,201,249,22,252,227,1,202,39,248,22,42,249,22,252,159,1,196,248,22, -252,210,1,248,22,252,27,3,199,27,28,248,22,252,222,1,202,249,22,252,227, -1,203,40,27,249,22,252,67,3,2,166,248,22,252,27,3,201,28,192,248,22, -52,193,10,27,27,250,22,116,80,158,51,8,26,248,22,252,85,3,247,22,252, -212,2,11,28,192,192,27,247,22,110,87,94,250,22,115,80,158,52,8,26,248, -22,252,85,3,247,22,252,212,2,195,192,87,95,28,23,17,27,250,22,116,196, -198,11,87,94,28,192,28,28,248,22,41,193,10,249,22,252,13,2,196,194,12, -252,22,252,37,2,2,246,6,71,71,109,111,100,117,108,101,32,112,114,101,118, -105,111,117,115,108,121,32,108,111,97,100,101,100,32,119,105,116,104,32,115,117, -102,102,105,120,32,126,115,44,32,99,97,110,110,111,116,32,108,111,97,100,32, -119,105,116,104,32,115,117,102,102,105,120,32,126,115,58,32,126,101,252,16,1, -28,249,22,252,11,2,10,199,6,0,0,252,17,1,197,28,249,22,252,11,2, -10,201,6,0,0,252,18,1,199,23,15,12,28,192,12,87,95,27,249,22,17, -247,22,15,80,158,51,8,28,27,247,22,252,212,2,249,22,3,89,162,34,35, -48,9,226,13,14,2,3,28,249,22,252,13,2,248,22,53,199,197,28,249,22, -252,11,2,248,22,52,199,195,251,22,252,37,2,2,246,6,26,26,99,121,99, -108,101,32,105,110,32,108,111,97,100,105,110,103,32,97,116,32,126,101,58,32, -126,101,252,19,1,198,249,22,2,22,53,248,22,67,249,22,51,205,201,12,12, -195,27,248,22,42,198,20,14,159,80,158,49,8,28,249,22,51,247,22,252,212, -2,204,20,14,159,80,158,49,53,250,80,158,52,54,249,22,19,11,80,158,54, -53,22,234,195,249,247,80,158,51,52,205,248,22,42,248,22,252,210,1,248,22, -252,27,3,203,250,22,115,196,198,197,12,28,28,248,22,252,222,1,203,11,27, -248,22,252,136,1,23,16,28,192,192,28,248,22,50,23,16,249,22,252,11,2, -248,22,52,23,18,2,249,11,250,22,115,80,158,50,8,27,28,248,22,252,136, -1,23,18,249,22,51,23,19,248,80,159,53,8,50,35,23,21,249,22,51,23, -19,247,22,252,56,3,254,22,252,224,1,23,19,23,18,23,16,206,205,204,203, -12,194,208,83,159,34,93,80,159,34,8,32,35,83,158,37,20,92,95,2,69, -89,162,34,34,36,9,223,0,248,80,158,35,8,32,9,89,162,34,35,47,9, -223,0,27,247,22,252,58,3,249,80,158,37,45,28,194,27,248,22,252,217,1, -6,11,11,80,76,84,67,79,76,76,69,67,84,83,252,20,1,28,192,192,6, -0,0,252,21,1,6,0,0,252,22,1,27,28,195,250,22,252,36,3,248,22, -252,54,3,69,97,100,100,111,110,45,100,105,114,252,23,1,247,22,252,215,1, -6,8,8,99,111,108,108,101,99,116,115,252,24,1,11,27,248,80,159,40,8, -51,35,249,22,65,201,248,22,59,248,22,252,54,3,72,99,111,108,108,101,99, -116,115,45,100,105,114,252,25,1,28,193,249,22,51,195,194,192,83,159,34,93, -80,159,34,8,33,35,32,252,26,1,89,162,8,36,35,37,2,71,222,27,248, -22,252,4,1,194,28,192,192,248,22,252,5,1,194,83,159,34,97,80,159,34, -8,34,35,80,159,34,8,35,35,80,159,34,8,36,35,80,159,34,8,37,35, -80,159,34,8,38,35,26,9,22,252,91,2,63,101,118,116,252,27,1,11,35, -34,11,248,22,59,249,22,51,22,252,90,2,34,247,22,252,114,2,11,21,93, -34,83,159,34,93,80,159,34,8,39,35,89,162,34,35,39,2,83,223,0,87, -94,28,28,248,22,0,194,249,22,34,195,34,11,12,250,22,252,40,2,2,83, -6,19,19,112,114,111,99,101,100,117,114,101,32,40,97,114,105,116,121,32,48, -41,252,28,1,196,248,80,158,35,8,35,89,162,34,35,36,9,223,2,247,192, -83,159,34,93,80,159,34,8,40,35,32,252,29,1,89,162,34,35,38,2,85, -222,87,94,28,248,22,252,254,2,193,12,250,22,252,40,2,2,85,6,7,7, -99,104,97,110,110,101,108,252,30,1,195,248,22,252,239,2,193,83,159,34,93, -80,159,34,8,41,35,32,252,31,1,89,162,34,35,38,2,87,222,87,94,28, -248,22,252,254,2,193,12,250,22,252,40,2,2,87,6,7,7,99,104,97,110, -110,101,108,252,32,1,195,249,22,252,240,2,34,194,83,159,34,93,80,159,34, -8,42,35,32,252,33,1,89,162,34,36,39,2,89,222,87,94,28,248,22,252, -254,2,193,12,250,22,252,40,2,2,89,6,7,7,99,104,97,110,110,101,108, -252,34,1,195,28,248,22,252,239,2,249,22,252,253,2,195,196,12,11,83,159, -34,93,80,159,34,8,43,35,32,252,35,1,89,162,34,34,34,2,91,222,247, -22,252,212,2,83,159,34,93,80,159,34,8,44,35,89,162,34,35,39,2,93, -223,0,87,94,28,249,22,181,195,39,12,250,22,252,40,2,2,93,6,1,1, -53,252,36,1,196,248,80,158,35,8,45,11,83,159,34,93,80,159,34,8,46, -35,89,162,34,35,39,2,97,223,0,87,94,28,249,22,181,195,39,12,250,22, -252,40,2,2,97,6,1,1,53,252,37,1,196,248,80,158,35,8,45,10,83, -159,34,93,80,159,34,8,45,35,89,162,8,36,35,43,2,95,223,0,27,248, -22,252,190,2,65,101,109,112,116,121,252,38,1,27,247,22,252,190,2,87,94, -20,14,159,80,158,36,53,250,80,158,39,54,249,22,19,11,80,158,41,53,22, -252,212,2,196,87,96,249,22,239,194,66,35,37,114,53,114,115,252,39,1,248, -22,237,2,252,39,1,248,22,238,21,95,64,111,110,108,121,252,40,1,68,109, -122,115,99,104,101,109,101,252,41,1,72,115,121,110,116,97,120,45,114,117,108, -101,115,252,42,1,28,195,12,249,22,3,32,252,43,1,89,162,34,35,39,9, -222,249,22,252,82,3,194,249,22,235,2,252,41,1,196,21,15,203,63,99,97, -114,252,44,1,63,99,100,114,252,45,1,64,99,97,97,114,252,46,1,64,99, -97,100,114,252,47,1,64,99,100,97,114,252,48,1,64,99,100,100,114,252,49, -1,65,99,97,97,97,114,252,50,1,65,99,97,97,100,114,252,51,1,65,99, -97,100,97,114,252,52,1,65,99,97,100,100,114,252,53,1,65,99,100,97,97, -114,252,54,1,65,99,100,97,100,114,252,55,1,65,99,100,100,97,114,252,56, -1,65,99,100,100,100,114,252,57,1,66,99,97,97,97,97,114,252,58,1,66, -99,97,97,97,100,114,252,59,1,66,99,97,97,100,97,114,252,60,1,66,99, -97,97,100,100,114,252,61,1,66,99,97,100,97,97,114,252,62,1,66,99,97, -100,97,100,114,252,63,1,66,99,97,100,100,97,114,252,64,1,66,99,97,100, -100,100,114,252,65,1,66,99,100,97,97,97,114,252,66,1,66,99,100,97,97, -100,114,252,67,1,66,99,100,97,100,97,114,252,68,1,66,99,100,97,100,100, -114,252,69,1,66,99,100,100,97,97,114,252,70,1,66,99,100,100,97,100,114, -252,71,1,66,99,100,100,100,97,114,252,72,1,66,99,100,100,100,100,114,252, -73,1,63,109,97,112,252,74,1,61,61,252,75,1,61,60,252,76,1,61,62, -252,77,1,62,60,61,252,78,1,62,62,61,252,79,1,63,109,97,120,252,80, -1,63,109,105,110,252,81,1,61,43,252,82,1,61,45,252,83,1,61,42,252, -84,1,61,47,252,85,1,63,97,98,115,252,86,1,63,103,99,100,252,87,1, -63,108,99,109,252,88,1,63,101,120,112,252,89,1,63,108,111,103,252,90,1, -63,115,105,110,252,91,1,63,99,111,115,252,92,1,63,116,97,110,252,93,1, -63,110,111,116,252,94,1,63,101,113,63,252,95,1,1,30,99,97,108,108,45, -119,105,116,104,45,99,117,114,114,101,110,116,45,99,111,110,116,105,110,117,97, -116,105,111,110,252,96,1,71,109,97,107,101,45,115,116,114,105,110,103,252,97, -1,74,115,121,109,98,111,108,45,62,115,116,114,105,110,103,252,98,1,74,115, -116,114,105,110,103,45,62,115,121,109,98,111,108,252,99,1,76,109,97,107,101, -45,114,101,99,116,97,110,103,117,108,97,114,252,100,1,74,101,120,97,99,116, -45,62,105,110,101,120,97,99,116,252,101,1,74,105,110,101,120,97,99,116,45, -62,101,120,97,99,116,252,102,1,74,110,117,109,98,101,114,45,62,115,116,114, -105,110,103,252,103,1,74,115,116,114,105,110,103,45,62,110,117,109,98,101,114, -252,104,1,2,14,72,111,117,116,112,117,116,45,112,111,114,116,63,252,105,1, -78,99,117,114,114,101,110,116,45,105,110,112,117,116,45,112,111,114,116,252,106, -1,79,99,117,114,114,101,110,116,45,111,117,116,112,117,116,45,112,111,114,116, -252,107,1,78,99,117,114,114,101,110,116,45,101,114,114,111,114,45,112,111,114, -116,252,108,1,75,111,112,101,110,45,105,110,112,117,116,45,102,105,108,101,252, -109,1,76,111,112,101,110,45,111,117,116,112,117,116,45,102,105,108,101,252,110, -1,76,99,108,111,115,101,45,105,110,112,117,116,45,112,111,114,116,252,111,1, -77,99,108,111,115,101,45,111,117,116,112,117,116,45,112,111,114,116,252,112,1, -79,119,105,116,104,45,111,117,116,112,117,116,45,116,111,45,102,105,108,101,252, -113,1,73,116,114,97,110,115,99,114,105,112,116,45,111,110,252,114,1,74,116, -114,97,110,115,99,114,105,112,116,45,111,102,102,252,115,1,72,102,108,117,115, -104,45,111,117,116,112,117,116,252,116,1,73,115,116,114,105,110,103,45,108,101, -110,103,116,104,252,117,1,72,115,116,114,105,110,103,45,99,105,60,61,63,252, -118,1,72,115,116,114,105,110,103,45,99,105,62,61,63,252,119,1,73,115,116, -114,105,110,103,45,97,112,112,101,110,100,252,120,1,72,115,116,114,105,110,103, -45,62,108,105,115,116,252,121,1,72,108,105,115,116,45,62,115,116,114,105,110, -103,252,122,1,72,115,116,114,105,110,103,45,102,105,108,108,33,252,123,1,73, -118,101,99,116,111,114,45,108,101,110,103,116,104,252,124,1,72,118,101,99,116, -111,114,45,62,108,105,115,116,252,125,1,72,108,105,115,116,45,62,118,101,99, -116,111,114,252,126,1,72,118,101,99,116,111,114,45,102,105,108,108,33,252,127, -1,76,99,104,97,114,45,97,108,112,104,97,98,101,116,105,99,63,252,128,1, -73,99,104,97,114,45,110,117,109,101,114,105,99,63,252,129,1,76,99,104,97, -114,45,119,104,105,116,101,115,112,97,99,101,63,252,130,1,76,99,104,97,114, -45,117,112,112,101,114,45,99,97,115,101,63,252,131,1,76,99,104,97,114,45, -108,111,119,101,114,45,99,97,115,101,63,252,132,1,73,99,104,97,114,45,62, -105,110,116,101,103,101,114,252,133,1,73,105,110,116,101,103,101,114,45,62,99, -104,97,114,252,134,1,73,99,104,97,114,45,100,111,119,110,99,97,115,101,252, -135,1,1,21,99,97,108,108,45,119,105,116,104,45,111,117,116,112,117,116,45, -102,105,108,101,252,136,1,1,20,99,97,108,108,45,119,105,116,104,45,105,110, -112,117,116,45,102,105,108,101,252,137,1,1,20,119,105,116,104,45,105,110,112, -117,116,45,102,114,111,109,45,102,105,108,101,252,138,1,65,97,112,112,108,121, -252,139,1,68,102,111,114,45,101,97,99,104,252,140,1,67,115,121,109,98,111, -108,63,252,141,1,65,112,97,105,114,63,252,142,1,64,99,111,110,115,252,143, -1,68,115,101,116,45,99,97,114,33,252,144,1,68,115,101,116,45,99,100,114, -33,252,145,1,65,110,117,108,108,63,252,146,1,65,108,105,115,116,63,252,147, -1,64,108,105,115,116,252,148,1,66,108,101,110,103,116,104,252,149,1,66,97, -112,112,101,110,100,252,150,1,67,114,101,118,101,114,115,101,252,151,1,69,108, -105,115,116,45,116,97,105,108,252,152,1,68,108,105,115,116,45,114,101,102,252, -153,1,64,109,101,109,113,252,154,1,64,109,101,109,118,252,155,1,66,109,101, -109,98,101,114,252,156,1,64,97,115,115,113,252,157,1,64,97,115,115,118,252, -158,1,65,97,115,115,111,99,252,159,1,70,112,114,111,99,101,100,117,114,101, -63,252,160,1,67,110,117,109,98,101,114,63,252,161,1,68,99,111,109,112,108, -101,120,63,252,162,1,65,114,101,97,108,63,252,163,1,69,114,97,116,105,111, -110,97,108,63,252,164,1,68,105,110,116,101,103,101,114,63,252,165,1,66,101, -120,97,99,116,63,252,166,1,68,105,110,101,120,97,99,116,63,252,167,1,65, -122,101,114,111,63,252,168,1,69,112,111,115,105,116,105,118,101,63,252,169,1, -69,110,101,103,97,116,105,118,101,63,252,170,1,64,111,100,100,63,252,171,1, -65,101,118,101,110,63,252,172,1,68,113,117,111,116,105,101,110,116,252,173,1, -69,114,101,109,97,105,110,100,101,114,252,174,1,66,109,111,100,117,108,111,252, -175,1,65,102,108,111,111,114,252,176,1,67,99,101,105,108,105,110,103,252,177, -1,68,116,114,117,110,99,97,116,101,252,178,1,65,114,111,117,110,100,252,179, -1,69,110,117,109,101,114,97,116,111,114,252,180,1,71,100,101,110,111,109,105, -110,97,116,111,114,252,181,1,64,97,115,105,110,252,182,1,64,97,99,111,115, -252,183,1,64,97,116,97,110,252,184,1,64,115,113,114,116,252,185,1,64,101, -120,112,116,252,186,1,70,109,97,107,101,45,112,111,108,97,114,252,187,1,69, -114,101,97,108,45,112,97,114,116,252,188,1,69,105,109,97,103,45,112,97,114, -116,252,189,1,65,97,110,103,108,101,252,190,1,69,109,97,103,110,105,116,117, -100,101,252,191,1,71,105,110,112,117,116,45,112,111,114,116,63,252,192,1,64, -114,101,97,100,252,193,1,69,114,101,97,100,45,99,104,97,114,252,194,1,69, -112,101,101,107,45,99,104,97,114,252,195,1,71,101,111,102,45,111,98,106,101, -99,116,63,252,196,1,71,99,104,97,114,45,114,101,97,100,121,63,252,197,1, -65,119,114,105,116,101,252,198,1,67,100,105,115,112,108,97,121,252,199,1,67, -110,101,119,108,105,110,101,252,200,1,70,119,114,105,116,101,45,99,104,97,114, -252,201,1,64,108,111,97,100,252,202,1,67,115,116,114,105,110,103,63,252,203, -1,66,115,116,114,105,110,103,252,204,1,70,115,116,114,105,110,103,45,114,101, -102,252,205,1,71,115,116,114,105,110,103,45,115,101,116,33,252,206,1,68,115, -116,114,105,110,103,61,63,252,207,1,69,115,117,98,115,116,114,105,110,103,252, -208,1,71,115,116,114,105,110,103,45,99,111,112,121,252,209,1,71,115,116,114, -105,110,103,45,99,105,61,63,252,210,1,68,115,116,114,105,110,103,60,63,252, -211,1,68,115,116,114,105,110,103,62,63,252,212,1,69,115,116,114,105,110,103, -60,61,63,252,213,1,69,115,116,114,105,110,103,62,61,63,252,214,1,71,115, -116,114,105,110,103,45,99,105,60,63,252,215,1,71,115,116,114,105,110,103,45, -99,105,62,63,252,216,1,67,118,101,99,116,111,114,63,252,217,1,71,109,97, -107,101,45,118,101,99,116,111,114,252,218,1,66,118,101,99,116,111,114,252,219, -1,70,118,101,99,116,111,114,45,114,101,102,252,220,1,71,118,101,99,116,111, -114,45,115,101,116,33,252,221,1,65,99,104,97,114,63,252,222,1,66,99,104, -97,114,61,63,252,223,1,66,99,104,97,114,60,63,252,224,1,66,99,104,97, -114,62,63,252,225,1,67,99,104,97,114,60,61,63,252,226,1,67,99,104,97, -114,62,61,63,252,227,1,69,99,104,97,114,45,99,105,61,63,252,228,1,69, -99,104,97,114,45,99,105,60,63,252,229,1,69,99,104,97,114,45,99,105,62, -63,252,230,1,70,99,104,97,114,45,99,105,60,61,63,252,231,1,70,99,104, -97,114,45,99,105,62,61,63,252,232,1,71,99,104,97,114,45,117,112,99,97, -115,101,252,233,1,68,98,111,111,108,101,97,110,63,252,234,1,64,101,113,118, -63,252,235,1,66,101,113,117,97,108,63,252,236,1,65,102,111,114,99,101,252, -237,1,76,99,97,108,108,45,119,105,116,104,45,118,97,108,117,101,115,252,238, -1,66,118,97,108,117,101,115,252,239,1,64,101,118,97,108,252,240,1,2,71, -2,93,2,97,2,91,72,100,121,110,97,109,105,99,45,119,105,110,100,252,241, -1,9,193,97,68,35,37,107,101,114,110,101,108,252,242,1,2,125,2,124,2, -123,2,122,95,2,252,242,1,2,106,2,126,0}; - EVAL_ONE_SIZED_STR((char *)expr, 13557); +98,101,116,119,101,101,110,184,223,0,28,248,22,138,194,193,27,248,22,150,195, +27,248,22,150,197,28,249,22,188,195,194,248,22,176,194,249,22,178,195,248,22, +181,27,248,22,181,249,22,179,203,200,27,248,22,181,249,22,179,203,201,28,248, +22,138,194,193,27,248,22,150,195,27,248,22,150,195,28,249,22,188,195,194,248, +22,176,194,249,22,178,195,248,22,181,249,206,248,22,181,249,22,179,202,201,248, +22,181,249,22,179,203,201,83,159,34,93,80,159,34,40,35,89,162,34,34,42, +2,16,223,0,27,247,22,54,27,89,162,34,34,38,1,25,114,101,112,108,45, +101,114,114,111,114,45,101,115,99,97,112,101,45,104,97,110,100,108,101,114,185, +223,1,27,249,22,25,11,195,28,192,247,192,249,22,252,43,2,2,185,6,19, +19,117,115,101,100,32,111,117,116,32,111,102,32,99,111,110,116,101,120,116,186, +20,14,159,80,158,36,41,250,80,158,39,42,249,22,25,11,80,158,41,41,22, +252,51,2,195,248,22,8,89,162,34,35,39,9,223,2,249,32,187,89,162,34, +36,38,69,114,101,112,108,45,108,111,111,112,188,222,87,94,248,22,8,89,162, +34,35,40,9,224,2,1,20,14,159,193,194,27,247,247,22,46,87,94,28,248, +22,252,76,1,193,248,194,12,12,83,159,45,32,189,89,162,35,35,37,9,222, +249,22,3,247,22,45,194,248,247,22,252,38,2,28,248,22,212,194,248,22,252, +36,2,194,193,249,2,187,194,195,195,194,83,159,34,93,80,159,34,43,35,32, +190,89,162,34,35,45,2,23,222,87,94,28,27,248,22,252,31,3,194,28,192, +192,28,248,22,252,142,1,194,27,248,22,252,44,3,195,28,192,192,248,22,252, +45,3,195,11,12,250,22,252,46,2,2,23,6,25,25,112,97,116,104,32,111, +114,32,115,116,114,105,110,103,32,40,115,97,110,115,32,110,117,108,41,191,195, +91,159,37,11,90,161,37,34,11,248,22,252,43,3,196,28,194,248,22,252,193, +2,249,22,252,167,2,248,22,252,171,1,249,22,252,190,1,6,36,36,108,111, +97,100,47,99,100,58,32,99,97,110,110,111,116,32,111,112,101,110,32,97,32, +100,105,114,101,99,116,111,114,121,58,32,126,115,192,201,247,22,21,28,248,22, +252,31,3,193,87,94,28,248,22,252,37,3,193,12,248,22,252,193,2,249,22, +252,167,2,248,22,252,171,1,250,22,252,190,1,6,65,65,108,111,97,100,47, +99,100,58,32,100,105,114,101,99,116,111,114,121,32,111,102,32,126,115,32,100, +111,101,115,32,110,111,116,32,101,120,105,115,116,32,40,99,117,114,114,101,110, +116,32,100,105,114,101,99,116,111,114,121,32,105,115,32,126,115,41,193,202,247, +22,252,61,3,247,22,21,27,247,22,252,61,3,250,22,37,89,162,34,34,36, +9,223,4,248,22,252,61,3,193,89,162,34,34,36,9,223,5,248,22,252,94, +1,193,89,162,34,34,36,9,223,3,248,22,252,61,3,193,248,22,252,94,1, +196,83,159,34,93,80,159,34,44,35,32,194,89,162,34,37,41,2,25,222,87, +94,28,27,248,22,252,31,3,196,28,192,192,28,248,22,252,142,1,196,27,248, +22,252,44,3,197,28,192,192,248,22,252,45,3,197,11,12,250,22,252,46,2, +196,6,25,25,112,97,116,104,32,111,114,32,115,116,114,105,110,103,32,40,115, +97,110,115,32,110,117,108,41,195,197,28,248,22,252,46,3,195,248,193,195,27, +247,22,252,96,1,248,194,28,193,249,22,252,47,3,198,195,196,83,159,34,93, +80,159,34,45,35,89,162,34,35,40,2,27,223,0,87,94,28,27,248,22,252, +31,3,195,28,192,192,28,248,22,252,142,1,195,27,248,22,252,44,3,196,28, +192,192,248,22,252,45,3,196,11,12,250,22,252,46,2,2,27,2,195,196,28, +248,22,252,46,3,194,248,22,252,94,1,194,27,247,22,252,96,1,248,22,252, +94,1,28,193,249,22,252,47,3,197,195,195,83,159,34,93,80,159,34,46,35, +89,162,34,35,40,2,29,223,0,87,94,28,27,248,22,252,31,3,195,28,192, +192,28,248,22,252,142,1,195,27,248,22,252,44,3,196,28,192,192,248,22,252, +45,3,196,11,12,250,22,252,46,2,2,29,2,195,196,28,248,22,252,46,3, +194,248,22,252,65,3,194,27,247,22,252,96,1,248,22,252,65,3,28,193,249, +22,252,47,3,197,195,195,83,159,34,93,80,159,34,47,35,27,248,22,252,67, +3,248,22,252,217,1,27,27,247,22,252,225,1,28,249,22,78,194,21,96,64, +117,110,105,120,196,64,98,101,111,115,197,65,111,115,107,105,116,198,66,109,97, +99,111,115,120,199,6,1,1,58,200,28,249,22,78,194,21,94,2,172,2,178, +6,1,1,59,201,12,250,22,252,190,1,6,14,14,40,91,94,126,97,93,42, +41,126,97,40,46,42,41,202,195,195,89,162,8,36,36,42,2,31,223,0,87, +95,28,28,248,22,252,194,1,194,10,248,22,252,142,1,194,12,250,22,252,46, +2,2,31,6,21,21,98,121,116,101,32,115,116,114,105,110,103,32,111,114,32, +115,116,114,105,110,103,203,196,28,28,248,22,64,195,249,22,4,22,252,31,3, +196,11,12,250,22,252,46,2,2,31,6,13,13,108,105,115,116,32,111,102,32, +112,97,116,104,115,204,197,250,32,205,89,162,8,64,37,44,2,156,222,27,249, +22,252,71,3,196,197,28,192,27,248,22,84,194,27,250,2,205,198,199,248,22, +93,198,28,249,22,252,200,1,195,5,0,206,249,22,71,197,194,249,22,57,248, +22,252,35,3,196,194,28,249,22,252,200,1,197,2,206,249,22,71,195,9,249, +22,57,248,22,252,35,3,198,9,197,195,28,248,22,252,142,1,197,248,22,252, +217,1,197,196,83,159,34,93,80,159,34,48,35,83,158,37,20,92,96,2,33, +89,162,8,36,37,49,9,223,0,87,95,28,27,248,22,252,31,3,195,28,192, +192,28,248,22,252,142,1,195,27,248,22,252,44,3,196,28,192,192,248,22,252, +45,3,196,11,12,250,22,252,46,2,2,33,6,25,25,112,97,116,104,32,111, +114,32,115,116,114,105,110,103,32,40,115,97,110,115,32,110,117,108,41,207,196, +28,28,194,28,27,248,22,252,31,3,196,28,192,192,28,248,22,252,142,1,196, +27,248,22,252,44,3,197,28,192,192,248,22,252,45,3,197,11,248,22,252,44, +3,195,11,10,12,250,22,252,46,2,2,33,6,29,29,35,102,32,111,114,32, +114,101,108,97,116,105,118,101,32,112,97,116,104,32,111,114,32,115,116,114,105, +110,103,208,197,28,28,248,22,252,44,3,194,91,159,37,11,90,161,37,34,11, +248,22,252,43,3,197,249,22,252,17,2,194,68,114,101,108,97,116,105,118,101, +209,11,27,248,22,252,223,1,6,4,4,80,65,84,72,210,27,28,193,27,249, +80,158,39,47,196,9,28,249,22,252,17,2,247,22,252,225,1,2,172,249,22, +57,248,22,252,35,3,5,1,46,211,194,192,9,28,248,22,63,193,11,27,248, +22,252,47,3,248,22,58,195,27,249,22,252,42,3,195,199,28,248,22,252,36, +3,193,250,32,212,89,162,8,100,37,48,70,102,111,117,110,100,45,101,120,101, +99,213,222,28,192,91,159,37,11,90,161,37,34,11,248,22,252,43,3,198,27, +28,197,27,248,22,252,48,3,200,28,249,22,252,19,2,194,201,11,28,248,22, +252,44,3,193,250,2,212,200,201,249,22,252,42,3,199,197,250,2,212,200,201, +195,11,28,192,192,27,28,248,22,252,31,3,195,27,249,22,252,42,3,197,200, +28,28,248,22,252,37,3,193,10,248,22,252,36,3,193,192,11,11,28,192,192, +28,198,11,27,248,22,252,48,3,201,28,249,22,252,19,2,194,202,11,28,248, +22,252,44,3,193,250,2,212,201,202,249,22,252,42,3,200,197,250,2,212,201, +202,195,194,201,202,195,251,32,214,89,162,8,100,38,48,2,156,222,28,248,22, +63,196,11,27,248,22,252,47,3,248,22,58,198,27,249,22,252,42,3,195,196, +28,248,22,252,36,3,193,250,2,212,198,199,195,27,248,22,59,199,28,248,22, +63,193,11,27,248,22,252,47,3,248,22,58,195,27,249,22,252,42,3,195,199, +28,248,22,252,36,3,193,250,2,212,201,202,195,251,2,214,201,202,203,248,22, +59,199,201,202,203,248,22,59,199,27,248,22,252,47,3,195,28,248,22,252,36, +3,193,250,2,212,198,199,195,11,89,162,34,36,40,9,223,0,250,80,158,37, +48,196,197,11,89,162,34,35,39,9,223,0,250,80,158,37,48,196,11,11,83, +159,34,93,80,159,34,49,35,32,215,89,162,34,36,43,2,35,222,87,94,28, +27,248,22,252,31,3,195,28,192,192,28,248,22,252,142,1,195,27,248,22,252, +44,3,196,28,192,192,248,22,252,45,3,196,11,12,250,22,252,46,2,195,2, +160,196,28,248,22,252,44,3,194,12,248,22,252,193,2,249,22,252,137,2,248, +22,252,171,1,250,22,252,190,1,2,161,199,200,247,22,21,83,159,34,93,80, +159,34,50,35,89,162,34,37,45,2,37,223,0,87,94,87,94,28,27,248,22, +252,31,3,196,28,192,192,28,248,22,252,142,1,196,27,248,22,252,44,3,197, +28,192,192,248,22,252,45,3,197,11,12,250,22,252,46,2,196,2,160,197,28, +248,22,252,44,3,195,12,248,22,252,193,2,249,22,252,137,2,248,22,252,171, +1,250,22,252,190,1,2,161,200,201,247,22,21,249,22,3,89,162,34,35,44, +9,224,2,3,87,94,28,27,248,22,252,31,3,196,28,192,192,28,248,22,252, +142,1,196,27,248,22,252,44,3,197,28,192,192,248,22,252,45,3,197,11,12, +250,22,252,46,2,195,2,160,197,28,248,22,252,44,3,195,12,248,22,252,193, +2,249,22,252,137,2,248,22,252,171,1,250,22,252,190,1,2,161,199,201,247, +22,21,197,83,159,34,93,80,159,34,51,35,32,216,89,162,34,37,44,2,39, +222,27,247,22,252,62,3,252,32,217,89,162,8,64,39,50,65,99,108,111,111, +112,218,222,28,248,22,63,197,248,22,252,193,2,249,22,252,167,2,248,22,252, +171,1,251,22,252,190,1,6,42,42,126,97,58,32,99,111,108,108,101,99,116, +105,111,110,32,110,111,116,32,102,111,117,110,100,58,32,126,115,32,105,110,32, +97,110,121,32,111,102,58,32,126,115,219,201,28,248,22,63,204,202,250,22,1, +22,252,42,3,205,206,200,247,22,21,27,249,22,252,42,3,248,22,58,200,197, +28,248,22,252,37,3,193,27,250,22,1,22,252,42,3,196,200,28,248,22,252, +37,3,193,192,252,2,217,199,200,201,202,248,22,59,204,252,2,217,198,199,200, +201,248,22,59,203,197,198,199,200,197,83,159,34,93,80,159,34,52,35,27,247, +22,252,225,1,28,249,22,252,17,2,194,2,172,5,4,46,100,108,108,220,28, +249,22,78,194,21,94,2,199,2,178,5,6,46,100,121,108,105,98,221,5,3, +46,115,111,222,83,159,34,93,80,159,34,53,35,249,80,159,36,36,35,248,22, +252,35,3,5,10,95,108,111,97,100,101,114,46,115,115,223,80,158,36,52,83, +159,34,93,80,159,34,54,35,249,22,252,227,2,27,89,162,34,36,8,28,1, +25,100,101,102,97,117,108,116,45,108,111,97,100,47,117,115,101,45,99,111,109, +112,105,108,101,100,224,223,3,87,94,28,27,248,22,252,31,3,195,28,192,192, +28,248,22,252,142,1,195,27,248,22,252,44,3,196,28,192,192,248,22,252,45, +3,196,11,12,250,22,252,46,2,2,49,6,25,25,112,97,116,104,32,111,114, +32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105,110,103,225,196,91, +159,40,11,90,161,35,34,11,28,248,22,252,46,3,200,199,27,247,22,252,96, +1,28,192,249,22,252,47,3,202,194,200,90,161,37,35,11,248,22,252,43,3, +193,90,161,35,38,11,28,249,22,252,17,2,195,2,209,64,115,97,109,101,226, +193,90,161,35,39,11,247,22,252,63,3,27,89,162,34,35,43,62,122,111,227, +225,7,5,3,250,22,252,42,3,196,198,249,80,159,41,36,35,197,5,3,46, +122,111,228,27,89,162,34,35,45,9,225,8,6,4,252,22,252,42,3,198,200, +2,164,247,22,252,226,1,249,80,159,43,36,35,199,80,158,43,52,27,27,80, +158,44,53,89,162,34,35,43,9,225,10,8,0,252,22,252,42,3,198,200,2, +164,247,22,252,226,1,197,27,249,22,5,89,162,34,35,41,9,223,6,27,193, +27,250,22,252,56,3,196,11,32,229,89,162,8,44,34,34,9,222,11,28,192, +249,22,57,195,194,11,203,27,27,28,195,27,249,22,5,89,162,34,35,41,9, +223,6,27,248,194,195,27,250,22,252,56,3,196,11,32,230,89,162,8,44,34, +34,9,222,11,28,192,249,22,57,195,194,11,206,27,28,196,11,193,28,192,192, +28,193,28,196,28,249,22,191,248,22,59,196,248,22,59,199,193,11,11,11,11, +28,192,27,248,22,252,65,3,248,22,58,195,91,159,36,11,90,161,36,34,11, +248,195,248,22,48,248,22,252,216,1,248,22,252,33,3,249,80,159,55,36,35, +23,17,5,0,231,28,192,87,94,28,23,17,28,249,22,252,17,2,195,23,19, +12,248,22,252,193,2,249,22,252,134,2,248,22,252,171,1,251,22,252,190,1, +6,81,81,108,111,97,100,45,101,120,116,101,110,115,105,111,110,58,32,101,120, +112,101,99,116,101,100,32,109,111,100,117,108,101,32,100,101,99,108,97,114,97, +116,105,111,110,32,102,111,114,32,96,126,97,39,44,32,102,111,117,110,100,32, +126,97,32,116,104,114,111,117,103,104,32,108,111,97,100,101,114,58,32,126,101, +232,23,25,28,201,249,22,252,190,1,6,27,27,109,111,100,117,108,101,32,100, +101,99,108,97,114,97,116,105,111,110,32,102,111,114,32,96,126,97,39,233,203, +6,4,4,110,111,110,101,234,248,22,58,204,247,22,21,12,192,11,11,28,192, +249,80,159,47,8,48,35,203,194,27,28,196,27,249,22,5,89,162,34,35,41, +9,223,7,27,248,194,195,27,250,22,252,56,3,196,11,32,235,89,162,8,44, +34,34,9,222,11,28,192,249,22,57,195,194,11,206,27,28,196,11,193,28,192, +192,28,193,28,196,28,249,22,191,248,22,59,196,248,22,59,199,193,11,11,11, +11,28,192,249,80,159,48,8,48,35,204,89,162,34,34,39,9,224,16,2,249, +247,22,252,66,3,248,22,58,195,195,27,28,198,27,249,22,5,89,162,34,35, +41,9,223,9,27,248,194,195,27,250,22,252,56,3,196,11,32,236,89,162,8, +44,34,34,9,222,11,28,192,249,22,57,195,194,11,23,15,27,28,197,11,193, +28,192,192,28,193,28,197,28,249,22,191,248,22,59,196,248,22,59,200,193,11, +11,11,11,28,192,249,80,159,49,8,48,35,205,89,162,34,34,39,9,224,17, +2,249,247,22,252,95,1,248,22,58,195,195,249,80,159,49,8,48,35,205,89, +162,34,34,38,9,224,17,9,249,247,22,252,95,1,194,195,192,32,237,89,162, +8,36,35,38,9,222,87,94,28,28,248,22,0,193,249,22,40,194,36,11,12, +250,22,252,46,2,2,45,6,19,19,112,114,111,99,101,100,117,114,101,32,40, +97,114,105,116,121,32,50,41,238,195,192,83,159,34,93,80,159,34,55,35,89, +162,8,37,36,44,2,47,223,0,87,94,87,94,87,94,28,27,248,22,252,31, +3,195,28,192,192,28,248,22,252,142,1,195,27,248,22,252,44,3,196,28,192, +192,248,22,252,45,3,196,11,12,250,22,252,46,2,2,47,2,160,196,28,248, +22,252,44,3,194,12,248,22,252,193,2,249,22,252,137,2,248,22,252,171,1, +250,22,252,190,1,2,161,2,47,200,247,22,21,249,22,3,80,159,36,8,49, +35,196,27,247,22,252,62,3,251,32,239,89,162,8,64,38,49,2,218,222,28, +248,22,63,196,248,22,252,193,2,249,22,252,167,2,248,22,252,171,1,251,22, +252,190,1,2,219,2,47,28,248,22,63,203,201,250,22,1,22,252,42,3,204, +205,200,247,22,21,27,249,22,252,42,3,248,22,58,199,196,28,248,22,252,37, +3,193,27,250,22,1,22,252,42,3,196,199,28,248,22,252,37,3,193,192,251, +2,239,198,199,200,248,22,59,202,251,2,239,197,198,199,248,22,59,201,196,198, +199,196,83,159,34,93,80,159,34,56,35,89,162,34,35,38,2,49,223,0,249, +247,80,158,36,54,195,11,248,22,252,9,3,32,240,89,162,8,36,35,35,1, +20,100,101,102,97,117,108,116,45,114,101,97,100,101,114,45,103,117,97,114,100, +241,222,192,83,159,34,93,80,159,34,57,35,33,17,35,114,120,35,34,40,46, +43,63,41,47,43,40,46,42,41,34,242,83,159,34,93,80,159,34,58,35,2, +159,83,159,34,93,80,159,34,59,35,33,45,35,114,120,35,34,94,91,45,97, +45,122,65,45,90,48,45,57,95,46,32,93,43,40,47,43,91,45,97,45,122, +65,45,90,48,45,57,95,46,32,93,43,41,42,36,34,243,83,159,34,93,80, +159,34,8,26,35,248,22,116,64,119,101,97,107,244,83,159,34,93,80,159,34, +8,27,35,249,22,116,2,244,65,101,113,117,97,108,245,83,159,34,93,80,159, +34,8,28,35,247,22,54,83,159,34,93,80,158,34,8,29,11,83,159,34,93, +80,158,34,8,30,11,83,159,34,93,80,159,34,8,31,35,89,162,8,36,35, +38,2,67,223,0,91,159,36,10,90,161,35,34,10,11,90,161,35,35,10,83, +158,37,20,92,96,1,29,115,116,97,110,100,97,114,100,45,109,111,100,117,108, +101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,246,89,162,8,36,35, +44,9,224,2,0,87,94,28,207,248,208,195,12,27,27,250,22,122,80,158,40, +8,26,248,22,252,89,3,247,22,252,218,2,11,28,192,192,27,247,22,116,87, +94,250,22,121,80,158,41,8,26,248,22,252,89,3,247,22,252,218,2,195,192, +250,22,121,195,198,66,97,116,116,97,99,104,247,89,162,34,37,42,9,223,1, +251,211,197,198,199,10,89,162,34,38,8,28,9,225,2,3,0,28,28,248,22, +56,196,249,22,252,17,2,248,22,58,198,66,112,108,97,110,101,116,248,11,87, +94,28,207,12,20,14,159,80,158,36,41,250,80,158,39,42,249,22,25,11,80, +158,41,41,22,252,218,2,196,90,161,35,34,10,249,22,241,21,95,63,108,105, +98,249,6,11,11,114,101,115,111,108,118,101,114,46,115,115,250,6,6,6,112, +108,97,110,101,116,251,1,27,112,108,97,110,101,116,45,109,111,100,117,108,101, +45,110,97,109,101,45,114,101,115,111,108,118,101,114,252,252,0,12,251,211,199, +200,201,202,27,28,248,22,252,142,1,197,27,248,80,159,39,8,50,35,199,27, +250,22,122,80,158,42,8,27,249,22,57,203,198,11,28,192,192,27,248,22,252, +217,1,200,28,249,22,252,72,3,2,243,194,27,249,22,252,71,3,2,242,195, +28,192,249,32,252,253,0,89,162,8,64,36,47,2,156,222,27,249,22,252,71, +3,2,242,196,28,192,27,249,22,252,42,3,196,27,248,22,84,197,28,249,22, +252,200,1,194,5,1,46,252,254,0,2,226,28,249,22,252,200,1,194,5,2, +46,46,252,255,0,62,117,112,252,0,1,248,22,252,35,3,193,27,248,22,93, +195,27,249,22,252,71,3,2,242,195,28,192,249,2,252,253,0,249,22,252,42, +3,198,27,248,22,84,198,28,249,22,252,200,1,194,2,252,254,0,2,226,28, +249,22,252,200,1,194,2,252,255,0,2,252,0,1,248,22,252,35,3,193,248, +22,93,195,249,22,252,42,3,196,248,22,252,35,3,196,249,22,252,42,3,195, +248,22,252,35,3,197,249,22,252,42,3,199,27,248,22,84,198,28,249,22,252, +200,1,194,2,252,254,0,2,226,28,249,22,252,200,1,194,2,252,255,0,2, +252,0,1,248,22,252,35,3,193,248,22,93,195,249,22,252,42,3,197,248,22, +252,35,3,196,248,22,65,249,22,252,165,1,6,72,72,32,40,114,101,108,97, +116,105,118,101,32,115,116,114,105,110,103,32,102,111,114,109,32,109,117,115,116, +32,99,111,110,116,97,105,110,32,111,110,108,121,32,97,45,122,44,32,65,45, +90,44,32,48,45,57,44,32,45,44,32,95,44,32,46,44,32,47,44,32,97, +110,100,32,252,1,1,6,37,37,115,112,97,99,101,44,32,119,105,116,104,32, +110,111,32,108,101,97,100,105,110,103,32,111,114,32,116,114,97,105,108,105,110, +103,32,47,41,252,2,1,28,248,22,252,31,3,197,28,248,22,252,45,3,197, +196,248,22,65,6,25,25,40,97,32,112,97,116,104,32,109,117,115,116,32,98, +101,32,97,98,115,111,108,117,116,101,41,252,3,1,28,28,248,22,56,197,248, +22,252,15,2,248,22,64,198,10,11,28,249,22,252,17,2,248,22,58,199,2, +249,27,250,22,122,80,158,41,8,27,249,22,57,202,247,22,252,62,3,11,28, +192,192,27,27,248,22,70,200,28,249,22,187,194,36,248,22,65,6,5,5,109, +122,108,105,98,252,4,1,28,249,22,189,194,36,248,22,86,200,11,28,192,28, +249,22,4,32,252,5,1,89,162,34,35,36,9,222,28,248,22,252,142,1,193, +248,22,252,44,3,193,11,194,28,248,22,252,142,1,248,22,84,200,28,248,22, +252,44,3,248,22,84,200,27,27,248,22,58,195,27,248,22,59,196,27,247,22, +252,62,3,251,32,252,6,1,89,162,8,64,38,49,2,218,222,28,248,22,63, +196,248,22,252,193,2,249,22,252,167,2,248,22,252,171,1,251,22,252,190,1, +2,219,2,246,28,248,22,63,203,201,250,22,1,22,252,42,3,204,205,200,247, +22,21,27,249,22,252,42,3,248,22,58,199,196,28,248,22,252,37,3,193,27, +250,22,1,22,252,42,3,196,199,28,248,22,252,37,3,193,192,251,2,252,6, +1,198,199,200,248,22,59,202,251,2,252,6,1,197,198,199,248,22,59,201,196, +198,197,196,249,22,252,42,3,194,248,22,84,202,11,11,11,11,28,249,22,252, +17,2,248,22,58,199,64,102,105,108,101,252,7,1,28,249,22,187,248,22,70, +199,36,27,248,22,84,198,28,248,22,252,142,1,193,28,27,248,22,252,31,3, +194,28,192,192,28,248,22,252,142,1,194,27,248,22,252,44,3,195,28,192,192, +248,22,252,45,3,195,11,249,22,252,47,3,194,248,80,159,41,8,50,35,201, +11,11,11,11,87,94,28,28,248,22,252,31,3,193,10,248,22,252,228,1,193, +12,28,198,250,22,252,45,2,67,114,101,113,117,105,114,101,252,8,1,249,22, +252,190,1,6,17,17,98,97,100,32,109,111,100,117,108,101,32,112,97,116,104, +126,97,252,9,1,28,197,248,22,58,198,6,0,0,252,10,1,201,250,22,252, +46,2,2,246,249,22,252,190,1,6,13,13,109,111,100,117,108,101,32,112,97, +116,104,126,97,252,11,1,28,197,248,22,58,198,6,0,0,252,12,1,199,27, +28,248,22,252,228,1,194,249,22,252,233,1,195,34,248,22,252,49,3,248,22, +252,50,3,195,27,28,248,22,252,228,1,195,249,22,252,233,1,196,35,248,80, +159,40,38,35,194,91,159,37,11,90,161,37,34,11,28,248,22,252,228,1,198, +250,22,7,67,105,103,110,111,114,101,100,252,13,1,249,22,252,233,1,202,36, +2,252,13,1,248,22,252,43,3,197,27,28,248,22,252,228,1,199,249,22,252, +233,1,200,37,249,80,159,45,36,35,196,5,0,252,14,1,27,28,248,22,252, +228,1,200,249,22,252,233,1,201,38,249,22,252,190,1,6,3,3,44,126,97, +252,15,1,248,22,252,216,1,248,22,252,33,3,248,80,159,49,38,35,199,27, +28,248,22,252,228,1,201,249,22,252,233,1,202,39,248,22,48,249,22,252,165, +1,196,248,22,252,216,1,248,22,252,33,3,199,27,28,248,22,252,228,1,202, +249,22,252,233,1,203,40,27,249,22,252,71,3,2,166,248,22,252,33,3,201, +28,192,248,22,58,193,10,27,27,250,22,122,80,158,51,8,26,248,22,252,89, +3,247,22,252,218,2,11,28,192,192,27,247,22,116,87,94,250,22,121,80,158, +52,8,26,248,22,252,89,3,247,22,252,218,2,195,192,87,95,28,23,17,27, +250,22,122,196,198,11,87,94,28,192,28,28,248,22,47,193,10,249,22,252,19, +2,196,194,12,252,22,252,43,2,2,246,6,71,71,109,111,100,117,108,101,32, +112,114,101,118,105,111,117,115,108,121,32,108,111,97,100,101,100,32,119,105,116, +104,32,115,117,102,102,105,120,32,126,115,44,32,99,97,110,110,111,116,32,108, +111,97,100,32,119,105,116,104,32,115,117,102,102,105,120,32,126,115,58,32,126, +101,252,16,1,28,249,22,252,17,2,10,199,6,0,0,252,17,1,197,28,249, +22,252,17,2,10,201,6,0,0,252,18,1,199,23,15,12,28,192,12,87,95, +27,249,22,23,247,22,21,80,158,51,8,28,27,247,22,252,218,2,249,22,3, +89,162,34,35,48,9,226,13,14,2,3,28,249,22,252,19,2,248,22,59,199, +197,28,249,22,252,17,2,248,22,58,199,195,251,22,252,43,2,2,246,6,26, +26,99,121,99,108,101,32,105,110,32,108,111,97,100,105,110,103,32,97,116,32, +126,101,58,32,126,101,252,19,1,198,249,22,2,22,59,248,22,73,249,22,57, +205,201,12,12,195,27,248,22,48,198,20,14,159,80,158,49,8,28,249,22,57, +247,22,252,218,2,204,20,14,159,80,158,49,41,250,80,158,52,42,249,22,25, +11,80,158,54,41,22,240,195,249,247,80,158,51,54,205,248,22,48,248,22,252, +216,1,248,22,252,33,3,203,250,22,121,196,198,197,12,28,28,248,22,252,228, +1,203,11,27,248,22,252,142,1,23,16,28,192,192,28,248,22,56,23,16,249, +22,252,17,2,248,22,58,23,18,2,249,11,250,22,121,80,158,50,8,27,28, +248,22,252,142,1,23,18,249,22,57,23,19,248,80,159,53,8,50,35,23,21, +249,22,57,23,19,247,22,252,62,3,254,22,252,230,1,23,19,23,18,23,16, +206,205,204,203,12,194,208,83,159,34,93,80,159,34,8,32,35,83,158,37,20, +92,95,2,69,89,162,34,34,36,9,223,0,248,80,158,35,8,32,9,89,162, +34,35,47,9,223,0,27,247,22,252,64,3,249,80,158,37,47,28,194,27,248, +22,252,223,1,6,11,11,80,76,84,67,79,76,76,69,67,84,83,252,20,1, +28,192,192,6,0,0,252,21,1,6,0,0,252,22,1,27,28,195,250,22,252, +42,3,248,22,252,60,3,69,97,100,100,111,110,45,100,105,114,252,23,1,247, +22,252,221,1,6,8,8,99,111,108,108,101,99,116,115,252,24,1,11,27,248, +80,159,40,8,51,35,249,22,71,201,248,22,65,248,22,252,60,3,72,99,111, +108,108,101,99,116,115,45,100,105,114,252,25,1,28,193,249,22,57,195,194,192, +83,159,34,93,80,159,34,8,33,35,32,252,26,1,89,162,8,36,35,37,2, +71,222,27,248,22,252,10,1,194,28,192,192,248,22,252,11,1,194,83,159,34, +97,80,159,34,8,34,35,80,159,34,8,35,35,80,159,34,8,36,35,80,159, +34,8,37,35,80,159,34,8,38,35,26,9,22,252,97,2,63,101,118,116,252, +27,1,11,35,34,11,248,22,65,249,22,57,22,252,96,2,34,247,22,252,120, +2,11,21,93,34,83,159,34,93,80,159,34,8,39,35,89,162,34,35,39,2, +83,223,0,87,94,28,28,248,22,0,194,249,22,40,195,34,11,12,250,22,252, +46,2,2,83,6,19,19,112,114,111,99,101,100,117,114,101,32,40,97,114,105, +116,121,32,48,41,252,28,1,196,248,80,158,35,8,35,89,162,34,35,36,9, +223,2,247,192,83,159,34,93,80,159,34,8,40,35,32,252,29,1,89,162,34, +35,38,2,85,222,87,94,28,248,22,252,4,3,193,12,250,22,252,46,2,2, +85,6,7,7,99,104,97,110,110,101,108,252,30,1,195,248,22,252,245,2,193, +83,159,34,93,80,159,34,8,41,35,32,252,31,1,89,162,34,35,38,2,87, +222,87,94,28,248,22,252,4,3,193,12,250,22,252,46,2,2,87,6,7,7, +99,104,97,110,110,101,108,252,32,1,195,249,22,252,246,2,34,194,83,159,34, +93,80,159,34,8,42,35,32,252,33,1,89,162,34,36,39,2,89,222,87,94, +28,248,22,252,4,3,193,12,250,22,252,46,2,2,89,6,7,7,99,104,97, +110,110,101,108,252,34,1,195,28,248,22,252,245,2,249,22,252,3,3,195,196, +12,11,83,159,34,93,80,159,34,8,43,35,32,252,35,1,89,162,34,34,34, +2,91,222,247,22,252,218,2,83,159,34,93,80,159,34,8,44,35,89,162,34, +35,39,2,93,223,0,87,94,28,249,22,187,195,39,12,250,22,252,46,2,2, +93,6,1,1,53,252,36,1,196,248,80,158,35,8,45,11,83,159,34,93,80, +159,34,8,46,35,89,162,34,35,39,2,97,223,0,87,94,28,249,22,187,195, +39,12,250,22,252,46,2,2,97,6,1,1,53,252,37,1,196,248,80,158,35, +8,45,10,83,159,34,93,80,159,34,8,45,35,89,162,8,36,35,43,2,95, +223,0,27,248,22,252,196,2,65,101,109,112,116,121,252,38,1,27,247,22,252, +196,2,87,94,20,14,159,80,158,36,41,250,80,158,39,42,249,22,25,11,80, +158,41,41,22,252,218,2,196,87,96,249,22,245,194,66,35,37,114,53,114,115, +252,39,1,248,22,243,2,252,39,1,248,22,244,21,95,64,111,110,108,121,252, +40,1,68,109,122,115,99,104,101,109,101,252,41,1,72,115,121,110,116,97,120, +45,114,117,108,101,115,252,42,1,28,195,12,249,22,3,32,252,43,1,89,162, +34,35,39,9,222,249,22,252,86,3,194,249,22,241,2,252,41,1,196,21,15, +203,63,99,97,114,252,44,1,63,99,100,114,252,45,1,64,99,97,97,114,252, +46,1,64,99,97,100,114,252,47,1,64,99,100,97,114,252,48,1,64,99,100, +100,114,252,49,1,65,99,97,97,97,114,252,50,1,65,99,97,97,100,114,252, +51,1,65,99,97,100,97,114,252,52,1,65,99,97,100,100,114,252,53,1,65, +99,100,97,97,114,252,54,1,65,99,100,97,100,114,252,55,1,65,99,100,100, +97,114,252,56,1,65,99,100,100,100,114,252,57,1,66,99,97,97,97,97,114, +252,58,1,66,99,97,97,97,100,114,252,59,1,66,99,97,97,100,97,114,252, +60,1,66,99,97,97,100,100,114,252,61,1,66,99,97,100,97,97,114,252,62, +1,66,99,97,100,97,100,114,252,63,1,66,99,97,100,100,97,114,252,64,1, +66,99,97,100,100,100,114,252,65,1,66,99,100,97,97,97,114,252,66,1,66, +99,100,97,97,100,114,252,67,1,66,99,100,97,100,97,114,252,68,1,66,99, +100,97,100,100,114,252,69,1,66,99,100,100,97,97,114,252,70,1,66,99,100, +100,97,100,114,252,71,1,66,99,100,100,100,97,114,252,72,1,66,99,100,100, +100,100,114,252,73,1,63,109,97,112,252,74,1,61,61,252,75,1,61,60,252, +76,1,61,62,252,77,1,62,60,61,252,78,1,62,62,61,252,79,1,63,109, +97,120,252,80,1,63,109,105,110,252,81,1,61,43,252,82,1,61,45,252,83, +1,61,42,252,84,1,61,47,252,85,1,63,97,98,115,252,86,1,63,103,99, +100,252,87,1,63,108,99,109,252,88,1,63,101,120,112,252,89,1,63,108,111, +103,252,90,1,63,115,105,110,252,91,1,63,99,111,115,252,92,1,63,116,97, +110,252,93,1,63,110,111,116,252,94,1,63,101,113,63,252,95,1,1,30,99, +97,108,108,45,119,105,116,104,45,99,117,114,114,101,110,116,45,99,111,110,116, +105,110,117,97,116,105,111,110,252,96,1,71,109,97,107,101,45,115,116,114,105, +110,103,252,97,1,74,115,121,109,98,111,108,45,62,115,116,114,105,110,103,252, +98,1,74,115,116,114,105,110,103,45,62,115,121,109,98,111,108,252,99,1,76, +109,97,107,101,45,114,101,99,116,97,110,103,117,108,97,114,252,100,1,74,101, +120,97,99,116,45,62,105,110,101,120,97,99,116,252,101,1,74,105,110,101,120, +97,99,116,45,62,101,120,97,99,116,252,102,1,74,110,117,109,98,101,114,45, +62,115,116,114,105,110,103,252,103,1,74,115,116,114,105,110,103,45,62,110,117, +109,98,101,114,252,104,1,2,14,72,111,117,116,112,117,116,45,112,111,114,116, +63,252,105,1,78,99,117,114,114,101,110,116,45,105,110,112,117,116,45,112,111, +114,116,252,106,1,79,99,117,114,114,101,110,116,45,111,117,116,112,117,116,45, +112,111,114,116,252,107,1,78,99,117,114,114,101,110,116,45,101,114,114,111,114, +45,112,111,114,116,252,108,1,75,111,112,101,110,45,105,110,112,117,116,45,102, +105,108,101,252,109,1,76,111,112,101,110,45,111,117,116,112,117,116,45,102,105, +108,101,252,110,1,76,99,108,111,115,101,45,105,110,112,117,116,45,112,111,114, +116,252,111,1,77,99,108,111,115,101,45,111,117,116,112,117,116,45,112,111,114, +116,252,112,1,79,119,105,116,104,45,111,117,116,112,117,116,45,116,111,45,102, +105,108,101,252,113,1,73,116,114,97,110,115,99,114,105,112,116,45,111,110,252, +114,1,74,116,114,97,110,115,99,114,105,112,116,45,111,102,102,252,115,1,72, +102,108,117,115,104,45,111,117,116,112,117,116,252,116,1,73,115,116,114,105,110, +103,45,108,101,110,103,116,104,252,117,1,72,115,116,114,105,110,103,45,99,105, +60,61,63,252,118,1,72,115,116,114,105,110,103,45,99,105,62,61,63,252,119, +1,73,115,116,114,105,110,103,45,97,112,112,101,110,100,252,120,1,72,115,116, +114,105,110,103,45,62,108,105,115,116,252,121,1,72,108,105,115,116,45,62,115, +116,114,105,110,103,252,122,1,72,115,116,114,105,110,103,45,102,105,108,108,33, +252,123,1,73,118,101,99,116,111,114,45,108,101,110,103,116,104,252,124,1,72, +118,101,99,116,111,114,45,62,108,105,115,116,252,125,1,72,108,105,115,116,45, +62,118,101,99,116,111,114,252,126,1,72,118,101,99,116,111,114,45,102,105,108, +108,33,252,127,1,76,99,104,97,114,45,97,108,112,104,97,98,101,116,105,99, +63,252,128,1,73,99,104,97,114,45,110,117,109,101,114,105,99,63,252,129,1, +76,99,104,97,114,45,119,104,105,116,101,115,112,97,99,101,63,252,130,1,76, +99,104,97,114,45,117,112,112,101,114,45,99,97,115,101,63,252,131,1,76,99, +104,97,114,45,108,111,119,101,114,45,99,97,115,101,63,252,132,1,73,99,104, +97,114,45,62,105,110,116,101,103,101,114,252,133,1,73,105,110,116,101,103,101, +114,45,62,99,104,97,114,252,134,1,73,99,104,97,114,45,100,111,119,110,99, +97,115,101,252,135,1,1,21,99,97,108,108,45,119,105,116,104,45,111,117,116, +112,117,116,45,102,105,108,101,252,136,1,1,20,99,97,108,108,45,119,105,116, +104,45,105,110,112,117,116,45,102,105,108,101,252,137,1,1,20,119,105,116,104, +45,105,110,112,117,116,45,102,114,111,109,45,102,105,108,101,252,138,1,65,97, +112,112,108,121,252,139,1,68,102,111,114,45,101,97,99,104,252,140,1,67,115, +121,109,98,111,108,63,252,141,1,65,112,97,105,114,63,252,142,1,64,99,111, +110,115,252,143,1,68,115,101,116,45,99,97,114,33,252,144,1,68,115,101,116, +45,99,100,114,33,252,145,1,65,110,117,108,108,63,252,146,1,65,108,105,115, +116,63,252,147,1,64,108,105,115,116,252,148,1,66,108,101,110,103,116,104,252, +149,1,66,97,112,112,101,110,100,252,150,1,67,114,101,118,101,114,115,101,252, +151,1,69,108,105,115,116,45,116,97,105,108,252,152,1,68,108,105,115,116,45, +114,101,102,252,153,1,64,109,101,109,113,252,154,1,64,109,101,109,118,252,155, +1,66,109,101,109,98,101,114,252,156,1,64,97,115,115,113,252,157,1,64,97, +115,115,118,252,158,1,65,97,115,115,111,99,252,159,1,70,112,114,111,99,101, +100,117,114,101,63,252,160,1,67,110,117,109,98,101,114,63,252,161,1,68,99, +111,109,112,108,101,120,63,252,162,1,65,114,101,97,108,63,252,163,1,69,114, +97,116,105,111,110,97,108,63,252,164,1,68,105,110,116,101,103,101,114,63,252, +165,1,66,101,120,97,99,116,63,252,166,1,68,105,110,101,120,97,99,116,63, +252,167,1,65,122,101,114,111,63,252,168,1,69,112,111,115,105,116,105,118,101, +63,252,169,1,69,110,101,103,97,116,105,118,101,63,252,170,1,64,111,100,100, +63,252,171,1,65,101,118,101,110,63,252,172,1,68,113,117,111,116,105,101,110, +116,252,173,1,69,114,101,109,97,105,110,100,101,114,252,174,1,66,109,111,100, +117,108,111,252,175,1,65,102,108,111,111,114,252,176,1,67,99,101,105,108,105, +110,103,252,177,1,68,116,114,117,110,99,97,116,101,252,178,1,65,114,111,117, +110,100,252,179,1,69,110,117,109,101,114,97,116,111,114,252,180,1,71,100,101, +110,111,109,105,110,97,116,111,114,252,181,1,64,97,115,105,110,252,182,1,64, +97,99,111,115,252,183,1,64,97,116,97,110,252,184,1,64,115,113,114,116,252, +185,1,64,101,120,112,116,252,186,1,70,109,97,107,101,45,112,111,108,97,114, +252,187,1,69,114,101,97,108,45,112,97,114,116,252,188,1,69,105,109,97,103, +45,112,97,114,116,252,189,1,65,97,110,103,108,101,252,190,1,69,109,97,103, +110,105,116,117,100,101,252,191,1,71,105,110,112,117,116,45,112,111,114,116,63, +252,192,1,64,114,101,97,100,252,193,1,69,114,101,97,100,45,99,104,97,114, +252,194,1,69,112,101,101,107,45,99,104,97,114,252,195,1,71,101,111,102,45, +111,98,106,101,99,116,63,252,196,1,71,99,104,97,114,45,114,101,97,100,121, +63,252,197,1,65,119,114,105,116,101,252,198,1,67,100,105,115,112,108,97,121, +252,199,1,67,110,101,119,108,105,110,101,252,200,1,70,119,114,105,116,101,45, +99,104,97,114,252,201,1,64,108,111,97,100,252,202,1,67,115,116,114,105,110, +103,63,252,203,1,66,115,116,114,105,110,103,252,204,1,70,115,116,114,105,110, +103,45,114,101,102,252,205,1,71,115,116,114,105,110,103,45,115,101,116,33,252, +206,1,68,115,116,114,105,110,103,61,63,252,207,1,69,115,117,98,115,116,114, +105,110,103,252,208,1,71,115,116,114,105,110,103,45,99,111,112,121,252,209,1, +71,115,116,114,105,110,103,45,99,105,61,63,252,210,1,68,115,116,114,105,110, +103,60,63,252,211,1,68,115,116,114,105,110,103,62,63,252,212,1,69,115,116, +114,105,110,103,60,61,63,252,213,1,69,115,116,114,105,110,103,62,61,63,252, +214,1,71,115,116,114,105,110,103,45,99,105,60,63,252,215,1,71,115,116,114, +105,110,103,45,99,105,62,63,252,216,1,67,118,101,99,116,111,114,63,252,217, +1,71,109,97,107,101,45,118,101,99,116,111,114,252,218,1,66,118,101,99,116, +111,114,252,219,1,70,118,101,99,116,111,114,45,114,101,102,252,220,1,71,118, +101,99,116,111,114,45,115,101,116,33,252,221,1,65,99,104,97,114,63,252,222, +1,66,99,104,97,114,61,63,252,223,1,66,99,104,97,114,60,63,252,224,1, +66,99,104,97,114,62,63,252,225,1,67,99,104,97,114,60,61,63,252,226,1, +67,99,104,97,114,62,61,63,252,227,1,69,99,104,97,114,45,99,105,61,63, +252,228,1,69,99,104,97,114,45,99,105,60,63,252,229,1,69,99,104,97,114, +45,99,105,62,63,252,230,1,70,99,104,97,114,45,99,105,60,61,63,252,231, +1,70,99,104,97,114,45,99,105,62,61,63,252,232,1,71,99,104,97,114,45, +117,112,99,97,115,101,252,233,1,68,98,111,111,108,101,97,110,63,252,234,1, +64,101,113,118,63,252,235,1,66,101,113,117,97,108,63,252,236,1,65,102,111, +114,99,101,252,237,1,76,99,97,108,108,45,119,105,116,104,45,118,97,108,117, +101,115,252,238,1,66,118,97,108,117,101,115,252,239,1,64,101,118,97,108,252, +240,1,2,71,2,93,2,97,2,91,72,100,121,110,97,109,105,99,45,119,105, +110,100,252,241,1,9,193,97,68,35,37,107,101,114,110,101,108,252,242,1,2, +125,2,124,2,123,2,122,95,2,252,242,1,2,106,2,126,0}; + EVAL_ONE_SIZED_STR((char *)expr, 13414); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,20,252,183,1,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,55,20,252,183,1,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,72,35,37,115,116, 120,109,122,45,98,111,100,121,1,29,2,11,11,18,95,11,37,98,35,10,34, 11,94,159,68,35,37,100,101,102,105,110,101,3,9,11,159,76,35,37,115,116, @@ -4050,21 +4094,21 @@ 74,35,37,109,111,100,117,108,101,45,98,101,103,105,110,8,10,10,34,80,158, 34,34,20,98,159,34,16,0,16,0,11,11,16,0,34,11,16,1,2,5,16, 1,11,16,1,2,5,34,35,93,16,5,93,2,5,89,162,34,35,46,9,223, -0,28,248,80,158,35,34,194,250,22,209,20,15,159,37,34,36,250,22,61,20, -15,159,40,35,36,249,22,209,201,249,22,59,20,15,159,44,36,36,68,109,122, -115,99,104,101,109,101,9,248,80,158,41,35,200,196,250,22,252,39,2,11,6, +0,28,248,80,158,35,34,194,250,22,215,20,15,159,37,34,36,250,22,67,20, +15,159,40,35,36,249,22,215,201,249,22,65,20,15,159,44,36,36,68,109,122, +115,99,104,101,109,101,9,248,80,158,41,35,200,196,250,22,252,45,2,11,6, 10,10,98,97,100,32,115,121,110,116,97,120,10,196,34,20,98,159,34,16,2, 30,11,65,35,37,115,116,120,12,69,115,116,120,45,112,97,105,114,63,13,11, 30,14,2,12,67,115,116,120,45,99,100,114,15,6,16,3,18,98,64,104,101, 114,101,16,41,35,98,40,10,35,11,93,159,2,12,9,11,16,0,96,39,8, 254,1,11,16,0,16,4,38,11,63,115,116,120,17,3,1,7,101,110,118,52, -55,50,53,18,18,16,2,158,2,6,41,42,18,16,2,158,78,114,101,113,117, +55,57,57,18,18,16,2,158,2,6,41,42,18,16,2,158,78,114,101,113,117, 105,114,101,45,102,111,114,45,115,121,110,116,97,120,19,41,43,11,9,95,2, 7,2,4,2,3,94,2,7,2,12,0}; EVAL_ONE_SIZED_STR((char *)expr, 451); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,95,252,202,6,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,55,95,252,202,6,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,68,109,122,115,99, 104,101,109,101,1,29,2,11,11,10,10,10,34,80,158,34,34,20,98,159,34, 16,0,16,0,74,35,37,109,111,100,117,108,101,45,98,101,103,105,110,3,10, @@ -4098,164 +4142,164 @@ 63,31,71,114,97,116,105,111,110,97,108,105,122,101,32,1,20,114,101,97,100, 45,101,118,97,108,45,112,114,105,110,116,45,108,111,111,112,33,1,25,115,99, 104,101,109,101,45,114,101,112,111,114,116,45,101,110,118,105,114,111,110,109,101, -110,116,34,69,102,108,117,105,100,45,108,101,116,35,64,108,101,116,42,36,1, -28,109,122,115,99,104,101,109,101,45,105,110,45,115,116,120,45,109,111,100,117, -108,101,45,98,101,103,105,110,37,76,98,101,103,105,110,45,102,111,114,45,115, -121,110,116,97,120,38,63,97,110,100,39,66,108,101,116,114,101,99,40,62,111, -114,41,2,3,77,100,101,102,105,110,101,45,102,111,114,45,115,121,110,116,97, -120,42,64,99,111,110,100,43,64,119,104,101,110,44,66,117,110,108,101,115,115, -45,66,108,101,116,47,101,99,46,73,100,101,102,105,110,101,45,115,116,114,117, -99,116,47,70,108,101,116,45,115,116,114,117,99,116,48,72,115,121,110,116,97, -120,45,114,117,108,101,115,49,63,108,101,116,50,78,112,97,114,97,109,101,116, -101,114,105,122,101,45,98,114,101,97,107,51,73,100,101,102,105,110,101,45,115, -121,110,116,97,120,52,77,117,110,115,121,110,116,97,120,45,115,112,108,105,99, -105,110,103,53,64,99,97,115,101,54,62,100,111,55,66,100,101,102,105,110,101, -56,79,109,101,109,111,114,121,45,116,114,97,99,101,45,108,97,109,98,100,97, -57,65,100,101,108,97,121,58,70,108,101,116,45,115,121,110,116,97,120,59,66, -115,121,110,116,97,120,60,71,115,121,110,116,97,120,45,99,97,115,101,61,70, -115,121,110,116,97,120,47,108,111,99,62,66,108,101,116,47,99,99,63,64,116, -105,109,101,64,75,113,117,97,115,105,115,121,110,116,97,120,47,108,111,99,65, -71,119,105,116,104,45,115,121,110,116,97,120,66,75,108,101,116,114,101,99,45, -115,121,110,116,97,120,101,115,67,73,108,101,116,114,101,99,45,115,121,110,116, -97,120,68,72,108,101,116,45,115,121,110,116,97,120,101,115,69,75,115,121,110, -116,97,120,45,105,100,45,114,117,108,101,115,70,70,113,117,97,115,105,113,117, -111,116,101,71,72,112,97,114,97,109,101,116,101,114,105,122,101,72,68,117,110, -115,121,110,116,97,120,73,71,113,117,97,115,105,115,121,110,116,97,120,74,72, -115,121,110,116,97,120,45,99,97,115,101,42,75,73,119,105,116,104,45,104,97, -110,100,108,101,114,115,76,74,119,105,116,104,45,104,97,110,100,108,101,114,115, -42,77,71,115,101,116,33,45,118,97,108,117,101,115,78,16,76,73,35,37,109, +110,116,34,65,100,101,108,97,121,35,77,117,110,115,121,110,116,97,120,45,115, +112,108,105,99,105,110,103,36,1,28,109,122,115,99,104,101,109,101,45,105,110, +45,115,116,120,45,109,111,100,117,108,101,45,98,101,103,105,110,37,76,98,101, +103,105,110,45,102,111,114,45,115,121,110,116,97,120,38,66,108,101,116,114,101, +99,39,63,97,110,100,40,2,3,71,119,105,116,104,45,115,121,110,116,97,120, +41,64,108,101,116,42,42,79,109,101,109,111,114,121,45,116,114,97,99,101,45, +108,97,109,98,100,97,43,64,119,104,101,110,44,66,117,110,108,101,115,115,45, +66,108,101,116,47,101,99,46,71,115,121,110,116,97,120,45,99,97,115,101,47, +64,99,111,110,100,48,62,111,114,49,63,108,101,116,50,70,108,101,116,45,115, +116,114,117,99,116,51,64,99,97,115,101,52,66,108,101,116,47,99,99,53,66, +115,121,110,116,97,120,54,77,100,101,102,105,110,101,45,102,111,114,45,115,121, +110,116,97,120,55,73,100,101,102,105,110,101,45,115,116,114,117,99,116,56,64, +116,105,109,101,57,62,100,111,58,66,100,101,102,105,110,101,59,75,113,117,97, +115,105,115,121,110,116,97,120,47,108,111,99,60,70,108,101,116,45,115,121,110, +116,97,120,61,75,108,101,116,114,101,99,45,115,121,110,116,97,120,101,115,62, +73,108,101,116,114,101,99,45,115,121,110,116,97,120,63,72,108,101,116,45,115, +121,110,116,97,120,101,115,64,72,115,121,110,116,97,120,45,114,117,108,101,115, +65,75,115,121,110,116,97,120,45,105,100,45,114,117,108,101,115,66,72,115,121, +110,116,97,120,45,99,97,115,101,42,67,72,112,97,114,97,109,101,116,101,114, +105,122,101,68,73,119,105,116,104,45,104,97,110,100,108,101,114,115,69,74,119, +105,116,104,45,104,97,110,100,108,101,114,115,42,70,70,115,121,110,116,97,120, +47,108,111,99,71,73,100,101,102,105,110,101,45,115,121,110,116,97,120,72,70, +113,117,97,115,105,113,117,111,116,101,73,68,117,110,115,121,110,116,97,120,74, +71,113,117,97,115,105,115,121,110,116,97,120,75,71,115,101,116,33,45,118,97, +108,117,101,115,76,69,102,108,117,105,100,45,108,101,116,77,78,112,97,114,97, +109,101,116,101,114,105,122,101,45,98,114,101,97,107,78,16,76,73,35,37,109, 111,114,101,45,115,99,104,101,109,101,79,2,79,66,35,37,109,105,115,99,80, 2,80,2,80,76,35,37,115,116,120,99,97,115,101,45,115,99,104,101,109,101, 81,2,80,2,79,2,80,2,79,2,80,2,80,2,79,70,35,37,119,105,116, 104,45,115,116,120,82,2,80,65,35,37,115,116,120,83,2,80,2,80,2,80, 2,80,2,80,2,80,2,80,2,80,2,80,2,80,2,80,2,79,2,80,2, -80,2,80,2,79,71,35,37,113,113,45,97,110,100,45,111,114,84,72,35,37, -115,116,120,109,122,45,98,111,100,121,85,68,35,37,100,101,102,105,110,101,86, -2,84,2,84,2,84,68,35,37,107,101,114,110,101,108,87,2,86,66,35,37, -99,111,110,100,88,74,35,37,100,101,102,105,110,101,45,101,116,45,97,108,89, -2,89,2,89,2,89,2,79,2,81,2,84,2,79,2,86,67,35,37,113,113, -115,116,120,90,2,79,2,79,2,86,2,80,2,79,2,81,69,35,37,115,116, -120,99,97,115,101,91,68,35,37,115,116,120,108,111,99,92,2,92,2,79,2, -79,2,90,2,82,2,81,2,81,2,81,2,81,2,84,2,79,2,90,2,90, -2,92,2,79,2,79,2,79,16,76,2,4,2,5,2,6,2,7,2,8,2, +80,2,80,2,79,67,35,37,113,113,115,116,120,84,72,35,37,115,116,120,109, +122,45,98,111,100,121,85,68,35,37,100,101,102,105,110,101,86,71,35,37,113, +113,45,97,110,100,45,111,114,87,2,87,68,35,37,107,101,114,110,101,108,88, +2,82,2,87,2,80,74,35,37,100,101,102,105,110,101,45,101,116,45,97,108, +89,2,89,2,89,68,35,37,115,116,120,108,111,99,90,66,35,37,99,111,110, +100,91,2,87,2,87,2,79,2,79,2,79,69,35,37,115,116,120,99,97,115, +101,92,2,86,2,89,2,79,2,79,2,86,2,84,2,81,2,81,2,81,2, +81,2,81,2,81,2,90,2,79,2,79,2,79,2,90,2,86,2,87,2,84, +2,84,2,79,2,79,2,79,16,76,2,4,2,5,2,6,2,7,2,8,2, 9,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,2,18,2,19, 2,20,2,21,2,22,2,23,2,24,2,25,2,26,2,27,2,28,2,29,2, 30,2,31,2,32,2,33,2,34,2,35,2,36,2,3,2,38,2,39,2,40, -2,41,1,20,35,37,112,108,97,105,110,45,109,111,100,117,108,101,45,98,101, -103,105,110,93,2,42,2,43,2,44,2,45,2,46,2,47,2,48,2,49,2, +1,20,35,37,112,108,97,105,110,45,109,111,100,117,108,101,45,98,101,103,105, +110,93,2,41,2,42,2,43,2,44,2,45,2,46,2,47,2,48,2,49,2, 50,2,51,2,52,2,53,2,54,2,55,2,56,2,57,2,58,2,59,2,60, 2,61,2,62,2,63,2,64,2,65,2,66,2,67,2,68,2,69,2,70,2, 71,2,72,2,73,2,74,2,75,2,76,2,77,2,78,8,31,8,76,9,9, -101,2,87,2,79,2,80,2,81,2,83,2,85,2,90,2,86,68,35,37,101, +101,2,88,2,79,2,80,2,81,2,83,2,85,2,84,2,86,68,35,37,101, 120,112,111,98,115,94,9,0}; EVAL_ONE_SIZED_STR((char *)expr, 1750); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,134,252,16,13,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,55,134,252,16,13,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,66,35,37,114,53, 114,115,1,29,2,11,11,10,10,10,35,80,158,34,34,20,98,159,34,16,1, 30,3,2,2,69,117,110,100,101,102,105,110,101,100,4,254,1,16,0,11,11, -16,1,2,4,35,11,16,24,66,108,97,109,98,100,97,5,63,97,110,100,6, -71,114,53,114,115,58,108,101,116,114,101,99,7,64,99,111,110,100,8,62,100, -111,9,70,108,101,116,45,115,121,110,116,97,120,10,65,113,117,111,116,101,11, -62,111,114,12,64,99,97,115,101,13,63,108,101,116,14,65,35,37,97,112,112, -15,67,35,37,100,97,116,117,109,16,73,100,101,102,105,110,101,45,115,121,110, -116,97,120,17,65,35,37,116,111,112,18,65,100,101,108,97,121,19,66,100,101, -102,105,110,101,20,76,117,110,113,117,111,116,101,45,115,112,108,105,99,105,110, -103,21,64,108,101,116,42,22,73,108,101,116,114,101,99,45,115,121,110,116,97, -120,23,2,0,70,113,117,97,115,105,113,117,111,116,101,24,62,105,102,25,64, -115,101,116,33,26,67,117,110,113,117,111,116,101,27,16,24,68,35,37,107,101, -114,110,101,108,28,71,35,37,113,113,45,97,110,100,45,111,114,29,11,66,35, -37,99,111,110,100,30,73,35,37,109,111,114,101,45,115,99,104,101,109,101,31, -76,35,37,115,116,120,99,97,115,101,45,115,99,104,101,109,101,32,2,28,2, -29,2,31,2,29,2,28,2,28,68,35,37,100,101,102,105,110,101,33,2,28, -2,31,2,33,2,28,2,29,2,32,2,28,2,29,2,28,2,28,2,28,16, -24,2,5,2,6,66,108,101,116,114,101,99,34,2,8,2,9,2,10,2,11, -2,12,2,13,2,14,2,15,2,16,2,17,2,18,2,19,2,20,2,21,2, -22,2,23,2,0,2,24,2,25,2,26,2,27,34,58,93,16,5,93,2,7, +16,1,2,4,35,11,16,24,66,108,97,109,98,100,97,5,62,100,111,6,2, +0,63,97,110,100,7,70,108,101,116,45,115,121,110,116,97,120,8,65,113,117, +111,116,101,9,62,111,114,10,65,35,37,116,111,112,11,73,108,101,116,114,101, +99,45,115,121,110,116,97,120,12,65,35,37,97,112,112,13,64,108,101,116,42, +14,67,35,37,100,97,116,117,109,15,73,100,101,102,105,110,101,45,115,121,110, +116,97,120,16,64,99,97,115,101,17,76,117,110,113,117,111,116,101,45,115,112, +108,105,99,105,110,103,18,65,100,101,108,97,121,19,70,113,117,97,115,105,113, +117,111,116,101,20,64,99,111,110,100,21,71,114,53,114,115,58,108,101,116,114, +101,99,22,66,100,101,102,105,110,101,23,62,105,102,24,64,115,101,116,33,25, +63,108,101,116,26,67,117,110,113,117,111,116,101,27,16,24,68,35,37,107,101, +114,110,101,108,28,73,35,37,109,111,114,101,45,115,99,104,101,109,101,29,2, +28,71,35,37,113,113,45,97,110,100,45,111,114,30,76,35,37,115,116,120,99, +97,115,101,45,115,99,104,101,109,101,31,2,28,2,30,2,28,2,31,2,28, +2,30,2,28,68,35,37,100,101,102,105,110,101,32,2,29,2,28,2,29,2, +30,66,35,37,99,111,110,100,33,11,2,32,2,28,2,28,2,30,2,28,16, +24,2,5,2,6,2,0,2,7,2,8,2,9,2,10,2,11,2,12,2,13, +2,14,2,15,2,16,2,17,2,18,2,19,2,20,2,21,66,108,101,116,114, +101,99,34,2,23,2,24,2,25,2,26,2,27,34,58,93,16,5,93,2,22, 87,98,83,159,34,93,80,159,34,8,30,35,89,162,35,35,41,9,223,0,251, -80,158,38,46,20,15,159,38,44,47,21,94,3,1,4,103,57,51,48,35,3, -1,4,103,57,50,57,36,248,22,52,198,248,22,78,198,83,159,34,93,80,159, +80,158,38,46,20,15,159,38,44,47,21,94,3,1,4,103,57,53,50,35,3, +1,4,103,57,53,49,36,248,22,58,198,248,22,84,198,83,159,34,93,80,159, 34,8,29,35,89,162,35,35,41,9,223,0,251,80,158,38,46,20,15,159,38, -40,47,21,94,3,1,4,103,57,50,52,37,3,1,4,103,57,50,51,38,248, -22,52,198,248,22,78,198,83,159,34,93,80,159,34,8,28,35,89,162,35,35, +40,47,21,94,3,1,4,103,57,52,54,37,3,1,4,103,57,52,53,38,248, +22,58,198,248,22,84,198,83,159,34,93,80,159,34,8,28,35,89,162,35,35, 41,9,223,0,251,80,158,38,46,20,15,159,38,39,47,21,94,3,1,4,103, -57,50,49,39,3,1,4,103,57,50,48,40,248,22,52,198,248,22,78,198,83, +57,52,51,39,3,1,4,103,57,52,50,40,248,22,58,198,248,22,84,198,83, 159,34,93,80,159,34,8,27,35,89,162,35,35,40,9,223,0,250,80,158,37, -46,20,15,159,37,38,47,21,93,3,1,4,103,57,49,57,41,248,22,52,197, +46,20,15,159,37,38,47,21,93,3,1,4,103,57,52,49,41,248,22,58,197, 83,159,34,93,80,159,34,8,26,35,89,162,35,35,41,9,223,0,251,80,158, -38,46,20,15,159,38,35,47,21,94,3,1,4,103,57,49,53,42,3,1,4, -103,57,49,52,43,248,22,52,198,248,22,78,198,89,162,34,35,54,9,223,0, +38,46,20,15,159,38,35,47,21,94,3,1,4,103,57,51,55,42,3,1,4, +103,57,51,54,43,248,22,58,198,248,22,84,198,89,162,34,35,54,9,223,0, 27,28,248,80,158,36,34,195,249,80,158,37,35,248,80,158,38,36,197,27,248, 80,158,39,37,198,28,248,80,158,39,34,193,249,80,158,40,38,27,248,80,158, -42,36,196,28,248,80,158,42,39,193,248,22,9,89,162,34,35,41,9,224,8, +42,36,196,28,248,80,158,42,39,193,248,22,8,89,162,34,35,41,9,224,8, 1,27,249,22,2,89,162,34,35,46,9,224,4,5,249,80,158,37,40,28,248, 80,158,38,34,197,249,80,158,39,35,248,80,158,40,36,199,27,248,80,158,41, 37,200,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195,248, 80,158,43,41,248,80,158,44,37,196,11,11,194,248,80,158,39,42,196,28,248, -22,57,193,21,94,9,9,248,80,158,37,43,193,11,27,248,80,158,42,37,196, +22,63,193,21,94,9,9,248,80,158,37,43,193,11,27,248,80,158,42,37,196, 28,248,80,158,42,39,193,248,80,158,42,42,193,11,11,11,28,192,27,248,22, -52,194,27,248,22,78,195,27,248,22,87,196,27,248,22,88,197,249,80,158,41, -44,200,27,250,22,61,198,200,199,250,80,158,45,45,89,162,34,34,45,9,224, -11,3,252,80,158,40,46,20,15,159,40,34,47,21,95,3,1,4,103,57,49, -56,44,3,1,4,103,57,49,55,45,3,1,4,103,57,49,54,46,248,22,78, -198,250,22,2,80,159,43,8,26,35,248,22,78,201,248,22,80,201,248,22,52, -198,21,99,2,7,6,19,19,103,101,110,101,114,97,116,101,95,116,101,109,112, +58,194,27,248,22,84,195,27,248,22,93,196,27,248,22,94,197,249,80,158,41, +44,200,27,250,22,67,198,199,200,250,80,158,45,45,89,162,34,34,45,9,224, +11,3,252,80,158,40,46,20,15,159,40,34,47,21,95,3,1,4,103,57,52, +48,44,3,1,4,103,57,51,57,45,3,1,4,103,57,51,56,46,248,22,86, +198,250,22,2,80,159,43,8,26,35,248,22,86,201,248,22,84,201,248,22,58, +198,21,99,2,22,6,19,19,103,101,110,101,114,97,116,101,95,116,101,109,112, 95,110,97,109,101,115,47,94,64,118,97,114,49,48,63,46,46,46,49,9,94, 94,2,48,65,105,110,105,116,49,50,2,49,64,98,111,100,121,51,2,49,20, 15,159,45,36,47,27,28,248,80,158,37,34,196,249,80,158,38,35,248,80,158, 39,36,198,27,248,80,158,40,37,199,28,248,80,158,40,34,193,28,27,248,80, -158,41,36,194,28,249,22,252,13,2,6,19,19,103,101,110,101,114,97,116,101, -95,116,101,109,112,95,110,97,109,101,115,52,248,22,210,195,9,11,27,248,80, +158,41,36,194,28,249,22,252,19,2,6,19,19,103,101,110,101,114,97,116,101, +95,116,101,109,112,95,110,97,109,101,115,52,248,22,216,195,9,11,27,248,80, 158,41,37,194,28,248,80,158,41,34,193,28,248,80,158,41,41,248,80,158,42, 36,194,27,248,80,158,42,37,194,28,248,80,158,42,34,193,249,80,158,43,38, -27,248,80,158,45,36,196,28,248,80,158,45,39,193,248,22,59,248,80,158,46, +27,248,80,158,45,36,196,28,248,80,158,45,39,193,248,22,65,248,80,158,46, 42,194,11,27,248,80,158,45,37,196,28,248,80,158,45,34,193,249,80,158,46, -38,27,248,80,158,48,36,196,28,248,80,158,48,39,193,248,22,9,89,162,34, +38,27,248,80,158,48,36,196,28,248,80,158,48,39,193,248,22,8,89,162,34, 35,41,9,224,14,1,27,249,22,2,89,162,34,35,46,9,224,4,5,249,80, 158,37,40,28,248,80,158,38,34,197,249,80,158,39,35,248,80,158,40,36,199, 27,248,80,158,41,37,200,28,248,80,158,41,34,193,249,80,158,42,35,248,80, 158,43,36,195,248,80,158,43,41,248,80,158,44,37,196,11,11,194,248,80,158, -39,42,196,28,248,22,57,193,21,94,9,9,248,80,158,37,43,193,11,27,248, +39,42,196,28,248,22,63,193,21,94,9,9,248,80,158,37,43,193,11,27,248, 80,158,48,37,196,28,248,80,158,48,39,193,248,80,158,48,42,193,11,11,11, -11,11,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,87, -196,27,248,22,90,197,27,248,22,89,198,249,80,158,43,44,202,27,251,22,61, -200,202,201,199,250,80,158,47,45,89,162,34,34,47,9,224,13,3,252,80,158, -40,46,20,15,159,40,37,47,21,95,3,1,4,103,57,50,55,53,3,1,4, -103,57,50,54,54,3,1,4,103,57,50,53,55,249,22,2,80,159,42,8,27, -35,248,22,87,200,250,22,2,80,159,43,8,28,35,248,22,78,201,248,22,52, -201,249,22,65,250,22,2,80,159,45,8,29,35,248,22,87,203,248,22,78,203, -250,80,158,45,46,20,15,159,45,41,47,21,93,3,1,4,103,57,50,50,56, -248,22,88,203,21,95,2,14,94,94,2,48,2,4,2,49,97,2,14,94,94, -65,116,101,109,112,49,57,2,50,2,49,95,2,26,2,48,2,57,2,49,96, -2,14,9,2,51,2,49,20,15,159,47,42,47,27,28,248,80,158,38,34,197, +11,11,11,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,93, +196,27,248,22,96,197,27,248,22,95,198,249,80,158,43,44,202,27,251,22,67, +201,199,200,202,250,80,158,47,45,89,162,34,34,47,9,224,13,3,252,80,158, +40,46,20,15,159,40,37,47,21,95,3,1,4,103,57,52,57,53,3,1,4, +103,57,52,56,54,3,1,4,103,57,52,55,55,249,22,2,80,159,42,8,27, +35,248,22,58,200,250,22,2,80,159,43,8,28,35,248,22,94,201,248,22,93, +201,249,22,71,250,22,2,80,159,45,8,29,35,248,22,58,203,248,22,94,203, +250,80,158,45,46,20,15,159,45,41,47,21,93,3,1,4,103,57,52,52,56, +248,22,84,203,21,95,2,26,94,94,2,48,2,4,2,49,97,2,26,94,94, +65,116,101,109,112,49,57,2,50,2,49,95,2,25,2,48,2,57,2,49,96, +2,26,9,2,51,2,49,20,15,159,47,42,47,27,28,248,80,158,38,34,197, 249,80,158,39,35,248,80,158,40,36,199,27,248,80,158,41,37,200,28,248,80, -158,41,34,193,28,27,248,80,158,42,36,194,28,249,22,252,13,2,6,19,19, +158,41,34,193,28,27,248,80,158,42,36,194,28,249,22,252,19,2,6,19,19, 103,101,110,101,114,97,116,101,95,116,101,109,112,95,110,97,109,101,115,58,248, -22,210,195,9,11,27,248,80,158,42,37,194,28,248,80,158,42,34,193,249,80, +22,216,195,9,11,27,248,80,158,42,37,194,28,248,80,158,42,34,193,249,80, 158,43,38,27,248,80,158,45,36,196,28,248,80,158,45,34,193,249,80,158,46, 35,248,80,158,47,36,195,27,248,80,158,48,37,196,28,248,80,158,48,39,193, -248,22,59,248,80,158,49,42,194,11,11,27,248,80,158,45,37,196,28,248,80, +248,22,65,248,80,158,49,42,194,11,11,27,248,80,158,45,37,196,28,248,80, 158,45,34,193,249,80,158,46,38,27,248,80,158,48,36,196,28,248,80,158,48, -39,193,248,22,59,248,80,158,49,42,194,11,27,248,80,158,48,37,196,28,248, +39,193,248,22,65,248,80,158,49,42,194,11,27,248,80,158,48,37,196,28,248, 80,158,48,34,193,249,80,158,49,38,27,248,80,158,51,36,196,28,248,80,158, -51,39,193,248,22,9,89,162,34,35,41,9,224,17,1,27,249,22,2,89,162, +51,39,193,248,22,8,89,162,34,35,41,9,224,17,1,27,249,22,2,89,162, 34,35,46,9,224,4,5,249,80,158,37,40,28,248,80,158,38,34,197,249,80, 158,39,35,248,80,158,40,36,199,27,248,80,158,41,37,200,28,248,80,158,41, 34,193,249,80,158,42,35,248,80,158,43,36,195,248,80,158,43,41,248,80,158, -44,37,196,11,11,194,248,80,158,39,42,196,28,248,22,57,193,21,94,9,9, +44,37,196,11,11,194,248,80,158,39,42,196,28,248,22,63,193,21,94,9,9, 248,80,158,37,43,193,11,27,248,80,158,51,37,196,28,248,80,158,51,39,193, -248,80,158,51,42,193,11,11,11,11,11,11,11,28,192,27,248,22,52,194,27, -248,22,78,195,27,248,22,87,196,27,248,22,90,197,27,249,22,70,199,38,27, -249,22,70,200,39,27,249,22,69,201,40,249,80,158,46,44,205,27,252,22,61, -201,204,203,202,200,250,80,158,50,45,89,162,34,34,46,9,224,16,3,253,80, -158,41,46,20,15,159,41,43,47,21,96,3,1,4,103,57,51,51,59,3,1, -4,103,57,50,56,60,3,1,4,103,57,51,50,61,3,1,4,103,57,51,49, -62,248,22,78,199,248,22,87,199,250,22,2,80,159,44,8,30,35,248,22,90, -202,248,22,52,202,248,22,89,199,21,99,2,7,6,19,19,103,101,110,101,114, +248,80,158,51,42,193,11,11,11,11,11,11,11,28,192,27,248,22,58,194,27, +248,22,84,195,27,248,22,93,196,27,248,22,96,197,27,249,22,76,199,38,27, +249,22,76,200,39,27,249,22,75,201,40,249,80,158,46,44,205,27,252,22,67, +202,204,200,201,203,250,80,158,50,45,89,162,34,34,46,9,224,16,3,253,80, +158,41,46,20,15,159,41,43,47,21,96,3,1,4,103,57,53,53,59,3,1, +4,103,57,53,48,60,3,1,4,103,57,53,52,61,3,1,4,103,57,53,51, +62,248,22,84,199,248,22,95,199,250,22,2,80,159,44,8,30,35,248,22,58, +202,248,22,96,202,248,22,93,199,21,99,2,22,6,19,19,103,101,110,101,114, 97,116,101,95,116,101,109,112,95,110,97,109,101,115,63,94,61,121,64,2,49, 95,67,110,101,119,116,101,109,112,65,64,116,101,109,112,66,2,49,94,94,2, -48,2,50,2,49,2,51,2,49,20,15,159,50,45,47,250,22,252,39,2,11, +48,2,50,2,49,2,51,2,49,20,15,159,50,45,47,250,22,252,45,2,11, 6,10,10,98,97,100,32,115,121,110,116,97,120,67,199,34,20,98,159,39,16, 13,30,68,65,35,37,115,116,120,69,69,115,116,120,45,112,97,105,114,63,70, 11,30,71,2,69,67,99,111,110,115,47,35,102,72,1,30,73,2,69,67,115, @@ -4269,52 +4313,52 @@ 1,30,92,69,35,37,115,116,120,99,97,115,101,93,1,20,99,97,116,99,104, 45,101,108,108,105,112,115,105,115,45,101,114,114,111,114,94,1,30,95,2,93, 1,24,97,112,112,108,121,45,112,97,116,116,101,114,110,45,115,117,98,115,116, -105,116,117,116,101,96,0,16,12,18,158,164,39,99,2,7,41,98,39,10,34, -11,93,159,68,109,122,115,99,104,101,109,101,97,9,11,16,4,2,4,2,2, -2,7,2,2,98,38,10,35,11,93,159,2,97,9,11,16,0,96,37,8,254, -1,11,16,0,16,8,36,11,3,1,4,103,57,49,49,98,3,1,4,103,57, -49,50,99,3,1,4,103,57,49,51,100,3,1,7,101,110,118,52,55,51,56, +105,116,117,116,101,96,0,16,12,18,158,164,39,99,2,22,41,98,39,10,34, +11,93,159,68,109,122,115,99,104,101,109,101,97,9,11,16,4,2,22,2,2, +2,4,2,2,98,38,10,35,11,93,159,2,97,9,11,16,0,96,37,8,254, +1,11,16,0,16,8,36,11,3,1,4,103,57,51,51,98,3,1,4,103,57, +51,52,99,3,1,4,103,57,51,53,100,3,1,7,101,110,118,52,56,49,50, 101,2,101,2,101,16,8,35,11,2,48,2,50,2,51,3,1,7,101,110,118, -52,55,51,57,102,2,102,2,102,158,2,47,41,158,2,44,41,158,9,41,158, +52,56,49,51,102,2,102,2,102,158,2,47,41,158,2,44,41,158,9,41,158, 2,45,41,2,46,41,41,18,158,95,10,2,42,2,43,41,18,16,2,96,2, -49,43,93,8,252,163,15,16,4,42,11,61,114,103,3,1,7,101,110,118,52, -55,52,57,104,95,9,8,252,163,15,2,93,18,158,95,99,2,14,46,39,38, -37,16,10,45,11,3,1,4,103,57,48,54,105,3,1,4,103,57,48,55,106, -3,1,4,103,57,48,56,107,3,1,4,103,57,48,57,108,3,1,7,101,110, -118,52,55,54,55,109,2,109,2,109,2,109,16,10,44,11,2,57,2,48,2, -50,2,51,3,1,7,101,110,118,52,55,54,56,110,2,110,2,110,2,110,158, -2,53,46,158,160,10,2,14,2,54,2,55,46,46,18,158,95,10,2,41,2, -4,46,18,158,95,10,2,39,2,40,46,18,158,96,10,2,26,2,37,2,38, -46,18,16,2,103,93,158,160,10,2,14,9,2,56,46,54,98,53,10,34,11, +49,43,93,8,252,221,15,16,4,42,11,61,114,103,3,1,7,101,110,118,52, +56,50,51,104,95,9,8,252,221,15,2,93,18,158,95,99,2,26,46,39,38, +37,16,10,45,11,3,1,4,103,57,50,56,105,3,1,4,103,57,50,57,106, +3,1,4,103,57,51,48,107,3,1,4,103,57,51,49,108,3,1,7,101,110, +118,52,56,52,49,109,2,109,2,109,2,109,16,10,44,11,2,57,2,48,2, +50,2,51,3,1,7,101,110,118,52,56,52,50,110,2,110,2,110,2,110,158, +2,53,46,158,160,10,2,26,2,54,2,55,46,46,18,158,95,10,2,41,2, +4,46,18,158,95,10,2,39,2,40,46,18,158,96,10,2,25,2,37,2,38, +46,18,16,2,103,93,158,160,10,2,26,9,2,56,46,54,98,53,10,34,11, 95,159,68,35,37,112,97,114,97,109,122,111,9,11,159,74,35,37,115,109,97, -108,108,45,115,99,104,101,109,101,112,9,11,159,2,69,9,11,16,14,73,115, -121,110,116,97,120,45,99,97,115,101,42,42,113,29,114,11,11,1,26,100,97, -116,117,109,45,62,115,121,110,116,97,120,45,111,98,106,101,99,116,47,115,104, -97,112,101,115,2,114,2,94,2,114,78,112,97,116,116,101,114,110,45,115,117, -98,115,116,105,116,117,116,101,116,2,114,2,96,2,114,66,115,121,110,116,97, +108,108,45,115,99,104,101,109,101,112,9,11,159,2,69,9,11,16,14,78,112, +97,116,116,101,114,110,45,115,117,98,115,116,105,116,117,116,101,113,29,114,11, +11,73,115,121,110,116,97,120,45,99,97,115,101,42,42,115,2,114,1,26,100, +97,116,117,109,45,62,115,121,110,116,97,120,45,111,98,106,101,99,116,47,115, +104,97,112,101,116,2,114,2,96,2,114,2,94,2,114,66,115,121,110,116,97, 120,117,2,114,75,115,117,98,115,116,105,116,117,116,101,45,115,116,111,112,118, 2,114,98,52,10,35,11,95,159,64,35,37,115,99,119,9,11,159,2,112,9, 11,159,2,69,9,11,16,0,96,51,8,254,1,11,16,0,16,4,50,11,61, 120,120,3,1,6,101,110,118,52,53,52,121,16,4,49,11,68,104,101,114,101, 45,115,116,120,122,3,1,6,101,110,118,52,53,54,123,16,4,48,11,2,122, -2,123,13,16,4,35,2,114,2,93,11,93,8,252,171,15,16,4,47,11,2, -103,3,1,7,101,110,118,52,55,56,48,124,95,9,8,252,171,15,2,93,18, -16,2,96,2,49,56,93,8,252,171,15,16,4,55,11,2,103,2,124,95,9, -8,252,171,15,2,93,18,158,164,39,99,2,7,59,39,38,37,16,14,58,11, -3,1,4,103,56,57,57,125,3,1,4,103,57,48,48,126,3,1,4,103,57, -48,49,127,3,1,4,103,57,48,50,128,3,1,4,103,57,48,51,129,3,1, -4,103,57,48,52,130,3,1,7,101,110,118,52,56,48,52,131,2,131,2,131, +2,123,13,16,4,35,2,114,2,93,11,93,8,252,229,15,16,4,47,11,2, +103,3,1,7,101,110,118,52,56,53,52,124,95,9,8,252,229,15,2,93,18, +16,2,96,2,49,56,93,8,252,229,15,16,4,55,11,2,103,2,124,95,9, +8,252,229,15,2,93,18,158,164,39,99,2,22,59,39,38,37,16,14,58,11, +3,1,4,103,57,50,49,125,3,1,4,103,57,50,50,126,3,1,4,103,57, +50,51,127,3,1,4,103,57,50,52,128,3,1,4,103,57,50,53,129,3,1, +4,103,57,50,54,130,3,1,7,101,110,118,52,56,55,56,131,2,131,2,131, 2,131,2,131,2,131,16,14,57,11,2,120,2,64,2,66,2,48,2,50,2, -51,3,1,7,101,110,118,52,56,48,53,132,2,132,2,132,2,132,2,132,2, +51,3,1,7,101,110,118,52,56,55,57,132,2,132,2,132,2,132,2,132,2, 132,158,2,63,59,158,2,59,59,158,159,10,2,65,2,60,59,158,2,61,59, 2,62,59,59,18,158,95,10,2,35,2,36,59,18,16,2,96,2,49,8,27, -93,8,252,183,15,16,4,8,26,11,2,103,3,1,7,101,110,118,52,56,50, -49,133,95,9,8,252,183,15,2,93,11,93,83,159,34,93,80,159,34,34,35, +93,8,252,241,15,16,4,8,26,11,2,103,3,1,7,101,110,118,52,56,57, +53,133,95,9,8,252,241,15,2,93,11,93,83,159,34,93,80,159,34,34,35, 91,159,35,10,90,161,35,34,10,207,207,93,2,97,93,2,97,0}; EVAL_ONE_SIZED_STR((char *)expr, 3356); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,5,89,159,34,20,98,159,34,16,1,20,24,65, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,55,5,89,159,34,20,98,159,34,16,1,20,24,65, 98,101,103,105,110,0,16,0,83,160,42,80,158,34,34,34,18,158,94,96,67, 114,101,113,117,105,114,101,1,36,10,11,158,96,10,64,111,110,108,121,2,68, 109,122,115,99,104,101,109,101,3,1,22,110,97,109,101,115,112,97,99,101,45, @@ -4322,17 +4366,17 @@ EVAL_ONE_SIZED_STR((char *)expr, 99); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,3,74,159,35,20,98,159,34,16,1,20,24,65, -98,101,103,105,110,0,16,0,87,94,248,22,241,68,109,122,115,99,104,101,109, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,55,3,74,159,35,20,98,159,34,16,1,20,24,65, +98,101,103,105,110,0,16,0,87,94,248,22,247,68,109,122,115,99,104,101,109, 101,1,83,160,42,80,158,34,34,35,18,158,94,96,78,114,101,113,117,105,114, 101,45,102,111,114,45,115,121,110,116,97,120,2,36,10,11,158,2,1,36,36, 0}; EVAL_ONE_SIZED_STR((char *)expr, 84); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,2,67,159,38,20,98,159,34,16,0,16,0,248, -22,233,248,249,22,235,66,35,37,109,105,115,99,0,1,34,109,97,107,101,45, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,55,2,67,159,38,20,98,159,34,16,0,16,0,248, +22,239,248,249,22,241,66,35,37,109,105,115,99,0,1,34,109,97,107,101,45, 115,116,97,110,100,97,114,100,45,109,111,100,117,108,101,45,110,97,109,101,45, -114,101,115,111,108,118,101,114,1,247,22,252,212,2,0}; +114,101,115,111,108,118,101,114,1,247,22,252,218,2,0}; EVAL_ONE_SIZED_STR((char *)expr, 77); } diff --git a/src/mzscheme/src/dynext.c b/src/mzscheme/src/dynext.c index 957ec3f0e0..76ebdb0458 100644 --- a/src/mzscheme/src/dynext.c +++ b/src/mzscheme/src/dynext.c @@ -409,8 +409,6 @@ static Scheme_Object *do_load_extension(const char *filename, #endif #ifndef NO_DYNAMIC_LOAD - scheme_no_dumps("a dynamic extension has been loaded"); - ed = (ExtensionData *)scheme_hash_get(loaded_extensions, mzPROC_TO_HASH_OBJ(init_f)); if (ed) { diff --git a/src/mzscheme/src/env.c b/src/mzscheme/src/env.c index cec066bd4b..fb57d1fac1 100644 --- a/src/mzscheme/src/env.c +++ b/src/mzscheme/src/env.c @@ -166,6 +166,7 @@ Scheme_Env *scheme_basic_env() #ifndef MZ_PRECISE_GC scheme_init_setjumpup(); #endif + scheme_reset_overflow(); scheme_make_thread(); scheme_init_error_escape_proc(NULL); @@ -224,6 +225,7 @@ Scheme_Env *scheme_basic_env() #endif scheme_init_stack_check(); + scheme_init_overflow(); scheme_init_portable_case(); @@ -430,7 +432,6 @@ static void make_init_env(void) MZTIMEIT(print, scheme_init_print(env)); MZTIMEIT(file, scheme_init_file(env)); MZTIMEIT(dynamic-extension, scheme_init_dynamic_extension(env)); - MZTIMEIT(image, scheme_init_image(env)); #ifndef NO_REGEXP_UTILS MZTIMEIT(regexp, scheme_regexp_initialize(env)); #endif diff --git a/src/mzscheme/src/error.c b/src/mzscheme/src/error.c index 169490523d..2f2d1dfe67 100644 --- a/src/mzscheme/src/error.c +++ b/src/mzscheme/src/error.c @@ -2495,7 +2495,7 @@ do_raise(Scheme_Object *arg, int return_ok, int need_debug) if (need_debug) { Scheme_Object *marks; - marks = scheme_current_continuation_marks(); + marks = scheme_current_continuation_marks(NULL); ((Scheme_Structure *)arg)->slots[1] = marks; } diff --git a/src/mzscheme/src/eval.c b/src/mzscheme/src/eval.c index b207f20209..79c3d29705 100644 --- a/src/mzscheme/src/eval.c +++ b/src/mzscheme/src/eval.c @@ -513,7 +513,9 @@ scheme_handle_stack_overflow(Scheme_Object *(*k)(void)) /* "Stack overflow" means running out of C-stack space. The other end of this handler (i.e., the target for the longjmp) is scheme_top_level_do in fun.c */ + Scheme_Thread *p = scheme_current_thread; Scheme_Overflow *overflow; + Scheme_Overflow_Jmp *jmp; scheme_overflow_k = k; scheme_overflow_count++; @@ -523,23 +525,44 @@ scheme_handle_stack_overflow(Scheme_Object *(*k)(void)) overflow->type = scheme_rt_overflow; #endif overflow->prev = scheme_current_thread->overflow; - scheme_current_thread->overflow = overflow; + overflow->stack_start = p->stack_start; + p->overflow = overflow; - scheme_init_jmpup_buf(&overflow->cont); + jmp = MALLOC_ONE_RT(Scheme_Overflow_Jmp); +#ifdef MZTAG_REQUIRED + jmp->type = scheme_rt_overflow_jmp; +#endif + overflow->jmp = jmp; + + scheme_init_jmpup_buf(&overflow->jmp->cont); scheme_zero_unneeded_rands(scheme_current_thread); /* for GC */ - if (scheme_setjmpup(&overflow->cont, overflow, scheme_current_thread->o_start)) { - if (!overflow->captured) /* reset if not captured in a continuation */ - scheme_reset_jmpup_buf(&overflow->cont); + if (scheme_setjmpup(&overflow->jmp->cont, overflow->jmp, ADJUST_STACK_START(p->stack_start))) { + p = scheme_current_thread; + overflow = p->overflow; + p->overflow = overflow->prev; + p->error_buf = overflow->jmp->savebuf; + if (!overflow->jmp->captured) /* reset if not captured in a continuation */ + scheme_reset_jmpup_buf(&overflow->jmp->cont); if (!scheme_overflow_reply) { /* No reply value means we should continue some escape. */ - scheme_longjmp(scheme_error_buf, 1); + if (p->cjs.jumping_to_continuation + && p->cjs.is_escape) { + /* Jump directly to prompt: */ + Scheme_Prompt *prompt = (Scheme_Prompt *)p->cjs.jumping_to_continuation; + scheme_longjmp(*prompt->prompt_buf, 1); + } else { + /* Continue normal escape: */ + scheme_longjmp(scheme_error_buf, 1); + } } else { Scheme_Object *reply = scheme_overflow_reply; scheme_overflow_reply = NULL; return reply; } - } else - scheme_longjmp(*scheme_current_thread->overflow_buf, 1); + } else { + p->stack_start = scheme_overflow_stack_start; + scheme_longjmpup(&scheme_overflow_jmp->cont); + } return NULL; /* never gets here */ } @@ -652,7 +675,8 @@ void *scheme_enlarge_runstack(long size, void *(*k)()) Scheme_Saved_Stack *saved; void *v; int cont_count; - long min_size; + volatile int escape; + mz_jmp_buf newbuf, * volatile savebuf; saved = MALLOC_ONE_RT(Scheme_Saved_Stack); @@ -660,18 +684,27 @@ void *scheme_enlarge_runstack(long size, void *(*k)()) saved->type = scheme_rt_saved_stack; #endif saved->prev = p->runstack_saved; - saved->runstack = MZ_RUNSTACK; saved->runstack_start = MZ_RUNSTACK_START; + saved->runstack_offset = (MZ_RUNSTACK - MZ_RUNSTACK_START); saved->runstack_size = p->runstack_size; size += SCHEME_TAIL_COPY_THRESHOLD; - /* If we keep growing the stack, then probably it - needs to be much larger, so at least double the stack size - each time: */ - min_size = 2 * (p->runstack_size); - if (size < min_size) - size = min_size; + if (size) { + /* If we keep growing the stack, then probably it + needs to be much larger, so at least double the + stack size each time: */ + long min_size; + min_size = 2 * (p->runstack_size); + if (size < min_size) + size = min_size; + } else { + /* This is for a prompt. Re-use the current size, + up to a point: */ + size = p->runstack_size; + if (size > 1000) + size = 1000; + } p->runstack_saved = saved; if (p->spare_runstack && (size <= p->spare_runstack_size)) { @@ -686,24 +719,38 @@ void *scheme_enlarge_runstack(long size, void *(*k)()) cont_count = scheme_cont_capture_count; - v = k(); - /* If `k' escapes, the escape handler will restore the stack - pointers. */ + savebuf = p->error_buf; + p->error_buf = &newbuf; + if (scheme_setjmp(newbuf)) { + v = NULL; + escape = 1; + p = scheme_current_thread; /* might have changed! */ + } else { + v = k(); + escape = 0; + p = scheme_current_thread; /* might have changed! */ - p = scheme_current_thread; /* might have changed! */ - - if (cont_count == scheme_cont_capture_count) { - if (!p->spare_runstack || (p->runstack_size > p->spare_runstack_size)) { - p->spare_runstack = MZ_RUNSTACK_START; - p->spare_runstack_size = p->runstack_size; + if (cont_count == scheme_cont_capture_count) { + if (!p->spare_runstack || (p->runstack_size > p->spare_runstack_size)) { + p->spare_runstack = MZ_RUNSTACK_START; + p->spare_runstack_size = p->runstack_size; + } } } + p->error_buf = savebuf; + + saved = p->runstack_saved; + p->runstack_saved = saved->prev; - MZ_RUNSTACK = saved->runstack; MZ_RUNSTACK_START = saved->runstack_start; + MZ_RUNSTACK = MZ_RUNSTACK_START + saved->runstack_offset; p->runstack_size = saved->runstack_size; + if (escape) { + scheme_longjmp(*p->error_buf, 1); + } + return v; } @@ -5282,30 +5329,68 @@ void scheme_pop_continuation_frame(Scheme_Cont_Frame_Data *d) MZ_CONT_MARK_STACK = d->cont_mark_stack; } -void *scheme_set_cont_mark(Scheme_Object *key, Scheme_Object *val) +MZ_MARK_STACK_TYPE scheme_set_cont_mark(Scheme_Object *key, Scheme_Object *val) { Scheme_Thread *p = scheme_current_thread; Scheme_Cont_Mark *cm = NULL; - long findpos; + long findpos, bottom; findpos = (long)MZ_CONT_MARK_STACK; - while (findpos--) { - Scheme_Cont_Mark *seg = p->cont_mark_stack_segments[findpos >> SCHEME_LOG_MARK_SEGMENT_SIZE]; - long pos = findpos & SCHEME_MARK_SEGMENT_MASK; - Scheme_Cont_Mark *find = seg + pos; + bottom = (long)p->cont_mark_stack_bottom; + while (1) { + if (findpos-- > bottom) { + Scheme_Cont_Mark *seg = p->cont_mark_stack_segments[findpos >> SCHEME_LOG_MARK_SEGMENT_SIZE]; + long pos = findpos & SCHEME_MARK_SEGMENT_MASK; + Scheme_Cont_Mark *find = seg + pos; - if ((long)find->pos < (long)MZ_CONT_MARK_POS) { - break; - } else { - if (find->key == key) { - cm = find; - break; + if ((long)find->pos < (long)MZ_CONT_MARK_POS) { + break; } else { - /* Assume that we'll mutate rather than allocate a new mark record. */ - /* This is a bad assumption for a nasty program that repeatedly - creates a new key for the same frame, but it's good enough. */ - find->cache = NULL; + if (find->key == key) { + cm = find; + break; + } else { + /* Assume that we'll mutate rather than allocate a new mark record. */ + /* This is a bad assumption for a nasty program that repeatedly + creates a new key for the same frame, but it's good enough. */ + find->cache = NULL; + } } + } else { + if (MZ_CONT_MARK_POS == p->cont_mark_pos_bottom + 2) { + if (p->meta_continuation) { + if (key != scheme_stack_dump_key) { + /* Check the end of the meta-continuation's stack */ + Scheme_Meta_Continuation *mc = p->meta_continuation; + for (findpos = (long)mc->cont_mark_shareable; findpos--; ) { + if (mc->cont_mark_stack_copied[findpos].pos != mc->cont_mark_pos) + break; + if (mc->cont_mark_stack_copied[findpos].key == key) { + if (mc->copy_after_captured < scheme_cont_capture_count) { + /* Clone the meta-continuation, in case it was captured by + a continuation in its current state. */ + Scheme_Meta_Continuation *naya; + Scheme_Cont_Mark *cp; + naya = MALLOC_ONE_RT(Scheme_Meta_Continuation); + memcpy(naya, mc, sizeof(Scheme_Meta_Continuation)); + cp = MALLOC_N(Scheme_Cont_Mark, naya->cont_mark_shareable); + memcpy(cp, mc->cont_mark_stack_copied, naya->cont_mark_shareable * sizeof(Scheme_Cont_Mark)); + naya->cont_mark_stack_copied = cp; + naya->copy_after_captured = scheme_cont_capture_count; + mc = naya; + p->meta_continuation = mc; + } + mc->cont_mark_stack_copied[findpos].val = val; + mc->cont_mark_stack_copied[findpos].cache = NULL; + return 0; + } else { + mc->cont_mark_stack_copied[findpos].cache = NULL; + } + } + } + } + } + break; } } @@ -5334,6 +5419,7 @@ void *scheme_set_cont_mark(Scheme_Object *key, Scheme_Object *val) seg = p->cont_mark_stack_segments[segpos]; cm = seg + pos; + findpos = MZ_CONT_MARK_STACK; MZ_CONT_MARK_STACK++; } @@ -5342,7 +5428,7 @@ void *scheme_set_cont_mark(Scheme_Object *key, Scheme_Object *val) cm->pos = MZ_CONT_MARK_POS; /* always odd */ cm->cache = NULL; - return cm; + return findpos; } void scheme_temp_dec_mark_depth() @@ -5495,6 +5581,51 @@ static void make_tail_buffer_safe() p->tail_buffer = tb; } +static Scheme_Dynamic_Wind *intersect_dw(Scheme_Dynamic_Wind *a, Scheme_Dynamic_Wind *b, + Scheme_Object *prompt_tag, int *_common_depth) +{ + int alen = 0, blen = 0; + int prompt_delta = 0; + + if (prompt_tag) { + Scheme_Dynamic_Wind *dw; + for (dw = a; dw && (dw->prompt_tag != prompt_tag); dw = dw->prev) { + } + if (dw) + prompt_delta = dw->depth + 1; + } + + alen = (a ? a->depth + 1 : 0) - prompt_delta; + blen = (b ? b->depth + 1 : 0); + + while (alen > blen) { + --alen; + a = a->prev; + } + if (!alen) { + *_common_depth = -1; + return a; + } + while (blen > alen) { + --blen; + b = b->prev; + } + + /* At this point, we have chains that are the same length. */ + while (blen) { + if (SAME_OBJ(a->id ? a->id : (Scheme_Object *)a, + b->id ? b->id : (Scheme_Object *)b)) + break; + a = a->prev; + b = b->prev; + blen--; + } + + *_common_depth = (b ? b->depth : -1); + + return a; +} + #ifdef REGISTER_POOR_MACHINE # define USE_LOCAL_RUNSTACK 0 # define DELAY_THREAD_RUNSTACK_UPDATE 0 @@ -5544,7 +5675,7 @@ scheme_do_eval(Scheme_Object *obj, int num_rands, Scheme_Object **rands, #if USE_LOCAL_RUNSTACK GC_MAYBE_IGNORE_INTERIOR Scheme_Object **runstack; #endif - GC_MAYBE_IGNORE_INTERIOR Scheme_Cont_Mark *pm = NULL; + MZ_MARK_STACK_TYPE pmstack = -1; # define p scheme_current_thread #ifdef DO_STACK_CHECK @@ -5821,24 +5952,33 @@ scheme_do_eval(Scheme_Object *obj, int num_rands, Scheme_Object **rands, obj = data->code; - if (pm) { + if (pmstack >= 0) { + long segpos = ((long)pmstack) >> SCHEME_LOG_MARK_SEGMENT_SIZE; + long pos = ((long)pmstack) & SCHEME_MARK_SEGMENT_MASK; + GC_CAN_IGNORE Scheme_Cont_Mark *pm = NULL; + + pm = p->cont_mark_stack_segments[segpos] + pos; + if (!pm->cache) pm->val = data->name; else { - /* Need to clear caches and/or update pm, so do it the slow way */ + /* Need to clear caches, so do it the slow way */ UPDATE_THREAD_RSPTR_FOR_PROC_MARK(); - pm = (Scheme_Cont_Mark *)scheme_set_cont_mark(scheme_stack_dump_key, data->name); + pmstack = scheme_set_cont_mark(scheme_stack_dump_key, data->name); } } else { /* Allocate a new mark record: */ long segpos = ((long)MZ_CONT_MARK_STACK) >> SCHEME_LOG_MARK_SEGMENT_SIZE; if (segpos >= p->cont_mark_seg_count) { UPDATE_THREAD_RSPTR_FOR_PROC_MARK(); - pm = (Scheme_Cont_Mark *)scheme_set_cont_mark(scheme_stack_dump_key, data->name); + pmstack = scheme_set_cont_mark(scheme_stack_dump_key, data->name); } else { long pos = ((long)MZ_CONT_MARK_STACK) & SCHEME_MARK_SEGMENT_MASK; + GC_CAN_IGNORE Scheme_Cont_Mark *pm; GC_CAN_IGNORE Scheme_Cont_Mark *seg; + pmstack = MZ_CONT_MARK_STACK; + seg = p->cont_mark_stack_segments[segpos]; pm = seg + pos; MZ_CONT_MARK_STACK++; @@ -5914,6 +6054,9 @@ scheme_do_eval(Scheme_Object *obj, int num_rands, Scheme_Object **rands, Scheme_Cont *c; Scheme_Dynamic_Wind *dw, *common; Scheme_Object *value; + Scheme_Meta_Continuation *prompt_mc; + Scheme_Prompt *prompt; + int common_depth; if (num_rands != 1) { GC_CAN_IGNORE Scheme_Object **vals; @@ -5944,51 +6087,161 @@ scheme_do_eval(Scheme_Object *obj, int num_rands, Scheme_Object **rands, c = c->buf.cont; } - if (c->ok && !*c->ok) { - UPDATE_THREAD_RSPTR_FOR_ERROR(); - scheme_raise_exn(MZEXN_FAIL_CONTRACT_CONTINUATION, - "continuation application: attempted to cross a continuation barrier"); - } - - p->suspend_break++; /* restored at call/cc destination */ + if (c->composable) { + /* Composable continuation. Jump right in... */ + RUNSTACK = old_runstack; + RUNSTACK_CHANGED(); + UPDATE_THREAD_RSPTR(); + v = scheme_compose_continuation(c, num_rands, value); + } else { + /* Aborting (Scheme-style) continuation. */ - /* Find `common', then intersection of dynamic-wind chain for - the current continuation and the given continuation */ - common = p->dw; - while (common) { - dw = c->dw; - while (dw && dw != common) { - dw = dw->prev; - } - if (dw) - break; - common = common->prev; - } - - c->common = common; - /* For dynamic-winds after `common' in this - continuation, execute the post-thunks */ - for (dw = p->dw; dw != common; dw = dw->prev) { - if (dw->post) { - DW_PrePost_Proc post = dw->post; - p->dw = dw->prev; - MZ_CONT_MARK_POS = dw->envss.cont_mark_pos; - MZ_CONT_MARK_STACK = dw->envss.cont_mark_stack; - post(dw->data); - p = scheme_current_thread; - } - } + prompt = (Scheme_Prompt *)scheme_extract_one_cc_mark_with_meta(NULL, + SCHEME_PTR_VAL(c->prompt_tag), + NULL, + &prompt_mc); + if (!prompt && !SAME_OBJ(scheme_default_prompt_tag, c->prompt_tag)) { + scheme_raise_exn(MZEXN_FAIL_CONTRACT_CONTINUATION, + "continuation application: no corresponding prompt in the current continuation"); + } + + /* A continuation barrier is analogous to a dynamic-wind. A jump is + allowed if no dynamic-wind-like barriers would be executed for + the jump. */ + { + Scheme_Prompt *b1, *b2; + + b1 = p->barrier_prompt; + if (b1) { + if (!b1->is_barrier) + b1 = NULL; + else if (prompt && (prompt->depth > b1->depth)) + b1 = NULL; + } + b2 = c->ss.barrier_prompt; + if (b2) { + if (!b2->is_barrier) + b2 = NULL; + else if (c->prompt_depth > b2->depth) + b2 = NULL; + } + + if (b1 != b2) { + UPDATE_THREAD_RSPTR_FOR_ERROR(); + scheme_raise_exn(MZEXN_FAIL_CONTRACT_CONTINUATION, + "continuation application: attempt to cross a continuation barrier"); + } + } + + p->suspend_break++; /* restored at call/cc destination */ + + /* Find `common', the intersection of dynamic-wind chain for + the current continuation and the given continuation, looking + no further back in the current continuation than a prompt. */ + common = intersect_dw(p->dw, c->dw, c->prompt_tag, &common_depth); + + /* For dynamic-winds after `common' in this + continuation, execute the post-thunks */ + { + int meta_depth = 0; + + for (dw = p->dw; + ((common && common->id) ? dw->id != common->id : dw != common); + ) { + if (dw->post) { + p->dw = dw->prev; + meta_depth += dw->next_meta; + if (meta_depth) { + scheme_apply_dw_in_meta(dw, 1, meta_depth); + } else { + DW_PrePost_Proc post = dw->post; + + MZ_CONT_MARK_POS = dw->envss.cont_mark_pos; + MZ_CONT_MARK_STACK = dw->envss.cont_mark_stack; + post(dw->data); + } + p = scheme_current_thread; + /* p->dw might not match dw if the post thunk captures a + continuation that is later restored in a different + meta continuation: */ + dw = p->dw; + } else + dw = dw->prev; + } + } + + c->common_dw_depth = common_depth; - if (num_rands == 1) - c->value = value; - else { - GC_CAN_IGNORE Scheme_Object *vals; - vals = scheme_values(num_rands, (Scheme_Object **)value); - c->value = vals; - } - scheme_longjmpup(&c->buf); + if (num_rands == 1) + c->value = value; + else { + GC_CAN_IGNORE Scheme_Object *vals; + vals = scheme_values(num_rands, (Scheme_Object **)value); + c->value = vals; + } + + p->dw = common; + + if (!prompt) { + /* Invoke the continuation directly. If there's no prompt, + then the prompt's job is taken by the pseudo-prompt + created with a new thread or a barrier prompt. */ + p->meta_continuation = NULL; /* since prompt wasn't in any meta-continuation */ + p->meta_prompt = NULL; + if (c->ss.barrier_prompt == p->barrier_prompt) { + /* Barrier determines continuation end. */ + c->resume_to = NULL; + p->stack_start = c->stack_start; + } else { + /* Prompt is pseudo-prompt at thread beginning. + We're effectively composing the continuation, + so use it's prompt stack start. */ + Scheme_Overflow *oflow; + oflow = scheme_get_thread_end_overflow(); + c->resume_to = oflow; + p->stack_start = c->prompt_stack_start; + } + scheme_longjmpup(&c->buf); + } else { + p->cjs.jumping_to_continuation = (Scheme_Object *)prompt; + p->cjs.num_vals = 1; + p->cjs.val = (Scheme_Object *)c; + p->cjs.is_escape = 1; + + if (prompt_mc) { + /* The prompt is from a meta-continuation that's different + from the current one. Jump to the meta-continuation + and continue from there. Immediate destination is + in compose_continuation() in fun.c; the ultimate + destination is in scheme_finish_apply_for_prompt() + in fun.c. */ + p->meta_continuation = prompt_mc->next; + p->stack_start = prompt_mc->overflow->stack_start; + scheme_longjmpup(&prompt_mc->overflow->jmp->cont); + } else if ((!prompt->boundary_overflow_id && !p->overflow) + || (prompt->boundary_overflow_id == p->overflow->id)) { + /* Jump directly to the prompt: destination is in + scheme_finish_apply_for_prompt() in fun.c. */ + scheme_longjmp(*prompt->prompt_buf, 1); + } else { + /* Need to unwind overflows to get to the prompt. */ + Scheme_Overflow *overflow = p->overflow; + while (overflow->prev + && (!overflow->prev->id + || (overflow->prev->id != prompt->boundary_overflow_id))) { + overflow = overflow->prev; + } + /* Immediate destination is in scheme_handle_stack_overflow(). + Ultimate destination is in scheme_finish_apply_for_prompt() + in fun.c. */ + p->overflow = overflow; + p->stack_start = overflow->stack_start; + scheme_longjmpup(&overflow->jmp->cont); + } + } - return NULL; + return NULL; + } } else if (type == scheme_escaping_cont_type) { Scheme_Object *value; @@ -6019,8 +6272,8 @@ scheme_do_eval(Scheme_Object *obj, int num_rands, Scheme_Object **rands, "continuation application: attempt to jump into an escape continuation"); } - p->cjs.u.val = value; - p->cjs.jumping_to_continuation = (Scheme_Escaping_Cont *)obj; + p->cjs.val = value; + p->cjs.jumping_to_continuation = obj; scheme_longjmp(MZTHREADELEM(p, error_buf), 1); return NULL; } else if (type == scheme_proc_struct_type) { diff --git a/src/mzscheme/src/file.c b/src/mzscheme/src/file.c index 973fd5cde6..a72cfa658f 100644 --- a/src/mzscheme/src/file.c +++ b/src/mzscheme/src/file.c @@ -3983,7 +3983,8 @@ static Scheme_Object *delete_directory(int argc, Scheme_Object *argv[]) static Scheme_Object *make_link(int argc, Scheme_Object *argv[]) { - char *src, *dest; + char *src; + Scheme_Object *dest; int copied; if (!SCHEME_PATH_STRINGP(argv[0])) @@ -3991,15 +3992,23 @@ static Scheme_Object *make_link(int argc, Scheme_Object *argv[]) if (!SCHEME_PATH_STRINGP(argv[1])) scheme_wrong_type("make-file-or-directory-link", SCHEME_PATH_STRING_STR, 0, argc, argv); - dest = scheme_expand_string_filename(argv[0], - "make-file-or-directory-link", - &copied, - SCHEME_GUARD_FILE_EXISTS); + dest = argv[0]; + /* dest does not get expanded, but we need to make sure it's a path */ + dest = TO_PATH(dest); + if (has_null(SCHEME_PATH_VAL(dest), SCHEME_PATH_LEN(dest))) { + raise_null_error("make-file-or-directory-link", dest, ""); + return NULL; + } + src = scheme_expand_string_filename(argv[1], "make-file-or-directory-link", &copied, SCHEME_GUARD_FILE_WRITE); + scheme_security_check_file_link("make-file-or-directory-link", + src, + SCHEME_PATH_VAL(dest)); + #if defined(DOS_FILE_SYSTEM) scheme_raise_exn(MZEXN_FAIL_UNSUPPORTED, "make-file-or-directory-link: link creation not supported on this platform; " @@ -4007,7 +4016,7 @@ static Scheme_Object *make_link(int argc, Scheme_Object *argv[]) argv[1]); #else while (1) { - if (!MSC_W_IZE(symlink)(MSC_WIDE_PATH(dest), src)) + if (!symlink(SCHEME_PATH_VAL(dest), src)) return scheme_void; else if (errno != EINTR) break; diff --git a/src/mzscheme/src/fun.c b/src/mzscheme/src/fun.c index 09db6026a3..f5d4ae1743 100644 --- a/src/mzscheme/src/fun.c +++ b/src/mzscheme/src/fun.c @@ -66,6 +66,8 @@ # endif /* USE_MACTIME */ #endif /* TIME_SYNTAX */ +#define ASSERT_SUSPEND_BREAK_ZERO() (scheme_current_thread->suspend_break ? (*(long *)0x0 = 1): 0) + /* globals */ int scheme_defining_primitives; /* set to 1 during start-up */ @@ -80,6 +82,8 @@ Scheme_Object *scheme_inferred_name_symbol; int scheme_cont_capture_count; +Scheme_Object *scheme_default_prompt_tag; + static Scheme_Object *certify_mode_symbol, *transparent_symbol, *transparent_binding_symbol, *opaque_symbol; static Scheme_Object *null_val_key, *cont_key; @@ -94,6 +98,12 @@ static Scheme_Object *ormap (int argc, Scheme_Object *argv[]); static Scheme_Object *call_cc (int argc, Scheme_Object *argv[]); static Scheme_Object *internal_call_cc (int argc, Scheme_Object *argv[]); static Scheme_Object *call_with_continuation_barrier (int argc, Scheme_Object *argv[]); +static Scheme_Object *call_with_prompt (int argc, Scheme_Object *argv[]); +static Scheme_Object *call_with_control (int argc, Scheme_Object *argv[]); +static Scheme_Object *make_prompt_tag (int argc, Scheme_Object *argv[]); +static Scheme_Object *abort_continuation (int argc, Scheme_Object *argv[]); +static Scheme_Object *continuation_prompt_available(int argc, Scheme_Object *argv[]); +static Scheme_Object *get_default_prompt_tag (int argc, Scheme_Object *argv[]); static Scheme_Object *call_with_sema (int argc, Scheme_Object *argv[]); static Scheme_Object *call_with_sema_enable_break (int argc, Scheme_Object *argv[]); static Scheme_Object *cc_marks (int argc, Scheme_Object *argv[]); @@ -142,10 +152,9 @@ static int top_next_use_thread_cc_ok; static Scheme_Object *is_method_symbol; -static long *thread_init_cc_ok; - -static long *available_cc_ok; -static long *available_cws_cc_ok; +static Scheme_Prompt *available_prompt, *available_cws_prompt, *available_regular_prompt; +static Scheme_Dynamic_Wind *available_prompt_dw; +static Scheme_Meta_Continuation *available_prompt_mc; typedef void (*DW_PrePost_Proc)(void *); @@ -161,6 +170,7 @@ static Scheme_Object *internal_call_cc_prim; typedef struct Scheme_Dynamic_Wind_List { MZTAG_IF_REQUIRED Scheme_Dynamic_Wind *dw; + int meta_depth; struct Scheme_Dynamic_Wind_List *next; } Scheme_Dynamic_Wind_List; @@ -251,12 +261,12 @@ scheme_init_fun (Scheme_Env *env) REGISTER_SO(internal_call_cc_prim); internal_call_cc_prim = scheme_make_prim_w_arity2(internal_call_cc, "call-with-current-continuation", - 1, 1, + 1, 3, 0, -1); o = scheme_make_prim_w_arity2(call_cc, "call-with-current-continuation", - 1, 1, + 1, 2, 0, -1); scheme_add_global_constant("call-with-current-continuation", o, env); @@ -269,6 +279,44 @@ scheme_init_fun (Scheme_Env *env) 0, -1), env); + scheme_add_global_constant("call-with-continuation-prompt", + scheme_make_prim_w_arity2(call_with_prompt, + "call-with-continuation-prompt", + 1, 3, + 0, -1), + env); + + scheme_add_global_constant("call-with-composable-continuation", + scheme_make_prim_w_arity2(call_with_control, + "call-with-composable-continuation", + 1, 2, + 0, -1), + env); + + scheme_add_global_constant("abort-current-continuation", + scheme_make_prim_w_arity(abort_continuation, + "abort-current-continuation", + 1, -1), + env); + + scheme_add_global_constant("continuation-prompt-available?", + scheme_make_prim_w_arity(continuation_prompt_available, + "continuation-prompt-available?", + 1, 2), + env); + + scheme_add_global_constant("make-continuation-prompt-tag", + scheme_make_prim_w_arity(make_prompt_tag, + "make-continuation-prompt-tag", + 0, 1), + env); + + scheme_add_global_constant("default-continuation-prompt-tag", + scheme_make_prim_w_arity(get_default_prompt_tag, + "default-continuation-prompt-tag", + 0, 0), + env); + scheme_add_global_constant("call-with-semaphore", scheme_make_prim_w_arity2(call_with_sema, "call-with-semaphore", @@ -285,27 +333,27 @@ scheme_init_fun (Scheme_Env *env) scheme_add_global_constant("current-continuation-marks", scheme_make_prim_w_arity(cc_marks, "current-continuation-marks", - 0, 0), + 0, 1), env); scheme_add_global_constant("continuation-marks", scheme_make_prim_w_arity(cont_marks, "continuation-marks", - 1, 1), + 1, 2), env); scheme_add_global_constant("continuation-mark-set->list", scheme_make_prim_w_arity(extract_cc_marks, "continuation-mark-set->list", - 2, 2), + 2, 3), env); scheme_add_global_constant("continuation-mark-set->list*", scheme_make_prim_w_arity(extract_cc_markses, "continuation-mark-set->list*", - 2, 3), + 2, 4), env); scheme_add_global_constant("continuation-mark-set-first", scheme_make_prim_w_arity(extract_one_cc_mark, "continuation-mark-set-first", - 2, 3), + 2, 4), env); scheme_add_global_constant("continuation-mark-set?", scheme_make_prim_w_arity(cc_marks_p, @@ -434,6 +482,13 @@ scheme_init_fun (Scheme_Env *env) is_method_symbol = scheme_intern_symbol("method-arity-error"); scheme_inferred_name_symbol = scheme_intern_symbol("inferred-name"); cont_key = scheme_make_symbol("k"); /* uninterned */ + + REGISTER_SO(scheme_default_prompt_tag); + { + Scheme_Object *a[1]; + a[0] = scheme_intern_symbol("default"); + scheme_default_prompt_tag = make_prompt_tag(1, a); + } } Scheme_Object * @@ -1529,10 +1584,148 @@ scheme_make_closure_compilation(Scheme_Comp_Env *env, Scheme_Object *code, return (Scheme_Object *)data; } + +/*========================================================================*/ +/* prompt helpers */ +/*========================================================================*/ + +static void initialize_prompt(Scheme_Thread *p, Scheme_Prompt *prompt, void *stack_boundary) +{ + int depth = 0; + prompt->is_barrier = 0; + prompt->is_captured = 0; + prompt->stack_boundary = stack_boundary; + prompt->runstack_boundary_start = MZ_RUNSTACK_START; + prompt->runstack_boundary_offset = (MZ_RUNSTACK - MZ_RUNSTACK_START); + prompt->mark_boundary = MZ_CONT_MARK_STACK; + prompt->boundary_mark_pos = MZ_CONT_MARK_POS; + if (p->barrier_prompt) + depth = p->barrier_prompt->depth; + if (p->meta_prompt && (p->meta_prompt->depth > depth)) + depth = p->meta_prompt->depth; + prompt->depth = depth + 1; +} + /*========================================================================*/ /* stack-overflow wrapper */ /*========================================================================*/ +typedef Scheme_Object *(*Overflow_K_Proc)(void); + +Scheme_Overflow_Jmp *scheme_overflow_jmp; +void *scheme_overflow_stack_start; + +/* private, but declared public to avoid inlining: */ +void scheme_really_create_overflow(void *stack_base) +{ + Scheme_Overflow_Jmp *jmp; + + /* Even if we already have scheme_overflow_jmp, + it's possible that we're starting at a lower stack position + than previously. It's important (for non-3m) to declare + the new stack start: */ + scheme_ensure_stack_start(stack_base); + + if (scheme_overflow_jmp) + return; + + scheme_overflow_stack_start = stack_base; + + jmp = MALLOC_ONE_RT(Scheme_Overflow_Jmp); +#ifdef MZTAG_REQUIRED + jmp->type = scheme_rt_overflow_jmp; +#endif + + scheme_init_jmpup_buf(&jmp->cont); + if (scheme_setjmpup(&jmp->cont, jmp, stack_base)) { + /* A jump into here is a rquest to handle overflow. + The way to continue is in scheme_overflow_k. + Whe we get back, put the result into + scheme_overflow_reply. The route to return is + in the thread's `overflow' field. */ + Scheme_Thread * volatile p; + Scheme_Overflow * volatile overflow; + mz_jmp_buf nestedbuf; + + p = scheme_current_thread; + overflow = p->overflow; + + overflow->jmp->savebuf = p->error_buf; + p->error_buf = &nestedbuf; + if (scheme_setjmp(nestedbuf)) { + /* there was an escape from the overflow */ + p = scheme_current_thread; + p->overflow_reply = NULL; /* means "continue the error" */ + } else { + void *p1, *p2, *p3, *p4, *p5; + long i1, i2, i3, i4; + Overflow_K_Proc f = scheme_overflow_k; + Scheme_Object *reply; + + p1 = p->ku.k.p1; + p2 = p->ku.k.p2; + p3 = p->ku.k.p3; + p4 = p->ku.k.p4; + p5 = p->ku.k.p5; + i1 = p->ku.k.i1; + i2 = p->ku.k.i2; + i3 = p->ku.k.i3; + i4 = p->ku.k.i4; + + /* stack overflow is a lot of work; force a sleep */ + scheme_thread_block(0); + p->ran_some = 1; + + p->ku.k.p1 = p1; + p->ku.k.p2 = p2; + p->ku.k.p3 = p3; + p->ku.k.p4 = p4; + p->ku.k.p5 = p5; + p->ku.k.i1 = i1; + p->ku.k.i2 = i2; + p->ku.k.i3 = i3; + p->ku.k.i4 = i4; + + reply = f(); + scheme_overflow_reply = reply; + } + + p = scheme_current_thread; + overflow = p->overflow; + p->stack_start = overflow->stack_start; + + /* Reset overflow buffer and continue */ + scheme_longjmpup(&overflow->jmp->cont); + } + + if (scheme_overflow_jmp) { + scheme_signal_error("shouldn't get here!"); + } + + scheme_overflow_jmp = jmp; +} + +void scheme_create_overflow(void) +{ + void *dummy; + scheme_really_create_overflow(PROMPT_STACK(dummy)); + dummy = NULL; /* to ensure that we get __gc_var_stack__ in 3m */ +} + +void scheme_init_overflow(void) +{ + REGISTER_SO(scheme_overflow_jmp); +} + +void scheme_reset_overflow(void) +{ + scheme_overflow_jmp = NULL; +} + +/*========================================================================*/ +/* entry continuation barrier */ +/*========================================================================*/ + void scheme_on_next_top(Scheme_Comp_Env *env, Scheme_Object *mark, Scheme_Object *name, Scheme_Object *certs, @@ -1558,58 +1751,50 @@ void scheme_on_next_top(Scheme_Comp_Env *env, Scheme_Object *mark, top_next_menv = menv; } -typedef Scheme_Object *(*Overflow_K_Proc)(void); - void *top_level_do(void *(*k)(void), int eb, void *sj_start) /* Wraps a function `k' with a handler for stack overflows and barriers to full-continuation jumps. No barrier if !eb. */ { void *v; - long * volatile old_cc_ok; - long volatile old_cc_ok_val = 0; - long * volatile cc_ok; + Scheme_Prompt * volatile old_barrier_prompt, * volatile prompt; volatile long save_list_stack_pos; - mz_jmp_buf *save, * volatile oversave = NULL, newbuf, overbuf; + mz_jmp_buf *save, newbuf; Scheme_Stack_State envss; Scheme_Comp_Env * volatile save_current_local_env; Scheme_Object * volatile save_mark, * volatile save_name, * volatile save_certs, * volatile save_modidx; Scheme_Env * volatile save_menv; Scheme_Simple_Object * volatile save_list_stack; Scheme_Thread * volatile p = scheme_current_thread; - volatile int save_suspend_break; - int set_overflow; + int thread_cc = top_next_use_thread_cc_ok; #ifdef MZ_PRECISE_GC void *external_stack; #endif + top_next_use_thread_cc_ok = 0; + if (scheme_active_but_sleeping) scheme_wake_up(); if (eb) { - old_cc_ok = p->cc_ok; + old_barrier_prompt = p->barrier_prompt; - if (top_next_use_thread_cc_ok) { - top_next_use_thread_cc_ok = 0; - if (!thread_init_cc_ok) { - REGISTER_SO(thread_init_cc_ok); - thread_init_cc_ok = (long *)scheme_malloc_atomic(sizeof(long)); - } - cc_ok = thread_init_cc_ok; - } else if (available_cc_ok) { - cc_ok = available_cc_ok; - available_cc_ok = NULL; - } else - cc_ok = (long *)scheme_malloc_atomic(sizeof(long)); - p->cc_ok = cc_ok; - - if (old_cc_ok) { - old_cc_ok_val = *old_cc_ok; - *old_cc_ok = 0; + if (available_prompt) { + prompt = available_prompt; + available_prompt = NULL; + } else { + prompt = MALLOC_ONE_TAGGED(Scheme_Prompt); + prompt->so.type = scheme_prompt_type; + } + + initialize_prompt(p, prompt, PROMPT_STACK(old_barrier_prompt)); + p->barrier_prompt = prompt; + + if (!thread_cc) { + prompt->is_barrier = 1; } - *cc_ok = 1; } else { - cc_ok = NULL; - old_cc_ok = NULL; + prompt = NULL; + old_barrier_prompt = NULL; } #ifdef MZ_PRECISE_GC @@ -1629,7 +1814,6 @@ void *top_level_do(void *(*k)(void), int eb, void *sj_start) save_menv = p->current_local_menv; save_list_stack = p->list_stack; save_list_stack_pos = p->list_stack_pos; - save_suspend_break = p->suspend_break; if (top_next_env) { p->current_local_env = top_next_env; @@ -1646,150 +1830,68 @@ void *top_level_do(void *(*k)(void), int eb, void *sj_start) top_next_menv = NULL; } - /* We set up an overflow handler at the lowest point possible - in the stack for each thread. When we create a thread, - we need to make sure that it starts out with a reasonable - amount of space. */ - set_overflow = !p->overflow_set; - if (set_overflow) { - p->o_start = sj_start; - p->overflow_set = 1; - - oversave = p->overflow_buf; - p->overflow_buf = &overbuf; - if (scheme_setjmp(overbuf)) { - while (1) { - /* We get `p' again because it might be a nestee: */ - Scheme_Thread * volatile pp; - Scheme_Overflow * volatile overflow; - mz_jmp_buf nestedbuf; - - pp = scheme_current_thread; - overflow = pp->overflow; - - overflow->savebuf = pp->error_buf; - pp->error_buf = &nestedbuf; - if (scheme_setjmp(nestedbuf)) { - /* If we use scheme_overflow_reply here, it crashes on - Sparc. Sometimes. Can anyone tell me why? */ - pp = scheme_current_thread; - pp->overflow_reply = NULL; /* means "continue the error" */ - } else { - void *p1, *p2, *p3, *p4, *p5; - long i1, i2, i3, i4; - - p1 = pp->ku.k.p1; - p2 = pp->ku.k.p2; - p3 = pp->ku.k.p3; - p4 = pp->ku.k.p4; - p5 = pp->ku.k.p5; - i1 = pp->ku.k.i1; - i2 = pp->ku.k.i2; - i3 = pp->ku.k.i3; - i4 = pp->ku.k.i4; - - /* stack overflow is a lot of work; force a sleep */ - scheme_thread_block(0); - pp->ran_some = 1; - - pp->ku.k.p1 = p1; - pp->ku.k.p2 = p2; - pp->ku.k.p3 = p3; - pp->ku.k.p4 = p4; - pp->ku.k.p5 = p5; - pp->ku.k.i1 = i1; - pp->ku.k.i2 = i2; - pp->ku.k.i3 = i3; - pp->ku.k.i4 = i4; - - { - Overflow_K_Proc f = scheme_overflow_k; - Scheme_Object *reply; - reply = f(); - scheme_overflow_reply = reply; - } - } - - pp = scheme_current_thread; - overflow = pp->overflow; - pp->error_buf = overflow->savebuf; - pp->overflow = overflow->prev; - /* Reset overflow buffer and continue */ - if (scheme_setjmp(*pp->overflow_buf)) { - /* handle again */ - } else - scheme_longjmpup(&overflow->cont); - } - } - } + scheme_create_overflow(); /* needed even if scheme_overflow_jmp is already set */ save = p->error_buf; p->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { - p = scheme_current_thread; - scheme_restore_env_stack_w_thread(envss, p); + if (!thread_cc) { + p = scheme_current_thread; + scheme_restore_env_stack_w_thread(envss, p); #ifdef MZ_PRECISE_GC - if (scheme_set_external_stack_val) - scheme_set_external_stack_val(external_stack); + if (scheme_set_external_stack_val) + scheme_set_external_stack_val(external_stack); #endif - if (cc_ok) { - if ((*cc_ok == 1) && (cc_ok != thread_init_cc_ok)) { - /* It wasn't used */ - available_cc_ok = cc_ok; - } else - *cc_ok = 0; - if (old_cc_ok) - *old_cc_ok = old_cc_ok_val; - p->cc_ok = old_cc_ok; + if (prompt) { + if (!prompt->is_captured) { + /* It wasn't used */ + available_prompt = prompt; + } + p->barrier_prompt = old_barrier_prompt; + } + p->current_local_env = save_current_local_env; + p->current_local_mark = save_mark; + p->current_local_name = save_name; + p->current_local_certs = save_certs; + p->current_local_modidx = save_modidx; + p->current_local_menv = save_menv; + p->list_stack = save_list_stack; + p->list_stack_pos = save_list_stack_pos; } - if (set_overflow) { - p->overflow_buf = oversave; - p->overflow_set = 0; - } - p->current_local_env = save_current_local_env; - p->current_local_mark = save_mark; - p->current_local_name = save_name; - p->current_local_certs = save_certs; - p->current_local_modidx = save_modidx; - p->current_local_menv = save_menv; - p->list_stack = save_list_stack; - p->list_stack_pos = save_list_stack_pos; - p->suspend_break = save_suspend_break; scheme_longjmp(*save, 1); } + if (thread_cc) { + /* check for initial break before we do anything */ + scheme_check_break_now(); + } + v = k(); /* IMPORTANT: no GCs from here to return, since v may refer to multiple values, and we don't want the multiple-value array cleared. */ - p = scheme_current_thread; + if (!thread_cc) { + p = scheme_current_thread; - p->current_local_env = save_current_local_env; - p->current_local_mark = save_mark; - p->current_local_name = save_name; - p->current_local_certs = save_certs; - p->current_local_modidx = save_modidx; - p->current_local_menv = save_menv; + p->current_local_env = save_current_local_env; + p->current_local_mark = save_mark; + p->current_local_name = save_name; + p->current_local_certs = save_certs; + p->current_local_modidx = save_modidx; + p->current_local_menv = save_menv; - p->error_buf = save; - - if (set_overflow) { - p->overflow_buf = oversave; - p->overflow_set = 0; + p->error_buf = save; } - if (cc_ok) { - if ((*cc_ok == 1) && (cc_ok != thread_init_cc_ok)) { + if (prompt) { + if (!prompt->is_captured) { /* It wasn't used */ - available_cc_ok = cc_ok; - } else - *cc_ok = 0; - if (old_cc_ok) - *old_cc_ok = old_cc_ok_val; - p->cc_ok = old_cc_ok; + available_prompt = prompt; + } + p->barrier_prompt = old_barrier_prompt; } if (scheme_active_but_sleeping) @@ -1820,10 +1922,35 @@ void *scheme_top_level_do(void *(*k)(void), int eb) return sj_start; } -void scheme_clear_cc_ok() +void scheme_clear_prompt_cache() { - available_cc_ok = NULL; - available_cws_cc_ok = NULL; + available_prompt = NULL; + available_cws_prompt = NULL; + available_regular_prompt = NULL; + available_prompt_dw = NULL; + available_prompt_mc = NULL; +} + +static void ensure_overflow_id(Scheme_Overflow *overflow) +{ + void *id; + if (!overflow->id) { + if (overflow->jmp) { + overflow->id = overflow->jmp; + } else { + id = scheme_malloc_atomic(4); + overflow->id = id; + } + } +} + +void scheme_ensure_dw_id(Scheme_Dynamic_Wind *dw) +{ + void *id; + if (!dw->id) { + id = scheme_malloc_atomic(4); + dw->id = id; + } } /*========================================================================*/ @@ -3101,47 +3228,30 @@ Scheme_Object *scheme_values(int argc, Scheme_Object *argv[]) /* continuations */ /*========================================================================*/ +static void reset_cjs(Scheme_Continuation_Jump_State *a) +{ + a->jumping_to_continuation = NULL; + a->val = NULL; + a->num_vals = 0; + a->is_kill = 0; + a->is_escape = 0; +} + void scheme_clear_escape(void) { Scheme_Thread *p = scheme_current_thread; - p->cjs.jumping_to_continuation = NULL; - p->cjs.u.val = NULL; - p->cjs.num_vals = 0; + reset_cjs(&p->cjs); + p->suspend_break = 0; } static void copy_cjs(Scheme_Continuation_Jump_State *a, Scheme_Continuation_Jump_State *b) { a->jumping_to_continuation = b->jumping_to_continuation; - a->u.val = b->u.val; + a->val = b->val; a->num_vals = b->num_vals; a->is_kill = b->is_kill; -} - -static Scheme_Object *get_ec_marks_prefix() -{ - Scheme_Thread *p = scheme_current_thread; - Scheme_Object *pr = scheme_null; - long findpos; - Scheme_Cont_Mark *find; - - findpos = (long)MZ_CONT_MARK_STACK; - - while (findpos--) { - long pos; - - find = p->cont_mark_stack_segments[findpos >> SCHEME_LOG_MARK_SEGMENT_SIZE]; - pos = findpos & SCHEME_MARK_SEGMENT_MASK; - - if (find[pos].pos != MZ_CONT_MARK_POS) - break; - - pr = scheme_make_pair(scheme_make_pair(find[pos].key, - find[pos].val), - pr); - } - - return pr; + a->is_escape = b->is_escape; } Scheme_Object * @@ -3151,93 +3261,49 @@ scheme_call_ec (int argc, Scheme_Object *argv[]) Scheme_Escaping_Cont * volatile cont; Scheme_Thread *p1 = scheme_current_thread; Scheme_Object * volatile v; - Scheme_Object *mark_key, *a[1]; + Scheme_Object *a[1]; + Scheme_Cont_Frame_Data cframe; - scheme_check_proc_arity("call-with-escaping-continuation", 1, + scheme_check_proc_arity("call-with-escape-continuation", 1, 0, argc, argv); - /* In tail position with respect to an existing - escape continuation? */ - mark_key = p1->current_escape_cont_key; - if (mark_key && SAME_OBJ((Scheme_Object *)MZ_CONT_MARK_POS, - SCHEME_CAR(mark_key))) { - /* Yes - reuse the old continuation */ - cont = (Scheme_Escaping_Cont *)SCHEME_CDR(mark_key); - - v = get_ec_marks_prefix(); - - if (!scheme_equal(v, cont->marks_prefix)) { - /* The continuation marks are different this time. - We need to clone the continuation, then change mark prefix. */ - Scheme_Escaping_Cont *c2; - c2 = MALLOC_ONE_TAGGED(Scheme_Escaping_Cont); - memcpy(c2, cont, sizeof(Scheme_Escaping_Cont)); - c2->marks_prefix = v; - cont = c2; - } - - a[0] = (Scheme_Object *)cont; - SCHEME_USE_FUEL(1); - return scheme_tail_apply(argv[0], 1, a); - } - - mark_key = scheme_make_pair((Scheme_Object *)MZ_CONT_MARK_POS, - scheme_false); - cont = MALLOC_ONE_TAGGED(Scheme_Escaping_Cont); cont->so.type = scheme_escaping_cont_type; - cont->mark_key = mark_key; - cont->suspend_break = p1->suspend_break; - copy_cjs(&cont->cjs, &p1->cjs); - - SCHEME_CDR(mark_key) = (Scheme_Object *)cont; - - v = get_ec_marks_prefix(); - cont->marks_prefix = v; + ASSERT_SUSPEND_BREAK_ZERO(); cont->saveerr = p1->error_buf; p1->error_buf = &newbuf; scheme_save_env_stack_w_thread(cont->envss, p1); - /* Don't push a continuation frame; argument function - is called as tail. */ - scheme_set_cont_mark(mark_key, scheme_true); - p1->current_escape_cont_key = mark_key; + p1->barrier_prompt->is_captured = 1; + + scheme_push_continuation_frame(&cframe); + scheme_set_cont_mark((Scheme_Object *)cont, scheme_true); if (scheme_setjmp(newbuf)) { Scheme_Thread *p2 = scheme_current_thread; if (p2->cjs.jumping_to_continuation - && SAME_OBJ(p2->cjs.jumping_to_continuation->mark_key, - cont->mark_key)) { + && SAME_OBJ(p2->cjs.jumping_to_continuation, (Scheme_Object *)cont)) { int n = p2->cjs.num_vals; - Scheme_Object **vs = p2->cjs.u.vals; - v = p2->cjs.u.val; - copy_cjs(&p2->cjs, &cont->cjs); + v = p2->cjs.val; + reset_cjs(&p2->cjs); scheme_restore_env_stack_w_thread(cont->envss, p2); - p2->suspend_break = cont->suspend_break; + p2->suspend_break = 0; if (n != 1) - v = scheme_values(n, vs); + v = scheme_values(n, (Scheme_Object **)v); } else { scheme_longjmp(*cont->saveerr, 1); } } else { - /* Adjusting MZ_CONT_MARK_POS, we make the application appear to - be in tail position. The actual non-tailness is limited to a - single frame, since call_ec checks the current escape-cont key - as a continuation mark before getting here. */ - MZ_CONT_MARK_POS -= 2; - a[0] = (Scheme_Object *)cont; v = _scheme_apply_multi(argv[0], 1, a); - - MZ_CONT_MARK_POS += 2; } p1 = scheme_current_thread; p1->error_buf = cont->saveerr; - p1->current_escape_cont_key = cont->envss.current_escape_cont_key; + scheme_pop_continuation_frame(&cframe); return v; } @@ -3246,7 +3312,7 @@ int scheme_escape_continuation_ok(Scheme_Object *ec) { Scheme_Escaping_Cont *cont = (Scheme_Escaping_Cont *)ec; - if (scheme_extract_one_cc_mark(NULL, cont->mark_key)) + if (scheme_extract_one_cc_mark(NULL, (Scheme_Object *)cont)) return 1; else return 0; @@ -3256,9 +3322,8 @@ static Scheme_Object * do_call_with_sema(const char *who, int enable_break, int argc, Scheme_Object *argv[]) { mz_jmp_buf newbuf, * volatile savebuf; - long * volatile cc_ok; - long * volatile old_cc_ok; - long volatile old_cc_ok_val; + Scheme_Prompt * volatile prompt; + Scheme_Prompt * volatile old_barrier_prompt; int i, just_try; int volatile extra; Scheme_Object * volatile sema; @@ -3302,20 +3367,17 @@ do_call_with_sema(const char *who, int enable_break, int argc, Scheme_Object *ar savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; - if (available_cws_cc_ok) { - cc_ok = available_cws_cc_ok; - available_cws_cc_ok = NULL; - } else - cc_ok = (long *)scheme_malloc_atomic(sizeof(long)); - *cc_ok = 1; - - old_cc_ok = scheme_current_thread->cc_ok; - scheme_current_thread->cc_ok = cc_ok; - if (old_cc_ok) { - old_cc_ok_val = *old_cc_ok; - *old_cc_ok = 0; + if (available_cws_prompt) { + prompt = available_cws_prompt; + available_cws_prompt = NULL; + } else { + prompt = MALLOC_ONE_TAGGED(Scheme_Prompt); + prompt->so.type = scheme_prompt_type; } + old_barrier_prompt = scheme_current_thread->barrier_prompt; + scheme_current_thread->barrier_prompt = prompt; + if (scheme_setjmp(newbuf)) { v = NULL; } else { @@ -3330,15 +3392,11 @@ do_call_with_sema(const char *who, int enable_break, int argc, Scheme_Object *ar v = _scheme_apply_multi(argv[1], extra, extra_args); } - scheme_post_sema(sema); + scheme_post_sema(sema); /* FIXME: what if we reach the max count? */ - if (*cc_ok != 2) - available_cws_cc_ok = cc_ok; - else - *cc_ok = 0; - if (old_cc_ok) - *old_cc_ok = old_cc_ok_val; - scheme_current_thread->cc_ok = old_cc_ok; + if (!prompt->is_captured) + available_cws_prompt = prompt; + scheme_current_thread->barrier_prompt = old_barrier_prompt; if (!v) scheme_longjmp(*savebuf, 1); @@ -3363,25 +3421,30 @@ call_with_sema_enable_break(int argc, Scheme_Object *argv[]) static Scheme_Saved_Stack *copy_out_runstack(Scheme_Thread *p, Scheme_Object **runstack, Scheme_Object **runstack_start, - Scheme_Cont *share_from) + Scheme_Cont *share_from, + Scheme_Prompt *effective_prompt) { Scheme_Saved_Stack *saved, *isaved, *csaved, *share_saved, *share_csaved, *ss; Scheme_Object **start; long size; + int done; /* Copy out current runstack: */ saved = MALLOC_ONE_RT(Scheme_Saved_Stack); #ifdef MZTAG_REQUIRED saved->type = scheme_rt_saved_stack; #endif - if (share_from && (share_from->ss.runstack_start == runstack_start)) { + if (share_from && (share_from->runstack_start == runstack_start)) { /* Copy just the difference between share_from's runstack and current runstack... */ - size = (share_from->ss.runstack XFORM_OK_MINUS runstack); + size = (share_from->ss.runstack_offset - (runstack XFORM_OK_MINUS runstack_start)); /* But add one, because call/cc takes one argument. If there's not one move value on the stack, then call/cc must have received its argument from elsewhere. */ - if ((share_from->ss.runstack XFORM_OK_MINUS runstack_start) < p->runstack_size) + if (share_from->ss.runstack_offset < p->runstack_size) size++; + } else if (effective_prompt && (effective_prompt->runstack_boundary_start == runstack_start)) { + /* Copy only up to the prompt */ + size = effective_prompt->runstack_boundary_offset - (runstack XFORM_OK_MINUS runstack_start); } else { size = p->runstack_size - (runstack XFORM_OK_MINUS runstack_start); } @@ -3391,35 +3454,51 @@ static Scheme_Saved_Stack *copy_out_runstack(Scheme_Thread *p, saved->runstack_start = start; memcpy(saved->runstack_start, runstack, size * sizeof(Scheme_Object *)); - /* Copy saved runstacks: */ - isaved = saved; - share_saved = NULL; - share_csaved = NULL; - if (share_from) { - /* We can share all saved runstacks */ - share_csaved = share_from->ss.runstack_saved; - share_saved = share_from->runstack_copied->prev; - } - for (csaved = p->runstack_saved; csaved; csaved = csaved->prev) { - if (share_csaved && (csaved->runstack_start == share_csaved->runstack_start)) { - /* Share */ - isaved->prev = share_saved; - break; + if (!effective_prompt || (effective_prompt->runstack_boundary_start != runstack_start)) { + + /* Copy saved runstacks: */ + if (share_from) { + /* We can share all saved runstacks */ + share_csaved = share_from->runstack_saved; + share_saved = share_from->runstack_copied->prev; + } else { + share_saved = NULL; + share_csaved = NULL; } + isaved = saved; + for (csaved = p->runstack_saved; csaved; csaved = csaved->prev) { + if (share_csaved && (csaved->runstack_start == share_csaved->runstack_start)) { + /* Share */ + isaved->prev = share_saved; + break; + } - ss = MALLOC_ONE_RT(Scheme_Saved_Stack); + ss = MALLOC_ONE_RT(Scheme_Saved_Stack); #ifdef MZTAG_REQUIRED - ss->type = scheme_rt_saved_stack; + ss->type = scheme_rt_saved_stack; #endif - isaved->prev = ss; - isaved = ss; + isaved->prev = ss; + isaved = ss; - size = csaved->runstack_size - (csaved->runstack XFORM_OK_MINUS csaved->runstack_start); - isaved->runstack_size = size; + if (effective_prompt && (effective_prompt->runstack_boundary_start == csaved->runstack_start)) { + size = effective_prompt->runstack_boundary_offset - csaved->runstack_offset; + done = 1; + } else { + size = csaved->runstack_size - csaved->runstack_offset; + done = 0; + } - start = MALLOC_N(Scheme_Object*, size); - isaved->runstack_start = start; - memcpy(isaved->runstack_start, csaved->runstack, size * sizeof(Scheme_Object *)); + isaved->runstack_size = size; + + start = MALLOC_N(Scheme_Object*, size); + isaved->runstack_start = start; + memcpy(isaved->runstack_start, + csaved->runstack_start XFORM_OK_PLUS csaved->runstack_offset, + size * sizeof(Scheme_Object *)); + isaved->runstack_offset = csaved->runstack_offset; + + if (done) break; + } } return saved; @@ -3428,9 +3507,11 @@ static Scheme_Saved_Stack *copy_out_runstack(Scheme_Thread *p, static Scheme_Cont_Mark *copy_out_mark_stack(Scheme_Thread *p, MZ_MARK_STACK_TYPE pos, Scheme_Cont *sub_cont, - long *_offset) + long *_offset, + Scheme_Prompt *effective_prompt, + int clear_caches) { - long cmcount, offset = 0; + long cmcount, offset = 0, sub_count = 0; Scheme_Cont_Mark *cont_mark_stack_copied; /* Copy cont mark stack: */ @@ -3439,10 +3520,13 @@ static Scheme_Cont_Mark *copy_out_mark_stack(Scheme_Thread *p, if (sub_cont) { /* Rely on copy of marks in a tail of this continuation. */ - long sub_count = sub_cont->cont_mark_shareable; - cmcount -= sub_count; - offset += sub_count; + sub_count = sub_cont->cont_mark_shareable; + } else if (effective_prompt) { + /* Copy only marks since the prompt. */ + sub_count = effective_prompt->mark_boundary; } + cmcount -= sub_count; + offset += sub_count; if (_offset) *_offset = offset; @@ -3455,6 +3539,8 @@ static Scheme_Cont_Mark *copy_out_mark_stack(Scheme_Thread *p, Scheme_Cont_Mark *cm = seg + pos; memcpy(cont_mark_stack_copied + cmcount, cm, sizeof(Scheme_Cont_Mark)); + if (clear_caches) + cont_mark_stack_copied[cmcount].cache = NULL; } return cont_mark_stack_copied; @@ -3474,15 +3560,23 @@ static void copy_in_runstack(Scheme_Thread *p, Scheme_Saved_Stack *isaved, int s memcpy(MZ_RUNSTACK, isaved->runstack_start, size * sizeof(Scheme_Object *)); for (csaved = p->runstack_saved; csaved; csaved = csaved->prev) { isaved = isaved->prev; + if (!isaved) { + /* The saved stack can be shorter than the current stack if + there's a barrier prompt. */ + break; + } size = isaved->runstack_size; - csaved->runstack = csaved->runstack_start + (csaved->runstack_size - size); - memcpy(csaved->runstack, isaved->runstack_start, size * sizeof(Scheme_Object *)); + csaved->runstack_offset = isaved->runstack_offset; + memcpy(csaved->runstack_start XFORM_OK_PLUS csaved->runstack_offset, + isaved->runstack_start, + size * sizeof(Scheme_Object *)); } } static void copy_in_mark_stack(Scheme_Thread *p, Scheme_Cont_Mark *cont_mark_stack_copied, MZ_MARK_STACK_TYPE cms, MZ_MARK_STACK_TYPE base_cms, - long copied_offset, Scheme_Object **_sub_conts) + long copied_offset, Scheme_Object **_sub_conts, + int clear_caches) /* Copies in the mark stack up to depth cms, but assumes that the stack up to depth base_cms is already in place (probably in place for a dynamic-wind context in an continuation @@ -3534,7 +3628,7 @@ static void copy_in_mark_stack(Scheme_Thread *p, Scheme_Cont_Mark *cont_mark_sta while (base_cmcount < cmcount) { Scheme_Cont_Mark *seg = p->cont_mark_stack_segments[base_cmcount >> SCHEME_LOG_MARK_SEGMENT_SIZE]; long pos = base_cmcount & SCHEME_MARK_SEGMENT_MASK; - Scheme_Cont_Mark *cm = seg + pos; + GC_CAN_IGNORE Scheme_Cont_Mark *cm = seg + pos; cm_src = cont_mark_stack_copied; cmoffset = base_cmcount - copied_offset; @@ -3556,6 +3650,9 @@ static void copy_in_mark_stack(Scheme_Thread *p, Scheme_Cont_Mark *cont_mark_sta } memcpy(cm, cm_src + cmoffset, sizeof(Scheme_Cont_Mark)); + if (clear_caches) { + cm->cache = NULL; + } base_cmcount++; } @@ -3583,31 +3680,240 @@ static MZ_MARK_STACK_TYPE find_shareable_marks() return cmcount + 1 + delta; } -static Scheme_Cont_Mark **copy_out_segment_array(Scheme_Cont *sub_cont) +static Scheme_Overflow *clone_overflows(Scheme_Overflow *overflow, void *limit, Scheme_Overflow *tail) { - long cnt; - Scheme_Cont_Mark **orig; + Scheme_Overflow *naya, *first = NULL, *prev = NULL; - if (!MZ_CONT_MARK_STACK) - cnt = 0; - else - cnt = (((long)MZ_CONT_MARK_STACK - 1) >> SCHEME_LOG_MARK_SEGMENT_SIZE) + 1; - - if (sub_cont) { - /* Already saved this set? */ - int scnt; - if (!sub_cont->ss.cont_mark_stack) - scnt = 0; + for (; overflow && (!limit || (overflow->id != limit)); overflow = overflow->prev) { + naya = MALLOC_ONE_RT(Scheme_Overflow); + memcpy(naya, overflow, sizeof(Scheme_Overflow)); + if (prev) + prev->prev = naya; else - scnt = (((long)(sub_cont->ss.cont_mark_stack) - 1) >> SCHEME_LOG_MARK_SEGMENT_SIZE) + 1; - if (scnt == cnt) { - return sub_cont->orig_mark_segments; + first = naya; + prev = naya; + } + + if (first) { + prev->prev = tail; + return first; + } else + return tail; +} + +static Scheme_Dynamic_Wind *clone_dyn_wind(Scheme_Dynamic_Wind *dw, + Scheme_Object *limit_prompt_tag, int limit_depth, + Scheme_Dynamic_Wind *tail, + int composable) +{ + Scheme_Dynamic_Wind *naya, *first = NULL, *prev = NULL; + int cnt = 0; + + for (; dw; dw = dw->prev) { + if (dw->depth == limit_depth) + break; + if (composable && limit_prompt_tag && (dw->prompt_tag == limit_prompt_tag)) + break; + scheme_ensure_dw_id(dw); + naya = MALLOC_ONE_RT(Scheme_Dynamic_Wind); + memcpy(naya, dw, sizeof(Scheme_Dynamic_Wind)); + if (prev) + prev->prev = naya; + else + first = naya; + prev = naya; + cnt++; + if (limit_prompt_tag && (dw->prompt_tag == limit_prompt_tag)) + break; + } + if (first) { + prev->prev = tail; + if (tail) + cnt += tail->depth + 1; + for (dw = first; dw != tail; dw = dw->prev) { + dw->depth = --cnt; + } + return first; + } else + return tail; +} + +static void clear_cm_copy_caches(Scheme_Cont_Mark *cp, int cnt) +{ + int i; + for (i = 0; i < cnt; i++) { + cp[i].cache = NULL; + } +} + +static Scheme_Meta_Continuation *clone_meta_cont(Scheme_Meta_Continuation *mc, + Scheme_Object *limit_tag, int limit_depth, + Scheme_Meta_Continuation *prompt_cont, + Scheme_Prompt *prompt, + Scheme_Meta_Continuation *tail) +{ + Scheme_Meta_Continuation *naya, *first = NULL, *prev = NULL; + + for (; mc; mc = mc->next) { + if (!limit_depth--) + break; + if (!mc->pseudo && SAME_OBJ(mc->prompt_tag, limit_tag)) + break; + naya = MALLOC_ONE_RT(Scheme_Meta_Continuation); + memcpy(naya, mc, sizeof(Scheme_Meta_Continuation)); + if (SAME_OBJ(mc, prompt_cont)) { + /* Need only part of this meta-continuation's marks. */ + long delta; + delta = prompt->mark_boundary - naya->cont_mark_offset; + if (delta) { + naya->cont_mark_shareable -= delta; + naya->cont_mark_offset += delta; + if (naya->cont_mark_shareable) { + Scheme_Cont_Mark *cp; + cp = MALLOC_N(Scheme_Cont_Mark, naya->cont_mark_shareable); + memcpy(cp, mc->cont_mark_stack_copied + delta, naya->cont_mark_shareable * sizeof(Scheme_Cont_Mark)); + if (mc->cm_caches) { + clear_cm_copy_caches(cp, naya->cont_mark_shareable); + } + naya->cont_mark_stack_copied = cp; + naya->cm_caches = 0; + naya->cm_shared = 0; + } else + naya->cont_mark_stack_copied = NULL; + } + naya->cont_mark_pos_bottom = prompt->boundary_mark_pos; + } else { + if (!mc->cm_caches) { + mc->cm_shared = 1; + naya->cm_shared = 1; + } else { + Scheme_Cont_Mark *cp; + cp = MALLOC_N(Scheme_Cont_Mark, naya->cont_mark_shareable); + memcpy(cp, mc->cont_mark_stack_copied, naya->cont_mark_shareable * sizeof(Scheme_Cont_Mark)); + clear_cm_copy_caches(cp, naya->cont_mark_shareable); + naya->cont_mark_stack_copied = cp; + naya->cm_caches = 0; + naya->cm_shared = 0; + } + } + if (prev) + prev->next = naya; + else + first = naya; + prev = naya; + if (SAME_OBJ(mc, prompt_cont)) { + /* Don't need and meta-continuaton frames afterward. */ + break; } } - orig = (Scheme_Cont_Mark **)scheme_malloc(cnt * sizeof(Scheme_Cont_Mark*)); - memcpy(orig, scheme_current_thread->cont_mark_stack_segments, cnt * sizeof(Scheme_Cont_Mark*)); - return orig; + if (first) { + prev->next = tail; + return first; + } else + return tail; +} + +void prune_cont_marks(Scheme_Meta_Continuation *resume_mc, Scheme_Cont *cont, Scheme_Object *extra_marks) +{ + Scheme_Object *val; + Scheme_Hash_Table *ht; + long pos, num_overlap, num_coverlap, new_overlap, base, i; + Scheme_Cont_Mark *cp; + + for (pos = resume_mc->cont_mark_shareable, num_overlap = 0; + pos--; + num_overlap++) { + if (resume_mc->cont_mark_stack_copied[pos].pos != resume_mc->cont_mark_pos) + break; + } + + if (!num_overlap && (!extra_marks || !SCHEME_VEC_SIZE(extra_marks))) { + /* No pruning (nothing to prune) or addition needed. */ + return; + } + + for (pos = cont->cont_mark_shareable, num_coverlap = 0; + pos--; + num_coverlap++) { + if (cont->cont_mark_stack_copied[pos].pos != (cont->cont_mark_pos_bottom + 2)) + break; + } + + if (!num_coverlap && (!extra_marks || !SCHEME_VEC_SIZE(extra_marks))) { + /* No pruning (nothing to compare against) or addition needed. */ + return; + } + + /* Compute the new set to have in the meta-continuation. */ + ht = scheme_make_hash_table(SCHEME_hash_ptr); + + for (pos = resume_mc->cont_mark_shareable - 1, i = 0; i < num_overlap; i++, pos--) { + val = resume_mc->cont_mark_stack_copied[pos].val; + if (!val) + val = cont_key; + scheme_hash_set(ht, + resume_mc->cont_mark_stack_copied[pos].key, + val); + } + if (extra_marks) { + for (i = 0; i < SCHEME_VEC_SIZE(extra_marks); i += 2) { + val = SCHEME_VEC_ELS(extra_marks)[i+1]; + if (!val) + val = cont_key; + scheme_hash_set(ht, SCHEME_VEC_ELS(extra_marks)[i], val); + } + } + for (pos = cont->cont_mark_shareable - 1, i = 0; i < num_coverlap; i++, pos--) { + scheme_hash_set(ht, + cont->cont_mark_stack_copied[pos].key, + NULL); + } + + new_overlap = ht->count; + + /* Install changes: */ + base = resume_mc->cont_mark_shareable - num_overlap; + cp = MALLOC_N(Scheme_Cont_Mark, base + new_overlap); + memcpy(cp, resume_mc->cont_mark_stack_copied, base * sizeof(Scheme_Cont_Mark)); + resume_mc->cont_mark_stack_copied = cp; + resume_mc->cont_mark_shareable = base + new_overlap; + resume_mc->cm_shared = 0; + resume_mc->cont_mark_stack += (new_overlap - num_overlap); + for (i = 0; i < ht->size; i++) { + if (ht->vals[i]) { + cp[base].key = ht->keys[i]; + val = ht->vals[i]; + if (SAME_OBJ(val, cont_key)) + val = NULL; + cp[base].val = val; + cp[base].pos = resume_mc->cont_mark_pos; + cp[base].cache = NULL; + base++; + } + } +} + +Scheme_Saved_Stack *clone_runstack_saved(Scheme_Saved_Stack *saved, Scheme_Object **boundary_start) +{ + Scheme_Saved_Stack *naya, *first = NULL, *prev = NULL; + + while (saved) { + naya = MALLOC_ONE_RT(Scheme_Saved_Stack); + memcpy(naya, saved, sizeof(Scheme_Saved_Stack)); + if (prev) + prev->prev = naya; + else + first = naya; + prev = naya; + if (saved->runstack_start == boundary_start) + break; + saved = saved->prev; + } + if (prev) + prev->prev = NULL; + + return first; } static Scheme_Object * @@ -3615,25 +3921,523 @@ call_cc (int argc, Scheme_Object *argv[]) { scheme_check_proc_arity("call-with-current-continuation", 1, 0, argc, argv); + if (argc > 1) { + if (!SAME_TYPE(scheme_prompt_tag_type, SCHEME_TYPE(argv[1]))) { + scheme_wrong_type("call-with-current-continuation", "continuation-prompt-tag", + 1, argc, argv); + } + } /* Trampoline to internal_call_cc. This trampoline ensures that the runstack is flushed before we try to grab the continuation. */ return _scheme_tail_apply(internal_call_cc_prim, argc, argv); } +static Scheme_Cont *grab_continuation(Scheme_Thread *p, int for_prompt, int composable, + Scheme_Object *prompt_tag, + Scheme_Cont *sub_cont, Scheme_Prompt *prompt, + Scheme_Meta_Continuation *prompt_cont) +{ + Scheme_Cont *cont; + Scheme_Prompt *effective_prompt; + + cont = MALLOC_ONE_TAGGED(Scheme_Cont); + cont->so.type = scheme_cont_type; + + if (!for_prompt && !composable) { + /* Set cont_key mark before capturing marks: */ + scheme_set_cont_mark(cont_key, (Scheme_Object *)cont); + } + + if (composable) + cont->composable = 1; + + scheme_init_jmpup_buf(&cont->buf); + p->barrier_prompt->is_captured = 1; + cont->prompt_tag = prompt_tag; + cont->prompt_depth = (prompt ? prompt->depth : 0); + if (prompt) { + Scheme_Dynamic_Wind *dw; + if (p->dw) { + dw = clone_dyn_wind(p->dw, prompt_tag, -1, NULL, composable); + cont->dw = dw; + } else + cont->dw = NULL; + } else + cont->dw = p->dw; + if (!for_prompt) + ASSERT_SUSPEND_BREAK_ZERO(); + copy_cjs(&cont->cjs, &p->cjs); + cont->save_overflow = p->overflow; + scheme_save_env_stack_w_thread(cont->ss, p); + cont->runstack_size = p->runstack_size; + cont->runstack_start = MZ_RUNSTACK_START; + cont->runstack_saved = p->runstack_saved; + cont->meta_tail_pos = (prompt ? prompt->boundary_mark_pos + 2 : 0); + cont->init_config = p->init_config; + cont->init_break_cell = p->init_break_cell; + if (prompt) { + Scheme_Meta_Continuation *mc; + mc = clone_meta_cont(p->meta_continuation, prompt_tag, -1, prompt_cont, prompt, NULL); + cont->meta_continuation = mc; + } else + cont->meta_continuation = p->meta_continuation; + + effective_prompt = p->barrier_prompt; + if (p->meta_prompt && prompt_cont) + prompt = p->meta_prompt; + if (prompt) { + if (prompt->depth > effective_prompt->depth) + effective_prompt = prompt; + } + + { + Scheme_Overflow *overflow; + /* Mark overflows as captured: */ + for (overflow = p->overflow; overflow; overflow = overflow->prev) { + overflow->jmp->captured = 1; + } + /* If prompt, then clone overflow records up to the prompt. */ + if (prompt) { + overflow = clone_overflows(p->overflow, prompt->boundary_overflow_id, NULL); + cont->save_overflow = overflow; + } + } + scheme_cont_capture_count++; + + if (!effective_prompt->is_barrier) { + /* This continuation can be used by other threads, + so we need to track ownership of the runstack */ + if (!p->runstack_owner) { + Scheme_Thread **owner; + owner = MALLOC_N(Scheme_Thread *, 1); + p->runstack_owner = owner; + *owner = p; + } + if (p->cont_mark_stack && !p->cont_mark_stack_owner) { + Scheme_Thread **owner; + owner = MALLOC_N(Scheme_Thread *, 1); + p->cont_mark_stack_owner = owner; + *owner = p; + } + } + +#ifdef MZ_USE_JIT + { + Scheme_Object *tr; + tr = scheme_native_stack_trace(); + cont->native_trace = tr; + } +#endif + + { + Scheme_Saved_Stack *saved; + saved = copy_out_runstack(p, MZ_RUNSTACK, MZ_RUNSTACK_START, sub_cont, effective_prompt); + cont->runstack_copied = saved; + if (prompt) { + /* Prune cont->runstack_saved to drop unneeded saves. */ + if (prompt->runstack_boundary_start == MZ_RUNSTACK_START) + saved = NULL; + else + saved = clone_runstack_saved(cont->runstack_saved, + prompt->runstack_boundary_start); + cont->runstack_saved = saved; + } + } + + { + Scheme_Cont_Mark *msaved; + long offset; + msaved = copy_out_mark_stack(p, cont->ss.cont_mark_stack, sub_cont, &offset, + (for_prompt + ? p->meta_prompt + /* Since continuation marks can be inspected in a + captured continuation, the only effective prompt + is a real prompt: */ + : prompt), + /* If there's a prompt, then clear caches in the mark stack, + since any cached values are wrong for the delimited + continuation. Otherwise, leave the cache in place + for operations directly on the continuation; the caches + will be cleared on restore if the continuation is appended + to another on invocation. */ + !!prompt); + cont->cont_mark_stack_copied = msaved; + cont->cont_mark_offset = offset; + if (sub_cont) + offset = find_shareable_marks(); + else + offset = (long)cont->ss.cont_mark_stack - offset; + cont->cont_mark_shareable = offset; + /* Need to remember the pos key for the bottom, + at least for composable continuations, so + we can splice the captured continuation marks + with a meta continuation's marks. */ + cont->cont_mark_pos_bottom = (for_prompt + ? (p->meta_prompt + ? p->meta_prompt->boundary_mark_pos + : 1) + : (prompt + ? prompt->boundary_mark_pos + : 1)); + } + + cont->runstack_owner = p->runstack_owner; + cont->cont_mark_stack_owner = p->cont_mark_stack_owner; + + cont->stack_start = p->stack_start; + + cont->savebuf = p->error_buf; + + if (prompt) + cont->prompt_buf = prompt->prompt_buf; + + return cont; +} + +static void restore_continuation(Scheme_Cont *cont, Scheme_Thread *p, int for_prompt, + Scheme_Object *result, Scheme_Overflow *resume, + Scheme_Object *prompt_tag, Scheme_Cont *sub_cont, + int clear_cm_caches, int do_reset_cjs, + Scheme_Cont *cm_cont, Scheme_Object *extra_marks) +{ + MZ_MARK_STACK_TYPE copied_cms = 0; + Scheme_Object **mv, *sub_conts = NULL; + int mc; + + if (SAME_OBJ(result, SCHEME_MULTIPLE_VALUES)) { + /* Get values out before GC */ + mv = p->ku.multiple.array; + mc = p->ku.multiple.count; + if (SAME_OBJ(mv, p->values_buffer)) + p->values_buffer = NULL; + } else { + mv = NULL; + mc = 0; + } + + p->error_buf = cont->savebuf; + + p->init_config = cont->init_config; + p->init_break_cell = cont->init_break_cell; + + if (do_reset_cjs) + copy_cjs(&p->cjs, &cont->cjs); + p->overflow = cont->save_overflow; + { + Scheme_Meta_Continuation *mc, *resume_mc; + if (resume) { + resume_mc = MALLOC_ONE_RT(Scheme_Meta_Continuation); +#ifdef MZTAG_REQUIRED + resume_mc->type = scheme_rt_meta_cont; +#endif + resume_mc->overflow = resume; + + resume_mc->prompt_tag = prompt_tag; + resume_mc->pseudo = cont->composable; + resume_mc->meta_tail_pos = cont->meta_tail_pos; + + if (!cm_cont) { + /* resume must correspond to the pseudo-prompt at + the thread's beginning. */ + } else { + resume_mc->cont_mark_stack = cm_cont->ss.cont_mark_stack; + resume_mc->cont_mark_pos = cm_cont->ss.cont_mark_pos; + resume_mc->cont_mark_shareable = cm_cont->cont_mark_shareable; + resume_mc->cont_mark_offset = cm_cont->cont_mark_offset; + resume_mc->cont_mark_pos_bottom = cm_cont->cont_mark_pos_bottom; + resume_mc->cont_mark_stack_copied = cm_cont->cont_mark_stack_copied; + + resume_mc->cm_caches = 1; /* conservative assumption */ + + resume_mc->next = p->meta_continuation; + } + } else + resume_mc = NULL; + if (resume_mc) { + if (cont->composable) { + /* Prune resume_mc continuation marks that have replacements + in the deepest frame of cont, and add extra_marks */ + prune_cont_marks(resume_mc, cont, extra_marks); + } + + mc = clone_meta_cont(cont->meta_continuation, NULL, -1, NULL, NULL, resume_mc); + } else + mc = cont->meta_continuation; + p->meta_continuation = mc; + } + p->runstack_saved = cont->runstack_saved; + MZ_RUNSTACK_START = cont->runstack_start; + p->runstack_size = cont->runstack_size; + scheme_restore_env_stack_w_thread(cont->ss, p); + + if (p->runstack_owner + && (*p->runstack_owner == p)) + *p->runstack_owner = NULL; + + p->runstack_owner = cont->runstack_owner; + if (p->runstack_owner && (*p->runstack_owner != p)) { + Scheme_Thread *op; + op = *p->runstack_owner; + if (op) { + Scheme_Saved_Stack *saved; + saved = copy_out_runstack(op, op->runstack, op->runstack_start, NULL, NULL); + op->runstack_swapped = saved; + } + *p->runstack_owner = p; + } + + /* Copy stack back in: p->runstack and p->runstack_saved arrays + are already restored, so the shape is certainly the same as + when cont->runstack_copied was made. If we have a derived + continuation, then we're sharing it's base runstack. */ + copy_in_runstack(p, cont->runstack_copied, 0); + { + long done = cont->runstack_copied->runstack_size, size; + sub_cont = cont; + while (sub_cont) { + if (sub_cont->buf.cont + && (sub_cont->runstack_start == sub_cont->buf.cont->runstack_start)) { + /* Copy shared part in: */ + sub_cont = sub_cont->buf.cont; + size = sub_cont->runstack_copied->runstack_size; + if (size) { + /* Skip the first item, since that's the call/cc argument, + which we don't want from the outer continuation. */ + memcpy(MZ_RUNSTACK XFORM_OK_PLUS done, + sub_cont->runstack_copied->runstack_start + 1, + (size - 1) * sizeof(Scheme_Object *)); + done += (size - 1); + } + } else + break; + } + } + + if (p->cont_mark_stack_owner + && (*p->cont_mark_stack_owner == p)) + *p->cont_mark_stack_owner = NULL; + + p->cont_mark_stack_owner = cont->cont_mark_stack_owner; + if (p->cont_mark_stack_owner + && (*p->cont_mark_stack_owner != p)) { + Scheme_Thread *op; + op = *p->cont_mark_stack_owner; + if (op) { + Scheme_Cont_Mark *msaved; + msaved = copy_out_mark_stack(op, op->cont_mark_stack, NULL, NULL, NULL, 0); + op->cont_mark_stack_swapped = msaved; + } + *p->cont_mark_stack_owner = p; + /* In case there's a GC before we copy in marks: */ + MZ_CONT_MARK_STACK = 0; + } + + /* If there's a resume, then set up a meta prompt: */ + if (resume) { + Scheme_Prompt *meta_prompt; + + meta_prompt = MALLOC_ONE_TAGGED(Scheme_Prompt); + meta_prompt->so.type = scheme_prompt_type; + meta_prompt->depth = p->barrier_prompt->depth + 1; + meta_prompt->stack_boundary = cont->prompt_stack_start; + meta_prompt->boundary_overflow_id = NULL; + { + Scheme_Cont *tc; + for (tc = cont; tc->buf.cont; tc = tc->buf.cont) { + } + meta_prompt->mark_boundary = tc->cont_mark_offset; + } + meta_prompt->boundary_dw_id = (cont->dw ? cont->dw->id : NULL); + meta_prompt->prompt_buf = cont->prompt_buf; + { + /* Reverse-engineer where the saved runstack ends: */ + Scheme_Cont *rs_cont = cont; + Scheme_Saved_Stack *saved, *actual; + while (rs_cont->buf.cont) { + rs_cont = rs_cont->buf.cont; + } + actual = NULL; + for (saved = rs_cont->runstack_copied; saved->prev; saved = saved->prev) { + if (!actual) + actual = p->runstack_saved; + else + actual = actual->prev; + } + if (actual) { + meta_prompt->runstack_boundary_start = actual->runstack_start; + meta_prompt->runstack_boundary_offset = actual->runstack_offset + saved->runstack_size; + } else { + meta_prompt->runstack_boundary_start = MZ_RUNSTACK_START; + meta_prompt->runstack_boundary_offset = (MZ_RUNSTACK - MZ_RUNSTACK_START) + saved->runstack_size; + } + } + + p->meta_prompt = meta_prompt; + } + + /* For copying cont marks back in, we need a list of sub_conts, + deepest to shallowest: */ + copied_cms = cont->cont_mark_offset; + for (sub_cont = cont->buf.cont; sub_cont; sub_cont = sub_cont->buf.cont) { + copied_cms = sub_cont->cont_mark_offset; + sub_conts = scheme_make_raw_pair((Scheme_Object *)sub_cont, sub_conts); + } + + { + Scheme_Cont *tc; + for (tc = cont; tc->buf.cont; tc = tc->buf.cont) { + } + p->cont_mark_stack_bottom = tc->cont_mark_offset; + p->cont_mark_pos_bottom = tc->cont_mark_pos_bottom; + } + + /* For dynamic-winds after the "common" intersection + (see eval.c), execute the pre thunks. Make a list + of these first because they have to be done in the + inverse order of `prev' linkage. */ + if (for_prompt) { + p->dw = cont->dw; + } else if (cont->dw) { + Scheme_Dynamic_Wind *dw, *all_dw; + Scheme_Dynamic_Wind_List *dwl = NULL; + int common_depth, meta_depth = 0; + + /* The thread's dw is set to the common dw. */ + + if (resume) { + /* Figure out which dynamic winds use the meta-continuation, + and mark them (functionally, which means cloning some + records). */ + if (cont->composable) { + if (p->dw) { + /* All of them! */ + all_dw = clone_dyn_wind(p->dw, NULL, p->dw->depth - 1, p->dw->prev, 0); + all_dw->next_meta++; + p->dw = all_dw; + } + } else { + /* After tag */ + if (p->dw) { /* can be empty if there's only the pseudo-prompt */ + all_dw = clone_dyn_wind(p->dw, cont->prompt_tag, -1, NULL, 0); + for (dw = all_dw; dw->prev; dw = dw->prev) { + p->dw = p->dw->prev; + } + dw->next_meta++; + dw->prev = p->dw->prev; + p->dw = all_dw; + } + } + } + + common_depth = (p->dw ? p->dw->depth : -1); + all_dw = clone_dyn_wind(cont->dw, NULL, cont->common_dw_depth, p->dw, 0); + + for (dw = all_dw; dw && (dw->depth != common_depth); dw = dw->prev) { + Scheme_Dynamic_Wind_List *cell; + + meta_depth += dw->next_meta; + + cell = MALLOC_ONE_RT(Scheme_Dynamic_Wind_List); +#ifdef MZTAG_REQUIRED + cell->type = scheme_rt_dyn_wind_cell; +#endif + cell->dw = dw; + cell->meta_depth = meta_depth; + cell->next = dwl; + dwl = cell; + } + for (; dwl; dwl = dwl->next) { + if (dwl->dw->pre) { + p->dw = dwl->dw->prev; + if (dwl->meta_depth) { + scheme_apply_dw_in_meta(dwl->dw, 0, dwl->meta_depth); + } else { + /* Restore the needed part of the mark stack for this + dynamic-wind context. Clear cached info on restore + if there's a prompt. */ + DW_PrePost_Proc pre = dwl->dw->pre; + MZ_CONT_MARK_POS = dwl->dw->envss.cont_mark_pos; + MZ_CONT_MARK_STACK = dwl->dw->envss.cont_mark_stack; + copy_in_mark_stack(p, cont->cont_mark_stack_copied, + MZ_CONT_MARK_STACK, copied_cms, + cont->cont_mark_offset, &sub_conts, + clear_cm_caches); + copied_cms = MZ_CONT_MARK_STACK; + + pre(dwl->dw->data); + } + p = scheme_current_thread; + } + } + p->dw = all_dw; + } + + if (!for_prompt) + p->suspend_break = 0; + + /* Finish copying cont mark stack back in. */ + + MZ_CONT_MARK_POS = cont->ss.cont_mark_pos; + MZ_CONT_MARK_STACK = cont->ss.cont_mark_stack; + copy_in_mark_stack(p, cont->cont_mark_stack_copied, + MZ_CONT_MARK_STACK, copied_cms, + cont->cont_mark_offset, &sub_conts, + clear_cm_caches); + + if (SAME_OBJ(result, SCHEME_MULTIPLE_VALUES)) { + p->ku.multiple.array = mv; + p->ku.multiple.count = mc; + } +} + static Scheme_Object * internal_call_cc (int argc, Scheme_Object *argv[]) { - Scheme_Object *ret; + Scheme_Object *ret, * volatile prompt_tag; Scheme_Cont * volatile cont; Scheme_Cont *sub_cont; - Scheme_Dynamic_Wind *dw; + Scheme_Meta_Continuation *prompt_cont; Scheme_Thread *p = scheme_current_thread; - Scheme_Saved_Stack *saved; - Scheme_Cont_Mark *msaved; + Scheme_Prompt *prompt; + GC_CAN_IGNORE void *stack_start; + int composable; - sub_cont = (Scheme_Cont *)scheme_extract_one_cc_mark(NULL, cont_key); - if (sub_cont && (sub_cont->save_overflow != p->overflow)) + if (argc > 1) + prompt_tag = argv[1]; + else + prompt_tag = scheme_default_prompt_tag; + + composable = (argc > 2); + + prompt = (Scheme_Prompt *)scheme_extract_one_cc_mark_with_meta(NULL, SCHEME_PTR_VAL(prompt_tag), + NULL, &prompt_cont); + if (!prompt && !SAME_OBJ(scheme_default_prompt_tag, prompt_tag)) { + scheme_arg_mismatch((composable + ? "call-with-composable-continuation" + : "call-with-current-continuation"), + "continuation includes no prompt with the given tag: ", + prompt_tag); + return NULL; + } + if (composable) { + if (!prompt && !p->barrier_prompt->is_barrier) { + /* Pseduo-prompt ok. */ + } else { + if (p->barrier_prompt->depth >= (prompt ? prompt->depth : 0)) { + scheme_raise_exn(MZEXN_FAIL_CONTRACT_CONTINUATION, + "call-with-composable-continuation: cannot capture past continuation barrier"); + } + } + } + + if (composable) + sub_cont = NULL; + else + sub_cont = (Scheme_Cont *)scheme_extract_one_cc_mark(NULL, cont_key); + if (sub_cont && ((sub_cont->save_overflow != p->overflow) + || (sub_cont->prompt_tag != prompt_tag) + || (sub_cont->ss.barrier_prompt != p->barrier_prompt))) sub_cont = NULL; if (sub_cont && (sub_cont->ss.cont_mark_pos == MZ_CONT_MARK_POS)) { Scheme_Object *argv2[1]; @@ -3659,6 +4463,7 @@ internal_call_cc (int argc, Scheme_Object *argv[]) } else { /* Only continuation marks can be different. Mostly just re-use sub_cont. */ long offset; + Scheme_Cont_Mark *msaved; cont = MALLOC_ONE_TAGGED(Scheme_Cont); cont->so.type = scheme_cont_type; @@ -3668,7 +4473,7 @@ internal_call_cc (int argc, Scheme_Object *argv[]) /* This mark stack won't be restored, but it may be used by `continuation-marks'. */ cont->ss.cont_mark_stack = MZ_CONT_MARK_STACK; - msaved = copy_out_mark_stack(p, cont->ss.cont_mark_stack, sub_cont, &offset); + msaved = copy_out_mark_stack(p, cont->ss.cont_mark_stack, sub_cont, &offset, NULL, 0); cont->cont_mark_stack_copied = msaved; cont->cont_mark_offset = offset; offset = find_shareable_marks(); @@ -3682,273 +4487,88 @@ internal_call_cc (int argc, Scheme_Object *argv[]) return _scheme_tail_apply(argv[0], 1, argv2); } - cont = MALLOC_ONE_TAGGED(Scheme_Cont); - cont->so.type = scheme_cont_type; - - /* Set cont_key mark before capturing marks: */ - scheme_set_cont_mark(cont_key, (Scheme_Object *)cont); - - scheme_init_jmpup_buf(&cont->buf); - cont->ok = p->cc_ok; - *(p->cc_ok) = 2; /* Marks it as used */ - cont->dw = p->dw; - cont->suspend_break = p->suspend_break; - copy_cjs(&cont->cjs, &p->cjs); - cont->save_overflow = p->overflow; - cont->save_overflow_buf = p->overflow_buf; - scheme_save_env_stack_w_thread(cont->ss, p); - cont->init_config = p->init_config; - cont->init_break_cell = p->init_break_cell; - - { - Scheme_Overflow *overflow; - /* Mark overflows as captured: */ - for (overflow = p->overflow; overflow && !overflow->captured; overflow = overflow->prev) { - overflow->captured = 1; - } - } - scheme_cont_capture_count++; - - if (p->cc_ok == thread_init_cc_ok) { - /* This continuation can be used by other threads, - so we need to track ownership of the runstack */ - if (!p->runstack_owner) { - Scheme_Thread **owner; - owner = MALLOC_N(Scheme_Thread *, 1); - p->runstack_owner = owner; - *owner = p; - } - if (p->cont_mark_stack && !p->cont_mark_stack_owner) { - Scheme_Thread **owner; - owner = MALLOC_N(Scheme_Thread *, 1); - p->cont_mark_stack_owner = owner; - *owner = p; - } - } - -#ifdef MZ_USE_JIT - ret = scheme_native_stack_trace(); - cont->native_trace = ret; -#endif - - saved = copy_out_runstack(p, MZ_RUNSTACK, MZ_RUNSTACK_START, sub_cont); - cont->runstack_copied = saved; - { - long offset; - msaved = copy_out_mark_stack(p, cont->ss.cont_mark_stack, sub_cont, &offset); - cont->cont_mark_stack_copied = msaved; - cont->cont_mark_offset = offset; - offset = find_shareable_marks(); - cont->cont_mark_shareable = offset; - } - - /* Remember the original mark-stack segments. */ - { - Scheme_Cont_Mark **orig; - orig = copy_out_segment_array(sub_cont); - cont->orig_mark_segments = orig; - } - - cont->runstack_owner = p->runstack_owner; - cont->cont_mark_stack_owner = p->cont_mark_stack_owner; - - cont->stack_start = p->stack_start; - cont->o_start = p->o_start; - - cont->savebuf = p->error_buf; + cont = grab_continuation(p, 0, composable, prompt_tag, sub_cont, prompt, prompt_cont); scheme_zero_unneeded_rands(p); scheme_flatten_config(scheme_current_config()); - if (scheme_setjmpup_relative(&cont->buf, cont, p->next ? p->stack_start : p->o_start, sub_cont)) { + { + void *overflow_id; + + overflow_id = (p->overflow + ? (p->overflow->id + ? p->overflow->id + : p->overflow) + : NULL); + + if (prompt + && !prompt_cont + && (prompt->boundary_overflow_id == overflow_id)) { + /* Must be inside barrier_prompt, or it wouldn't be allowed. + Must be inside meta_prompt, or prompt_cont would be non-NULL. + Must be inside overflow, or the ids wouldn't match. */ + stack_start = prompt->stack_boundary; + } else { + Scheme_Prompt *barrier_prompt, *meta_prompt; + + barrier_prompt = p->barrier_prompt; + if (!barrier_prompt->is_barrier) + barrier_prompt = NULL; + else if (barrier_prompt->boundary_overflow_id != overflow_id) + barrier_prompt = NULL; + meta_prompt = p->meta_prompt; + if (meta_prompt) + if (meta_prompt->boundary_overflow_id != overflow_id) + meta_prompt = NULL; + + if (barrier_prompt && meta_prompt) { + if (meta_prompt->depth < barrier_prompt->depth) + meta_prompt = NULL; + else + barrier_prompt = NULL; + } + + if (barrier_prompt) + stack_start = barrier_prompt->stack_boundary; + else if (meta_prompt) + stack_start = meta_prompt->stack_boundary; + else + stack_start = ADJUST_STACK_START(p->stack_start); + } + } + + /* Use cont->stack_start when calling `cont' directly + from the same meta-continuation. Use cont->prompt_stack_start + when calling `cont' composably (i.e., when supplying a resume). */ + cont->prompt_stack_start = stack_start; + + if (scheme_setjmpup_relative(&cont->buf, cont, stack_start, sub_cont)) { /* We arrive here when the continuation is applied */ - MZ_MARK_STACK_TYPE copied_cms = 0; - Scheme_Object *result, **mv, *sub_conts = NULL; - int mc; - - result = cont->value; - cont->value = NULL; + Scheme_Object *result, *extra_marks; + Scheme_Overflow *resume; + Scheme_Cont *use_next_cont; p = scheme_current_thread; /* maybe different than before */ - if (SAME_OBJ(result, SCHEME_MULTIPLE_VALUES)) { - /* Get values out before GC */ - mv = p->ku.multiple.array; - mc = p->ku.multiple.count; - if (SAME_OBJ(mv, p->values_buffer)) - p->values_buffer = NULL; - } else { - mv = NULL; - mc = 0; - } - - p->error_buf = cont->savebuf; - - p->stack_start = cont->stack_start; - p->o_start = cont->o_start; - p->init_config = cont->init_config; - p->init_break_cell = cont->init_break_cell; - - p->suspend_break = cont->suspend_break; + result = cont->value; + cont->value = NULL; - copy_cjs(&p->cjs, &cont->cjs); - p->overflow_buf = cont->save_overflow_buf; - p->overflow = cont->save_overflow; - scheme_restore_env_stack_w_thread(cont->ss, p); + resume = cont->resume_to; + cont->resume_to = NULL; - if (p->runstack_owner - && (*p->runstack_owner == p)) - *p->runstack_owner = NULL; + use_next_cont = cont->use_next_cont; + cont->use_next_cont = NULL; + + extra_marks = cont->extra_marks; + cont->extra_marks = NULL; + + restore_continuation(cont, p, 0, result, resume, prompt_tag, sub_cont, !!resume, 1, + use_next_cont, extra_marks); - p->runstack_owner = cont->runstack_owner; - if (p->runstack_owner && (*p->runstack_owner != p)) { - Scheme_Thread *op; - op = *p->runstack_owner; - if (op) { - saved = copy_out_runstack(op, op->runstack, op->runstack_start, NULL); - op->runstack_swapped = saved; - } - *p->runstack_owner = p; - } - - /* Copy stack back in: p->runstack and p->runstack_saved arrays - are already restored, so the shape is certainly the same as - when cont->runstack_copied was made. If we have a derived - continuation, then we're sharing it's base runstack. */ - copy_in_runstack(p, cont->runstack_copied, 0); - { - long done = cont->runstack_copied->runstack_size, size; - sub_cont = cont; - while (sub_cont) { - if (sub_cont->buf.cont - && (sub_cont->ss.runstack_start == sub_cont->buf.cont->ss.runstack_start)) { - /* Copy shared part in: */ - sub_cont = sub_cont->buf.cont; - size = sub_cont->runstack_copied->runstack_size; - if (size) { - /* Skip the first item, since that's the call/cc argument, - which we don't want from the outer continuation. */ - memcpy(MZ_RUNSTACK XFORM_OK_PLUS done, - sub_cont->runstack_copied->runstack_start + 1, - (size - 1) * sizeof(Scheme_Object *)); - done += (size - 1); - } - } else - break; - } - } - - if (p->cont_mark_stack_owner - && (*p->cont_mark_stack_owner == p)) - *p->cont_mark_stack_owner = NULL; - - p->cont_mark_stack_owner = cont->cont_mark_stack_owner; - if (p->cont_mark_stack_owner - && (*p->cont_mark_stack_owner != p)) { - Scheme_Thread *op; - op = *p->cont_mark_stack_owner; - if (op) { - msaved = copy_out_mark_stack(op, op->cont_mark_stack, NULL, NULL); - op->cont_mark_stack_swapped = msaved; - } - *p->cont_mark_stack_owner = p; - /* In case there's a GC before we copy in marks: */ - MZ_CONT_MARK_STACK = 0; - } - - /* For copying cont marks back in, we need a list of sub_conts, - deepest to shallowest: */ - for (sub_cont = cont->buf.cont; sub_cont; sub_cont = sub_cont->buf.cont) { - sub_conts = scheme_make_raw_pair((Scheme_Object *)sub_cont, sub_conts); - } - - /* For dynamic-winds after the "common" intersection - (see eval.c), execute the pre thunks. Make a list - of these first because they have to be done in the - inverse order of `prev' linkage. */ - if (cont->dw) { - Scheme_Dynamic_Wind_List *dwl = NULL; - - p->suspend_break++; - for (dw = cont->dw; dw != cont->common; dw = dw->prev) { - Scheme_Dynamic_Wind_List *cell; - - cell = MALLOC_ONE_RT(Scheme_Dynamic_Wind_List); -#ifdef MZTAG_REQUIRED - cell->type = scheme_rt_dyn_wind_cell; -#endif - cell->dw = dw; - cell->next = dwl; - dwl = cell; - } - for (; dwl; dwl = dwl->next) { - if (dwl->dw->pre) { - DW_PrePost_Proc pre = dwl->dw->pre; - - /* Restore the needed part of the mark stack for this - dynamic-wind context. */ - MZ_CONT_MARK_POS = dwl->dw->envss.cont_mark_pos; - MZ_CONT_MARK_STACK = dwl->dw->envss.cont_mark_stack; - copy_in_mark_stack(p, cont->cont_mark_stack_copied, - MZ_CONT_MARK_STACK, copied_cms, - cont->cont_mark_offset, &sub_conts); - copied_cms = MZ_CONT_MARK_STACK; - - p->dw = dwl->dw->prev; - pre(dwl->dw->data); - p = scheme_current_thread; - } - } - --p->suspend_break; - } - - p->dw = cont->dw; - - /* Finish copying cont mark stack back in. */ - - MZ_CONT_MARK_POS = cont->ss.cont_mark_pos; - MZ_CONT_MARK_STACK = cont->ss.cont_mark_stack; - copy_in_mark_stack(p, cont->cont_mark_stack_copied, - MZ_CONT_MARK_STACK, copied_cms, - cont->cont_mark_offset, &sub_conts); - - /* If any mark-stack segment is different now than before, then - set the cache field of the *original* mark segment. Setting the - cache field ensures that any `pm' pointer in scheme_do_eval - will get reset to point to the new segment. */ - { - long cnt, i, j; - Scheme_Cont_Mark *cm; - if (!MZ_CONT_MARK_STACK) - cnt = 0; - else - cnt = (((long)MZ_CONT_MARK_STACK - 1) >> SCHEME_LOG_MARK_SEGMENT_SIZE) + 1; - for (i = 0; i < cnt; i++) { - if (cont->orig_mark_segments[i] != p->cont_mark_stack_segments[i]) { - if (i + 1 == cnt) { - j = ((long)MZ_CONT_MARK_STACK) & SCHEME_MARK_SEGMENT_MASK; - } else { - j = SCHEME_MARK_SEGMENT_SIZE; - } - while (j--) { - cm = cont->orig_mark_segments[i] + j; - if (SAME_OBJ(cm->key, scheme_stack_dump_key)) { - cm->cache = scheme_false; - } - } - } - } - } - /* We may have just re-activated breaking: */ scheme_check_break_now(); - - if (SAME_OBJ(result, SCHEME_MULTIPLE_VALUES)) { - p->ku.multiple.array = mv; - p->ku.multiple.count = mc; - } - + return result; } else { Scheme_Object *argv2[1]; @@ -3971,7 +4591,7 @@ void scheme_takeover_stacks(Scheme_Thread *p) Scheme_Saved_Stack *swapped; op = *p->runstack_owner; if (op) { - swapped = copy_out_runstack(op, op->runstack, op->runstack_start, NULL); + swapped = copy_out_runstack(op, op->runstack, op->runstack_start, NULL, NULL); op->runstack_swapped = swapped; } *(p->runstack_owner) = p; @@ -3984,11 +4604,11 @@ void scheme_takeover_stacks(Scheme_Thread *p) Scheme_Cont_Mark *swapped; op = *p->cont_mark_stack_owner; if (op) { - swapped = copy_out_mark_stack(op, op->cont_mark_stack, NULL, NULL); + swapped = copy_out_mark_stack(op, op->cont_mark_stack, NULL, NULL, NULL, 0); op->cont_mark_stack_swapped = swapped; } *(p->cont_mark_stack_owner) = p; - copy_in_mark_stack(p, p->cont_mark_stack_swapped, MZ_CONT_MARK_STACK, 0, 0, NULL); + copy_in_mark_stack(p, p->cont_mark_stack_swapped, MZ_CONT_MARK_STACK, 0, 0, NULL, 0); p->cont_mark_stack_swapped = NULL; } } @@ -4001,126 +4621,954 @@ call_with_continuation_barrier (int argc, Scheme_Object *argv[]) return scheme_apply(argv[0], 0, NULL); } - -static Scheme_Object *continuation_marks(Scheme_Thread *p, - Scheme_Object *_cont, - Scheme_Object *econt, - int just_chain) - /* cont => p is not used */ +static Scheme_Object *make_prompt_tag (int argc, Scheme_Object *argv[]) { - Scheme_Cont *cont = (Scheme_Cont *)_cont; - Scheme_Cont_Mark_Chain *first = NULL, *last = NULL; - Scheme_Cont_Mark_Set *set; - Scheme_Object *cache, *nt; - long findpos; - long cmpos, cdelta = 0; + Scheme_Object *o, *key; - if (cont) { - findpos = (long)cont->ss.cont_mark_stack; - cmpos = (long)cont->ss.cont_mark_pos; - if (cont->buf.cont) { - if (cont->runstack_copied) - cdelta = cont->buf.cont->cont_mark_shareable; - else { - /* Current cont was just a mark-stack variation of - next cont, so skip the next cont. */ - if (cont->buf.cont->buf.cont) - cdelta = cont->buf.cont->buf.cont->cont_mark_shareable; - } - } - } else if (econt) { - findpos = (long)((Scheme_Escaping_Cont *)econt)->envss.cont_mark_stack; - cmpos = (long)((Scheme_Escaping_Cont *)econt)->envss.cont_mark_pos; - } else { - findpos = (long)MZ_CONT_MARK_STACK; - cmpos = (long)MZ_CONT_MARK_POS; - if (!p->cont_mark_stack_segments) - findpos = 0; + if (argc && !SCHEME_SYMBOLP(argv[0])) + scheme_wrong_type("make-continuation-prompt-tag", "symbol", 0, argc, argv); + + key = scheme_make_pair(scheme_false, scheme_false); + + o = scheme_alloc_object(); + o->type = scheme_prompt_tag_type; + SCHEME_CAR(o) = key; + SCHEME_CDR(o) = (argc ? argv[0] : NULL); + + return o; +} + +static Scheme_Object *get_default_prompt_tag (int argc, Scheme_Object *argv[]) +{ + return scheme_default_prompt_tag; +} + +Scheme_Overflow *scheme_get_thread_end_overflow(void) +{ + Scheme_Overflow *overflow; + overflow = MALLOC_ONE_RT(Scheme_Overflow); +#ifdef MZTAG_REQUIRED + overflow->type = scheme_rt_overflow; +#endif + overflow->eot = 1; + return overflow; +} + +/* private, but declared public to avoid inlining: */ +Scheme_Object *scheme_finish_apply_for_prompt(Scheme_Prompt *prompt, Scheme_Object *_prompt_tag, + Scheme_Object *proc, int argc, Scheme_Object **argv) +{ + /* Put space on the stack to record a longjmp target, + in case a following continuation is restored for a + different prompt. + By putting this information on the stack, it will + get captured if there's a further capture. */ + Scheme_Thread *p; + Scheme_Object * volatile prompt_tag = _prompt_tag; + mz_jmp_buf newbuf, * volatile savebuf; + Scheme_Object *val; + int cc_count = scheme_cont_capture_count; + + prompt->prompt_buf = &newbuf; + prompt = NULL; /* to avoid prompt chains */ + + p = scheme_current_thread; + + savebuf = p->error_buf; + p->error_buf = &newbuf; + + /* Initial meta-continuation says to fall through. This + one can get replaced when the current continuation + is captured and then restored. */ + { + Scheme_Meta_Continuation *resume_mc; + if (available_prompt_mc) { + resume_mc = available_prompt_mc; + available_prompt_mc = NULL; + } else + resume_mc = MALLOC_ONE_RT(Scheme_Meta_Continuation); +#ifdef MZTAG_REQUIRED + resume_mc->type = scheme_rt_meta_cont; +#endif + resume_mc->prompt_tag = prompt_tag; + resume_mc->next = p->meta_continuation; + p->meta_continuation = resume_mc; } - while (findpos--) { - Scheme_Cont_Mark *find; - long pos; + if (scheme_setjmp(newbuf)) { + /* + We can get here in three ways: + 1. abort-current-continuation with this prompt's tag + In this case, p->cjs.jumping_to_continuation is the + prompt, p->cjs.val is a value to deliver to the + prompt handler, and p->cjs.is_escape is unset. + 2. applying a continuation that is delimited by the prompt tag + (in which case the jump originates from scheme_do_eval) + In this case, p->cjs.jumping_to_continuation is the + prompt, p->cjs.val is a continuation, and + p->cjs.is_escape is set. + 3. exception-level escape + In this case, p->cjs.jumping_to_continuation is the + target (maybe an escape continuation), p->cjs.val is + information to propagate to the target, and p->cjs.is_escape + is unset. + */ + val = NULL; + } else { + val = _scheme_apply_multi(proc, argc, argv); + } - if (cont) { - while (findpos < cdelta) { - if (!cont->runstack_copied) { - /* Current cont was just a mark-stack variation of - next cont, so skip the next cont. */ - cont = cont->buf.cont; - } - cont = cont->buf.cont; - if (cont->buf.cont) - cdelta = cont->buf.cont->cont_mark_shareable; - else - cdelta = 0; - } - find = cont->cont_mark_stack_copied; - pos = findpos - cdelta; + p = scheme_current_thread; + p->error_buf = savebuf; + + { + Scheme_Meta_Continuation *resume_mc; + Scheme_Overflow *resume; + + resume = p->meta_continuation->overflow; + resume_mc = p->meta_continuation; + p->meta_continuation = p->meta_continuation->next; + + if (cc_count == scheme_cont_capture_count) { + memset(resume_mc, 0, sizeof(Scheme_Meta_Continuation)); +#ifdef MZTAG_REQUIRED + resume_mc->type = scheme_rt_meta_cont; +#endif + available_prompt_mc = resume_mc; + } + + if (!resume) { + /* We return NULL if there's an escape of some sort (see above), + otherwise we return the result value. */ + return val; + } else if (resume->eot) { + /* There's nothing left in the continuation, + so just end the thread. We havent restored + the thread state from the prompt, so flush + anything that might otherwise have a clean-up action: */ + MZ_RUNSTACK = NULL; + MZ_RUNSTACK_START = NULL; + MZ_CONT_MARK_STACK = 0; + p->runstack_start = NULL; + p->runstack = NULL; + p->runstack_size = 0; + p->runstack_saved = NULL; + p->cont_mark_stack_segments = NULL; + scheme_end_current_thread(); + return NULL; } else { + /* Continue by jumping to a meta-continuation. If + val, then p->cjs.jumping_to_continuation is unset, + so it's ok to communicate val via p->cjs.val. The + target for this jump is in compose_continuation(). */ + if (val) { + if (val == SCHEME_MULTIPLE_VALUES) { + if (SAME_OBJ(p->ku.multiple.array, p->values_buffer)) + p->values_buffer = NULL; + } + p->cjs.val = val; + } + p->stack_start = resume->stack_start; + scheme_longjmpup(&resume->jmp->cont); + return NULL; + } + } +} + +/* private, but declared public to avoid inlining: */ +Scheme_Object *scheme_apply_for_prompt(Scheme_Prompt *prompt, Scheme_Object *prompt_tag, + Scheme_Object *proc, int argc, Scheme_Object **argv) +{ + /* Grab stack address, then continue on with final step: */ + prompt->stack_boundary = PROMPT_STACK(proc); + + /* Even if all threads start deeper, a continuation might be sent + to the thread to start it at this prompt's stack level. */ + scheme_ensure_stack_start(prompt->stack_boundary); + + proc = scheme_finish_apply_for_prompt(prompt, prompt_tag, proc, argc, argv); + + return proc; +} + +static Scheme_Object *compose_continuation(Scheme_Cont *cont, int exec_chain, Scheme_Object *loop_prompt) +/* continuation arguments should be in `cont' already */ +{ + /* Apply continuation as composable. There may or may not + be a prompt immediately wrapping this application, depending on + whether the continuation was captured as composable. */ + Scheme_Overflow * volatile overflow; + Scheme_Overflow_Jmp *jmp; + Scheme_Cont * volatile saved; + Scheme_Prompt * volatile saved_meta_prompt; + Scheme_Thread *p = scheme_current_thread; + + reset_cjs(&p->cjs); + + saved_meta_prompt = p->meta_prompt; + + /* Grab a continuation so that we capture the current Scheme stack, + etc.: */ + saved = grab_continuation(p, 1, 0, NULL, NULL, NULL, NULL); + + overflow = MALLOC_ONE_RT(Scheme_Overflow); +#ifdef MZTAG_REQUIRED + overflow->type = scheme_rt_overflow; +#endif + overflow->prev = p->overflow; + overflow->stack_start = p->stack_start; + + jmp = MALLOC_ONE_RT(Scheme_Overflow_Jmp); +#ifdef MZTAG_REQUIRED + jmp->type = scheme_rt_overflow_jmp; +#endif + overflow->jmp = jmp; + + scheme_init_jmpup_buf(&overflow->jmp->cont); + if (scheme_setjmpup(&overflow->jmp->cont, overflow->jmp, ADJUST_STACK_START(p->stack_start))) { + /* Returning. (Jumped here from finish_apply_for_prompt + or scheme_compose_continuation.) + + We can return for several reasons: + 1. We got a result value. + In that case, p->cjs.val holds the value, and + p->cjs.jumping_to_continuation is NULL. + 2. There's an escape, and p->cjs.jumping_to_continuation + is set. It could be a prompt, in which case we're + escaping to the prompt, or it could be an + error escape. In the former case, we may or may not be + applying a continuation at the target; see + scheme_finish_apply_for_prompt() for those possibilities. + */ + Scheme_Object *v; + Scheme_Meta_Continuation *mc; + + p = scheme_current_thread; + if (!p->cjs.jumping_to_continuation) { + /* Got a result: */ + v = p->cjs.val; + p->cjs.val = NULL; + if (SAME_OBJ(v, SCHEME_MULTIPLE_VALUES)) { + if (SAME_OBJ(p->ku.multiple.array, p->values_buffer)) + p->values_buffer = NULL; + } + } else { + /* Some sort of escape, to be handled by the caller, + or to be handled below if it's an escape to loop_prompt. */ + v = NULL; + } + mc = p->meta_continuation; + restore_continuation(saved, p, 1, v, NULL, NULL, NULL, 0, !p->cjs.jumping_to_continuation, + NULL, NULL); + p->meta_prompt = saved_meta_prompt; + + p->meta_continuation = mc; + + /* There can be two kinds of loops: + 1. An escape to the current prompt to invoke another + continuation. + 2. A trampoline to turn a composable-continuation + application into a tail call; in this case, + jumping_to_continuation = #t. */ + if (!v && ((loop_prompt + && SAME_OBJ((Scheme_Object *)p->cjs.jumping_to_continuation, + loop_prompt)) + || (!loop_prompt + && p->cjs.jumping_to_continuation + && SCHEME_VECTORP((Scheme_Object *)p->cjs.jumping_to_continuation)))) { + /* We'll handle this escape directly, to avoid re-computing + saved and overflow. */ + cont = (Scheme_Cont *)p->cjs.val; + if (SCHEME_VECTORP((Scheme_Object *)p->cjs.jumping_to_continuation)) { + /* Instead of installing marks in `saved' now, ask `cont' to do it, + since `cont' may have some of its own replacements. */ + cont->extra_marks = (Scheme_Object *)p->cjs.jumping_to_continuation; + } + reset_cjs(&p->cjs); + /* The current meta-continuation and dw chain may have changed since capture: */ + saved->meta_continuation = p->meta_continuation; + saved->dw = p->dw; + /* Fall though to continuation application below. */ + } else { + return v; + } + } + + scheme_current_thread->suspend_break++; + + /* Here's where we jump to the target: */ + saved->resume_to = overflow; /* used by eval to jump to current meta-continuation */ + cont->use_next_cont = saved; + cont->resume_to = overflow; + scheme_current_thread->stack_start = cont->prompt_stack_start; + scheme_longjmpup(&cont->buf); + + ESCAPED_BEFORE_HERE; +} + +static void restore_from_prompt(Scheme_Prompt *prompt) +{ + Scheme_Thread *p = scheme_current_thread; + + while (MZ_RUNSTACK_START != prompt->runstack_boundary_start) { + MZ_RUNSTACK_START = p->runstack_saved->runstack_start; + p->runstack_saved = p->runstack_saved->prev; + } + + MZ_RUNSTACK = MZ_RUNSTACK_START + prompt->runstack_boundary_offset; + MZ_CONT_MARK_STACK = prompt->mark_boundary; + MZ_CONT_MARK_POS = prompt->boundary_mark_pos; + + p->runstack_size = prompt->runstack_size; + + if (prompt->boundary_overflow_id) { + while (p->overflow->id != prompt->boundary_overflow_id) { + p->overflow = p->overflow->prev; + } + } else + p->overflow = NULL; + if (prompt->boundary_dw_id) { + while (p->dw->id != prompt->boundary_dw_id) { + p->dw = p->dw->prev; + } + } else + p->dw = NULL; +} + +static Scheme_Object *call_with_prompt (int in_argc, Scheme_Object *in_argv[]) +{ + Scheme_Object * volatile v; + Scheme_Thread *p = scheme_current_thread; + Scheme_Object *proc = in_argv[0], *prompt_tag; + Scheme_Prompt *prompt; + int argc, handler_argument_error = 0; + Scheme_Object **argv, *a[1], *handler; + Scheme_Cont_Frame_Data cframe; + Scheme_Dynamic_Wind *prompt_dw; + int cc_count = scheme_cont_capture_count; + + scheme_check_proc_arity("call-with-continuation-prompt", 0, 0, in_argc, in_argv); + if (in_argc > 1) { + if (!SAME_TYPE(scheme_prompt_tag_type, SCHEME_TYPE(in_argv[1]))) { + scheme_wrong_type("call-with-continuation-prompt", "continuation-prompt-tag", + 1, in_argc, in_argv); + } + prompt_tag = in_argv[1]; + } else + prompt_tag = scheme_default_prompt_tag; + + if (in_argc > 2) { + if (SCHEME_TRUEP(in_argv[2]) && !SCHEME_PROCP(in_argv[2])) + scheme_wrong_type("call-with-continuation-prompt", "procedure or #f", 2, in_argc, in_argv); + handler = in_argv[2]; + } else + handler = scheme_false; + + argv = NULL; + argc = 0; + + do { + /* loop implements the default prompt handler */ + + if (available_regular_prompt) { + /* `call-with-continuation-prompt' is used by `with-handlers' which might + easily occur in a loop. Try to avoid allocation, even if only for unnested + prompts. */ + prompt = available_regular_prompt; + available_regular_prompt = NULL; + } else + prompt = MALLOC_ONE_TAGGED(Scheme_Prompt); + + prompt->so.type = scheme_prompt_type; + + scheme_push_continuation_frame(&cframe); + scheme_set_cont_mark(SCHEME_PTR_VAL(prompt_tag), (Scheme_Object *)prompt); + + /* Note: prompt save marks after the one corresponding to itself, + so that restoring a continuation captured under the prompt + doesn't re-install this prompt. (Instead, the prompt that applies + is the one in the invocation context). */ + + ASSERT_SUSPEND_BREAK_ZERO(); + + initialize_prompt(p, prompt, NULL); + + if (p->overflow) { + ensure_overflow_id(p->overflow); + prompt->boundary_overflow_id = p->overflow->id; + } + if (p->dw) { + scheme_ensure_dw_id(p->dw); + prompt->boundary_dw_id = p->dw->id; + } + + prompt->runstack_size = p->runstack_size; + + if (available_prompt_dw) { + prompt_dw = available_prompt_dw; + available_prompt_dw = NULL; + } else + prompt_dw = MALLOC_ONE_RT(Scheme_Dynamic_Wind); +#ifdef MZTAG_REQUIRED + prompt_dw->type = scheme_rt_dyn_wind; +#endif + prompt_dw->prompt_tag = prompt_tag; + if (p->dw) { + prompt_dw->prev = p->dw; + prompt_dw->depth = p->dw->depth + 1; + } + + p->dw = prompt_dw; + + v = scheme_apply_for_prompt(prompt, prompt_tag, proc, argc, argv); + + /* >> An escape can jump directly here, instead of going through the + usual escape chain of setjmps. That means we need to reset everything, + such as the runstack pointer. The information we need is in the + prompt record. */ + + p = scheme_current_thread; + + restore_from_prompt(prompt); + + p->suspend_break = 0; + + if (!v) { + /* There was an escape. See scheme_finish_apply_for_prompt for the possibilities. */ + if (SAME_OBJ((Scheme_Object *)p->cjs.jumping_to_continuation, + (Scheme_Object *)prompt)) { + /* Jumping to this prompt, maybe to apply a different + continuation... */ + if (p->cjs.is_escape) { + /* Yes, a different continuation. That is, apply a non-functional continuation + that is based on a (potentially) different prompt. Loop, in case + we have a kind of tail-call to another such contionuation: */ + Scheme_Cont *target; + + target = (Scheme_Cont *)p->cjs.val; + reset_cjs(&p->cjs); + + v = compose_continuation(target, 1, (Scheme_Object *)prompt); + + if (v) { + /* Got a result: */ + handler = NULL; + } else { + /* Escaping, maybe to here... */ + p = scheme_current_thread; + if (SAME_OBJ((Scheme_Object *)p->cjs.jumping_to_continuation, + (Scheme_Object *)prompt)) { + /* Jump to here. If p->cjs.is_escape, then + we want to apply a continuation --- again. */ + if (p->cjs.is_escape) { + /* this should have been caught in compose_continuation */ + scheme_signal_error("escape-to-prompt escaped!"); + return NULL; + } else { + /* It's an abort to here, so fall though and + pick up the values. */ + v = NULL; + } + } else if (p->cjs.is_escape) { + /* We're trying to get to a prompt in this meta-continuation. + Jump again. */ + Scheme_Prompt *targetc = (Scheme_Prompt *)p->cjs.jumping_to_continuation; + if ((!targetc->boundary_overflow_id && !p->overflow) + || (targetc->boundary_overflow_id == p->overflow->id)) { + /* Jump directly to the target. */ + scheme_longjmp(*targetc->prompt_buf, 1); + } else { + /* More hassle: need to unwind overflows to get to the prompt. */ + Scheme_Overflow *overflow = p->overflow; + while (overflow->prev + && (!overflow->prev->id + || (overflow->prev->id != targetc->boundary_overflow_id))) { + overflow = overflow->prev; + } + p->overflow = overflow; + p->stack_start = overflow->stack_start; + scheme_longjmpup(&overflow->jmp->cont); + } + return NULL; + } else { + /* Exception-level or call/ec escape. Continue jumping: */ + restore_from_prompt(prompt); + scheme_longjmp(*p->error_buf, 1); + return NULL; + } + } + } else { + /* It was an abort to here; fall through, which picks up + p->cjs.val to deliver to the handler. */ + v = NULL; + } + + /* At this point, v can be non-NULL if a continuation + delivered a value. */ + + if (!v) { + argc = p->cjs.num_vals; + + if (argc == 1) { + a[0] = p->cjs.val; + argv = a; + } else + argv = (Scheme_Object **)p->cjs.val; + + reset_cjs(&p->cjs); + + if (SAME_OBJ(handler, scheme_values_func)) { + v = scheme_values(argc, argv); + handler = NULL; + } else if (SCHEME_FALSEP(handler)) { + if (argc == 1) { + if (!scheme_check_proc_arity(NULL, 0, 0, argc, argv)) { + /* delay error until we clean up: */ + handler_argument_error = 1; + handler = NULL; + } else { + proc = a[0]; + argc = 0; + argv = NULL; + } + } else { + /* wrong number of arguments returned to default handler */ + handler_argument_error = 1; + handler = NULL; + } + } + } else { + argc = 0; + argv = NULL; + } + } else { + /* Other error-like escape: */ + scheme_longjmp(*p->error_buf, 1); + return NULL; + } + } else { + handler = NULL; + argc = 0; + argv = NULL; + } + + scheme_pop_continuation_frame(&cframe); + + if (cc_count == scheme_cont_capture_count) { + if (!available_regular_prompt) { + memset(prompt, 0, sizeof(Scheme_Prompt)); + prompt->so.type = scheme_prompt_type; + available_regular_prompt = prompt; + } + if (!available_prompt_dw) { + memset(prompt_dw, 0, sizeof(Scheme_Dynamic_Wind)); +#ifdef MZTAG_REQUIRED + prompt_dw->type = scheme_rt_dyn_wind; +#endif + available_prompt_dw = prompt_dw; + } + } + } while (handler && SCHEME_FALSEP(handler)); + + if (handler_argument_error) { + if (argc == 1) { + scheme_check_proc_arity("default-continuation-prompt-handler", 0, 0, argc, argv); + } else { + scheme_wrong_return_arity("call-with-continuation-prompt", 1, argc, argv, + "application of default prompt handler"); + } + } + + if (handler) { + return _scheme_tail_apply(handler, argc, argv); + } else + return v; +} + +Scheme_Object *scheme_compose_continuation(Scheme_Cont *cont, int num_rands, Scheme_Object *value) +{ + Scheme_Meta_Continuation *mc; + + if (num_rands != 1) { + value = scheme_values(num_rands, (Scheme_Object **)value); + { + Scheme_Thread *p = scheme_current_thread; + if (SAME_OBJ(p->ku.multiple.array, p->values_buffer)) + p->values_buffer = NULL; + } + } + cont->value = value; + cont->common_dw_depth = -1; + + mc = scheme_current_thread->meta_continuation; + if (mc && mc->pseudo && mc->meta_tail_pos == MZ_CONT_MARK_POS) { + /* The existing meta-continuation is the same as the + current continuation. Trampoline through the meta-continuation + to implement the call as a tail call. + We also need to propagate continuation marks here, if any, + back to the trampoline. They get merged with the trampoline's + meta-continuation when `cont' is applied. */ + Scheme_Thread *p = scheme_current_thread; + Scheme_Object *cm_info; + long findpos, bottom, pos; + int count, mcount, i; + + p->meta_continuation = mc->next; + + bottom = (long)p->cont_mark_stack_bottom; + count = 0; + for (findpos = (long)MZ_CONT_MARK_STACK - 1; findpos >= bottom; findpos--) { GC_CAN_IGNORE Scheme_Cont_Mark *seg; seg = p->cont_mark_stack_segments[findpos >> SCHEME_LOG_MARK_SEGMENT_SIZE]; pos = findpos & SCHEME_MARK_SEGMENT_MASK; - find = seg; + if (seg[pos].pos != MZ_CONT_MARK_POS) + break; + count++; + } + mcount = 0; + for (findpos = (long)mc->cont_mark_shareable; findpos--; ) { + if (mc->cont_mark_stack_copied[findpos].pos != mc->cont_mark_pos) + break; + mcount++; } - /* For econt, skip positions that match cmpos; the econt - record has a prefix to use, instead. */ - - if (!econt || (find[pos].pos != cmpos)) { - cache = find[pos].cache; - if (cache) { - if (SCHEME_FALSEP(cache)) - cache = NULL; - else if (SCHEME_VECTORP(cache)) { - cache = SCHEME_VEC_ELS(cache)[0]; - } - } + cm_info = scheme_make_vector((count + mcount) * 2, NULL); + for (findpos = (long)MZ_CONT_MARK_STACK - 1, i = 0; i < count; findpos--, i++) { + GC_CAN_IGNORE Scheme_Cont_Mark *seg; - if (cache) { - if (last) - last->next = (Scheme_Cont_Mark_Chain *)cache; - else - first = (Scheme_Cont_Mark_Chain *)cache; - - break; - } else { - Scheme_Cont_Mark_Chain *pr; - pr = MALLOC_ONE_RT(Scheme_Cont_Mark_Chain); - pr->so.type = scheme_cont_mark_chain_type; - pr->key = find[pos].key; - pr->val = find[pos].val; - pr->pos = find[pos].pos; - pr->next = NULL; - cache = find[pos].cache; - if (cache && !SCHEME_FALSEP(cache)) { - SCHEME_VEC_ELS(cache)[0] = (Scheme_Object *)pr; - } else { - find[pos].cache = (Scheme_Object *)pr; - } - if (last) - last->next = pr; - else - first = pr; - - last = pr; - } + seg = p->cont_mark_stack_segments[findpos >> SCHEME_LOG_MARK_SEGMENT_SIZE]; + pos = findpos & SCHEME_MARK_SEGMENT_MASK; + SCHEME_VEC_ELS(cm_info)[2*i] = seg[pos].key; + SCHEME_VEC_ELS(cm_info)[(2*i)+1] = seg[pos].val; } + for (findpos = (long)mc->cont_mark_shareable - 1, i = 0; i < mcount; findpos--, i++) { + SCHEME_VEC_ELS(cm_info)[2*(count + i)] = mc->cont_mark_stack_copied[findpos].key; + SCHEME_VEC_ELS(cm_info)[(2*(count + i))+1] = mc->cont_mark_stack_copied[findpos].val; + } + + p->cjs.jumping_to_continuation = cm_info; /* vector => trampoline */ + p->cjs.val = (Scheme_Object *)cont; + p->cjs.num_vals = 1; + p->cjs.is_escape = 1; + + p->stack_start = mc->overflow->stack_start; + + scheme_longjmpup(&mc->overflow->jmp->cont); } - if (econt) { - Scheme_Object *l, *a; - for (l = ((Scheme_Escaping_Cont *)econt)->marks_prefix; SCHEME_PAIRP(l); l = SCHEME_CDR(l)) { - Scheme_Cont_Mark_Chain *pr; - pr = MALLOC_ONE_RT(Scheme_Cont_Mark_Chain); - pr->so.type = scheme_cont_mark_chain_type; - a = SCHEME_CAR(l); - pr->key = SCHEME_CAR(a); - pr->val = SCHEME_CDR(a); - pr->pos = cmpos; - pr->next = first; - first = pr; + value = compose_continuation(cont, 0, NULL); + + if (!value) { + /* Continue escape */ + scheme_longjmp(*scheme_current_thread->error_buf, 1); + } + + return value; +} + +static Scheme_Object *abort_continuation (int argc, Scheme_Object *argv[]) +{ + Scheme_Object *prompt_tag; + Scheme_Prompt *prompt; + Scheme_Thread *p = scheme_current_thread; + + prompt_tag = argv[0]; + if (!SAME_TYPE(scheme_prompt_tag_type, SCHEME_TYPE(prompt_tag))) { + scheme_wrong_type("abort-current-continuation", "continuation-prompt-tag", + 0, argc, argv); + } + + prompt = (Scheme_Prompt *)scheme_extract_one_cc_mark(NULL, SCHEME_PTR_VAL(prompt_tag)); + if (!prompt && !SAME_OBJ(scheme_default_prompt_tag, prompt_tag)) { + scheme_arg_mismatch("abort-current-continuation", + "continuation includes no prompt with the given tag: ", + prompt_tag); + return NULL; + } + + if (prompt) { + if (argc == 2) { + p->cjs.num_vals = 1; + p->cjs.val = argv[1]; + } else { + Scheme_Object **vals; + int i; + vals = MALLOC_N(Scheme_Object *, argc - 1); + for (i = argc; i-- > 1; ) { + vals[i-1] = argv[i]; + } + p->cjs.num_vals = argc - 1; + p->cjs.val = (Scheme_Object *)vals; + } + p->cjs.jumping_to_continuation = (Scheme_Object *)prompt; + } + + scheme_longjmp(*p->error_buf, 1); + + return NULL; +} + +static Scheme_Object *call_with_control (int argc, Scheme_Object *argv[]) +{ + Scheme_Object *prompt_tag; + Scheme_Object *a[3]; + + scheme_check_proc_arity("call-with-composable-continuation", 1, 0, argc, argv); + if (argc > 1) { + if (!SAME_TYPE(scheme_prompt_tag_type, SCHEME_TYPE(argv[1]))) { + scheme_wrong_type("call-with-composable-continuation", "continuation-prompt-tag", + 1, argc, argv); + } + prompt_tag = argv[1]; + } else + prompt_tag = scheme_default_prompt_tag; + + a[0] = argv[0]; + a[1] = prompt_tag; + a[2] = scheme_true; + + /* Trampoline to internal_call_cc. This trampoline ensures that + the runstack is flushed before we try to grab the continuation. */ + return _scheme_tail_apply(internal_call_cc_prim, 3, a); +} + +static Scheme_Object *continuation_marks(Scheme_Thread *p, + Scheme_Object *_cont, + Scheme_Object *econt, + Scheme_Meta_Continuation *mc, + Scheme_Object *prompt_tag, + char *who, + int just_chain) + /* cont => p is not used */ +{ + Scheme_Cont *cont = (Scheme_Cont *)_cont, *top_cont; + Scheme_Cont_Mark_Chain *first = NULL, *last = NULL; + Scheme_Cont_Mark_Set *set; + Scheme_Object *cache, *nt; + long findpos, bottom; + long cmpos, cdelta = 0; + int found_tag = 0; + + if (cont && SAME_OBJ(cont->prompt_tag, prompt_tag)) + found_tag = 1; + + do { + if (econt) { + findpos = (long)((Scheme_Escaping_Cont *)econt)->envss.cont_mark_stack; + cmpos = (long)((Scheme_Escaping_Cont *)econt)->envss.cont_mark_pos; + if (mc) { + cdelta = mc->cont_mark_offset; + bottom = 0; + } else + bottom = p->cont_mark_stack_bottom; + } else if (cont) { + findpos = (long)cont->ss.cont_mark_stack; + cmpos = (long)cont->ss.cont_mark_pos; + cdelta = cont->cont_mark_offset; + bottom = 0; + } else if (mc) { + findpos = (long)mc->cont_mark_stack; + cmpos = (long)mc->cont_mark_pos; + cdelta = mc->cont_mark_offset; + bottom = 0; + } else { + findpos = (long)MZ_CONT_MARK_STACK; + cmpos = (long)MZ_CONT_MARK_POS; + if (!p->cont_mark_stack_segments) + findpos = 0; + bottom = p->cont_mark_stack_bottom; + } + + top_cont = cont; + + while (findpos-- > bottom) { + Scheme_Cont_Mark *find; + long pos; + + if (cont) { + while (findpos < cdelta) { + if (!cont->runstack_copied) { + /* Current cont was just a mark-stack variation of + next cont, so skip the next cont. */ + cont = cont->buf.cont; + } + cont = cont->buf.cont; + if (cont) + cdelta = cont->cont_mark_offset; + else + break; + } + if (!cont) + break; + find = cont->cont_mark_stack_copied; + pos = findpos - cdelta; + } else if (mc) { + if (findpos < cdelta) + break; + find = mc->cont_mark_stack_copied; + pos = findpos - cdelta; + } else { + GC_CAN_IGNORE Scheme_Cont_Mark *seg; + + seg = p->cont_mark_stack_segments[findpos >> SCHEME_LOG_MARK_SEGMENT_SIZE]; + pos = findpos & SCHEME_MARK_SEGMENT_MASK; + find = seg; + } + + /* A cache is one of: + NULL (empty) + #f (empty) + hash-table: maps prompt tag to tag-cache + chain : for default_scheme_prompt_tag + (vector chain key val) : chain is for default_scheme_prompt_tag, + key+val is for !prompt_tag + + A tag-cache is one of: + chain : the chain we're looking for + (vector chain key val): key = NULL implies that val is + a table of mappings from keys to vals + */ + + if (prompt_tag && (find[pos].key == SCHEME_PTR_VAL(prompt_tag))) { + found_tag = 1; + /* Break out of outer loop, too: */ + mc = NULL; + p = NULL; + econt = NULL; + cont = NULL; + break; + } + + cache = find[pos].cache; + if (cache) { + if (SCHEME_FALSEP(cache)) + cache = NULL; + if (SCHEME_HASHTP(cache)) + cache = scheme_hash_get((Scheme_Hash_Table *)cache, prompt_tag ? prompt_tag : scheme_false); + else if (prompt_tag != scheme_default_prompt_tag) + cache = NULL; + + if (cache && SCHEME_VECTORP(cache)) { + cache = SCHEME_VEC_ELS(cache)[0]; + } + } + + if (cache) { + if (((Scheme_Cont_Mark_Chain *)cache)->key) { + if (last) + last->next = (Scheme_Cont_Mark_Chain *)cache; + else + first = (Scheme_Cont_Mark_Chain *)cache; + + found_tag = 1; /* cached => tag is there */ + } else { + /* bogus: tag wasn't there when we cached this chain */ + } + + /* Break out of outer loop, too: */ + mc = NULL; + p = NULL; + econt = NULL; + cont = NULL; + + break; + } else { + Scheme_Cont_Mark_Chain *pr; + pr = MALLOC_ONE_RT(Scheme_Cont_Mark_Chain); + pr->so.type = scheme_cont_mark_chain_type; + pr->key = find[pos].key; + pr->val = find[pos].val; + pr->pos = find[pos].pos; + pr->next = NULL; + if (mc) { + if (mc->cm_shared) { + Scheme_Cont_Mark *cp; + cp = MALLOC_N(Scheme_Cont_Mark, mc->cont_mark_shareable); + memcpy(cp, mc->cont_mark_stack_copied, mc->cont_mark_shareable * sizeof(Scheme_Cont_Mark)); + mc->cont_mark_stack_copied = cp; + find = cp; + mc->cm_shared = 0; + } + mc->cm_caches = 1; + } + cache = find[pos].cache; + if (cache && !SCHEME_FALSEP(cache)) { + if (SCHEME_HASHTP(cache)) { + Scheme_Hash_Table *ht = (Scheme_Hash_Table *)cache; + cache = scheme_hash_get(ht, prompt_tag ? prompt_tag : scheme_false); + if (!cache) { + scheme_hash_set(ht, prompt_tag ? prompt_tag : scheme_false, (Scheme_Object *)pr); + } else { + /* cache must be a vector */ + SCHEME_VEC_ELS(cache)[0] = (Scheme_Object *)pr; + } + } else { + /* cache must be a vector */ + if (prompt_tag == scheme_default_prompt_tag) + SCHEME_VEC_ELS(cache)[0] = (Scheme_Object *)pr; + else { + /* Need to split up the default and NULL tags. Don't + try to use cache for just the null tag, in case + it's use by other copies. */ + Scheme_Hash_Table *ht; + Scheme_Object *vec; + ht = scheme_make_hash_table(SCHEME_hash_ptr); + vec = scheme_make_vector(3, NULL); + SCHEME_VEC_ELS(vec)[1] = SCHEME_VEC_ELS(cache)[1]; + SCHEME_VEC_ELS(vec)[2] = SCHEME_VEC_ELS(cache)[2]; + scheme_hash_set(ht, scheme_false, vec); + if (!prompt_tag) + SCHEME_VEC_ELS(vec)[0] = (Scheme_Object *)pr; + else + scheme_hash_set(ht, prompt_tag, (Scheme_Object *)pr); + SCHEME_VEC_ELS(cache)[0] = (Scheme_Object *)ht; + } + } + } else if (prompt_tag == scheme_default_prompt_tag) { + find[pos].cache = (Scheme_Object *)pr; + } else { + cache = (Scheme_Object *)scheme_make_hash_table(SCHEME_hash_ptr); + scheme_hash_set((Scheme_Hash_Table *)cache, prompt_tag, (Scheme_Object *)pr); + find[pos].cache = cache; + } + if (last) + last->next = pr; + else + first = pr; + + last = pr; + } + } + + if (mc) { + mc = mc->next; + } else if (top_cont) { + mc = top_cont->meta_continuation; + } else if (econt) { + mc = p->meta_continuation; + } else if (p) { + mc = p->meta_continuation; + } + cont = NULL; + econt = NULL; + p = NULL; + } while (mc); + + if (!found_tag) { + if (!SAME_OBJ(prompt_tag, scheme_default_prompt_tag)) { + /* The chain is cached. Destroy it, so that future cache references + will indicate that the tag is not present (as opposed to delivering + the bogus chain). */ + while (first) { + first->key = NULL; + first = first->next; + } + if (!who) + return NULL; + scheme_arg_mismatch(who, + "no corresponding prompt in the continuation: ", + prompt_tag); } } @@ -4128,8 +5576,8 @@ static Scheme_Object *continuation_marks(Scheme_Thread *p, return (Scheme_Object *)first; #ifdef MZ_USE_JIT - if (cont) - nt = cont->native_trace; + if (_cont) + nt = ((Scheme_Cont *)_cont)->native_trace; else if (econt) nt = ((Scheme_Escaping_Cont *)econt)->native_trace; else @@ -4147,33 +5595,67 @@ static Scheme_Object *continuation_marks(Scheme_Thread *p, return (Scheme_Object *)set; } -Scheme_Object *scheme_current_continuation_marks(void) +Scheme_Object *scheme_current_continuation_marks(Scheme_Object *prompt_tag) { - return continuation_marks(scheme_current_thread, NULL, NULL, 0); + return continuation_marks(scheme_current_thread, NULL, NULL, NULL, + prompt_tag ? prompt_tag : scheme_default_prompt_tag, + "continuation-marks", + 0); } static Scheme_Object * cc_marks(int argc, Scheme_Object *argv[]) { - return scheme_current_continuation_marks(); + if (argc) { + if (!SAME_TYPE(scheme_prompt_tag_type, SCHEME_TYPE(argv[0]))) { + scheme_wrong_type("current-continuation-marks", "continuation-prompt-tag", + 0, argc, argv); + } + + if (!SAME_OBJ(scheme_default_prompt_tag, argv[0])) + if (!scheme_extract_one_cc_mark(NULL, SCHEME_PTR_VAL(argv[0]))) + scheme_arg_mismatch("current-continuation-marks", + "no corresponding prompt in the continuation: ", + argv[0]); + } + + return scheme_current_continuation_marks(argc ? argv[0] : NULL); } static Scheme_Object * cont_marks(int argc, Scheme_Object *argv[]) { + Scheme_Object *prompt_tag; + if (!SCHEME_CONTP(argv[0]) && !SCHEME_ECONTP(argv[0])) scheme_wrong_type("continuation-marks", "continuation", 0, argc, argv); + if (argc > 1) { + if (!SAME_TYPE(scheme_prompt_tag_type, SCHEME_TYPE(argv[1]))) { + scheme_wrong_type("continuation-marks", "continuation-prompt-tag", + 1, argc, argv); + } + prompt_tag = argv[1]; + } else + prompt_tag = scheme_default_prompt_tag; + if (SCHEME_ECONTP(argv[0])) { if (!scheme_escape_continuation_ok(argv[0])) { scheme_arg_mismatch("continuation-marks", "escape continuation not in the current thread's continuation: ", argv[0]); - } + return NULL; + } else { + Scheme_Meta_Continuation *mc; + scheme_extract_one_cc_mark_with_meta(NULL, argv[0], NULL, &mc); - return continuation_marks(scheme_current_thread, NULL, argv[0], 0); - } else - return continuation_marks(NULL, argv[0], NULL, 0); + return continuation_marks(scheme_current_thread, NULL, argv[0], mc, prompt_tag, + "continuation-marks", 0); + } + } else { + return continuation_marks(NULL, argv[0], NULL, NULL, prompt_tag, + "continuation-marks", 0); + } } static Scheme_Object * @@ -4189,13 +5671,22 @@ static Scheme_Object * extract_cc_marks(int argc, Scheme_Object *argv[]) { Scheme_Cont_Mark_Chain *chain; - Scheme_Object *first = scheme_null, *last = NULL, *key; + Scheme_Object *first = scheme_null, *last = NULL, *key, *prompt_tag; Scheme_Object *pr; if (!SAME_TYPE(SCHEME_TYPE(argv[0]), scheme_cont_mark_set_type)) { scheme_wrong_type("continuation-mark-set->list", "continuation-mark-set", 0, argc, argv); return NULL; } + if (argc > 2) { + if (!SAME_TYPE(scheme_prompt_tag_type, SCHEME_TYPE(argv[2]))) { + scheme_wrong_type("continuation-mark-set->list", "continuation-prompt-tag", + 2, argc, argv); + } + prompt_tag = argv[2]; + } else + prompt_tag = scheme_default_prompt_tag; + chain = ((Scheme_Cont_Mark_Set *)argv[0])->chain; key = argv[1]; @@ -4205,6 +5696,8 @@ extract_cc_marks(int argc, Scheme_Object *argv[]) return NULL; } + prompt_tag = SCHEME_PTR_VAL(prompt_tag); + while (chain) { if (chain->key == key) { pr = scheme_make_pair(chain->val, scheme_null); @@ -4213,7 +5706,8 @@ extract_cc_marks(int argc, Scheme_Object *argv[]) else first = pr; last = pr; - } + } else if (chain->key == prompt_tag) + break; chain = chain->next; } @@ -4226,7 +5720,7 @@ extract_cc_markses(int argc, Scheme_Object *argv[]) { Scheme_Cont_Mark_Chain *chain; Scheme_Object *first = scheme_null, *last = NULL; - Scheme_Object *pr, **keys, *vals, *none; + Scheme_Object *pr, **keys, *vals, *none, *prompt_tag; int len, i; long last_pos; @@ -4243,6 +5737,14 @@ extract_cc_markses(int argc, Scheme_Object *argv[]) none = argv[2]; else none = scheme_false; + if (argc > 3) { + if (!SAME_TYPE(scheme_prompt_tag_type, SCHEME_TYPE(argv[3]))) { + scheme_wrong_type("continuation-mark-set->list*", "continuation-prompt-tag", + 3, argc, argv); + } + prompt_tag = argv[3]; + } else + prompt_tag = scheme_default_prompt_tag; keys = MALLOC_N(Scheme_Object *, len); for (pr = argv[1], i = 0; SCHEME_PAIRP(pr); pr = SCHEME_CDR(pr), i++) { @@ -4254,6 +5756,8 @@ extract_cc_markses(int argc, Scheme_Object *argv[]) } } + prompt_tag = SCHEME_PTR_VAL(prompt_tag); + chain = ((Scheme_Cont_Mark_Set *)argv[0])->chain; last_pos = ((Scheme_Cont_Mark_Set *)argv[0])->cmpos + 2; @@ -4276,6 +5780,9 @@ extract_cc_markses(int argc, Scheme_Object *argv[]) SCHEME_VEC_ELS(vals)[i] = chain->val; } } + + if (SAME_OBJ(chain->key, prompt_tag)) + break; chain = chain->next; } @@ -4360,7 +5867,8 @@ extract_cc_proc_marks(int argc, Scheme_Object *argv[]) } Scheme_Object * -scheme_extract_one_cc_mark(Scheme_Object *mark_set, Scheme_Object *key) +scheme_extract_one_cc_mark_with_meta(Scheme_Object *mark_set, Scheme_Object *key, + Scheme_Object *prompt_tag, Scheme_Meta_Continuation **meta) { if (mark_set) { Scheme_Cont_Mark_Chain *chain; @@ -4372,93 +5880,162 @@ scheme_extract_one_cc_mark(Scheme_Object *mark_set, Scheme_Object *key) chain = chain->next; } } else { - long findpos; + long findpos, bottom, startpos; long pos; Scheme_Object *val = NULL; Scheme_Object *cache; + Scheme_Meta_Continuation *mc = NULL; GC_CAN_IGNORE Scheme_Cont_Mark *seg; Scheme_Thread *p = scheme_current_thread; - - findpos = (long)MZ_CONT_MARK_STACK; - if (!p->cont_mark_stack_segments) - findpos = 0; - /* Search mark stack, checking caches along the way: */ - while (findpos--) { - seg = p->cont_mark_stack_segments[findpos >> SCHEME_LOG_MARK_SEGMENT_SIZE]; - pos = findpos & SCHEME_MARK_SEGMENT_MASK; - - if (SAME_OBJ(seg[pos].key, key)) { - val = seg[pos].val; - break; + do { + if (mc) { + startpos = mc->cont_mark_shareable; + bottom = 0; } else { - cache = seg[pos].cache; - if (cache && SCHEME_VECTORP(cache)) { - /* If slot 1 has a key, this cache has just one key--value - pair. Otherwise, slot 2 is a hash table. */ - if (SCHEME_VEC_ELS(cache)[1]) { - if (SAME_OBJ(SCHEME_VEC_ELS(cache)[1], key)) { - val = SCHEME_VEC_ELS(cache)[2]; - break; - } - } else { - Scheme_Hash_Table *ht; - ht = (Scheme_Hash_Table *)SCHEME_VEC_ELS(cache)[2]; - val = scheme_hash_get(ht, key); - if (val) { - /* In the hash table, null_val_key is used to indicate - that there's no value for the key. */ - if (SAME_OBJ(val, null_val_key)) - val = NULL; - break; - } - } + startpos = (long)MZ_CONT_MARK_STACK; + if (!p->cont_mark_stack_segments) + findpos = 0; + bottom = p->cont_mark_stack_bottom; + } + + findpos = startpos; + + /* Search mark stack, checking caches along the way: */ + while (findpos-- > bottom) { + if (mc) { + seg = mc->cont_mark_stack_copied; + pos = findpos; + } else { + seg = p->cont_mark_stack_segments[findpos >> SCHEME_LOG_MARK_SEGMENT_SIZE]; + pos = findpos & SCHEME_MARK_SEGMENT_MASK; + } + + if (SAME_OBJ(seg[pos].key, key)) { + val = seg[pos].val; + break; + } else { + cache = seg[pos].cache; + if (cache && SCHEME_HASHTP(cache)) + cache = scheme_hash_get((Scheme_Hash_Table *)cache, + prompt_tag ? prompt_tag : scheme_false); + else if (prompt_tag) + cache = NULL; + if (cache && SCHEME_VECTORP(cache)) { + /* If slot 1 has a key, this cache has just one key--value + pair. Otherwise, slot 2 is a hash table. */ + if (SCHEME_VEC_ELS(cache)[1]) { + if (SAME_OBJ(SCHEME_VEC_ELS(cache)[1], key)) { + val = SCHEME_VEC_ELS(cache)[2]; + break; + } + } else { + Scheme_Hash_Table *ht; + ht = (Scheme_Hash_Table *)SCHEME_VEC_ELS(cache)[2]; + val = scheme_hash_get(ht, key); + if (val) { + /* In the hash table, null_val_key is used to indicate + that there's no value for the key. */ + if (SAME_OBJ(val, null_val_key)) + val = NULL; + break; + } + } + } } } - } - pos = (long)MZ_CONT_MARK_STACK - findpos; - if (pos > 16) { - pos >>= 1; - findpos = findpos + pos; - seg = p->cont_mark_stack_segments[findpos >> SCHEME_LOG_MARK_SEGMENT_SIZE]; - pos = findpos & SCHEME_MARK_SEGMENT_MASK; - cache = seg[pos].cache; - if (!cache || !SCHEME_VECTORP(cache)) { - /* No cache so far, so map one key */ - cache = scheme_make_vector(3, NULL); - if (seg[pos].cache && !SCHEME_FALSEP(seg[pos].cache)) - SCHEME_VEC_ELS(cache)[0] = seg[pos].cache; - SCHEME_VEC_ELS(cache)[1] = key; - SCHEME_VEC_ELS(cache)[2] = val; - seg[pos].cache = cache; - } else { - if (!null_val_key) { - REGISTER_SO(null_val_key); - null_val_key = scheme_make_symbol("nul"); - } + pos = startpos - findpos; + if (pos > 16) { + pos >>= 1; + findpos = findpos + pos; + if (mc) { + seg = mc->cont_mark_stack_copied; + pos = findpos; + } else { + seg = p->cont_mark_stack_segments[findpos >> SCHEME_LOG_MARK_SEGMENT_SIZE]; + pos = findpos & SCHEME_MARK_SEGMENT_MASK; + } - if (SCHEME_VEC_ELS(cache)[1]) { - /* More than one cached key, now; create hash table */ - Scheme_Hash_Table *ht; - Scheme_Object *v2; - ht = scheme_make_hash_table(SCHEME_hash_ptr); - scheme_hash_set(ht, key, val ? val : null_val_key); - v2 = SCHEME_VEC_ELS(cache)[2]; - scheme_hash_set(ht, SCHEME_VEC_ELS(cache)[1], v2 ? v2 : null_val_key); - SCHEME_VEC_ELS(cache)[1] = NULL; - SCHEME_VEC_ELS(cache)[2] = (Scheme_Object *)ht; - } else { - /* Already have a hash table */ - Scheme_Hash_Table *ht; - ht = (Scheme_Hash_Table *)SCHEME_VEC_ELS(cache)[2]; - scheme_hash_set(ht, key, val ? val : null_val_key); - } + /* See continuation_marks() for information on what + cache can be: */ + cache = seg[pos].cache; + { + Scheme_Hash_Table *cht; + if (cache && SCHEME_HASHTP(cache)) { + cht = (Scheme_Hash_Table *)cache; + cache = scheme_hash_get(cht, prompt_tag ? prompt_tag : scheme_false); + } else if (prompt_tag) { + cht = scheme_make_hash_table(SCHEME_hash_ptr); + if (cache) { + if (SCHEME_VECTORP(cache)) { + Scheme_Object *vec; + if (SCHEME_VEC_ELS(cache)[0]) + scheme_hash_set(cht, scheme_default_prompt_tag, SCHEME_VEC_ELS(cache)[0]); + /* Don't try to use cache just for the null key */ + vec = scheme_make_vector(3, NULL); + SCHEME_VEC_ELS(vec)[1] = SCHEME_VEC_ELS(cache)[1]; + SCHEME_VEC_ELS(vec)[2] = SCHEME_VEC_ELS(cache)[2]; + scheme_hash_set(cht, scheme_false, vec); + } else { + scheme_hash_set(cht, scheme_default_prompt_tag, cache); + } + cache = NULL; + } + seg[pos].cache = (Scheme_Object *)cht; + } else + cht = NULL; + + if (!cache || !SCHEME_VECTORP(cache)) { + /* No cache so far, so map one key */ + cache = scheme_make_vector(3, NULL); + SCHEME_VEC_ELS(cache)[1] = key; + SCHEME_VEC_ELS(cache)[2] = val; + if (cht) { + scheme_hash_set(cht, prompt_tag ? prompt_tag : scheme_false, cache); + } else { + if (seg[pos].cache && !SCHEME_FALSEP(seg[pos].cache)) + SCHEME_VEC_ELS(cache)[0] = seg[pos].cache; + seg[pos].cache = cache; + } + } else { + if (!null_val_key) { + REGISTER_SO(null_val_key); + null_val_key = scheme_make_symbol("nul"); + } + + if (SCHEME_VEC_ELS(cache)[1]) { + /* More than one cached key, now; create hash table */ + Scheme_Hash_Table *ht; + Scheme_Object *v2; + ht = scheme_make_hash_table(SCHEME_hash_ptr); + scheme_hash_set(ht, key, val ? val : null_val_key); + v2 = SCHEME_VEC_ELS(cache)[2]; + scheme_hash_set(ht, SCHEME_VEC_ELS(cache)[1], v2 ? v2 : null_val_key); + SCHEME_VEC_ELS(cache)[1] = NULL; + SCHEME_VEC_ELS(cache)[2] = (Scheme_Object *)ht; + } else { + /* Already have a hash table */ + Scheme_Hash_Table *ht; + ht = (Scheme_Hash_Table *)SCHEME_VEC_ELS(cache)[2]; + scheme_hash_set(ht, key, val ? val : null_val_key); + } + } + } } - } - if (val) - return val; + if (val) { + if (meta) + *meta = mc; + return val; + } + + if (mc) { + mc = mc->next; + } else { + mc = p->meta_continuation; + } + } while (mc); } if (key == scheme_parameterization_key) { @@ -4471,16 +6048,59 @@ scheme_extract_one_cc_mark(Scheme_Object *mark_set, Scheme_Object *key) return NULL; } +Scheme_Object * +scheme_extract_one_cc_mark(Scheme_Object *mark_set, Scheme_Object *key) +{ + return scheme_extract_one_cc_mark_with_meta(mark_set, key, NULL, NULL); +} + +Scheme_Object * +scheme_extract_one_cc_mark_to_tag(Scheme_Object *mark_set, Scheme_Object *key, + Scheme_Object *prompt_tag) +{ + return scheme_extract_one_cc_mark_with_meta(mark_set, key, prompt_tag, NULL); +} + static Scheme_Object * extract_one_cc_mark(int argc, Scheme_Object *argv[]) { Scheme_Object *r; + Scheme_Object *prompt_tag; if (SCHEME_TRUEP(argv[0]) && !SAME_TYPE(SCHEME_TYPE(argv[0]), scheme_cont_mark_set_type)) scheme_wrong_type("continuation-mark-set-first", "continuation-mark-set or #f", 0, argc, argv); - r = scheme_extract_one_cc_mark(SCHEME_TRUEP(argv[0]) ? argv[0] : NULL, argv[1]); + if ((argv[1] == scheme_parameterization_key) + || (argv[1] == scheme_break_enabled_key)) { + /* Minor hack: these keys are used in "startup.ss" to access + parameterizations, and we want that access to go through + prompts. If they keys somehow leake, it's ok, because that + doesn't expose anything that isn't already exposed by functions + like `current-parameterization'. */ + prompt_tag = NULL; + } else + prompt_tag = scheme_default_prompt_tag; + + if (argc > 3) { + if (!SAME_TYPE(scheme_prompt_tag_type, SCHEME_TYPE(argv[3]))) { + scheme_wrong_type("continuation-mark-set-first", "continuation-prompt-tag", + 3, argc, argv); + } + prompt_tag = argv[3]; + + if (!SAME_OBJ(scheme_default_prompt_tag, prompt_tag)) { + if (SCHEME_FALSEP(argv[0])) { + if (!scheme_extract_one_cc_mark(NULL, SCHEME_PTR_VAL(prompt_tag))) + scheme_arg_mismatch("continuation-mark-set-first", + "no corresponding prompt in the current continuation: ", + prompt_tag); + } + } + } + + r = scheme_extract_one_cc_mark_with_meta(SCHEME_TRUEP(argv[0]) ? argv[0] : NULL, argv[1], + prompt_tag, NULL); if (!r) { if (argc > 2) r = argv[2]; @@ -4491,6 +6111,53 @@ extract_one_cc_mark(int argc, Scheme_Object *argv[]) return r; } +static Scheme_Object *continuation_prompt_available(int argc, Scheme_Object *argv[]) +{ + Scheme_Object *prompt_tag; + + prompt_tag = argv[0]; + if (!SAME_TYPE(scheme_prompt_tag_type, SCHEME_TYPE(prompt_tag))) { + scheme_wrong_type("continuation-prompt-available?", "continuation-prompt-tag", + 0, argc, argv); + } + + if (argc > 1) { + if (SCHEME_ECONTP(argv[1])) { + if (!scheme_escape_continuation_ok(argv[1])) { + scheme_arg_mismatch("continuation-prompt-available?", + "escape continuation not in the current thread's continuation: ", + argv[1]); + return NULL; + } else { + Scheme_Meta_Continuation *mc; + + if (SAME_OBJ(scheme_default_prompt_tag, prompt_tag)) + return scheme_true; + + scheme_extract_one_cc_mark_with_meta(NULL, argv[1], NULL, &mc); + + if (continuation_marks(scheme_current_thread, NULL, argv[1], mc, prompt_tag, + NULL, 0)) + return scheme_true; + } + } else if (SCHEME_CONTP(argv[1])) { + if (continuation_marks(NULL, argv[1], NULL, NULL, prompt_tag, NULL, 0)) + return scheme_true; + } else { + scheme_wrong_type("continuation-prompt-available?", "continuation", + 1, argc, argv); + } + } else { + if (SAME_OBJ(scheme_default_prompt_tag, prompt_tag)) + return scheme_true; + + if (scheme_extract_one_cc_mark(NULL, SCHEME_PTR_VAL(prompt_tag))) + return scheme_true; + } + + return scheme_false; +} + /*========================================================================*/ /* dynamic-wind */ /*========================================================================*/ @@ -4507,6 +6174,7 @@ static void pre_post_dyn_wind(Scheme_Object *prepost) /* Cancel internal suspend in eval or dyn-wind, because we convert it to a parameterize. */ --scheme_current_thread->suspend_break; + ASSERT_SUSPEND_BREAK_ZERO(); scheme_push_break_enable(&cframe, 0, 0); @@ -4613,8 +6281,13 @@ Scheme_Object *scheme_dynamic_wind(void (*pre)(void *), dw->pre = pre; dw->post = post; dw->prev = p->dw; + if (dw->prev) + dw->depth = dw->prev->depth + 1; + else + dw->depth = 0; if (pre) { + ASSERT_SUSPEND_BREAK_ZERO(); p->suspend_break++; pre(data); p = scheme_current_thread; @@ -4631,16 +6304,14 @@ Scheme_Object *scheme_dynamic_wind(void (*pre)(void *), if (scheme_setjmp(newbuf)) { p = scheme_current_thread; scheme_restore_env_stack_w_thread(dw->envss, p); - if (p->dw != dw) { + if ((p->dw != dw) + && (!p->dw || !dw->id || (p->dw->id != dw->id))) { /* Apparently, a full continuation jump was interrupted by an escape continuation jump (in a dw pre or post thunk). Either - - 1) this dw's post is already done for an interupted upward - jump; or - - 2) we never actually got this far for an interrupted - downward jump. - + 1. this dw's post is already done for an interupted upward + jump; or + 2. we never actually got this far for an interrupted + downward jump. In either case, skip up until we get to the right level. */ scheme_longjmp(*dw->saveerr, 1); } else { @@ -4674,7 +6345,8 @@ Scheme_Object *scheme_dynamic_wind(void (*pre)(void *), save_values = NULL; } - p->dw = dw->prev; + p->dw = p->dw->prev; /* note: use p->dw, not dw, in case + continuation was composed */ /* Don't run Scheme-based dyn-winds when we're killing a nested thread. */ if (err && p->cjs.is_kill && (post == post_dyn_wind)) @@ -4687,9 +6359,14 @@ Scheme_Object *scheme_dynamic_wind(void (*pre)(void *), scheme_restore_env_stack_w_thread(dw->envss, p); err = 1; } else { + Scheme_Continuation_Jump_State cjs; p = scheme_current_thread; + ASSERT_SUSPEND_BREAK_ZERO(); p->suspend_break++; + copy_cjs(&cjs, &p->cjs); + reset_cjs(&p->cjs); post(data); + copy_cjs(&p->cjs, &cjs); p = scheme_current_thread; --p->suspend_break; } @@ -4713,6 +6390,93 @@ Scheme_Object *scheme_dynamic_wind(void (*pre)(void *), return v; } +void scheme_apply_dw_in_meta(Scheme_Dynamic_Wind *dw, int post_part, int meta_depth) +{ + /* Run the given dw pre/post thunk, but let it see only the + continuation marks starting with the given meta-continuation. + We don't want to actually prune the meta-continuation, since + that would be out of sync with the control state, so we instead + replace the first meta_depth frames to prune the continuation marks. + On return, we have to unprune those marks. (If there's an escape, + then we don't have to unprune, because the escape jumps out of + the pruned meta-continuations.) Unfortunately, pruning this way + requires time proportional to the meta depth. + + The pre/post thunk might install it's own marks. In that case, it + uses the current mark stack. We don't care about the current mark + stack's state, since we're either on our way out, or we're on our + way in an we haven't started restoring the marks. So start with + a clean mark stack, but make sure it doesn't appear to be in tail + position for a meta-continuation. + + The pre/post thunk might jump, or it might capture a continuation that + is later restored. In that case, the meta-continuation can be extended + or different by the time we get back. That's why we take a meta_depth, + rather than a meta continuation (i.e., the loop that calls this + function shouldn't remember meta-continuations). The meta-continuation + can't become shorter than the current needed meta_depth. It may become + shorter than it was originally, which is relevant to a post loop that + calls this function; but the d-w list for posts will become shorter in + that case, too, so the post loop is fine as long as it consults + scheme_current_thread->dw. + */ + Scheme_Thread *p = scheme_current_thread; + Scheme_Meta_Continuation *mc, *old_mc, *rest; + long delta; + int i; + + MZ_CONT_MARK_STACK = p->cont_mark_stack_bottom; + MZ_CONT_MARK_POS = p->meta_continuation->meta_tail_pos + 2; + + old_mc = p->meta_continuation; + + /* clone the first meta_depth meta continuations: */ + for (i = 0, rest = old_mc; i < meta_depth; i++) { + rest = rest->next; + } + mc = clone_meta_cont(p->meta_continuation, NULL, meta_depth, NULL, NULL, rest); + p->meta_continuation = mc; + + /* strip the marks of the first meta_depth-1 meta continuations */ + rest = mc; + for (i = 0; i < meta_depth - 1; i++) { + rest->cont_mark_shareable = 0; + rest->cont_mark_offset = 0; + rest->cont_mark_stack_copied = NULL; + rest = rest->next; + } + + /* prune the meta_depth's meta continuation's marks. */ + delta = dw->envss.cont_mark_stack - rest->cont_mark_offset; + if (delta) { + rest->cont_mark_shareable -= delta; + rest->cont_mark_offset += delta; + if (rest->cont_mark_shareable) { + Scheme_Cont_Mark *cp; + cp = MALLOC_N(Scheme_Cont_Mark, rest->cont_mark_shareable); + memcpy(cp, rest->cont_mark_stack_copied + delta, rest->cont_mark_shareable * sizeof(Scheme_Cont_Mark)); + rest->cont_mark_stack_copied = cp; + } else + rest->cont_mark_stack_copied = NULL; + } + + /* Run the post or pre thunk: */ + if (post_part) { + DW_PrePost_Proc post = dw->post; + post(dw->data); + } else { + DW_PrePost_Proc pre = dw->pre; + pre(dw->data); + } + + /* restore the first meta_depth meta continuations: */ + for (i = 0, rest = p->meta_continuation; i < meta_depth; i++) { + rest = rest->next; + } + old_mc = clone_meta_cont(old_mc, NULL, meta_depth, NULL, NULL, rest); + p->meta_continuation = old_mc; +} + /*========================================================================*/ /* time */ /*========================================================================*/ diff --git a/src/mzscheme/src/hash.c b/src/mzscheme/src/hash.c index 595fac4f0e..c9e55d5d86 100644 --- a/src/mzscheme/src/hash.c +++ b/src/mzscheme/src/hash.c @@ -291,6 +291,9 @@ static Scheme_Object *do_hash_set(Scheme_Hash_Table *table, Scheme_Object *key, h = (h + h2) & mask; } + if (!val) + return NULL; + if (set == 1) h = useme; else if (table->mcount * FILL_FACTOR >= table->size) { diff --git a/src/mzscheme/src/image.c b/src/mzscheme/src/image.c index 5991538b06..e6b8adf1af 100644 --- a/src/mzscheme/src/image.c +++ b/src/mzscheme/src/image.c @@ -22,31 +22,11 @@ All rights reserved. */ +/* Images are long since unsupported, so all that's left is this + little trampoline. */ + #include "schpriv.h" -#ifdef UNIX_IMAGE_DUMPS -#include "schmach.h" -#ifdef FILES_HAVE_FDS -# include -# include -# ifdef SELECT_INCLUDE -# include -# endif -#endif -#ifndef NO_USER_BREAK_HANDLER -# include -#endif -#ifdef UNISTD_INCLUDE -# include -#endif -#ifdef UNIX_IMAGE_DUMPS -# include -# include "schgc.h" -#endif - -extern void *GC_get_stack_base(); -#endif - MZ_DLLSPEC int (*scheme_actual_main)(int argc, char **argv); void scheme_set_actual_main(int (*m)(int argc, char **argv)) @@ -54,720 +34,11 @@ void scheme_set_actual_main(int (*m)(int argc, char **argv)) scheme_actual_main = m; } -#ifdef UNIX_IMAGE_DUMPS -static Scheme_Object *(*scheme_dump_heap)(char *filename) = NULL; -static Scheme_Object *(*scheme_load_heap)(char *filename, Scheme_Object *argvec) = NULL; -#endif - -static char *no_dumps; -extern int scheme_file_open_count; -#ifdef UNIX_PROCESSES -extern void *scheme_system_children; -#endif - -static Scheme_Object *dump_heap(int argc, Scheme_Object **argv); -static Scheme_Object *load_heap(int argc, Scheme_Object **argv); - -void scheme_init_image(Scheme_Env *env) -{ - scheme_add_global_constant("write-image-to-file", - scheme_make_prim_w_arity(dump_heap, - "write-image-to-file", - 1, 2), - env); - scheme_add_global_constant("read-image-from-file", - scheme_make_prim_w_arity(load_heap, - "read-image-from-file", - 2, 2), - env); -} - -void scheme_no_dumps(char *why) -{ - if (why && !no_dumps) - no_dumps = why; -} - -static Scheme_Object *dump_heap(int argc, Scheme_Object **argv) -{ - char *filename; - - if (!SCHEME_PATH_STRINGP(argv[0])) - scheme_wrong_type("write-image-to-file", SCHEME_PATH_STRING_STR, 0, argc, argv); - if (argc > 1) - if (!SCHEME_FALSEP(argv[1])) - scheme_check_proc_arity("write-image-to-file", 0, - 1, argc, argv); - - filename = scheme_expand_string_filename(argv[0], - "write-image-to-file", NULL, - SCHEME_GUARD_FILE_WRITE); - -#ifdef UNIX_IMAGE_DUMPS - if (scheme_dump_heap) { - if (no_dumps) { - scheme_raise_exn(MZEXN_FAIL_FILESYSTEM, - "write-image-to-file: image cannot be saved; %s", - no_dumps); - return NULL; - } else if (scheme_file_open_count) { - scheme_raise_exn(MZEXN_FAIL_CONTRACT, - "write-image-to-file: a file, process, or TCP port is open (%d)", - scheme_file_open_count); - return NULL; -#ifdef UNIX_PROCESSES - } else if (scheme_system_children) { - scheme_raise_exn(MZEXN_FAIL_CONTRACT, - "write-image-to-file: a subprocess is still active"); - return NULL; -#endif - } else { - Scheme_Object *v; - v = scheme_dump_heap(filename); - if (!v) { - if (argc > 1) { - if (SCHEME_FALSEP(argv[1])) - exit(0); - else - return _scheme_tail_apply(argv[1], 0, NULL); - } else - return scheme_void; - } else - return v; - } - } -#endif - - scheme_raise_exn(MZEXN_FAIL_UNSUPPORTED, - "write-image-to-file: not supported"); - return NULL; -} - -static Scheme_Object *load_heap(int argc, Scheme_Object **argv) -{ - char *filename; - int bad = 0; - - if (!SCHEME_PATH_STRINGP(argv[0])) - scheme_wrong_type("read-image-from-file", SCHEME_PATH_STRING_STR, 0, argc, argv); - - if (SCHEME_VECTORP(argv[1])) { - Scheme_Object **a; - int i; - - a = SCHEME_VEC_ELS(argv[1]); - for (i = SCHEME_VEC_SIZE(argv[1]); i--; ) { - if (!SCHEME_BYTE_STRINGP(a[i])) { - bad = 1; - break; - } - } - } else - bad = 1; - - if (bad) - scheme_wrong_type("read-image-from-file", "vector of strings", 0, argc, argv); - - filename = scheme_expand_string_filename(argv[0], - "read-image-from-file", NULL, - SCHEME_GUARD_FILE_READ); - -#ifdef UNIX_IMAGE_DUMPS - if (scheme_load_heap) - scheme_load_heap(filename, argv[1]); -#endif - - scheme_raise_exn(MZEXN_FAIL_UNSUPPORTED, - "read-image-from-file: not supported"); - return NULL; -} - -/******************************************************************************/ - -#ifdef UNIX_IMAGE_DUMPS - -/* XXX_SKIP_PLT makes images sortof work for dynamically-linked programs */ - -#if defined(sun) && defined(ECHRNG) -# define SOLARIS_SKIP_PLT -#endif - -#if 0 && defined(__FreeBSD__) -# define FREEBSD_SKIP_PLT -#endif - -static char *restore_brk; - -static unsigned long stack_base; -static unsigned long orig_brk; -static int data_count; -static unsigned long *data_starts; -static unsigned long *data_ends; -typedef unsigned long ptr_t; -typedef unsigned long word; - -static Scheme_Jumpup_Buf **restore_launch_ubuf; - -extern char **environ; - -#include -#include -#include -#include - -#include "../gc/include/private/gcconfig.h" - -static void die_now(char *phase, char *file) -{ - printf("Restore from \"%s\" failed at %s (%d)\n", file, phase, errno); - exit(-1); -} - -#if defined(linux) || defined(__FreeBSD__) -# define FIND_WRITEABLE_SECTION -#endif - -#ifdef FIND_WRITEABLE_SECTION -static unsigned long current_value; -static mz_jmp_buf goback; - -static void bus_error(int ignore) -{ - scheme_longjmp(goback, 1); -} -#endif - -static void do_restore_env_argv(long orig_len, long len, - char *start, char *carry, mz_jmp_buf b) -{ - char buffer[1024]; - - if (len < 0) { - long l, i; - Scheme_Object *v; - - FLUSH_REGISTER_WINDOWS; - - if ((unsigned long)carry < (unsigned long)start) - start = carry; - - memcpy(start, restore_brk + sizeof(long), orig_len); - brk(restore_brk); - - l = *(long *)start; - start += sizeof(long); - environ = malloc(sizeof(char *) * (l + 1)); - environ[l] = NULL; - for (i = 0; i < l; i++) { - int l = strlen(start); - environ[i] = malloc(l + 1); - memcpy(environ[i], start, l + 1); - start += l + 1; - } - - /* align for long */ - if ((long)start & (sizeof(long) - 1)) - start += (sizeof(long) - ((long)start & (sizeof(long) - 1))); - - l = *(long *)start; - start += sizeof(long); - v = scheme_make_vector(l, scheme_null); - for (i = 0; i < l; i++) { - SCHEME_VEC_ELS(v)[i] = scheme_make_string(start); - start += strlen(start) + 1; - } - - scheme_longjmp(b, (long)v); - } else - do_restore_env_argv(orig_len, len - 1024, - start ? start : buffer, buffer, b); -} - -static Scheme_Object *restore_env_argv(long len) -{ - mz_jmp_buf buf; - Scheme_Object *v; - - /* We're going to trash the stack, so we'll need to escape */ - v = (Scheme_Object *)scheme_setjmp(buf); - - if (!v) - do_restore_env_argv(len, len, NULL, NULL, buf); - - return v; -} - -static Scheme_Object *dump_image(char *filename) -{ - Scheme_Jumpup_Buf *buf; - Scheme_Object *v; - - buf = (Scheme_Jumpup_Buf *)scheme_malloc(sizeof(Scheme_Jumpup_Buf)); - scheme_init_jmpup_buf(buf); - - if (!scheme_setjmpup(buf, buf, (void *)stack_base)) { - unsigned long current_brk = (unsigned long)sbrk(0); - int fd; - - do { - fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0644); - } while ((fd == -1) && (errno == EINTR)); - - if (fd == -1) { - scheme_raise_exn(MZEXN_FAIL_FILESYSTEM, - "write-image-to-file: couldn't write file \"%q\"", - filename); - } else { - int i; - const char *machine = scheme_system_library_subpath(); - unsigned char len = strlen(machine); - - write(fd, (char *)&len, sizeof(char)); - write(fd, (char *)machine, len); - - len = strlen(MZSCHEME_VERSION); - write(fd, (char *)&len, sizeof(char)); - write(fd, (char *)MZSCHEME_VERSION, len); - - write(fd, (char *)&data_count, sizeof(int)); - for (i = 0; i < data_count; i++) { - write(fd, (char *)&(data_starts[i]), sizeof(unsigned long)); - write(fd, (char *)&(data_ends[i]), sizeof(unsigned long)); - } - write(fd, (char *)&orig_brk, sizeof(unsigned long)); - write(fd, (char *)&stack_base, sizeof(unsigned long)); - - for (i = 0; i < data_count; i++) { - write(fd, (char *)data_starts[i], data_ends[i] - data_starts[i]); - } - - write(fd, (char *)¤t_brk, sizeof(unsigned long)); - write(fd, (char *)orig_brk, current_brk - orig_brk); - write(fd, (char *)&buf, sizeof(Scheme_Jumpup_Buf *)); - - close(fd); - } - - v = NULL; - } else { - /* We've been restored. environ contains a pointer to environment + argv. */ - long len; - - len = *(long *)restore_brk; - v = restore_env_argv(len); - } - - /* zero it back out for GC */ - scheme_init_jmpup_buf(buf); - - return v; -} - -static void mismatch(int which, unsigned long a, unsigned long b, char *file, void (*die)(char *c1, char *c2)) -{ - char buffer[256]; - errno = which; - sprintf(buffer, "setup mismatch [%lx vs %lx]", a, b); - die(buffer, file); -} - -static void do_restore_image(char *file, int argc, char **argv, - Scheme_Jumpup_Buf **ubuf, - void (*die)(char *c1, char *c2), - long env_len, char *env_space1, char *env_space2) -{ -# define MACHVERS_MAX_LEN 100 - int fd; - int i, count; - long argv_len; - unsigned long current_brk; - unsigned long saved_data_start, saved_data_end, saved_orig_brk, saved_stack_base; - int saved_data_count; - const char *machine = scheme_system_library_subpath(); - char machvers[MACHVERS_MAX_LEN]; - unsigned char len; - char **save_environ; - - do { - fd = open(file, O_RDONLY); - } while ((fd == -1) && (errno == EINTR)); - - if (fd == -1) - die("open", file); - - if (read(fd, (char *)&len, sizeof(char)) != sizeof(char)) { - close(fd); - die("getting machine type", file); - } - if (len >= MACHVERS_MAX_LEN) { - close(fd); - die("getting machine type", file); - } - if (read(fd, (char *)machvers, len) != len) { - close(fd); - die("getting machine type", file); - } - machvers[len] = 0; - if (strcmp(machvers, machine)) { - char buffer[256]; - sprintf(buffer, "machine type: image is %s, this is %s", machvers, machine); - die(buffer, file); - } - - - if (read(fd, (char *)&len, sizeof(char)) != sizeof(char)) { - close(fd); - die("getting version", file); - } - if (len >= MACHVERS_MAX_LEN) { - close(fd); - die("getting version", file); - } - if (read(fd, (char *)machvers, len) != len) { - close(fd); - die("getting version", file); - } - machvers[len] = 0; - if (strcmp(machvers, MZSCHEME_VERSION)) { - char buffer[256]; - sprintf(buffer, "version: image is %s, this is %s", machvers, machine); - die(buffer, file); - } - - if (read(fd, (char *)&saved_data_count, sizeof(int)) != sizeof(int)) { - close(fd); - die("setup", file); - } - if (saved_data_count != data_count) { - close(fd); - mismatch(-1, saved_data_count, data_count, file, die); - } - for (i = 0; i < data_count; i++) { - if (read(fd, (char *)&saved_data_start, sizeof(unsigned long)) != sizeof(unsigned long) - || read(fd, (char *)&saved_data_end, sizeof(unsigned long)) != sizeof(unsigned long)) { - close(fd); - die("setup", file); - } - if (saved_data_start != data_starts[i]) { - close(fd); - mismatch(-10 * (i + 1), saved_data_start, data_starts[i], file, die); - } - if (saved_data_end != data_ends[i]) { - close(fd); - mismatch(-1000 + -10 * (i + 1), saved_data_end, data_ends[i], file, die); - } - } - - if (read(fd, (char *)&saved_orig_brk, sizeof(unsigned long)) != sizeof(unsigned long) - || read(fd, (char *)&saved_stack_base, sizeof(unsigned long)) != sizeof(unsigned long)) { - close(fd); - die("setup", file); - } - - if (saved_orig_brk != orig_brk) { - close(fd); - mismatch(-3, saved_orig_brk, orig_brk, file, die); - } - if (saved_stack_base != stack_base) { - close(fd); - mismatch(-4, saved_stack_base, stack_base, file, die); - } - - if ((unsigned long)env_space1 > (unsigned long)env_space2) - env_space1 = env_space2; - - save_environ = (char **)env_space1; - for (i = 0; environ[i]; i++) {} - env_space1 += i * sizeof(char *); - for (i = 0; environ[i]; i++) { - int l; - save_environ[i] = env_space1; - l = strlen(environ[i]); - memcpy(save_environ[i], environ[i], l + 1); - env_space1 += l + 1; - } - count = i; - - for (i = 0; i < data_count; i++) { - if (read(fd, (char *)data_starts[i], data_ends[i] - data_starts[i]) != (data_ends[i] - data_starts[i])) - die_now("data", file); - } - if (read(fd, (char *)¤t_brk, sizeof(unsigned long)) != sizeof(unsigned long)) - die_now("data position", file); - brk((void *)current_brk); - if (read(fd, (char *)orig_brk, current_brk - orig_brk) != (current_brk - orig_brk)) - die_now("dynamic data", file); - if (read(fd, (char *)ubuf, sizeof(Scheme_Jumpup_Buf *)) != sizeof(Scheme_Jumpup_Buf *)) - die_now("stack", file); - - close(fd); - - /* Use sbrk to make room for env and argv; this will have to be restored - in a tricky way. */ - - argv_len = sizeof(long); - for (i = 0; i < argc; i++) { - argv_len += strlen(argv[i]) + 1; - } - - env_len += sizeof(long); - - restore_brk = sbrk(env_len + argv_len + 2 * sizeof(long)); - - env_space1 = restore_brk; - *(long *)env_space1 = env_len + argv_len + sizeof(long); - env_space1 += sizeof(long); - - *(long *)env_space1 = count; - env_space1 += sizeof(long); - for (i = 0; i < count; i++) { - int l = strlen(save_environ[i]); - memcpy(env_space1, save_environ[i], l + 1); - env_space1 += l + 1; - } - - /* align for long */ - if ((long)env_space1 & (sizeof(long) - 1)) - env_space1 += (sizeof(long) - ((long)env_space1 & (sizeof(long) - 1))); - - *(long *)env_space1 = argc; - env_space1 += sizeof(long); - for (i = 0; i < argc; i++) { - int l = strlen(argv[i]); - memcpy(env_space1, argv[i], l + 1); - env_space1 += l + 1; - } - - scheme_longjmpup(*ubuf); -} - -static void do_restore_image_with_space(char *file, int argc, char **argv, - Scheme_Jumpup_Buf **ubuf, - void (*die)(char *c1, char *c2), - long orig_len, long len, void *start, void *carry) -{ - char buffer[1024]; - - if (len < 1024) - do_restore_image(file, argc, argv, ubuf, die, orig_len, (char *)start, buffer); - else - do_restore_image_with_space(file, argc, argv, ubuf, die, orig_len, len - 1024, start, buffer); -} - -static void restore_image(char *file, int argc, char **argv, - Scheme_Jumpup_Buf **ubuf, - void (*die)(char *c1, char *c2)) -{ - int i; - long len = 0; - - for (i = 0; environ[i]; i++) { - len += strlen(environ[i]) + 1; - } - - len += sizeof(char **) * (i + 1); - - do_restore_image_with_space(file, argc, argv, ubuf, die, len, len, &len, &len); -} - - -static void read_image_exn(char *phase, char *file) -{ - scheme_raise_exn(MZEXN_FAIL, - "read-image-from-file: restore from \"%q\" failed at %s (%d).", - file, phase, errno); -} - -static Scheme_Object *load_image(char *filename, Scheme_Object *argvec) -{ -# define MAX_ARGV 20 -# define MAX_ARGLEN 2048 - char *argv[MAX_ARGV], argspace[MAX_ARGLEN + MAX_ARGV], *s; - int i, count; - long l; - Scheme_Object **a; - - count = SCHEME_VEC_SIZE(argvec); - if (count > MAX_ARGV) - scheme_raise_exn(MZEXN_FAIL, - "read-image-from-file: too many string arguments; " - "maximum is %d", MAX_ARGV); - - l = 0; - - a = SCHEME_VEC_ELS(argvec); - for (i = count; i--; ) { - l += SCHEME_STRTAG_VAL(a[i]); - } - a = NULL; - - if (l > MAX_ARGLEN) - scheme_raise_exn(MZEXN_FAIL, - "read-image-from-file: string arguments too long; " - "maximum total length is %d", MAX_ARGLEN); - - s = argspace; - for (i = 0; i < count; i++) { - l = SCHEME_STRTAG_VAL(a[i]); - memcpy(s, SCHEME_STR_VAL(a[i]), l + 1); - argv[i] = s; - s += l + 1; - } - - restore_image(filename, count, argv, restore_launch_ubuf, read_image_exn); - - return NULL; -} - -#ifdef SOLARIS_SKIP_PLT -#include -unsigned long plt_start, plt_end; -void find_plt() -{ - extern Elf32_Dyn _DYNAMIC; - Elf32_Dyn *dp; - int tag; - - for (dp = ((Elf32_Dyn *)(&_DYNAMIC)); (tag = dp->d_tag) != DT_NULL; dp++) { - if (tag == DT_PLTGOT) { - plt_start = (unsigned long)dp->d_un.d_val; - } else if (tag == DT_PLTRELSZ) { - plt_end = (unsigned long)dp->d_un.d_val; - } - } - - plt_end += plt_start; -} -#endif - -#ifdef FREEBSD_SKIP_PLT -#include -#include -#include -static unsigned long plt_start, plt_end; -extern struct _dynamic _DYNAMIC; -void find_plt() -{ - plt_start = _DYNAMIC.d_un.d_sdt->sdt_plt; - plt_end = plt_start + _DYNAMIC.d_un.d_sdt->sdt_plt_sz; -} -#endif - -int scheme_image_main(int argc, char **argv) -{ - Scheme_Jumpup_Buf *buf; - - data_count = 1; - data_starts = malloc(sizeof(unsigned long)); - data_ends = malloc(sizeof(unsigned long)); - - stack_base = (unsigned long)GC_get_stack_base(); - data_starts[0] = (unsigned long)DATASTART; - data_ends[0] = (unsigned long)DATAEND; - orig_brk = data_ends[0]; - -#if defined(SOLARIS_SKIP_PLT) || defined(FREEBSD_SKIP_PLT) - { - unsigned long ds, de; - - ds = data_starts[0]; - de = data_ends[0]; - data_starts = malloc(2 * sizeof(unsigned long)); - data_ends = malloc(2 * sizeof(unsigned long)); - data_count = 2; - - find_plt(); - - data_starts[0] = ds; - data_ends[0] = plt_start; - data_starts[1] = plt_end; - data_ends[1] = de; - } -#endif - - scheme_dump_heap = dump_image; - scheme_load_heap = load_image; - -#ifdef FIND_WRITEABLE_SECTION - /* Find writeable section of text segment: */ - { - unsigned long ds; - - MZ_SIGSET(SIGBUS, bus_error); - MZ_SIGSET(SIGSEGV, bus_error); - - ds = data_starts[0]; - - if (!scheme_setjmp(goback)) { - for (current_value = data_ends[0]; (current_value -= sizeof(long)) > ds; ) { - *(unsigned long *)current_value = *(unsigned long *)current_value; - } - } - data_starts[0] = current_value + sizeof(long); - MZ_SIGSET(SIGBUS, SIG_DFL); - MZ_SIGSET(SIGSEGV, SIG_DFL); - } -#endif - - if ((argc > 1) && (!strcmp(argv[1], "--restore") - || !scheme_strncmp(argv[1], "-R", 2))) { - char *file, *exfile; - int startargs; - - if (argv[1][1] == 'R') { - file = argv[1] + 2; - if (!*file) { - printf("%s: Missing file name for -R.\n", argv[0]); - printf("Use the --help or -h flag for help.\n"); - return -1; - } - startargs = 2; - } else if (argc < 3) { - printf("%s: Missing file name for --restore.\n", argv[0]); - printf("Use the --help or -h flag for help.\n"); - return -1; - } else { - file = argv[2]; - startargs = 3; - } - - exfile = file; /* scheme_expand_filename(file, strlen(file), NULL, NULL); */ - if (!exfile) - die_now("bad filename", file); - - restore_image(exfile, argc - startargs, argv + startargs, &buf, die_now); - - die_now("stack jump", file); - } - - restore_launch_ubuf = &buf; - - { - /* Make a copy of argv so that it's definitely in the normal heap: */ - char **naya_argv; - int i; - - naya_argv = scheme_malloc(argc * sizeof(char *)); - for (i = 0; i < argc; i++) { - naya_argv[i] = scheme_strdup(argv[i]); - } - - /* doesn't support atexit(): */ - _exit(scheme_actual_main(argc, naya_argv)); - } - - return -1; -} - -#endif - -/******************************************************************************/ - -#ifndef UNIX_IMAGE_DUMPS - int scheme_image_main(int argc, char **argv) { return scheme_actual_main(argc, argv); } -#endif +void scheme_no_dumps(char *why) +{ +} diff --git a/src/mzscheme/src/jit.c b/src/mzscheme/src/jit.c index b8b50f18ec..65ce8a9d8d 100644 --- a/src/mzscheme/src/jit.c +++ b/src/mzscheme/src/jit.c @@ -1448,7 +1448,8 @@ static int generate_direct_prim_non_tail_call(mz_jit_state *jitter, int num_rand static int generate_retry_call(mz_jit_state *jitter, int num_rands, int multi_ok, GC_CAN_IGNORE jit_insn *reftop) /* If num_rands < 0, original argc is in V1, and we should - pop argc arguments off runstack before pushing more. */ + pop argc arguments off runstack before pushing more. + This function is called with short jumps enabled. */ { GC_CAN_IGNORE jit_insn *ref, *ref2, *refloop; @@ -1493,7 +1494,9 @@ static int generate_retry_call(mz_jit_state *jitter, int num_rands, int multi_ok mz_patch_branch(ref2); jit_ldxi_l(JIT_V1, JIT_R1, &((Scheme_Thread *)0x0)->ku.apply.tail_rator); jit_ldxi_l(JIT_R0, JIT_R1, &((Scheme_Thread *)0x0)->ku.apply.tail_num_rands); + __END_SHORT_JUMPS__(1); (void)jit_jmpi(reftop); + __START_SHORT_JUMPS__(1); /* Slow path; restore R0 to SCHEME_TAIL_CALL_WAITING */ mz_patch_branch(ref); @@ -2802,6 +2805,7 @@ static int generate_inlined_unary(mz_jit_state *jitter, Scheme_App2_Rec *app, in if (!i) { ref = jit_bmci_ul(jit_forward(), JIT_R0, 0x1); reffail = _jit.x.pc; + __END_SHORT_JUMPS__(1); if (steps == 1) { if (name[1] == 'a') { (void)jit_jmpi(bad_car_code); @@ -2823,6 +2827,7 @@ static int generate_inlined_unary(mz_jit_state *jitter, Scheme_App2_Rec *app, in } } } + __START_SHORT_JUMPS__(1); mz_patch_branch(ref); } else { (void)jit_bmsi_ul(reffail, JIT_R0, 0x1); @@ -2955,17 +2960,19 @@ static int generate_binary_char(mz_jit_state *jitter, Scheme_App3_Rec *app, CHECK_LIMIT(); __START_SHORT_JUMPS__(branch_short); - + if (!SCHEME_CHARP(r1)) { GC_CAN_IGNORE jit_insn *pref; pref = jit_bmci_ul(jit_forward(), JIT_R0, 0x1); reffail = _jit.x.pc; (void)jit_movi_p(JIT_R2, ((Scheme_Primitive_Proc *)rator)->prim_val); + __END_SHORT_JUMPS__(branch_short); if (direction > 0) { (void)jit_jmpi(call_original_binary_rev_arith_code); } else { (void)jit_jmpi(call_original_binary_arith_code); } + __START_SHORT_JUMPS__(branch_short); mz_patch_branch(pref); jit_ldxi_s(JIT_R2, JIT_R0, (int)&((Scheme_Object *)0x0)->type); (void)jit_bnei_i(reffail, JIT_R2, scheme_char_type); @@ -2980,11 +2987,13 @@ static int generate_binary_char(mz_jit_state *jitter, Scheme_App3_Rec *app, pref = jit_bmci_ul(jit_forward(), JIT_R1, 0x1); reffail = _jit.x.pc; (void)jit_movi_p(JIT_R2, ((Scheme_Primitive_Proc *)rator)->prim_val); + __END_SHORT_JUMPS__(branch_short); if (direction > 0) { (void)jit_jmpi(call_original_binary_rev_arith_code); } else { (void)jit_jmpi(call_original_binary_arith_code); } + __START_SHORT_JUMPS__(branch_short); mz_patch_branch(pref); } else { (void)jit_bmsi_ul(reffail, JIT_R1, 0x1); @@ -3939,16 +3948,20 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m /* R0 is space left (in bytes), R2 is argc */ jit_lshi_l(JIT_R2, JIT_R2, JIT_LOG_WORD_SIZE); if (is_tail) { + __END_SHORT_JUMPS__(1); (void)jit_bltr_ul(app_values_tail_slow_code, JIT_R0, JIT_R2); + __START_SHORT_JUMPS__(1); ref5 = 0; } else { GC_CAN_IGNORE jit_insn *refok; refok = jit_bger_ul(jit_forward(), JIT_R0, JIT_R2); + __END_SHORT_JUMPS__(1); if (multi_ok) { (void)jit_calli(app_values_multi_slow_code); } else { (void)jit_calli(app_values_slow_code); } + __START_SHORT_JUMPS__(1); ref5 = jit_jmpi(jit_forward()); mz_patch_branch(refok); } @@ -4965,13 +4978,9 @@ static int do_generate_common(mz_jit_state *jitter, void *_data) jit_addr_p(JIT_RUNSTACK_BASE, JIT_RUNSTACK_BASE, JIT_RUNSTACK); jit_jmpr(JIT_V1); CHECK_LIMIT(); - /* Slower path (non-tail) when argv != runstack. To simulate - a tail call, we must decrement the cont-mark pos. */ + /* Slower path (non-tail) when argv != runstack. */ mz_patch_branch(ref); mz_patch_branch(ref2); - jit_ldi_l(JIT_V1, &scheme_current_cont_mark_pos); - jit_subi_l(JIT_V1, JIT_V1, 2); - jit_sti_l(&scheme_current_cont_mark_pos, JIT_V1); CHECK_LIMIT(); mz_prepare(3); jit_pusharg_p(JIT_R2); @@ -4979,9 +4988,6 @@ static int do_generate_common(mz_jit_state *jitter, void *_data) jit_pusharg_p(JIT_R0); (void)mz_finish(_scheme_apply_multi_from_native); CHECK_LIMIT(); - jit_ldi_l(JIT_NOT_RET, &scheme_current_cont_mark_pos); - jit_addi_l(JIT_NOT_RET, JIT_NOT_RET, 2); - jit_sti_l(&scheme_current_cont_mark_pos, JIT_NOT_RET); mz_get_local_p(JIT_NOT_RET, JIT_LOCAL1); mz_pop_locals(); jit_ret(); @@ -6251,9 +6257,7 @@ Scheme_Object *scheme_native_stack_trace(void) stack_end -= (RETURN_ADDRESS_OFFSET << JIT_LOG_WORD_SIZE); tail = stack_cache_stack[stack_cache_stack_pos].cache; } else { - stack_end = (unsigned long)(scheme_current_thread->next - ? scheme_current_thread->stack_start - : scheme_current_thread->o_start); + stack_end = (unsigned long)ADJUST_STACK_START(scheme_current_thread->stack_start); tail = scheme_null; } diff --git a/src/mzscheme/src/lightning/ppc/asm.h b/src/mzscheme/src/lightning/ppc/asm.h index 76ee7e9331..9f05207970 100644 --- a/src/mzscheme/src/lightning/ppc/asm.h +++ b/src/mzscheme/src/lightning/ppc/asm.h @@ -352,19 +352,31 @@ typedef unsigned int jit_insn; #define CLRRWIrri(RA,RS,N) RLWINMrriii(RA, RS, 0, 0, 31-(N)) #define CLRLSLWIrrii(RA,RS,B,N) RLWINMrriii(RA, RS, N, (B)-(N), 31-(N)) +#if 0 +static int bad_short_jump() +{ + scheme_signal_error("bad short jump"); + return 1; +} +# define NOT_SHORT_JUMPS() (_jitl.long_jumps ? 0 : bad_short_jump()) , +#else +# define NOT_SHORT_JUMPS() /* empty */ +#endif /* 9 below inverts the branch condition and the branch prediction. * This has an incestuous knowledge of JIT_AUX */ #define BC_EXT(A, C, D) ((_siP(16, _jit_UL(D)-_jit_UL(_jit.x.pc)) && !_jitl.long_jumps) \ ? BCiii((A), (C), (D)) \ - : (BCiii((A)^9, (C), _jit.x.pc+5), \ + : (NOT_SHORT_JUMPS() \ + BCiii((A)^9, (C), _jit.x.pc+5), \ LISri(JIT_AUX,_HI(D)), \ ORIrri(JIT_AUX,JIT_AUX,_LO(D)), \ MTLRr(JIT_AUX), BLR() )) #define B_EXT(D) ((_siP(16, _jit_UL(D)-_jit_UL(_jit.x.pc)) && !_jitl.long_jumps) \ ? Bi((D)) \ - : (LISri(JIT_AUX,_HI(D)), \ + : (NOT_SHORT_JUMPS() \ + LISri(JIT_AUX,_HI(D)), \ ORIrri(JIT_AUX,JIT_AUX,_LO(D)), \ MTLRr(JIT_AUX), BLR()) ) diff --git a/src/mzscheme/src/mzmark.c b/src/mzscheme/src/mzmark.c index d6c8b3f334..4b15836641 100644 --- a/src/mzscheme/src/mzmark.c +++ b/src/mzscheme/src/mzmark.c @@ -882,14 +882,13 @@ static int cont_proc_MARK(void *p) { Scheme_Cont *c = (Scheme_Cont *)p; gcMARK(c->dw); - gcMARK(c->common); - gcMARK(c->ok); + gcMARK(c->prompt_tag); + gcMARK(c->meta_continuation); gcMARK(c->save_overflow); gcMARK(c->runstack_copied); gcMARK(c->runstack_owner); gcMARK(c->cont_mark_stack_copied); gcMARK(c->cont_mark_stack_owner); - gcMARK(c->orig_mark_segments); gcMARK(c->init_config); gcMARK(c->init_break_cell); #ifdef MZ_USE_JIT @@ -899,6 +898,15 @@ static int cont_proc_MARK(void *p) { MARK_jmpup(&c->buf); MARK_cjs(&c->cjs); MARK_stack_state(&c->ss); + gcMARK(c->runstack_start); + gcMARK(c->runstack_saved); + + /* These shouldn't actually persist across a GC, but + just in case... */ + gcMARK(c->value); + gcMARK(c->resume_to); + gcMARK(c->use_next_cont); + gcMARK(c->extra_marks); return gcBYTES_TO_WORDS(sizeof(Scheme_Cont)); @@ -908,14 +916,13 @@ static int cont_proc_FIXUP(void *p) { Scheme_Cont *c = (Scheme_Cont *)p; gcFIXUP(c->dw); - gcFIXUP(c->common); - gcFIXUP(c->ok); + gcFIXUP(c->prompt_tag); + gcFIXUP(c->meta_continuation); gcFIXUP(c->save_overflow); gcFIXUP(c->runstack_copied); gcFIXUP(c->runstack_owner); gcFIXUP(c->cont_mark_stack_copied); gcFIXUP(c->cont_mark_stack_owner); - gcFIXUP(c->orig_mark_segments); gcFIXUP(c->init_config); gcFIXUP(c->init_break_cell); #ifdef MZ_USE_JIT @@ -925,6 +932,15 @@ static int cont_proc_FIXUP(void *p) { FIXUP_jmpup(&c->buf); FIXUP_cjs(&c->cjs); FIXUP_stack_state(&c->ss); + gcFIXUP(c->runstack_start); + gcFIXUP(c->runstack_saved); + + /* These shouldn't actually persist across a GC, but + just in case... */ + gcFIXUP(c->value); + gcFIXUP(c->resume_to); + gcFIXUP(c->use_next_cont); + gcFIXUP(c->extra_marks); return gcBYTES_TO_WORDS(sizeof(Scheme_Cont)); @@ -934,6 +950,39 @@ static int cont_proc_FIXUP(void *p) { #define cont_proc_IS_CONST_SIZE 1 +static int meta_cont_proc_SIZE(void *p) { + return + gcBYTES_TO_WORDS(sizeof(Scheme_Meta_Continuation)); +} + +static int meta_cont_proc_MARK(void *p) { + Scheme_Meta_Continuation *c = (Scheme_Meta_Continuation *)p; + + gcMARK(c->prompt_tag); + gcMARK(c->overflow); + gcMARK(c->next); + gcMARK(c->cont_mark_stack_copied); + + return + gcBYTES_TO_WORDS(sizeof(Scheme_Meta_Continuation)); +} + +static int meta_cont_proc_FIXUP(void *p) { + Scheme_Meta_Continuation *c = (Scheme_Meta_Continuation *)p; + + gcFIXUP(c->prompt_tag); + gcFIXUP(c->overflow); + gcFIXUP(c->next); + gcFIXUP(c->cont_mark_stack_copied); + + return + gcBYTES_TO_WORDS(sizeof(Scheme_Meta_Continuation)); +} + +#define meta_cont_proc_IS_ATOMIC 0 +#define meta_cont_proc_IS_CONST_SIZE 1 + + static int mark_dyn_wind_SIZE(void *p) { return gcBYTES_TO_WORDS(sizeof(Scheme_Dynamic_Wind)); @@ -942,8 +991,9 @@ static int mark_dyn_wind_SIZE(void *p) { static int mark_dyn_wind_MARK(void *p) { Scheme_Dynamic_Wind *dw = (Scheme_Dynamic_Wind *)p; + gcMARK(dw->id); gcMARK(dw->data); - gcMARK(dw->cont); + gcMARK(dw->prompt_tag); gcMARK(dw->prev); MARK_stack_state(&dw->envss); @@ -955,8 +1005,9 @@ static int mark_dyn_wind_MARK(void *p) { static int mark_dyn_wind_FIXUP(void *p) { Scheme_Dynamic_Wind *dw = (Scheme_Dynamic_Wind *)p; + gcFIXUP(dw->id); gcFIXUP(dw->data); - gcFIXUP(dw->cont); + gcFIXUP(dw->prompt_tag); gcFIXUP(dw->prev); FIXUP_stack_state(&dw->envss); @@ -978,7 +1029,8 @@ static int mark_overflow_MARK(void *p) { Scheme_Overflow *o = (Scheme_Overflow *)p; gcMARK(o->prev); - MARK_jmpup(&o->cont); + gcMARK(o->jmp); + gcMARK(o->id); return gcBYTES_TO_WORDS(sizeof(Scheme_Overflow)); @@ -988,7 +1040,8 @@ static int mark_overflow_FIXUP(void *p) { Scheme_Overflow *o = (Scheme_Overflow *)p; gcFIXUP(o->prev); - FIXUP_jmpup(&o->cont); + gcFIXUP(o->jmp); + gcFIXUP(o->id); return gcBYTES_TO_WORDS(sizeof(Scheme_Overflow)); @@ -998,6 +1051,33 @@ static int mark_overflow_FIXUP(void *p) { #define mark_overflow_IS_CONST_SIZE 1 +static int mark_overflow_jmp_SIZE(void *p) { + return + gcBYTES_TO_WORDS(sizeof(Scheme_Overflow_Jmp)); +} + +static int mark_overflow_jmp_MARK(void *p) { + Scheme_Overflow_Jmp *o = (Scheme_Overflow_Jmp *)p; + + MARK_jmpup(&o->cont); + + return + gcBYTES_TO_WORDS(sizeof(Scheme_Overflow_Jmp)); +} + +static int mark_overflow_jmp_FIXUP(void *p) { + Scheme_Overflow_Jmp *o = (Scheme_Overflow_Jmp *)p; + + FIXUP_jmpup(&o->cont); + + return + gcBYTES_TO_WORDS(sizeof(Scheme_Overflow_Jmp)); +} + +#define mark_overflow_jmp_IS_ATOMIC 0 +#define mark_overflow_jmp_IS_CONST_SIZE 1 + + static int escaping_cont_proc_SIZE(void *p) { return gcBYTES_TO_WORDS(sizeof(Scheme_Escaping_Cont)); @@ -1006,13 +1086,10 @@ static int escaping_cont_proc_SIZE(void *p) { static int escaping_cont_proc_MARK(void *p) { Scheme_Escaping_Cont *c = (Scheme_Escaping_Cont *)p; - gcMARK(c->mark_key); - gcMARK(c->marks_prefix); #ifdef MZ_USE_JIT gcMARK(c->native_trace); #endif - MARK_cjs(&c->cjs); MARK_stack_state(&c->envss); return @@ -1022,13 +1099,10 @@ static int escaping_cont_proc_MARK(void *p) { static int escaping_cont_proc_FIXUP(void *p) { Scheme_Escaping_Cont *c = (Scheme_Escaping_Cont *)p; - gcFIXUP(c->mark_key); - gcFIXUP(c->marks_prefix); #ifdef MZ_USE_JIT gcFIXUP(c->native_trace); #endif - FIXUP_cjs(&c->cjs); FIXUP_stack_state(&c->envss); return @@ -1486,8 +1560,6 @@ static int thread_val_MARK(void *p) { MARK_cjs(&pr->cjs); - gcMARK(pr->current_escape_cont_key); - gcMARK(pr->cell_values); gcMARK(pr->init_config); gcMARK(pr->init_break_cell); @@ -1501,14 +1573,17 @@ static int thread_val_MARK(void *p) { gcMARK(pr->runstack_owner); gcMARK(pr->runstack_swapped); pr->spare_runstack = NULL; /* just in case */ + + gcMARK(pr->barrier_prompt); + gcMARK(pr->meta_prompt); + gcMARK(pr->meta_continuation); gcMARK(pr->cont_mark_stack_segments); gcMARK(pr->cont_mark_stack_owner); gcMARK(pr->cont_mark_stack_swapped); - + MARK_jmpup(&pr->jmpup_buf); - gcMARK(pr->cc_ok); gcMARK(pr->dw); gcMARK(pr->nester); @@ -1575,8 +1650,6 @@ static int thread_val_FIXUP(void *p) { FIXUP_cjs(&pr->cjs); - gcFIXUP(pr->current_escape_cont_key); - gcFIXUP(pr->cell_values); gcFIXUP(pr->init_config); gcFIXUP(pr->init_break_cell); @@ -1590,14 +1663,17 @@ static int thread_val_FIXUP(void *p) { gcFIXUP(pr->runstack_owner); gcFIXUP(pr->runstack_swapped); pr->spare_runstack = NULL; /* just in case */ + + gcFIXUP(pr->barrier_prompt); + gcFIXUP(pr->meta_prompt); + gcFIXUP(pr->meta_continuation); gcFIXUP(pr->cont_mark_stack_segments); gcFIXUP(pr->cont_mark_stack_owner); gcFIXUP(pr->cont_mark_stack_swapped); - + FIXUP_jmpup(&pr->jmpup_buf); - gcFIXUP(pr->cc_ok); gcFIXUP(pr->dw); gcFIXUP(pr->nester); @@ -1656,6 +1732,33 @@ static int thread_val_FIXUP(void *p) { #define thread_val_IS_CONST_SIZE 1 +static int prompt_val_SIZE(void *p) { + return + gcBYTES_TO_WORDS(sizeof(Scheme_Prompt)); +} + +static int prompt_val_MARK(void *p) { + Scheme_Prompt *pr = (Scheme_Prompt *)p; + gcMARK(pr->boundary_overflow_id); + gcMARK(pr->boundary_dw_id); + gcMARK(pr->runstack_boundary_start); + return + gcBYTES_TO_WORDS(sizeof(Scheme_Prompt)); +} + +static int prompt_val_FIXUP(void *p) { + Scheme_Prompt *pr = (Scheme_Prompt *)p; + gcFIXUP(pr->boundary_overflow_id); + gcFIXUP(pr->boundary_dw_id); + gcFIXUP(pr->runstack_boundary_start); + return + gcBYTES_TO_WORDS(sizeof(Scheme_Prompt)); +} + +#define prompt_val_IS_ATOMIC 0 +#define prompt_val_IS_CONST_SIZE 1 + + static int cont_mark_set_val_SIZE(void *p) { return gcBYTES_TO_WORDS(sizeof(Scheme_Cont_Mark_Set)); @@ -2256,6 +2359,7 @@ static int guard_val_MARK(void *p) { gcMARK(g->parent); gcMARK(g->file_proc); gcMARK(g->network_proc); + gcMARK(g->link_proc); return gcBYTES_TO_WORDS(sizeof(Scheme_Security_Guard)); } @@ -2266,6 +2370,7 @@ static int guard_val_FIXUP(void *p) { gcFIXUP(g->parent); gcFIXUP(g->file_proc); gcFIXUP(g->network_proc); + gcFIXUP(g->link_proc); return gcBYTES_TO_WORDS(sizeof(Scheme_Security_Guard)); } @@ -2546,24 +2651,20 @@ static int mark_saved_stack_SIZE(void *p) { } static int mark_saved_stack_MARK(void *p) { - Scheme_Saved_Stack *saved = (Scheme_Saved_Stack *) p; - Scheme_Object **old = saved->runstack_start; + Scheme_Saved_Stack *saved = (Scheme_Saved_Stack *)p; gcMARK(saved->prev); - gcMARK( saved->runstack_start); - saved->runstack = saved->runstack_start + (saved->runstack - old); + gcMARK(saved->runstack_start); return gcBYTES_TO_WORDS(sizeof(Scheme_Saved_Stack)); } static int mark_saved_stack_FIXUP(void *p) { - Scheme_Saved_Stack *saved = (Scheme_Saved_Stack *) p; - Scheme_Object **old = saved->runstack_start; + Scheme_Saved_Stack *saved = (Scheme_Saved_Stack *)p; gcFIXUP(saved->prev); - gcFIXUP_TYPED_NOW(Scheme_Object **, saved->runstack_start); - saved->runstack = saved->runstack_start + (saved->runstack - old); + gcFIXUP(saved->runstack_start); return gcBYTES_TO_WORDS(sizeof(Scheme_Saved_Stack)); diff --git a/src/mzscheme/src/mzmarksrc.c b/src/mzscheme/src/mzmarksrc.c index bb81b858fc..0c9ae75eee 100644 --- a/src/mzscheme/src/mzmarksrc.c +++ b/src/mzscheme/src/mzmarksrc.c @@ -329,14 +329,13 @@ cont_proc { Scheme_Cont *c = (Scheme_Cont *)p; gcMARK(c->dw); - gcMARK(c->common); - gcMARK(c->ok); + gcMARK(c->prompt_tag); + gcMARK(c->meta_continuation); gcMARK(c->save_overflow); gcMARK(c->runstack_copied); gcMARK(c->runstack_owner); gcMARK(c->cont_mark_stack_copied); gcMARK(c->cont_mark_stack_owner); - gcMARK(c->orig_mark_segments); gcMARK(c->init_config); gcMARK(c->init_break_cell); #ifdef MZ_USE_JIT @@ -346,17 +345,40 @@ cont_proc { MARK_jmpup(&c->buf); MARK_cjs(&c->cjs); MARK_stack_state(&c->ss); + gcMARK(c->runstack_start); + gcMARK(c->runstack_saved); + + /* These shouldn't actually persist across a GC, but + just in case... */ + gcMARK(c->value); + gcMARK(c->resume_to); + gcMARK(c->use_next_cont); + gcMARK(c->extra_marks); size: gcBYTES_TO_WORDS(sizeof(Scheme_Cont)); } +meta_cont_proc { + mark: + Scheme_Meta_Continuation *c = (Scheme_Meta_Continuation *)p; + + gcMARK(c->prompt_tag); + gcMARK(c->overflow); + gcMARK(c->next); + gcMARK(c->cont_mark_stack_copied); + + size: + gcBYTES_TO_WORDS(sizeof(Scheme_Meta_Continuation)); +} + mark_dyn_wind { mark: Scheme_Dynamic_Wind *dw = (Scheme_Dynamic_Wind *)p; + gcMARK(dw->id); gcMARK(dw->data); - gcMARK(dw->cont); + gcMARK(dw->prompt_tag); gcMARK(dw->prev); MARK_stack_state(&dw->envss); @@ -370,23 +392,31 @@ mark_overflow { Scheme_Overflow *o = (Scheme_Overflow *)p; gcMARK(o->prev); - MARK_jmpup(&o->cont); + gcMARK(o->jmp); + gcMARK(o->id); size: gcBYTES_TO_WORDS(sizeof(Scheme_Overflow)); } +mark_overflow_jmp { + mark: + Scheme_Overflow_Jmp *o = (Scheme_Overflow_Jmp *)p; + + MARK_jmpup(&o->cont); + + size: + gcBYTES_TO_WORDS(sizeof(Scheme_Overflow_Jmp)); +} + escaping_cont_proc { mark: Scheme_Escaping_Cont *c = (Scheme_Escaping_Cont *)p; - gcMARK(c->mark_key); - gcMARK(c->marks_prefix); #ifdef MZ_USE_JIT gcMARK(c->native_trace); #endif - MARK_cjs(&c->cjs); MARK_stack_state(&c->envss); size: @@ -566,8 +596,6 @@ thread_val { MARK_cjs(&pr->cjs); - gcMARK(pr->current_escape_cont_key); - gcMARK(pr->cell_values); gcMARK(pr->init_config); gcMARK(pr->init_break_cell); @@ -581,14 +609,17 @@ thread_val { gcMARK(pr->runstack_owner); gcMARK(pr->runstack_swapped); pr->spare_runstack = NULL; /* just in case */ + + gcMARK(pr->barrier_prompt); + gcMARK(pr->meta_prompt); + gcMARK(pr->meta_continuation); gcMARK(pr->cont_mark_stack_segments); gcMARK(pr->cont_mark_stack_owner); gcMARK(pr->cont_mark_stack_swapped); - + MARK_jmpup(&pr->jmpup_buf); - gcMARK(pr->cc_ok); gcMARK(pr->dw); gcMARK(pr->nester); @@ -643,6 +674,16 @@ thread_val { gcBYTES_TO_WORDS(sizeof(Scheme_Thread)); } +prompt_val { + mark: + Scheme_Prompt *pr = (Scheme_Prompt *)p; + gcMARK(pr->boundary_overflow_id); + gcMARK(pr->boundary_dw_id); + gcMARK(pr->runstack_boundary_start); + size: + gcBYTES_TO_WORDS(sizeof(Scheme_Prompt)); +} + cont_mark_set_val { mark: Scheme_Cont_Mark_Set *s = (Scheme_Cont_Mark_Set *)p; @@ -885,6 +926,7 @@ guard_val { gcMARK(g->parent); gcMARK(g->file_proc); gcMARK(g->network_proc); + gcMARK(g->link_proc); size: gcBYTES_TO_WORDS(sizeof(Scheme_Security_Guard)); } @@ -1006,12 +1048,10 @@ mark_comp_info { mark_saved_stack { mark: - Scheme_Saved_Stack *saved = (Scheme_Saved_Stack *) p; - Scheme_Object **old = saved->runstack_start; + Scheme_Saved_Stack *saved = (Scheme_Saved_Stack *)p; gcMARK(saved->prev); - gcFIXUP_TYPED_NOW(Scheme_Object **, saved->runstack_start); - saved->runstack = saved->runstack_start + (saved->runstack - old); + gcMARK(saved->runstack_start); size: gcBYTES_TO_WORDS(sizeof(Scheme_Saved_Stack)); diff --git a/src/mzscheme/src/print.c b/src/mzscheme/src/print.c index 4c4316e882..c24b02bf53 100644 --- a/src/mzscheme/src/print.c +++ b/src/mzscheme/src/print.c @@ -1849,7 +1849,17 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht, print_utf8_string(pp, ">", 0, 1); } } - else if (SCHEME_CPTRP(obj)) + else if (SAME_TYPE(SCHEME_TYPE(obj), scheme_prompt_tag_type) + && SCHEME_CDR(obj) && !(compact || !pp->print_unreadable)) + { + print_utf8_string(pp, "#<", 0, 2); + print_string_in_angle(pp, scheme_symbol_val(SCHEME_CDR(obj)), + "continuation-prompt-tag:", + SCHEME_SYM_LEN(SCHEME_CDR(obj))); + PRINTADDRESS(pp, obj); + print_utf8_string(pp, ">", 0, 1); + } + else if (SCHEME_CPTRP(obj)) { Scheme_Object *tag = SCHEME_CPTR_TYPE(obj); if (compact || !pp->print_unreadable) { diff --git a/src/mzscheme/src/salloc.c b/src/mzscheme/src/salloc.c index acbee0cdf1..530f067bd5 100644 --- a/src/mzscheme/src/salloc.c +++ b/src/mzscheme/src/salloc.c @@ -1831,11 +1831,6 @@ long scheme_count_memory(Scheme_Object *root, Scheme_Hash_Table *ht) for (rs = c->runstack_copied; rs; rs = rs->prev) { s += sizeof(Scheme_Saved_Stack); - scheme_count_closure(rs->runstack, - rs->runstack_size - - (rs->runstack - - rs->runstack_start), - ht); } } break; @@ -1894,18 +1889,8 @@ long scheme_count_memory(Scheme_Object *root, Scheme_Hash_Table *ht) #endif /* Check stack: */ - scheme_count_closure(p->runstack, /* p->runstack may be wrong, but count_closure is turned off */ - p->runstack_size - - (p->runstack - - p->runstack_start), - ht); for (saved = p->runstack_saved; saved; saved = saved->prev) { s += (saved->runstack_size * sizeof(Scheme_Object *)); - scheme_count_closure(saved->runstack, - saved->runstack_size - - (saved->runstack - - saved->runstack_start), - ht); } } break; diff --git a/src/mzscheme/src/schemef.h b/src/mzscheme/src/schemef.h index 1d2523ac1d..0d2724179d 100644 --- a/src/mzscheme/src/schemef.h +++ b/src/mzscheme/src/schemef.h @@ -279,15 +279,18 @@ MZ_EXTERN void scheme_set_tail_buffer_size(int s); MZ_EXTERN Scheme_Object *scheme_force_value(Scheme_Object *); MZ_EXTERN Scheme_Object *scheme_force_one_value(Scheme_Object *); -MZ_EXTERN void *scheme_set_cont_mark(Scheme_Object *key, Scheme_Object *val); +MZ_EXTERN MZ_MARK_STACK_TYPE scheme_set_cont_mark(Scheme_Object *key, Scheme_Object *val); MZ_EXTERN void scheme_push_continuation_frame(Scheme_Cont_Frame_Data *); MZ_EXTERN void scheme_pop_continuation_frame(Scheme_Cont_Frame_Data *); MZ_EXTERN void scheme_temp_dec_mark_depth(); MZ_EXTERN void scheme_temp_inc_mark_depth(); -MZ_EXTERN Scheme_Object *scheme_current_continuation_marks(void); +MZ_EXTERN Scheme_Object *scheme_current_continuation_marks(Scheme_Object *prompt_tag); MZ_EXTERN Scheme_Object *scheme_extract_one_cc_mark(Scheme_Object *mark_set, Scheme_Object *key); +MZ_EXTERN Scheme_Object *scheme_extract_one_cc_mark_to_tag(Scheme_Object *mark_set, + Scheme_Object *key, + Scheme_Object *prompt_tag); /* Internal */ MZ_EXTERN Scheme_Object *scheme_do_eval(Scheme_Object *obj, int _num_rands, Scheme_Object **rands, int val); @@ -795,6 +798,7 @@ MZ_EXTERN void scheme_add_fd_handle(void *h, void *fds, int repost); MZ_EXTERN void scheme_add_fd_eventmask(void *fds, int mask); MZ_EXTERN void scheme_security_check_file(const char *who, const char *filename, int guards); +MZ_EXTERN void scheme_security_check_file_link(const char *who, const char *filename, const char *content); MZ_EXTERN void scheme_security_check_network(const char *who, const char *host, int port, int client); MZ_EXTERN struct mz_addrinfo *scheme_get_host_address(const char *address, int id, int *err, diff --git a/src/mzscheme/src/schemex.h b/src/mzscheme/src/schemex.h index ea407e761e..f88ca5ebdf 100644 --- a/src/mzscheme/src/schemex.h +++ b/src/mzscheme/src/schemex.h @@ -223,14 +223,17 @@ Scheme_Object *(*scheme_tail_eval_expr)(Scheme_Object *obj); void (*scheme_set_tail_buffer_size)(int s); Scheme_Object *(*scheme_force_value)(Scheme_Object *); Scheme_Object *(*scheme_force_one_value)(Scheme_Object *); -void *(*scheme_set_cont_mark)(Scheme_Object *key, Scheme_Object *val); +MZ_MARK_STACK_TYPE (*scheme_set_cont_mark)(Scheme_Object *key, Scheme_Object *val); void (*scheme_push_continuation_frame)(Scheme_Cont_Frame_Data *); void (*scheme_pop_continuation_frame)(Scheme_Cont_Frame_Data *); void (*scheme_temp_dec_mark_depth)(); void (*scheme_temp_inc_mark_depth)(); -Scheme_Object *(*scheme_current_continuation_marks)(void); +Scheme_Object *(*scheme_current_continuation_marks)(Scheme_Object *prompt_tag); Scheme_Object *(*scheme_extract_one_cc_mark)(Scheme_Object *mark_set, Scheme_Object *key); +Scheme_Object *(*scheme_extract_one_cc_mark_to_tag)(Scheme_Object *mark_set, + Scheme_Object *key, + Scheme_Object *prompt_tag); /* Internal */ Scheme_Object *(*scheme_do_eval)(Scheme_Object *obj, int _num_rands, Scheme_Object **rands, int val); Scheme_Object *(*scheme_eval_compiled_stx_string)(Scheme_Object *expr, Scheme_Env *env, @@ -663,6 +666,7 @@ int (*scheme_fdisset)(void *fd, int pos); void (*scheme_add_fd_handle)(void *h, void *fds, int repost); void (*scheme_add_fd_eventmask)(void *fds, int mask); void (*scheme_security_check_file)(const char *who, const char *filename, int guards); +void (*scheme_security_check_file_link)(const char *who, const char *filename, const char *content); void (*scheme_security_check_network)(const char *who, const char *host, int port, int client); struct mz_addrinfo *(*scheme_get_host_address)(const char *address, int id, int *err, int family, int passive, int tcp); diff --git a/src/mzscheme/src/schemex.inc b/src/mzscheme/src/schemex.inc index fd84eabce6..041bc26e5c 100644 --- a/src/mzscheme/src/schemex.inc +++ b/src/mzscheme/src/schemex.inc @@ -146,6 +146,7 @@ scheme_extension_table->scheme_temp_inc_mark_depth = scheme_temp_inc_mark_depth; scheme_extension_table->scheme_current_continuation_marks = scheme_current_continuation_marks; scheme_extension_table->scheme_extract_one_cc_mark = scheme_extract_one_cc_mark; + scheme_extension_table->scheme_extract_one_cc_mark_to_tag = scheme_extract_one_cc_mark_to_tag; scheme_extension_table->scheme_do_eval = scheme_do_eval; scheme_extension_table->scheme_eval_compiled_stx_string = scheme_eval_compiled_stx_string; scheme_extension_table->scheme_load_compiled_stx_string = scheme_load_compiled_stx_string; @@ -445,6 +446,7 @@ scheme_extension_table->scheme_add_fd_handle = scheme_add_fd_handle; scheme_extension_table->scheme_add_fd_eventmask = scheme_add_fd_eventmask; scheme_extension_table->scheme_security_check_file = scheme_security_check_file; + scheme_extension_table->scheme_security_check_file_link = scheme_security_check_file_link; scheme_extension_table->scheme_security_check_network = scheme_security_check_network; scheme_extension_table->scheme_get_host_address = scheme_get_host_address; scheme_extension_table->scheme_free_host_address = scheme_free_host_address; diff --git a/src/mzscheme/src/schemexm.h b/src/mzscheme/src/schemexm.h index 3d8b01f568..0c4355675f 100644 --- a/src/mzscheme/src/schemexm.h +++ b/src/mzscheme/src/schemexm.h @@ -146,6 +146,7 @@ #define scheme_temp_inc_mark_depth (scheme_extension_table->scheme_temp_inc_mark_depth) #define scheme_current_continuation_marks (scheme_extension_table->scheme_current_continuation_marks) #define scheme_extract_one_cc_mark (scheme_extension_table->scheme_extract_one_cc_mark) +#define scheme_extract_one_cc_mark_to_tag (scheme_extension_table->scheme_extract_one_cc_mark_to_tag) #define scheme_do_eval (scheme_extension_table->scheme_do_eval) #define scheme_eval_compiled_stx_string (scheme_extension_table->scheme_eval_compiled_stx_string) #define scheme_load_compiled_stx_string (scheme_extension_table->scheme_load_compiled_stx_string) @@ -445,6 +446,7 @@ #define scheme_add_fd_handle (scheme_extension_table->scheme_add_fd_handle) #define scheme_add_fd_eventmask (scheme_extension_table->scheme_add_fd_eventmask) #define scheme_security_check_file (scheme_extension_table->scheme_security_check_file) +#define scheme_security_check_file_link (scheme_extension_table->scheme_security_check_file_link) #define scheme_security_check_network (scheme_extension_table->scheme_security_check_network) #define scheme_get_host_address (scheme_extension_table->scheme_get_host_address) #define scheme_free_host_address (scheme_extension_table->scheme_free_host_address) diff --git a/src/mzscheme/src/schminc.h b/src/mzscheme/src/schminc.h index 263ee0133f..5b989c0cf4 100644 --- a/src/mzscheme/src/schminc.h +++ b/src/mzscheme/src/schminc.h @@ -13,7 +13,7 @@ #define USE_COMPILED_STARTUP 1 -#define EXPECTED_PRIM_COUNT 871 +#define EXPECTED_PRIM_COUNT 875 #ifdef MZSCHEME_SOMETHING_OMITTED # undef USE_COMPILED_STARTUP diff --git a/src/mzscheme/src/schnapp.inc b/src/mzscheme/src/schnapp.inc index 94f8b00ff1..781536b4d1 100644 --- a/src/mzscheme/src/schnapp.inc +++ b/src/mzscheme/src/schnapp.inc @@ -1,10 +1,15 @@ +/* For non-tail calls, the native context has already + incremented MZ_CONT_MARK_POS. Counter + scheme_do_eval()'s increment, because this + might be the continuation of a tail call. */ + if (!SCHEME_INTP(rator)) { Scheme_Type t; t = _SCHEME_TYPE(rator); if (t == scheme_prim_type) { - Scheme_Object *v; + GC_CAN_IGNORE Scheme_Object *v; GC_CAN_IGNORE Scheme_Primitive_Proc *prim; GC_CAN_IGNORE Scheme_Primitive_Closure_Proc *f; @@ -19,7 +24,8 @@ v = f(argc, argv, (Scheme_Object *)prim); #if PRIM_CHECK_VALUE - v = _scheme_force_value(v); + if (v == SCHEME_TAIL_CALL_WAITING) + v = scheme_force_value_same_mark(v); #endif #if PRIM_CHECK_MULTI @@ -34,10 +40,22 @@ } #if PRIM_CHECK_MULTI - return _scheme_apply(rator, argc, argv); + { + GC_CAN_IGNORE Scheme_Object *v; + MZ_CONT_MARK_POS -= 2; + v = _scheme_apply(rator, argc, argv); + MZ_CONT_MARK_POS += 2; + return v; + } #else # if PRIM_CHECK_VALUE - return _scheme_apply_multi(rator, argc, argv); + { + GC_CAN_IGNORE Scheme_Object *v; + MZ_CONT_MARK_POS -= 2; + v = _scheme_apply_multi(rator, argc, argv); + MZ_CONT_MARK_POS += 2; + return v; + } # else return _scheme_tail_apply(rator, argc, argv); # endif diff --git a/src/mzscheme/src/schpriv.h b/src/mzscheme/src/schpriv.h index fb85bccc8c..cf8e58040c 100644 --- a/src/mzscheme/src/schpriv.h +++ b/src/mzscheme/src/schpriv.h @@ -130,6 +130,7 @@ extern int scheme_starting_up; void scheme_init_portable_case(void); void scheme_init_stack_check(void); +void scheme_init_overflow(void); #ifdef MZ_PRECISE_GC void scheme_register_traversers(void); void scheme_init_hash_key_procs(void); @@ -169,7 +170,6 @@ void scheme_init_debug(Scheme_Env *env); void scheme_init_thread(Scheme_Env *env); void scheme_init_read(Scheme_Env *env); void scheme_init_print(Scheme_Env *env); -void scheme_init_image(Scheme_Env *env); #ifndef NO_SCHEME_THREADS void scheme_init_sema(Scheme_Env *env); #endif @@ -262,6 +262,8 @@ extern Scheme_Object *scheme_none_symbol, *scheme_line_symbol, *scheme_block_sym extern Scheme_Object *scheme_stack_dump_key; +extern Scheme_Object *scheme_default_prompt_tag; + /*========================================================================*/ /* thread state and maintenance */ /*========================================================================*/ @@ -358,6 +360,7 @@ typedef struct Scheme_Security_Guard { struct Scheme_Security_Guard *parent; Scheme_Object *file_proc; /* who-symbol path mode-symbol -> void */ Scheme_Object *network_proc; /* who-symbol host-string-or-'listen port-k -> void */ + Scheme_Object *link_proc; /* who-symbol path path -> void */ } Scheme_Security_Guard; /* Always allocated on the stack: */ @@ -850,7 +853,20 @@ void scheme_clean_native_symtab(void); Scheme_Object *scheme_handle_stack_overflow(Scheme_Object *(*k)(void)); -void scheme_ensure_stack_start(Scheme_Thread *p, void *d); +extern struct Scheme_Overflow_Jmp *scheme_overflow_jmp; +extern void *scheme_overflow_stack_start; + +void scheme_ensure_stack_start(void *d); +extern void *scheme_deepest_stack_start; + +#ifdef MZ_PRECISE_GC +# define PROMPT_STACK(id) &__gc_var_stack__ +# define ADJUST_STACK_START(start) (start) +#else +# define PROMPT_STACK(id) ((void *)(&id)) +# define ADJUST_STACK_START(start) (start ? start : scheme_deepest_stack_start) +#endif + void scheme_jmpup_free(Scheme_Jumpup_Buf *); void *scheme_enlarge_runstack(long size, void *(*k)()); int scheme_check_runstack(long size); @@ -883,7 +899,7 @@ void scheme_init_stack_limit (void); typedef struct Scheme_Saved_Stack { MZTAG_IF_REQUIRED Scheme_Object **runstack_start; - Scheme_Object **runstack; + long runstack_offset; long runstack_size; struct Scheme_Saved_Stack *prev; } Scheme_Saved_Stack; @@ -917,44 +933,54 @@ typedef struct Scheme_Cont_Mark_Set { #define SCHEME_MARK_SEGMENT_MASK (SCHEME_MARK_SEGMENT_SIZE - 1) typedef struct Scheme_Stack_State { - Scheme_Object **runstack; - Scheme_Object **runstack_start; - long runstack_size; - Scheme_Saved_Stack *runstack_saved; + long runstack_offset; MZ_MARK_POS_TYPE cont_mark_pos; MZ_MARK_STACK_TYPE cont_mark_stack; - Scheme_Object *current_escape_cont_key; + struct Scheme_Prompt *barrier_prompt; } Scheme_Stack_State; typedef struct Scheme_Dynamic_Wind { MZTAG_IF_REQUIRED + int depth; + void *id; /* generated as needed */ void *data; + Scheme_Object *prompt_tag; /* If not NULL, indicates a fake D-W record for prompt boundary */ void (*pre)(void *); void (*post)(void *); mz_jmp_buf *saveerr; + int next_meta; /* amount to move forward in the meta-continuation chain */ struct Scheme_Stack_State envss; - struct Scheme_Cont *cont; struct Scheme_Dynamic_Wind *prev; } Scheme_Dynamic_Wind; typedef struct Scheme_Cont { Scheme_Object so; + short composable; Scheme_Object *value; /* Set just before jump */ + struct Scheme_Overflow *resume_to; /* Set just before jump */ + struct Scheme_Cont *use_next_cont; /* Set just before jump */ + int common_dw_depth; /* Set just before jump; id common dw record */ + Scheme_Object *extra_marks; /* Set just before jump; vector extra keys and marks to add to meta-cont */ + struct Scheme_Meta_Continuation *meta_continuation; Scheme_Jumpup_Buf buf; - long *ok; - Scheme_Dynamic_Wind *dw, *common; + Scheme_Dynamic_Wind *dw; Scheme_Continuation_Jump_State cjs; - mz_jmp_buf *save_overflow_buf; - int suspend_break; Scheme_Stack_State ss; + Scheme_Object **runstack_start; + long runstack_size; + Scheme_Saved_Stack *runstack_saved; + Scheme_Object *prompt_tag; + int prompt_depth; + mz_jmp_buf *prompt_buf; /* needed for meta-prompt */ + MZ_MARK_POS_TYPE meta_tail_pos; /* to recognize opportunity for meta-tail calls */ + MZ_MARK_POS_TYPE cont_mark_pos_bottom; /* to splice cont mark values with meta-cont */ + void *prompt_stack_start; Scheme_Saved_Stack *runstack_copied; Scheme_Thread **runstack_owner; Scheme_Cont_Mark *cont_mark_stack_copied; Scheme_Thread **cont_mark_stack_owner; - Scheme_Cont_Mark **orig_mark_segments; long cont_mark_shareable, cont_mark_offset; void *stack_start; - void *o_start; Scheme_Config *init_config; Scheme_Object *init_break_cell; #ifdef MZ_USE_JIT @@ -966,15 +992,11 @@ typedef struct Scheme_Cont { typedef struct Scheme_Escaping_Cont { Scheme_Object so; - Scheme_Continuation_Jump_State cjs; - Scheme_Object *mark_key; struct Scheme_Stack_State envss; #ifdef MZ_USE_JIT Scheme_Object *native_trace; #endif - Scheme_Object *marks_prefix; mz_jmp_buf *saveerr; - int suspend_break; } Scheme_Escaping_Cont; #define SCHEME_CONT_F(obj) (((Scheme_Escaping_Cont *)(obj))->f) @@ -982,15 +1004,13 @@ typedef struct Scheme_Escaping_Cont { int scheme_escape_continuation_ok(Scheme_Object *); #define scheme_save_env_stack_w_thread(ss, p) \ - (ss.runstack = MZ_RUNSTACK, ss.runstack_start = MZ_RUNSTACK_START, \ + (ss.runstack_offset = MZ_RUNSTACK - MZ_RUNSTACK_START, \ ss.cont_mark_stack = MZ_CONT_MARK_STACK, ss.cont_mark_pos = MZ_CONT_MARK_POS, \ - ss.runstack_size = p->runstack_size, ss.runstack_saved = p->runstack_saved, \ - ss.current_escape_cont_key = p->current_escape_cont_key) + ss.barrier_prompt = p->barrier_prompt) #define scheme_restore_env_stack_w_thread(ss, p) \ - (MZ_RUNSTACK = ss.runstack, MZ_RUNSTACK_START = ss.runstack_start, \ + (MZ_RUNSTACK = MZ_RUNSTACK_START + ss.runstack_offset, \ MZ_CONT_MARK_STACK = ss.cont_mark_stack, MZ_CONT_MARK_POS = ss.cont_mark_pos, \ - p->runstack_size = ss.runstack_size, p->runstack_saved = ss.runstack_saved, \ - p->current_escape_cont_key = ss.current_escape_cont_key) + p->barrier_prompt = ss.barrier_prompt) #define scheme_save_env_stack(ss) \ scheme_save_env_stack_w_thread(ss, scheme_current_thread) #define scheme_restore_env_stack(ss) \ @@ -998,12 +1018,20 @@ int scheme_escape_continuation_ok(Scheme_Object *); void scheme_takeover_stacks(Scheme_Thread *p); +typedef struct Scheme_Overflow_Jmp { + MZTAG_IF_REQUIRED + char captured; /* set to 1 if possibly captured in a continuation */ + Scheme_Jumpup_Buf cont; /* continuation after value obtained in overflowed */ + mz_jmp_buf *savebuf; /* save old error buffer pointer here */ +} Scheme_Overflow_Jmp; + typedef struct Scheme_Overflow { MZTAG_IF_REQUIRED - Scheme_Jumpup_Buf cont; /* continuation after value obtained in overflowed */ + char eot; /* set to 1 => pseudo-overflow: continuation is to exit the thread */ + Scheme_Overflow_Jmp *jmp; /* overflow data, so it can be shared when an overflow chain is cloned; */ + void *id; /* identity of overflow record; generated as needed, and often == jmp */ + void *stack_start; struct Scheme_Overflow *prev; /* old overflow info */ - mz_jmp_buf *savebuf; /* save old error buffer pointer here */ - int captured; /* set to 1 if possibly captured in a continuation */ } Scheme_Overflow; #if defined(UNIX_FIND_STACK_BOUNDS) || defined(WINDOWS_FIND_STACK_BOUNDS) \ @@ -1014,9 +1042,54 @@ typedef struct Scheme_Overflow { extern unsigned long scheme_stack_boundary; #endif +typedef struct Scheme_Meta_Continuation { + MZTAG_IF_REQUIRED + char pseudo; /* if set, don't treat it as a prompt */ + char cm_caches; /* cached info in copied cm */ + char cm_shared; /* cm is shared, so copy before setting cache entries */ + int copy_after_captured; /* for mutating a meta-continuation in set_cont_stack_mark */ + Scheme_Object *prompt_tag; + /* The C stack: */ + Scheme_Overflow *overflow; + MZ_MARK_POS_TYPE meta_tail_pos; /* to recognize opportunity for meta-tail calls */ + MZ_MARK_POS_TYPE cont_mark_pos_bottom; /* to splice cont mark values with meta-cont */ + /* Cont mark info: */ + MZ_MARK_STACK_TYPE cont_mark_stack; + MZ_MARK_POS_TYPE cont_mark_pos; + long cont_mark_shareable, cont_mark_offset; + Scheme_Cont_Mark *cont_mark_stack_copied; + /* Next: */ + struct Scheme_Meta_Continuation *next; +} Scheme_Meta_Continuation; + +typedef struct Scheme_Prompt { + Scheme_Object so; + char is_barrier, is_captured; + int depth; + void *stack_boundary; /* where to stop copying the C stack */ + void *boundary_overflow_id; /* indicates the C stack segment */ + MZ_MARK_STACK_TYPE mark_boundary; /* where to stop copying cont marks */ + MZ_MARK_POS_TYPE boundary_mark_pos; /* mark position of prompt */ + Scheme_Object **runstack_boundary_start; /* which stack has runstack_boundary */ + long runstack_boundary_offset; /* where to stop copying the Scheme stack */ + void *boundary_dw_id; /* where to stop copying the dynamic-wind stack */ + mz_jmp_buf *prompt_buf; /* to jump directly to the prompt */ + long runstack_size; /* needed for restore */ +} Scheme_Prompt; + /* Compiler helper: */ #define ESCAPED_BEFORE_HERE return NULL +Scheme_Object *scheme_extract_one_cc_mark_with_meta(Scheme_Object *mark_set, + Scheme_Object *key, + Scheme_Object *prompt_tag, + Scheme_Meta_Continuation **meta_cont); +Scheme_Object *scheme_compose_continuation(Scheme_Cont *c, int num_rands, Scheme_Object *value); +Scheme_Overflow *scheme_get_thread_end_overflow(void); +void scheme_end_current_thread(void); +void scheme_ensure_dw_id(Scheme_Dynamic_Wind *dw); +void scheme_apply_dw_in_meta(Scheme_Dynamic_Wind *dw, int post, int mc_depth); + /*========================================================================*/ /* semaphores and locks */ /*========================================================================*/ @@ -2241,7 +2314,7 @@ Scheme_Module *scheme_extract_compiled_module(Scheme_Object *o); void scheme_clear_modidx_cache(void); void scheme_clear_shift_cache(void); -void scheme_clear_cc_ok(void); +void scheme_clear_prompt_cache(void); /*========================================================================*/ /* errors and exceptions */ diff --git a/src/mzscheme/src/schvers.h b/src/mzscheme/src/schvers.h index a1161fc13d..33f357f208 100644 --- a/src/mzscheme/src/schvers.h +++ b/src/mzscheme/src/schvers.h @@ -9,6 +9,6 @@ #define MZSCHEME_VERSION_MAJOR 352 -#define MZSCHEME_VERSION_MINOR 6 +#define MZSCHEME_VERSION_MINOR 7 -#define MZSCHEME_VERSION "352.6" _MZ_SPECIAL_TAG +#define MZSCHEME_VERSION "352.7" _MZ_SPECIAL_TAG diff --git a/src/mzscheme/src/setjmpup.c b/src/mzscheme/src/setjmpup.c index 9d28e50034..dd2605c5a6 100644 --- a/src/mzscheme/src/setjmpup.c +++ b/src/mzscheme/src/setjmpup.c @@ -596,13 +596,6 @@ void scheme_reset_jmpup_buf(Scheme_Jumpup_Buf *b) memset(&b->buf, 0, sizeof(mz_jmp_buf)); } -void scheme_ensure_stack_start(Scheme_Thread *p, void *d) -{ - if (!p->stack_start - || (STK_COMP((unsigned long)p->stack_start, (unsigned long)d))) - p->stack_start = d; -} - #ifdef USE_MZ_CYGWIN_SETJMP /* We have to define setjmp & longjmp to remain compatible with MSVC-compiled extensions. It's the mostly same code diff --git a/src/mzscheme/src/startup.inc b/src/mzscheme/src/startup.inc index c3d5a63315..90b5af44f8 100644 --- a/src/mzscheme/src/startup.inc +++ b/src/mzscheme/src/startup.inc @@ -2157,15 +2157,21 @@ "(let-syntaxes(((id) expr) ...)" " body1 body ...))))))" "(-define-syntax syntax-rules" -"(lambda(x)" -"(syntax-case** syntax-rules #t x() module-identifier=?" +"(lambda(stx)" +"(syntax-case** syntax-rules #t stx() module-identifier=?" "((_(k ...)((keyword . pattern) template) ...)" "(andmap identifier?(syntax->list(syntax(k ...))))" "(with-syntax(((dummy ...)" -"(map(lambda(x)" -"(string->uninterned-symbol(symbol->string(syntax-e x))))" +"(map(lambda(id)" +"(unless(identifier? id)" +"(raise-syntax-error" +" #f" +" \"pattern must start with an identifier, found something else\"" +" stx" +" id))" +"(string->uninterned-symbol(symbol->string(syntax-e id))))" "(syntax->list(syntax(keyword ...))))))" -"(syntax/loc x" +"(syntax/loc stx" "(lambda(x)" "(syntax-case** _ #t x(k ...) module-identifier=?" "((dummy . pattern)(syntax/loc x template))" @@ -2691,6 +2697,34 @@ "(check-for-break)" "(thunk)))" "(check-for-break)))" +"(define(select-handler/no-breaks e bpz l)" +"(cond" +"((null? l)" +"(raise e))" +"(((caar l) e)" +"(begin0" +"((cdar l) e)" +"(with-continuation-mark " +" break-enabled-key" +" bpz" +"(check-for-break))))" +"(else" +"(select-handler/no-breaks e bpz(cdr l)))))" +"(define(select-handler/breaks-as-is e bpz l)" +"(cond" +"((null? l)" +"(raise e))" +"(((caar l) e)" +"(with-continuation-mark " +" break-enabled-key" +" bpz" +"(begin" +"(check-for-break)" +"((cdar l) e))))" +"(else" +"(select-handler/breaks-as-is e bpz(cdr l)))))" +"(define handler-prompt-key(make-continuation-prompt-tag))" +"(define false-thread-cell(make-thread-cell #f))" "(define-syntaxes(with-handlers with-handlers*)" "(let((wh " "(lambda(disable-break?)" @@ -2698,43 +2732,35 @@ "(syntax-case stx()" "((_() expr1 expr ...)(syntax/loc stx(let() expr1 expr ...)))" "((_((pred handler) ...) expr1 expr ...)" +"(with-syntax(((pred-name ...)(generate-temporaries(map(lambda(x) 'with-handlers-predicate) " +"(syntax->list #'(pred ...)))))" +"((handler-name ...)(generate-temporaries(map(lambda(x) 'with-handlers-handler) " +"(syntax->list #'(handler ...))))))" "(quasisyntax/loc stx" -"(let((l(list(cons pred handler) ...)))" +"(let((pred-name pred) ..." +"(handler-name handler) ...)" "(let((bpz(continuation-mark-set-first #f break-enabled-key)))" "(with-continuation-mark" " break-enabled-key" -"(make-thread-cell #f)" -"((call/ec " -"(lambda(k)" +" false-thread-cell" +"(call-with-continuation-prompt" +"(lambda()" "(with-continuation-mark " " break-enabled-key" " bpz" "(parameterize((current-exception-handler" "(lambda(e)" -"(k" +"(abort-current-continuation" +" handler-prompt-key" "(lambda()" -"(let loop((l l))" -"(cond" -"((null? l)" -"(raise e))" -"(((caar l) e)" -" #,(if disable-break?" -" #'(begin0" -"((cdar l) e)" -"(with-continuation-mark " -" break-enabled-key" -" bpz" -"(check-for-break)))" -" #'(with-continuation-mark " -" break-enabled-key" -" bpz" -"(begin" -"(check-for-break)" -"((cdar l) e)))))" -"(else" -"(loop(cdr l))))))))))" -"(call-with-values(lambda() expr1 expr ...)" -"(lambda args(lambda()(apply values args)))))))))))))))))))" +"(#,(if disable-break?" +" #'select-handler/no-breaks" +" #'select-handler/breaks-as-is)" +" e bpz" +"(list(cons pred-name handler-name) ...)))))))" +" expr1 expr ...)))" +" handler-prompt-key" +"(lambda(thunk)(thunk))))))))))))))" "(values(wh #t)(wh #f))))" "(define-syntax set!-values" "(lambda(stx)" @@ -2883,40 +2909,26 @@ "((negative? lo)(-(find-between(- hi)(- lo))))" "(else(find-between lo hi)))))))" "(define(read-eval-print-loop)" -"(let*((eeh #f)" -"(jump #f)" -"(be? #f)" -"(rep-error-escape-handler(lambda()(jump))))" -"(dynamic-wind" -"(lambda()(set! eeh(error-escape-handler))" -"(set! be?(break-enabled))" -"(error-escape-handler rep-error-escape-handler)" -"(break-enabled #f))" +"(let*((jump-key(gensym))" +"(repl-error-escape-handler" "(lambda()" -"(let/ec done" +"(let((jump-k(continuation-mark-set-first #f jump-key)))" +"(if jump-k" +"(jump-k)" +" (error 'repl-error-escape-handler \"used out of context\"))))))" +"(parameterize((error-escape-handler repl-error-escape-handler))" +"(let/ec done-k" "(let repl-loop()" "(let/ec k" -"(dynamic-wind" -"(lambda()" -"(break-enabled be?)" -"(set! jump k))" -"(lambda()" +"(with-continuation-mark jump-key k" "(let((v((current-prompt-read))))" -"(when(eof-object? v)(done(void)))" +"(when(eof-object? v)(done-k(void)))" "(call-with-values" "(lambda()((current-eval)(if(syntax? v)" "(namespace-syntax-introduce v)" " v)))" -"(lambda results(for-each(current-print) results)))))" -"(lambda() " -"(set! be?(break-enabled))" -"(break-enabled #f)" -"(set! jump #f))))" -"(repl-loop))))" -"(lambda()(error-escape-handler eeh)" -"(break-enabled be?)" -"(set! jump #f)" -"(set! eeh #f)))))" +"(lambda results(for-each(current-print) results))))))" +"(repl-loop))))))" "(define load/cd" "(lambda(n)" "(unless(path-string? n)" diff --git a/src/mzscheme/src/startup.ss b/src/mzscheme/src/startup.ss index 481361806f..278861e435 100644 --- a/src/mzscheme/src/startup.ss +++ b/src/mzscheme/src/startup.ss @@ -2507,16 +2507,22 @@ ;; From Dybvig, mostly: (-define-syntax syntax-rules - (lambda (x) - (syntax-case** syntax-rules #t x () module-identifier=? + (lambda (stx) + (syntax-case** syntax-rules #t stx () module-identifier=? ((_ (k ...) ((keyword . pattern) template) ...) (andmap identifier? (syntax->list (syntax (k ...)))) (with-syntax (((dummy ...) - (map (lambda (x) + (map (lambda (id) + (unless (identifier? id) + (raise-syntax-error + #f + "pattern must start with an identifier, found something else" + stx + id)) ;; Preserve the name, in case it's printed out - (string->uninterned-symbol (symbol->string (syntax-e x)))) + (string->uninterned-symbol (symbol->string (syntax-e id)))) (syntax->list (syntax (keyword ...)))))) - (syntax/loc x + (syntax/loc stx (lambda (x) (syntax-case** _ #t x (k ...) module-identifier=? ((dummy . pattern) (syntax/loc x template)) @@ -3098,6 +3104,37 @@ (thunk))) (check-for-break))) + (define (select-handler/no-breaks e bpz l) + (cond + [(null? l) + (raise e)] + [((caar l) e) + (begin0 + ((cdar l) e) + (with-continuation-mark + break-enabled-key + bpz + (check-for-break)))] + [else + (select-handler/no-breaks e bpz (cdr l))])) + + (define (select-handler/breaks-as-is e bpz l) + (cond + [(null? l) + (raise e)] + [((caar l) e) + (with-continuation-mark + break-enabled-key + bpz + (begin + (check-for-break) + ((cdar l) e)))] + [else + (select-handler/breaks-as-is e bpz (cdr l))])) + + (define handler-prompt-key (make-continuation-prompt-tag)) + (define false-thread-cell (make-thread-cell #f)) + (define-syntaxes (with-handlers with-handlers*) (let ([wh (lambda (disable-break?) @@ -3105,53 +3142,47 @@ (syntax-case stx () [(_ () expr1 expr ...) (syntax/loc stx (let () expr1 expr ...))] [(_ ([pred handler] ...) expr1 expr ...) - (quasisyntax/loc stx - (let ([l (list (cons pred handler) ...)]) - ;; Capture current break parameterization, so we can use it to - ;; evaluate the body - (let ([bpz (continuation-mark-set-first #f break-enabled-key)]) - ;; Disable breaks here, so that when the exception handler jumps - ;; to run a handler, breaks are disabled for the handler - (with-continuation-mark - break-enabled-key - (make-thread-cell #f) - ((call/ec - (lambda (k) - ;; Restore the captured break parameterization for - ;; evaluating the `with-handlers' body. In this - ;; special case, no check for breaks is needed, - ;; because bpz is quickly restored past call/ec. - ;; Thus, `with-handlers' can evaluate its body in - ;; tail position. - (with-continuation-mark - break-enabled-key - bpz - (parameterize ([current-exception-handler - (lambda (e) - (k - (lambda () - (let loop ([l l]) - (cond - [(null? l) - (raise e)] - [((caar l) e) - #,(if disable-break? - #'(begin0 - ((cdar l) e) - (with-continuation-mark - break-enabled-key - bpz - (check-for-break))) - #'(with-continuation-mark - break-enabled-key - bpz - (begin - (check-for-break) - ((cdar l) e))))] - [else - (loop (cdr l))])))))]) - (call-with-values (lambda () expr1 expr ...) - (lambda args (lambda () (apply values args)))))))))))))])))]) + (with-syntax ([(pred-name ...) (generate-temporaries (map (lambda (x) 'with-handlers-predicate) + (syntax->list #'(pred ...))))] + [(handler-name ...) (generate-temporaries (map (lambda (x) 'with-handlers-handler) + (syntax->list #'(handler ...))))]) + (quasisyntax/loc stx + (let ([pred-name pred] ... + [handler-name handler] ...) + ;; Capture current break parameterization, so we can use it to + ;; evaluate the body + (let ([bpz (continuation-mark-set-first #f break-enabled-key)]) + ;; Disable breaks here, so that when the exception handler jumps + ;; to run a handler, breaks are disabled for the handler + (with-continuation-mark + break-enabled-key + false-thread-cell + (call-with-continuation-prompt + (lambda () + ;; Restore the captured break parameterization for + ;; evaluating the `with-handlers' body. In this + ;; special case, no check for breaks is needed, + ;; because bpz is quickly restored past call/ec. + ;; Thus, `with-handlers' can evaluate its body in + ;; tail position. + (with-continuation-mark + break-enabled-key + bpz + (parameterize ([current-exception-handler + (lambda (e) + ;; Deliver a thunk to the escape handler: + (abort-current-continuation + handler-prompt-key + (lambda () + (#,(if disable-break? + #'select-handler/no-breaks + #'select-handler/breaks-as-is) + e bpz + (list (cons pred-name handler-name) ...)))))]) + expr1 expr ...))) + handler-prompt-key + ;; On escape, apply the handler thunk + (lambda (thunk) (thunk))))))))])))]) (values (wh #t) (wh #f)))) (define-syntax set!-values @@ -3315,40 +3346,30 @@ [else (find-between lo hi)]))))) (define (read-eval-print-loop) - (let* ([eeh #f] - [jump #f] - [be? #f] - [rep-error-escape-handler (lambda () (jump))]) - (dynamic-wind - (lambda () (set! eeh (error-escape-handler)) - (set! be? (break-enabled)) - (error-escape-handler rep-error-escape-handler) - (break-enabled #f)) - (lambda () - (let/ec done - (let repl-loop () - (let/ec k - (dynamic-wind - (lambda () - (break-enabled be?) - (set! jump k)) - (lambda () - (let ([v ((current-prompt-read))]) - (when (eof-object? v) (done (void))) - (call-with-values - (lambda () ((current-eval) (if (syntax? v) - (namespace-syntax-introduce v) - v))) - (lambda results (for-each (current-print) results))))) - (lambda () - (set! be? (break-enabled)) - (break-enabled #f) - (set! jump #f)))) - (repl-loop)))) - (lambda () (error-escape-handler eeh) - (break-enabled be?) - (set! jump #f) - (set! eeh #f))))) + (let* ([jump-key (gensym)] + [repl-error-escape-handler + (lambda () + (let ([jump-k (continuation-mark-set-first #f jump-key)]) + (if jump-k + (jump-k) + (error 'repl-error-escape-handler "used out of context"))))]) + ;; This parameterize is outside the loop so that + ;; expressions evaluated in the REPL can set the + ;; error escape handler. That's why we communicate the + ;; actual escape target through a continuation mark. + (parameterize ([error-escape-handler repl-error-escape-handler]) + (let/ec done-k + (let repl-loop () + (let/ec k + (with-continuation-mark jump-key k + (let ([v ((current-prompt-read))]) + (when (eof-object? v) (done-k (void))) + (call-with-values + (lambda () ((current-eval) (if (syntax? v) + (namespace-syntax-introduce v) + v))) + (lambda results (for-each (current-print) results)))))) + (repl-loop)))))) (define load/cd (lambda (n) diff --git a/src/mzscheme/src/stypes.h b/src/mzscheme/src/stypes.h index 4aab1e112b..17bd35df52 100644 --- a/src/mzscheme/src/stypes.h +++ b/src/mzscheme/src/stypes.h @@ -152,72 +152,76 @@ enum { scheme_global_ref_type, /* 134 */ scheme_cont_mark_chain_type, /* 135 */ scheme_raw_pair_type, /* 136 */ + scheme_prompt_type, /* 137 */ + scheme_prompt_tag_type, /* 138 */ #ifdef MZTAG_REQUIRED - _scheme_last_normal_type_, /* 137 */ + _scheme_last_normal_type_, /* 139 */ - scheme_rt_weak_array, /* 138 */ + scheme_rt_weak_array, /* 140 */ - scheme_rt_comp_env, /* 139 */ - scheme_rt_constant_binding, /* 140 */ - scheme_rt_resolve_info, /* 141 */ - scheme_rt_optimize_info, /* 142 */ - scheme_rt_compile_info, /* 143 */ - scheme_rt_cont_mark, /* 144 */ - scheme_rt_saved_stack, /* 145 */ - scheme_rt_reply_item, /* 146 */ - scheme_rt_closure_info, /* 147 */ - scheme_rt_overflow, /* 148 */ - scheme_rt_dyn_wind_cell, /* 149 */ - scheme_rt_dyn_wind_info, /* 150 */ - scheme_rt_dyn_wind, /* 151 */ - scheme_rt_dup_check, /* 152 */ - scheme_rt_thread_memory, /* 153 */ - scheme_rt_input_file, /* 154 */ - scheme_rt_input_fd, /* 155 */ - scheme_rt_oskit_console_input, /* 156 */ - scheme_rt_tested_input_file, /* 157 */ - scheme_rt_tested_output_file, /* 158 */ - scheme_rt_indexed_string, /* 159 */ - scheme_rt_output_file, /* 160 */ - scheme_rt_load_handler_data, /* 161 */ - scheme_rt_pipe, /* 162 */ - scheme_rt_beos_process, /* 163 */ - scheme_rt_system_child, /* 164 */ - scheme_rt_tcp, /* 165 */ - scheme_rt_write_data, /* 166 */ - scheme_rt_tcp_select_info, /* 167 */ - scheme_rt_namespace_option, /* 168 */ - scheme_rt_param_data, /* 169 */ - scheme_rt_will, /* 170 */ - scheme_rt_will_registration, /* 171 */ - scheme_rt_struct_proc_info, /* 172 */ - scheme_rt_linker_name, /* 173 */ - scheme_rt_param_map, /* 174 */ - scheme_rt_finalization, /* 175 */ - scheme_rt_finalizations, /* 176 */ - scheme_rt_cpp_object, /* 177 */ - scheme_rt_cpp_array_object, /* 178 */ - scheme_rt_stack_object, /* 179 */ - scheme_rt_preallocated_object, /* 180 */ - scheme_thread_hop_type, /* 181 */ - scheme_rt_srcloc, /* 182 */ - scheme_rt_evt, /* 183 */ - scheme_rt_syncing, /* 184 */ - scheme_rt_comp_prefix, /* 185 */ - scheme_rt_user_input, /* 186 */ - scheme_rt_user_output, /* 187 */ - scheme_rt_compact_port, /* 188 */ - scheme_rt_read_special_dw, /* 189 */ - scheme_rt_regwork, /* 190 */ - scheme_rt_buf_holder, /* 191 */ - scheme_rt_parameterization, /* 192 */ - scheme_rt_print_params, /* 193 */ - scheme_rt_read_params, /* 194 */ - scheme_rt_native_code, /* 195 */ - scheme_rt_native_code_plus_case, /* 196 */ - scheme_rt_jitter_data, /* 197 */ - scheme_rt_module_exports, /* 198 */ + scheme_rt_comp_env, /* 141 */ + scheme_rt_constant_binding, /* 142 */ + scheme_rt_resolve_info, /* 143 */ + scheme_rt_optimize_info, /* 144 */ + scheme_rt_compile_info, /* 145 */ + scheme_rt_cont_mark, /* 146 */ + scheme_rt_saved_stack, /* 147 */ + scheme_rt_reply_item, /* 148 */ + scheme_rt_closure_info, /* 149 */ + scheme_rt_overflow, /* 150 */ + scheme_rt_overflow_jmp, /* 151 */ + scheme_rt_meta_cont, /* 152 */ + scheme_rt_dyn_wind_cell, /* 153 */ + scheme_rt_dyn_wind_info, /* 154 */ + scheme_rt_dyn_wind, /* 155 */ + scheme_rt_dup_check, /* 156 */ + scheme_rt_thread_memory, /* 157 */ + scheme_rt_input_file, /* 158 */ + scheme_rt_input_fd, /* 159 */ + scheme_rt_oskit_console_input, /* 160 */ + scheme_rt_tested_input_file, /* 161 */ + scheme_rt_tested_output_file, /* 162 */ + scheme_rt_indexed_string, /* 163 */ + scheme_rt_output_file, /* 164 */ + scheme_rt_load_handler_data, /* 165 */ + scheme_rt_pipe, /* 166 */ + scheme_rt_beos_process, /* 167 */ + scheme_rt_system_child, /* 168 */ + scheme_rt_tcp, /* 169 */ + scheme_rt_write_data, /* 170 */ + scheme_rt_tcp_select_info, /* 171 */ + scheme_rt_namespace_option, /* 172 */ + scheme_rt_param_data, /* 173 */ + scheme_rt_will, /* 174 */ + scheme_rt_will_registration, /* 175 */ + scheme_rt_struct_proc_info, /* 176 */ + scheme_rt_linker_name, /* 177 */ + scheme_rt_param_map, /* 178 */ + scheme_rt_finalization, /* 179 */ + scheme_rt_finalizations, /* 180 */ + scheme_rt_cpp_object, /* 181 */ + scheme_rt_cpp_array_object, /* 182 */ + scheme_rt_stack_object, /* 183 */ + scheme_rt_preallocated_object, /* 184 */ + scheme_thread_hop_type, /* 185 */ + scheme_rt_srcloc, /* 186 */ + scheme_rt_evt, /* 187 */ + scheme_rt_syncing, /* 188 */ + scheme_rt_comp_prefix, /* 189 */ + scheme_rt_user_input, /* 190 */ + scheme_rt_user_output, /* 191 */ + scheme_rt_compact_port, /* 192 */ + scheme_rt_read_special_dw, /* 193 */ + scheme_rt_regwork, /* 194 */ + scheme_rt_buf_holder, /* 195 */ + scheme_rt_parameterization, /* 196 */ + scheme_rt_print_params, /* 197 */ + scheme_rt_read_params, /* 198 */ + scheme_rt_native_code, /* 199 */ + scheme_rt_native_code_plus_case, /* 200 */ + scheme_rt_jitter_data, /* 201 */ + scheme_rt_module_exports, /* 202 */ #endif _scheme_last_type_ diff --git a/src/mzscheme/src/thread.c b/src/mzscheme/src/thread.c index 0906aea87a..9304411e32 100644 --- a/src/mzscheme/src/thread.c +++ b/src/mzscheme/src/thread.c @@ -154,6 +154,8 @@ Scheme_Thread_Set *thread_set_top; static int num_running_threads = 1; +void *scheme_deepest_stack_start; + #ifdef LINK_EXTENSIONS_BY_TABLE Scheme_Thread **scheme_current_thread_ptr; volatile int *scheme_fuel_counter_ptr; @@ -367,7 +369,7 @@ typedef struct { static int num_nsos = 0; static Scheme_NSO *namespace_options = NULL; -#define SETJMP(p) scheme_setjmpup(&p->jmpup_buf, p, p->stack_start) +#define SETJMP(p) scheme_setjmpup(&p->jmpup_buf, p, ADJUST_STACK_START(p->stack_start)) #define LONGJMP(p) scheme_longjmpup(&p->jmpup_buf) #define RESETJMP(p) scheme_reset_jmpup_buf(&p->jmpup_buf) @@ -552,7 +554,7 @@ void scheme_init_thread(Scheme_Env *env) scheme_add_global_constant("make-security-guard", scheme_make_prim_w_arity(make_security_guard, "make-security-guard", - 3, 3), + 3, 4), env); scheme_add_global_constant("current-security-guard", scheme_register_parameter(current_security_guard, @@ -2172,8 +2174,6 @@ void scheme_swap_thread(Scheme_Thread *new_thread) f(o); } } - if (scheme_current_thread->cc_ok) - *(scheme_current_thread->cc_ok) = scheme_current_thread->cc_ok_save; if ((scheme_current_thread->runstack_owner && ((*scheme_current_thread->runstack_owner) != scheme_current_thread)) || (scheme_current_thread->cont_mark_stack_owner @@ -2190,10 +2190,6 @@ void scheme_swap_thread(Scheme_Thread *new_thread) cb = can_break_param(scheme_current_thread); scheme_current_thread->can_break_at_swap = cb; } - if (scheme_current_thread->cc_ok) { - scheme_current_thread->cc_ok_save = *(scheme_current_thread->cc_ok); - *(scheme_current_thread->cc_ok) = 0; - } scheme_gmp_tls_load(scheme_current_thread->gmp_tls); #ifdef RUNSTACK_IS_GLOBAL scheme_current_thread->runstack = MZ_RUNSTACK; @@ -2307,7 +2303,6 @@ static void thread_is_dead(Scheme_Thread *r) r->transitive_resumes = NULL; r->error_buf = NULL; - r->overflow_buf = NULL; r->spare_runstack = NULL; } @@ -2407,11 +2402,27 @@ static void remove_thread(Scheme_Thread *r) r->extra_mrefs = scheme_null; } +void scheme_end_current_thread(void) +{ + remove_thread(scheme_current_thread); + + thread_ended_with_activity = 1; + + if (scheme_notify_multithread && !scheme_first_thread->next) { + scheme_notify_multithread(0); + have_activity = 0; + } + + select_thread(); +} + static void start_child(Scheme_Thread * volatile child, Scheme_Object * volatile child_eval) { if (SETJMP(child)) { /* Initial swap in: */ + Scheme_Object * volatile result = NULL; + thread_swap_count++; #ifdef RUNSTACK_IS_GLOBAL MZ_RUNSTACK = scheme_current_thread->runstack; @@ -2446,11 +2457,9 @@ static void start_child(Scheme_Thread * volatile child, mz_jmp_buf newbuf; scheme_current_thread->error_buf = &newbuf; if (!scheme_setjmp(newbuf)) { - /* check for initial break before we do anything */ - scheme_check_break_now(); - - /* run the main thunk: */ - scheme_apply_thread_thunk(child_eval); + /* Run the main thunk: */ + /* (checks for break before doing anything else) */ + result = scheme_apply_thread_thunk(child_eval); } } @@ -2458,22 +2467,40 @@ static void start_child(Scheme_Thread * volatile child, different thread, which invoked the original thread's continuation. */ - remove_thread(scheme_current_thread); + /* If we still have a meta continuation, then it means we + should be resuming at a prompt, not exiting. */ + while (scheme_current_thread->meta_continuation) { + Scheme_Thread *p = scheme_current_thread; + Scheme_Overflow *oflow; - thread_ended_with_activity = 1; - - if (scheme_notify_multithread && !scheme_first_thread->next) { - scheme_notify_multithread(0); - have_activity = 0; + p->cjs.val = result; + + if (!SAME_OBJ(p->meta_continuation->prompt_tag, scheme_default_prompt_tag)) { + scheme_signal_error("thread ended with meta continuation that isn't for the default prompt"); + } else { + oflow = p->meta_continuation->overflow; + p->meta_continuation = p->meta_continuation->next; + if (!oflow->eot) { + p->stack_start = oflow->stack_start; + scheme_longjmpup(&oflow->jmp->cont); + } + } } - select_thread(); + scheme_end_current_thread(); /* Shouldn't get here! */ scheme_signal_error("bad thread switch"); } } +void scheme_ensure_stack_start(void *d) +{ + if (!scheme_deepest_stack_start + || (STK_COMP((unsigned long)scheme_deepest_stack_start, (unsigned long)d))) + scheme_deepest_stack_start = d; +} + static Scheme_Object *make_subprocess(Scheme_Object *child_thunk, void *child_start, Scheme_Config *config, @@ -2487,7 +2514,7 @@ static Scheme_Object *make_subprocess(Scheme_Object *child_thunk, turn_on_multi = !scheme_first_thread->next; - scheme_ensure_stack_start(scheme_current_thread, child_start); + scheme_ensure_stack_start(child_start); if (!config) config = scheme_current_config(); @@ -2684,9 +2711,6 @@ static Scheme_Object *thread_k(void) Scheme_Custodian *mgr; Scheme_Thread_Cell_Table *cells; int suspend_to_kill = p->ku.k.i1; -#ifndef MZ_PRECISE_GC - long dummy; -#endif thunk = (Scheme_Object *)p->ku.k.p1; config = (Scheme_Config *)p->ku.k.p2; @@ -2699,12 +2723,7 @@ static Scheme_Object *thread_k(void) p->ku.k.p3 = NULL; p->ku.k.p4 = NULL; - result = make_subprocess(thunk, -#ifdef MZ_PRECISE_GC - (void *)&__gc_var_stack__, -#else - (void *)&dummy, -#endif + result = make_subprocess(thunk, PROMPT_STACK(result), config, cells, break_cell, mgr, !suspend_to_kill); /* Don't get rid of `result'; it keeps the @@ -2769,16 +2788,17 @@ static Scheme_Object *def_nested_exn_handler(int argc, Scheme_Object *argv[]) { if (scheme_current_thread->nester) { Scheme_Thread *p = scheme_current_thread; - p->cjs.jumping_to_continuation = (struct Scheme_Escaping_Cont *)scheme_current_thread; - p->cjs.u.val = argv[0]; + p->cjs.jumping_to_continuation = (Scheme_Object *)scheme_current_thread; + p->cjs.val = argv[0]; p->cjs.is_kill = 0; scheme_longjmp(*p->error_buf, 1); } - return scheme_void; /* misuse of exception handler */ + return scheme_void; /* misuse of exception handler (wrong kind of thread or under prompt) */ } -static Scheme_Object *call_as_nested_thread(int argc, Scheme_Object *argv[]) +/* private, but declared as public to avoid inlining: */ +Scheme_Object *scheme_call_as_nested_thread(int argc, Scheme_Object *argv[], void *max_bottom) { Scheme_Thread *p = scheme_current_thread; Scheme_Thread * volatile np; @@ -2841,22 +2861,12 @@ static Scheme_Object *call_as_nested_thread(int argc, Scheme_Object *argv[]) } np->tail_buffer_size = p->tail_buffer_size; - np->overflow_set = p->overflow_set; - np->o_start = p->o_start; - np->overflow_buf = p->overflow_buf; - - /* In case it's not yet set in the main thread... */ - scheme_ensure_stack_start((Scheme_Thread *)np, (int *)&failure); + scheme_ensure_stack_start(max_bottom); np->list_stack = p->list_stack; np->list_stack_pos = p->list_stack_pos; scheme_gmp_tls_init(np->gmp_tls); - - if (p->cc_ok) { - p->cc_ok_save = *p->cc_ok; - *p->cc_ok = 0; - } /* np->prev = NULL; - 0ed by allocation */ np->next = scheme_first_thread; @@ -2940,7 +2950,7 @@ static Scheme_Object *call_as_nested_thread(int argc, Scheme_Object *argv[]) np->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { if (!np->cjs.is_kill) - v = np->cjs.u.val; + v = np->cjs.val; else v = NULL; failure = 1; @@ -2996,9 +3006,6 @@ static Scheme_Object *call_as_nested_thread(int argc, Scheme_Object *argv[]) MZ_CONT_MARK_POS = p->cont_mark_pos; #endif - if (p->cc_ok) - *p->cc_ok = p->cc_ok_save; - if ((p->running & MZTHREAD_KILLED) || (p->running & MZTHREAD_USER_SUSPENDED)) scheme_thread_block(0.0); @@ -3018,6 +3025,13 @@ static Scheme_Object *call_as_nested_thread(int argc, Scheme_Object *argv[]) return v; } +static Scheme_Object *call_as_nested_thread(int argc, Scheme_Object *argv[]) +{ + Scheme_Object *result; + result = scheme_call_as_nested_thread(argc, argv, PROMPT_STACK(result)); + return result; +} + /*========================================================================*/ /* thread scheduling and termination */ /*========================================================================*/ @@ -3373,7 +3387,7 @@ static void exit_or_escape(Scheme_Thread *p) if (p->nester) { if (p->running & MZTHREAD_KILLED) p->running -= MZTHREAD_KILLED; - p->cjs.jumping_to_continuation = (struct Scheme_Escaping_Cont *)p; + p->cjs.jumping_to_continuation = (Scheme_Object *)p; p->cjs.is_kill = 1; scheme_longjmp(*p->error_buf, 1); } @@ -3432,7 +3446,6 @@ void scheme_thread_block(float sleep_time) Scheme_Thread *next, *p = scheme_current_thread; Scheme_Object *next_in_set; Scheme_Thread_Set *t_set; - int dummy; if (p->running & MZTHREAD_KILLED) { /* This thread is dead! Give up now. */ @@ -3645,11 +3658,6 @@ void scheme_thread_block(float sleep_time) #endif if (next) { - if (!p->next) { - /* This is the main process */ - scheme_ensure_stack_start(p, (void *)&dummy); - } - scheme_swap_thread(next); } else if (do_atomic && scheme_on_atomic_timeout) { scheme_on_atomic_timeout(); @@ -6243,12 +6251,16 @@ static Scheme_Object *make_security_guard(int argc, Scheme_Object *argv[]) scheme_wrong_type("make-security-guard", "security-guard", 0, argc, argv); scheme_check_proc_arity("make-security-guard", 3, 1, argc, argv); scheme_check_proc_arity("make-security-guard", 4, 2, argc, argv); + if (argc > 3) + scheme_check_proc_arity2("make-security-guard", 3, 3, argc, argv, 1); sg = MALLOC_ONE_TAGGED(Scheme_Security_Guard); sg->so.type = scheme_security_guard_type; sg->parent = (Scheme_Security_Guard *)argv[0]; sg->file_proc = argv[1]; sg->network_proc = argv[2]; + if ((argc > 3) && SCHEME_TRUEP(argv[3])) + sg->link_proc = argv[3]; return (Scheme_Object *)sg; } @@ -6314,6 +6326,33 @@ void scheme_security_check_file(const char *who, const char *filename, int guard } } +void scheme_security_check_file_link(const char *who, const char *filename, const char *content) +{ + Scheme_Security_Guard *sg; + + sg = (Scheme_Security_Guard *)scheme_get_param(scheme_current_config(), MZCONFIG_SECURITY_GUARD); + + if (sg->file_proc) { + Scheme_Object *a[3]; + + a[0] = scheme_intern_symbol(who); + a[1] = scheme_make_sized_path((char *)filename, -1, 1); + a[2] = scheme_make_sized_path((char *)content, -1, 1); + + while (sg->parent) { + if (sg->link_proc) + scheme_apply(sg->link_proc, 3, a); + else { + scheme_signal_error("%s: security guard does not allow any link operation; attempted from: %s to: %s", + who, + filename, + content); + } + sg = sg->parent; + } + } +} + void scheme_security_check_network(const char *who, const char *host, int port, int client) { Scheme_Security_Guard *sg; @@ -6518,12 +6557,21 @@ static void prepare_thread_for_GC(Scheme_Object *t) while (o < e && (o != e2)) { *(o++) = NULL; } + + /* If there's a meta-prompt, we can also zero out past the unused part */ + if (p->meta_prompt && (p->meta_prompt->runstack_boundary_start == p->runstack_start)) { + e = p->runstack_start + p->runstack_size; + o = p->runstack_start + p->meta_prompt->runstack_boundary_offset; + while (o < e) { + *(o++) = NULL; + } + } RUNSTACK_TUNE( size = p->runstack_size - (p->runstack - p->runstack_start); ); for (saved = p->runstack_saved; saved; saved = saved->prev) { o = saved->runstack_start; - e = saved->runstack; + e = o + saved->runstack_offset; RUNSTACK_TUNE( size += saved->runstack_size; ); while (o < e) { *(o++) = NULL; @@ -6565,6 +6613,22 @@ static void prepare_thread_for_GC(Scheme_Object *t) for (i = stackpos; i < SCHEME_MARK_SEGMENT_SIZE; i++) { seg[i].key = NULL; seg[i].val = NULL; + seg[i].cache = NULL; + } + } + + { + MZ_MARK_STACK_TYPE pos; + /* also zero out slots before the current bottom */ + for (pos = 0; pos < p->cont_mark_stack_bottom; pos++) { + Scheme_Cont_Mark *seg; + int stackpos; + segpos = ((long)pos >> SCHEME_LOG_MARK_SEGMENT_SIZE); + seg = p->cont_mark_stack_segments[segpos]; + stackpos = ((long)pos & SCHEME_MARK_SEGMENT_MASK); + seg[stackpos].key = NULL; + seg[stackpos].val = NULL; + seg[stackpos].cache = NULL; } } } @@ -6599,7 +6663,7 @@ static void get_ready_for_GC() scheme_clear_modidx_cache(); scheme_clear_shift_cache(); - scheme_clear_cc_ok(); + scheme_clear_prompt_cache(); scheme_clear_rx_buffers(); #ifdef RUNSTACK_IS_GLOBAL @@ -6695,7 +6759,7 @@ static Scheme_Object *current_stats(int argc, Scheme_Object *argv[]) /* C stack */ if (t == scheme_current_thread) { void *stk_start, *stk_end; - stk_start = t->stack_start; + stk_start = ADJUST_STACK_START(t->stack_start); stk_end = (void *)&stk_end; # ifdef STACK_GROWS_UP sz = (long)stk_end XFORM_OK_MINUS (long)stk_start; @@ -6708,7 +6772,7 @@ static Scheme_Object *current_stats(int argc, Scheme_Object *argv[]) sz = t->jmpup_buf.stack_size; } for (overflow = t->overflow; overflow; overflow = overflow->prev) { - sz += overflow->cont.stack_size; + sz += overflow->jmp->cont.stack_size; } /* Scheme stack */ @@ -6816,7 +6880,9 @@ Scheme_Jumpup_Buf_Holder *scheme_new_jmpupbuf_holder(void) #ifdef MZ_PRECISE_GC static unsigned long get_current_stack_start(void) { - return (unsigned long)scheme_current_thread->stack_start; + Scheme_Thread *p; + p = scheme_current_thread; + return (unsigned long)ADJUST_STACK_START(p->stack_start); } #endif diff --git a/src/mzscheme/src/type.c b/src/mzscheme/src/type.c index aa0b6f0f18..142af3c9f9 100644 --- a/src/mzscheme/src/type.c +++ b/src/mzscheme/src/type.c @@ -222,6 +222,8 @@ scheme_init_type (Scheme_Env *env) set_name(scheme_thread_cell_type, ""); set_name(scheme_thread_cell_values_type, ""); + set_name(scheme_prompt_tag_type, ""); + set_name(scheme_string_converter_type, ""); set_name(scheme_channel_syncer_type, ""); @@ -341,35 +343,23 @@ static int bad_trav_FIXUP(void *p) static void MARK_cjs(Scheme_Continuation_Jump_State *cjs) { gcMARK(cjs->jumping_to_continuation); - gcMARK(cjs->u.vals); + gcMARK(cjs->val); } static void FIXUP_cjs(Scheme_Continuation_Jump_State *cjs) { gcFIXUP(cjs->jumping_to_continuation); - gcFIXUP(cjs->u.vals); + gcFIXUP(cjs->val); } static void MARK_stack_state(Scheme_Stack_State *ss) { - - Scheme_Object **old = ss->runstack_start; - - gcMARK(ss->runstack_start); - ss->runstack = ss->runstack_start + (ss->runstack - old); - gcMARK(ss->runstack_saved); - gcMARK(ss->current_escape_cont_key); + gcMARK(ss->barrier_prompt); } static void FIXUP_stack_state(Scheme_Stack_State *ss) { - - Scheme_Object **old = ss->runstack_start; - - gcFIXUP(ss->runstack_saved); - gcFIXUP_TYPED_NOW(Scheme_Object **, ss->runstack_start); - ss->runstack = ss->runstack_start + (ss->runstack - old); - gcFIXUP(ss->current_escape_cont_key); + gcFIXUP(ss->barrier_prompt); } static void MARK_jmpup(Scheme_Jumpup_Buf *buf) @@ -452,6 +442,8 @@ void scheme_register_traversers(void) GC_REG_TRAV(scheme_cont_type, cont_proc); GC_REG_TRAV(scheme_rt_dyn_wind, mark_dyn_wind); GC_REG_TRAV(scheme_rt_overflow, mark_overflow); + GC_REG_TRAV(scheme_rt_overflow_jmp, mark_overflow_jmp); + GC_REG_TRAV(scheme_rt_meta_cont, meta_cont_proc); GC_REG_TRAV(scheme_escaping_cont_type, escaping_cont_proc); GC_REG_TRAV(scheme_char_type, char_obj); @@ -486,6 +478,8 @@ void scheme_register_traversers(void) GC_REG_TRAV(scheme_lazy_macro_type, second_of_cons); GC_REG_TRAV(scheme_box_type, small_object); GC_REG_TRAV(scheme_thread_type, thread_val); + GC_REG_TRAV(scheme_prompt_type, prompt_val); + GC_REG_TRAV(scheme_prompt_tag_type, cons_cell); GC_REG_TRAV(scheme_cont_mark_set_type, cont_mark_set_val); GC_REG_TRAV(scheme_sema_type, sema_val); GC_REG_TRAV(scheme_channel_type, channel_val); diff --git a/src/wxmac/include/base/common.h b/src/wxmac/include/base/common.h index 4ca8d0298a..5747a07ff7 100644 --- a/src/wxmac/include/base/common.h +++ b/src/wxmac/include/base/common.h @@ -365,6 +365,7 @@ extern CGrafPtr wxGetGrafPtr(void); #define leaveEvt 42 #define wheelEvt 43 #define mouseMenuDown 44 +#define unicodeEvt 45 #include "wx_obj.h" diff --git a/src/wxmac/src/mac/wx_app.cc b/src/wxmac/src/mac/wx_app.cc index 727e3e7b3c..aaf0fc7ef3 100644 --- a/src/wxmac/src/mac/wx_app.cc +++ b/src/wxmac/src/mac/wx_app.cc @@ -262,6 +262,7 @@ void wxApp::doMacDispatch(EventRecord *e) doMacMouseUp(); break; case keyDown: case wheelEvt: + case unicodeEvt: doMacKeyDown(); break; case autoKey: doMacAutoKey(); break; @@ -645,6 +646,8 @@ void wxApp::doMacKeyUpDown(Bool down) key = WXK_WHEEL_UP; else key = WXK_WHEEL_DOWN; + } else if (cCurrentEvent.what == unicodeEvt) { + key = cCurrentEvent.message; } else { key = (cCurrentEvent.message & keyCodeMask) >> 8; /* Better way than to use hard-wired key codes? */ diff --git a/src/wxmac/src/mac/wx_item.cc b/src/wxmac/src/mac/wx_item.cc index e9548842c7..80241d346b 100644 --- a/src/wxmac/src/mac/wx_item.cc +++ b/src/wxmac/src/mac/wx_item.cc @@ -25,7 +25,7 @@ #include "wx_gdi.h" #include "wx_utils.h" -extern Bool wx_ignore_key; +extern void wxSmuggleOutEvent(EventRef); Bool wx_propagate_key; wxItem::wxItem(void) @@ -262,7 +262,10 @@ static OSStatus myEventHandler(EventHandlerCallRef inHandlerCallRef, if (wx_propagate_key) { return eventNotHandledErr; } else { - wx_ignore_key = TRUE; + /* We don't want anyone else to handle this event + at the OS X level, out smuggle out the event + so it can be picked up at the WaitNextEvent level: */ + wxSmuggleOutEvent(inEvent); return noErr; } }