From d92b9cb4040cb11cdc45161fa01b35cc117fbe4f Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Thu, 6 Sep 2012 12:33:13 -0600 Subject: [PATCH] add `define-logger' and filtering based on logger name The `make-log-receiver' function now includes a logger-name filter. This filter is implemented as a low enough level that it affects `log-level?' tests to check whether a log message needs to be constructed at all. The -W and -L flags and PLTSTDERR and PLTSYSLOG environment variables support filters of the form " @ ...", where @ specializes filtering of events for a logger whose name matches to show and higher. --- collects/racket/private/logger.rkt | 57 ++ collects/racket/private/more-scheme.rkt | 25 +- .../scribblings/reference/futures-trace.scrbl | 1 + collects/scribblings/reference/logging.scrbl | 75 ++- collects/scribblings/reference/memory.scrbl | 2 +- collects/scribblings/reference/startup.scrbl | 8 +- collects/tests/racket/logger.rktl | 54 ++ doc/release-notes/racket/HISTORY.txt | 11 +- src/racket/cmdline.inc | 119 +++- src/racket/include/scheme.h | 3 +- src/racket/include/schthread.h | 4 + src/racket/src/compile.c | 12 +- src/racket/src/cstartup.inc | 578 +++++++++--------- src/racket/src/env.c | 2 + src/racket/src/error.c | 222 ++++--- src/racket/src/eval.c | 2 +- src/racket/src/future.c | 30 +- src/racket/src/module.c | 4 +- src/racket/src/mzmark_optimize.inc | 2 + src/racket/src/mzmark_type.inc | 10 +- src/racket/src/mzmarksrc.c | 6 +- src/racket/src/optimize.c | 63 +- src/racket/src/regexp.c | 8 + src/racket/src/schminc.h | 2 +- src/racket/src/schpriv.h | 23 +- src/racket/src/schvers.h | 4 +- src/racket/src/symbol.c | 24 +- src/racket/src/thread.c | 8 +- 28 files changed, 860 insertions(+), 499 deletions(-) create mode 100644 collects/racket/private/logger.rkt diff --git a/collects/racket/private/logger.rkt b/collects/racket/private/logger.rkt new file mode 100644 index 0000000000..a43b36ded0 --- /dev/null +++ b/collects/racket/private/logger.rkt @@ -0,0 +1,57 @@ + +(module logger '#%kernel + (#%require "small-scheme.rkt" "define.rkt" + (for-syntax '#%kernel "stx.rkt" "small-scheme.rkt" "stxcase-scheme.rkt")) + + (#%provide log-fatal log-error log-warning log-info log-debug + define-logger) + + (define-for-syntax (make-define-log mode X-logger-stx) + (lambda (stx) + (with-syntax ([X-logger X-logger-stx] + [mode mode]) + (syntax-case stx () + [(_ str-expr) + #'(let ([l X-logger]) + (when (log-level? l 'mode) + (log-message l 'mode str-expr (current-continuation-marks))))] + [(_ str-expr arg ...) + #'(let ([l X-logger]) + (when (log-level? l 'mode) + (log-message l 'mode (format str-expr arg ...) (current-continuation-marks))))])))) + + (define-syntax log-fatal (make-define-log 'fatal #'(current-logger))) + (define-syntax log-error (make-define-log 'error #'(current-logger))) + (define-syntax log-warning (make-define-log 'warning #'(current-logger))) + (define-syntax log-info (make-define-log 'info #'(current-logger))) + (define-syntax log-debug (make-define-log 'debug #'(current-logger))) + + (define (check-logger who) + (lambda (v) + (unless (logger? v) + (raise-argument-error who "logger?" v)) + v)) + + (define-syntax (define-logger stx) + (syntax-case stx () + [(_ X) + (let* ([X #'X] + [mk (lambda (mode) + (datum->syntax X (string->symbol (format "log-~a-~a" (syntax-e X) mode)) X))]) + (unless (identifier? X) + (raise-syntax-error #f "not an identifier" stx X)) + (with-syntax ([log-X-fatal (mk 'fatal)] + [log-X-error (mk 'error)] + [log-X-warning (mk 'warning)] + [log-X-info (mk 'info)] + [log-X-debug (mk 'debug)] + [current-X-logger + (datum->syntax X (string->symbol (format "current-~a-logger" (syntax-e X))) X)] + [X X]) + #'(begin + (define X-logger (make-logger 'X (current-logger))) + (define-syntax log-X-fatal (make-define-log 'fatal #'X-logger)) + (define-syntax log-X-error (make-define-log 'error #'X-logger)) + (define-syntax log-X-warning (make-define-log 'warning #'X-logger)) + (define-syntax log-X-info (make-define-log 'info #'X-logger)) + (define-syntax log-X-debug (make-define-log 'debug #'X-logger)))))]))) diff --git a/collects/racket/private/more-scheme.rkt b/collects/racket/private/more-scheme.rkt index 90545832bb..3c6623efe9 100644 --- a/collects/racket/private/more-scheme.rkt +++ b/collects/racket/private/more-scheme.rkt @@ -3,7 +3,7 @@ ;; more-scheme : case, do, etc. - remaining syntax (module more-scheme '#%kernel - (#%require "small-scheme.rkt" "define.rkt" '#%paramz "case.rkt" + (#%require "small-scheme.rkt" "define.rkt" '#%paramz "case.rkt" "logger.rkt" (for-syntax '#%kernel "stx.rkt" "small-scheme.rkt" "stxcase-scheme.rkt" "qqstx.rkt")) (define-syntax case-test @@ -333,27 +333,6 @@ (printf "cpu time: ~s real time: ~s gc time: ~s\n" cpu user gc) (apply values v)))]))) - (define-syntax (log-it stx) - (syntax-case stx () - [(_ id mode str-expr) - #'(let ([l (current-logger)]) - (when (log-level? l 'mode) - (log-message l 'mode str-expr (current-continuation-marks))))])) - (define-syntax (define-log stx) - (syntax-case stx () - [(_ id mode) - #'(define-syntax (id stx) - (syntax-case stx () - [(_ str-expr) - #'(log-it id mode str-expr)] - [(_ str-expr arg (... ...)) - #'(log-it id mode (format str-expr arg (... ...)))]))])) - (define-log log-fatal fatal) - (define-log log-error error) - (define-log log-warning warning) - (define-log log-info info) - (define-log log-debug debug) - (define-values (hash-update hash-update! hash-has-key? hash-ref!) (let* ([not-there (gensym)] [up (lambda (who mut? set ht key xform default) @@ -405,5 +384,5 @@ with-handlers with-handlers* call-with-exception-handler set!-values let/cc fluid-let time - log-fatal log-error log-warning log-info log-debug + log-fatal log-error log-warning log-info log-debug define-logger hash-ref! hash-has-key? hash-update hash-update!)) diff --git a/collects/scribblings/reference/futures-trace.scrbl b/collects/scribblings/reference/futures-trace.scrbl index 5baa09d637..c81f02e8ed 100644 --- a/collects/scribblings/reference/futures-trace.scrbl +++ b/collects/scribblings/reference/futures-trace.scrbl @@ -103,6 +103,7 @@ code via @racket[trace-futures]), it is much easier to use the graphical profiler tool provided by @racketmodname[future-visualizer]. +Future events are reported to a logger named @racket['future]. In addition to its string message, each event logged for a future has a data value that is an instance of a @racket[future-event] @tech{prefab} structure: diff --git a/collects/scribblings/reference/logging.scrbl b/collects/scribblings/reference/logging.scrbl index 5dd76184f6..c54fae0a06 100644 --- a/collects/scribblings/reference/logging.scrbl +++ b/collects/scribblings/reference/logging.scrbl @@ -1,5 +1,7 @@ #lang scribble/doc -@(require "mz.rkt" (for-label racket/cmdline)) +@(require "mz.rkt" + scribble/bnf + (for-label racket/cmdline)) @title[#:tag "logging"]{Logging} @@ -33,9 +35,22 @@ through environment variables: @item{If the @indexed-envvar{PLTSTDERR} environment variable is defined and is not overridden by a command-line flag, it determines the level of the @tech{log receiver} that propagates - events to the original error port. The environment variable's value - should be @racket["none"], @racket["fatal"], @racket["error"], - @racket["warning"], @racket["info"], or @racket["debug"]. + events to the original error port. + + The environment variable's value can be a @nonterm{level}: + @litchar{none}, @litchar{fatal}, @litchar{error}, + @litchar{warning}, @litchar{info}, or @litchar{debug}; all + events the corresponding level of higher are printed. After an + initial @nonterm{level}, the value can contain space-separated + specifications of the form + @nonterm{level}@litchar["@"]@nonterm{name}, which prints events + from loggers whose name match @nonterm{name} only at the given + @nonterm{level} or higher (where a @nonterm{name} contains any + character other than a space or @litchar["@"]). For example, + the value @racket["error debug@GC"] prints all events at the + @racket['error] level and higher, but prints events for a + logger named @racket['GC] at the @racket['debug] level and + higher (which includes all levels). The default is @racket["error"].} @@ -82,6 +97,18 @@ Reports @racket[logger]'s name, if any.} A @tech{parameter} that determines the @tech{current logger}.} +@defform[(define-logger id)]{ + +Defines @racketkeywordfont{log-}@racket[id]@racketkeywordfont{-fatal}, +@racketkeywordfont{log-}@racket[id]@racketkeywordfont{-error}, +@racketkeywordfont{log-}@racket[id]@racketkeywordfont{-warning}, +@racketkeywordfont{log-}@racket[id]@racketkeywordfont{-info}, and +@racketkeywordfont{log-}@racket[id]@racketkeywordfont{-debug} as forms +like @racket[log-fatal], @racket[log-error],@racket[log-warning], +@racket[log-info], and @racket[log-debug]. The new forms use a logger named +@racket['@#,racket[id]] that is a child of @racket[current-logger], +instead of using @racket[(current-logger)] directly. The new logger is +created when @racket[define-logger] is evaluated.} @; ---------------------------------------- @section{Logging Events} @@ -111,9 +138,9 @@ one of its ancestors is interested in @racket[level] events (or potentially lower). Use this function to avoid work generating an event for @racket[log-message] if no receiver is interested in the information; this shortcut is built into @racket[log-fatal], -@racket[log-error], @racket[log-warning], @racket[log-info], and -@racket[log-debug], however, so it should not be used with those -forms. +@racket[log-error], @racket[log-warning], @racket[log-info], +@racket[log-debug], and forms bound by @racket[define-logger], +however, so it should not be used with those forms. The result of this function can change if a garbage collection determines that a log receiver is no longer accessible (and therefore @@ -148,6 +175,10 @@ only if the logger has receivers that are interested in the event. In addition, the current continuation's @tech{continuation marks} are sent to the logger with the message string. +These form are convenient for using the current logger, but libraries +should generally use a specifically named logger---typically through +similar convenience forms generated by @racket[define-logger]. + For each @racketkeywordfont{log-}@racket[_level], @racketblock[ @@ -161,6 +192,18 @@ is equivalent to (when (log-level? l '@#,racket[_level]) (log-message l '@#,racket[_level] string-expr (current-continuation-marks)))) +] + +while + +@racketblock[ +(@#,racketkeywordfont{log-}_level format-string-expr v ...) +] + +is equivalent to + +@racketblock[ +(@#,racketkeywordfont{log-}_level (format format-string-expr v ...)) ]} @; ---------------------------------------- @@ -172,12 +215,15 @@ Returns @racket[#t] if @racket[v] is a @tech{log receiver}, @racket[#f] otherwise.} @defproc[(make-log-receiver [logger logger?] - [level (or/c 'fatal 'error 'warning 'info 'debug)]) + [level (or/c 'none 'fatal 'error 'warning 'info 'debug)] + [name (or/c #f symbol?) #f] + ... ...) log-receiver?]{ Creates a @tech{log receiver} to receive events of importance @racket[level] and higher as reported to @racket[logger] and its -descendants. +descendants, as long as either @racket[name] is @racket[#f] or the +reporting logger's name matches @racket[name]. A @tech{log receiver} is a @tech{synchronizable event}. It becomes ready as an @tech{synchronizable event} when a logging event is @@ -185,4 +231,13 @@ received, so use @racket[sync] to receive an logged event. The @tech{log receiver}'s synchronization value is a vector containing three values: the level of the event as a symbol, an immutable string for the event message, and an arbitrary value that was supplied as the -last argument to @racket[log-message] when the event was logged.} +last argument to @racket[log-message] when the event was logged. + +Multiple pairs of @racket[level] and @racket[name] can be provided to +indicate different specific @racket[level]s for different +@racket[name]s (where @racket[name] defaults to racket[#f] only for +the last given @racket[level]). A @racket[level] for a @racket[#f] +@racket[name] applies only to loggers whose names do not match any other +provided @racket[name]. If the same @racket[name] is provided multiple +times, the @racket[level] provided with the last instance in the +argument list takes precedence.} diff --git a/collects/scribblings/reference/memory.scrbl b/collects/scribblings/reference/memory.scrbl index 2ad8307375..5b2794f3e1 100644 --- a/collects/scribblings/reference/memory.scrbl +++ b/collects/scribblings/reference/memory.scrbl @@ -176,7 +176,7 @@ Set the @as-index{@envvar{PLTDISABLEGC}} environment variable (to any value) before Racket starts to disable @tech{garbage collection}. In Racket 3m (the main variant of Racket), each garbage collection -logs a message (see @secref["logging"]) at the @racket['debug] level. +logs a message (see @secref["logging"]) at the @racket['debug] level to a logger named @racket['GC]. The data portion of the message is an instance of a @indexed-racket[gc-info] @tech{prefab} structure type with 10 fields as follows, but future versions of Racket may use a @racket[gc-info] @tech{prefab} structure diff --git a/collects/scribblings/reference/startup.scrbl b/collects/scribblings/reference/startup.scrbl index 7132eba387..0cba5bea34 100644 --- a/collects/scribblings/reference/startup.scrbl +++ b/collects/scribblings/reference/startup.scrbl @@ -306,14 +306,14 @@ flags: ports. This flag currently has no effect, because binary mode is always used.} - @item{@FlagFirst{W} @nonterm{level} or @DFlagFirst{warn} - @nonterm{level} : Sets the logging level for writing events to + @item{@FlagFirst{W} @nonterm{levels} or @DFlagFirst{warn} + @nonterm{levels} : Sets the logging level for writing events to the original error port. The possible @nonterm{level} values are the same as for the @envvar{PLTSTDERR} environment variable. See @secref["logging"] for more information.} - @item{@FlagFirst{L} @nonterm{level} or @DFlagFirst{syslog} - @nonterm{level} : Sets the logging level for writing events to + @item{@FlagFirst{L} @nonterm{levels} or @DFlagFirst{syslog} + @nonterm{levels} : Sets the logging level for writing events to the system log. The possible @nonterm{level} values are the same as for the @envvar{PLTSYSLOG} environment variable. See @secref["logging"] for more information.} diff --git a/collects/tests/racket/logger.rktl b/collects/tests/racket/logger.rktl index 9bf5f9d2fe..5e8038e6e1 100644 --- a/collects/tests/racket/logger.rktl +++ b/collects/tests/racket/logger.rktl @@ -76,4 +76,58 @@ ; -------------------- +(let () + (define-logger test) + (define r (make-log-receiver (current-logger) 'warning 'test)) + (log-test-debug (/ 0)) + (log-test-debug "debug") + (test #f sync/timeout 0 r) + (log-test-warning "warning") + (test "test: warning" (lambda (v) (vector-ref v 1)) (sync r))) + +; ---------------------------------------- + +(let () + (define root (make-logger)) + (define sub1 (make-logger 'sub1 root)) + (define sub2 (make-logger 'sub2 root)) + (define sub3 (make-logger 'sub3 root)) + (define sub4 (make-logger 'sub4 root)) + (define r (make-log-receiver root + 'error #f + 'info 'sub1 + 'none 'sub4 + 'info 'sub2 + 'warning 'sub1 + 'fatal #f)) + (define (get) + (define m (sync/timeout 0 r)) + (and m (vector-ref m 1))) + (log-message root 'debug "message" 'data) + (test #f get) + (log-message sub1 'info "message" 'data) + (test #f get) + (log-message sub2 'info "message" 'data) + (test "sub2: message" get) + (log-message sub2 'debug "message" 'data) + (test #f get) + (log-message sub1 'warning "message" 'data) + (test "sub1: message" get) + (log-message root 'fatal "message" 'data) + (test "message" get) + (log-message sub3 'fatal "message" 'data) + (test "sub3: message" get) + (log-message sub3 'debug "message" 'data) + (log-message sub3 'info "message" 'data) + (log-message sub3 'warning "message" 'data) + (test #f get) + (log-message sub4 'debug "message" 'data) + (log-message sub4 'info "message" 'data) + (log-message sub4 'warning "message" 'data) + (log-message sub4 'error "message" 'data) + (log-message sub4 'fatal "message" 'data) + (test #f get)) + +; -------------------- + (report-errs) diff --git a/doc/release-notes/racket/HISTORY.txt b/doc/release-notes/racket/HISTORY.txt index 4d842d1ea5..1e394f64ad 100644 --- a/doc/release-notes/racket/HISTORY.txt +++ b/doc/release-notes/racket/HISTORY.txt @@ -1,8 +1,15 @@ +Version 5.3.0.23 +Changed make-log-receiver to accept a logger name as an + event filter +Addded define-logger +Changed -W, -L, PLTSTDERR, and PLTSYSLOG to support log + filters of the form " = ..." +Changed log-error, etc., to support format mode +Added racket/format, which is re-exported by racket + Version 5.3.0.22 Changed a thread's initial prompt to use the default handler (instead of accepting and ignoring abort arguments) -Changed log-error, etc., to support format mode -Added racket/format, which is re-exported by racket ffi/unsafe: added cpointer-gcable? racket/class: added dynamic-get-field and dynamic-set-field! diff --git a/src/racket/cmdline.inc b/src/racket/cmdline.inc index 8c9adf0f74..22d56bf50c 100644 --- a/src/racket/cmdline.inc +++ b/src/racket/cmdline.inc @@ -548,38 +548,91 @@ static Scheme_Object *reverse_path_list(Scheme_Object *l, int rel_to_cwd) return r; } -static int get_log_level(char *prog, char *real_switch, const char *envvar, const char *what, char *str) -{ - if (!strcmp(str, "none")) - return 0; - else if (!strcmp(str, "fatal")) - return SCHEME_LOG_FATAL; - else if (!strcmp(str, "error")) - return SCHEME_LOG_ERROR; - else if (!strcmp(str, "warning")) - return SCHEME_LOG_WARNING; - else if (!strcmp(str, "info")) - return SCHEME_LOG_INFO; - else if (!strcmp(str, "debug")) - return SCHEME_LOG_DEBUG; +#ifndef MZ_XFORM +# define GC_CAN_IGNORE /**/ +#endif - PRINTF("%s: %s level %s%s%s must be one of the following:\n" - " none fatal error warning info or debug\n" - " given: %s\n", - prog, what, - real_switch ? "after " : "in ", - real_switch ? real_switch : envvar, - real_switch ? " switch" : " envrionment variable", - str); - return -1; +static Scheme_Object *get_log_level(char *prog, char *real_switch, const char *envvar, const char *what, GC_CAN_IGNORE char *str) +{ + int k, len, default_lvl = -1; + Scheme_Object *l = scheme_null, *last = NULL; + GC_CAN_IGNORE char *s, *orig_str = str; + + while (1) { + if (!*str) { + if (default_lvl == -1) default_lvl = 0; + if (last) + SCHEME_CDR(last) = scheme_make_integer(default_lvl); + else + l = scheme_make_integer(default_lvl); + return l; + } + + if (!strncmp(str, "none", 4)) { + k = 0; + len = 4; + } else if (!strncmp(str, "fatal", 5)) { + k = SCHEME_LOG_FATAL; + len = 5; + } else if (!strncmp(str, "error", 5)) { + k = SCHEME_LOG_ERROR; + len = 5; + } else if (!strncmp(str, "warning", 7)) { + k = SCHEME_LOG_WARNING; + len = 7; + } else if (!strncmp(str, "info", 4)) { + k = SCHEME_LOG_INFO; + len = 4; + } else if (!strncmp(str, "debug", 5)) { + k = SCHEME_LOG_DEBUG; + len = 5; + } else + k = -1; + + str += len; + + if (k != -1) { + if (*str == '@') { + str++; + for (s = str; *s && *s != ' '; s++) { + } + l = scheme_make_pair(scheme_make_sized_byte_string(str, s - str, 1), l); + if (!last) last = l; + l = scheme_make_pair(scheme_make_integer(k), l); + str = s; + } else if ((*str == ' ') || !*str) { + if (default_lvl == -1) + default_lvl = k; + else + k = -1; + } else + k = -1; + if (*str) str++; + } + + if (k == -1) { + PRINTF("%s: %s %s%s%s must be one of the following\n" + " s:\n" + " none fatal error warning info debug\n" + " or up to one such in space-separated sequence of\n" + " @\n" + " given: %s\n", + prog, what, + real_switch ? "after " : "in ", + real_switch ? real_switch : envvar, + real_switch ? " switch" : " environment variable", + orig_str); + return NULL; + } + } } -static int get_arg_log_level(char *prog, char *real_switch, const char *what, int argc, char **argv) +static Scheme_Object *get_arg_log_level(char *prog, char *real_switch, const char *what, int argc, char **argv) { if (argc < 2) { PRINTF("%s: missing %s level after %s switch\n", prog, what, real_switch); - return -1; + return NULL; } return get_log_level(prog, real_switch, NULL, what, argv[1]); @@ -652,7 +705,7 @@ static int run_from_cmd_line(int argc, char *_argv[], int was_config_flag = 0, saw_nc_flag = 0; int no_compiled = 0; int init_ns = 0, no_init_ns = 0; - int syslog_level = -1, stderr_level = -1; + Scheme_Object *syslog_level = NULL, *stderr_level = NULL; FinishArgs *fa; FinishArgsAtoms *fa_a; @@ -1177,7 +1230,7 @@ static int run_from_cmd_line(int argc, char *_argv[], #endif case 'W': stderr_level = get_arg_log_level(prog, real_switch, "stderr", argc, argv); - if (stderr_level < 0) + if (!stderr_level) goto show_need_help; --argc; argv++; @@ -1185,7 +1238,7 @@ static int run_from_cmd_line(int argc, char *_argv[], break; case 'L': syslog_level = get_arg_log_level(prog, real_switch, "syslog", argc, argv); - if (syslog_level < 0) + if (!syslog_level) goto show_need_help; --argc; argv++; @@ -1257,14 +1310,14 @@ static int run_from_cmd_line(int argc, char *_argv[], #endif /* DONT_PARSE_COMMAND_LINE */ #ifdef GETENV_FUNCTION - if (syslog_level < 0) { + if (!syslog_level) { char *s; s = getenv("PLTSYSLOG"); if (s) { syslog_level = get_log_level(prog, NULL, "PLTSYSLOG", "syslog", s); } } - if (stderr_level < 0) { + if (!stderr_level) { char *s; s = getenv("PLTSTDERR"); if (s) { @@ -1276,7 +1329,7 @@ static int run_from_cmd_line(int argc, char *_argv[], } #endif - scheme_set_logging(syslog_level, stderr_level); + scheme_set_logging_spec(syslog_level, stderr_level); #ifndef NO_FILE_SYSTEM_UTILS /* Setup path for "collects" collection directory: */ @@ -1471,8 +1524,8 @@ static int run_from_cmd_line(int argc, char *_argv[], # endif " -d, --no-delay: Disable on-demand loading of syntax and code\n" " -b, --binary : Read stdin and write stdout/stderr in binary mode\n" - " -W , --warn : Set stderr logging to \n" - " -L , --syslog : Set syslog logging to \n" + " -W , --warn : Set stderr logging to \n" + " -L , --syslog : Set syslog logging to \n" " Meta options:\n" " -- : No argument following this switch is used as a switch\n" " -h, --help : Show this information and exits, ignoring other options\n" diff --git a/src/racket/include/scheme.h b/src/racket/include/scheme.h index 34ce50df81..6ab9ee6130 100644 --- a/src/racket/include/scheme.h +++ b/src/racket/include/scheme.h @@ -1076,7 +1076,7 @@ typedef struct Scheme_Thread { struct Scheme_Marshal_Tables *current_mt; - Scheme_Object *constant_folding; /* compiler hack */ + struct Optimize_Info *constant_folding; /* compiler hack */ Scheme_Object *reading_delayed; /* reader hack */ Scheme_Object *(*overflow_k)(void); @@ -1769,6 +1769,7 @@ MZ_EXTERN void scheme_set_startup_load_on_demand(int); MZ_EXTERN void scheme_set_ignore_user_paths(int); MZ_EXTERN void scheme_set_ignore_link_paths(int); MZ_EXTERN void scheme_set_logging(int syslog_level, int stderr_level); +MZ_EXTERN void scheme_set_logging_spec(Scheme_Object *syslog_level, Scheme_Object *stderr_level); MZ_EXTERN int scheme_get_allow_set_undefined(); diff --git a/src/racket/include/schthread.h b/src/racket/include/schthread.h index aaed2fb56a..aa5375a25e 100644 --- a/src/racket/include/schthread.h +++ b/src/racket/include/schthread.h @@ -273,6 +273,8 @@ typedef struct Thread_Local_Variables { struct gmp_tmp_stack gmp_tmp_xxx_; struct gmp_tmp_stack *gmp_tmp_current_; struct Scheme_Logger *scheme_main_logger_; + struct Scheme_Logger *scheme_gc_logger_; + struct Scheme_Logger *scheme_future_logger_; int intdef_counter_; int builtin_ref_counter_; int env_uid_counter_; @@ -620,6 +622,8 @@ XFORM_GC_VARIABLE_STACK_THROUGH_THREAD_LOCAL; #define gmp_tmp_xxx XOA (scheme_get_thread_local_variables()->gmp_tmp_xxx_) #define gmp_tmp_current XOA (scheme_get_thread_local_variables()->gmp_tmp_current_) #define scheme_main_logger XOA (scheme_get_thread_local_variables()->scheme_main_logger_) +#define scheme_gc_logger XOA (scheme_get_thread_local_variables()->scheme_gc_logger_) +#define scheme_future_logger XOA (scheme_get_thread_local_variables()->scheme_future_logger_) #define intdef_counter XOA (scheme_get_thread_local_variables()->intdef_counter_) #define builtin_ref_counter XOA (scheme_get_thread_local_variables()->builtin_ref_counter_) #define env_uid_counter XOA (scheme_get_thread_local_variables()->env_uid_counter_) diff --git a/src/racket/src/compile.c b/src/racket/src/compile.c index 1431e32532..3f0d6321b4 100644 --- a/src/racket/src/compile.c +++ b/src/racket/src/compile.c @@ -3568,7 +3568,7 @@ void scheme_bind_syntaxes(const char *where, Scheme_Object *names, Scheme_Object a = scheme_compile_expr_lift_to_let(a, eenv, &mrec, 0); - oi = scheme_optimize_info_create(eenv->prefix); + oi = scheme_optimize_info_create(eenv->prefix, 1); if (!(rec[drec].comp_flags & COMP_CAN_INLINE)) scheme_optimize_info_never_inline(oi); a = scheme_optimize_expr(a, oi, 0); @@ -4004,7 +4004,7 @@ int scheme_get_eval_type(Scheme_Object *obj) return SCHEME_EVAL_GENERAL; } -Scheme_Object *scheme_try_apply(Scheme_Object *f, Scheme_Object *args, Scheme_Object *context) +Scheme_Object *scheme_try_apply(Scheme_Object *f, Scheme_Object *args, Optimize_Info *info) /* Apply `f' to `args' and ignore failues --- used for constant folding attempts */ { @@ -4013,7 +4013,7 @@ Scheme_Object *scheme_try_apply(Scheme_Object *f, Scheme_Object *args, Scheme_Ob mz_jmp_buf *savebuf, newbuf; scheme_current_thread->reading_delayed = NULL; - scheme_current_thread->constant_folding = (context ? context : scheme_true); + scheme_current_thread->constant_folding = (info ? info : (Optimize_Info *)scheme_false); savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; @@ -4048,7 +4048,7 @@ static int foldable_body(Scheme_Object *f) return (SCHEME_TYPE(d->code) > _scheme_values_types_); } -Scheme_Object *scheme_make_application(Scheme_Object *v) +Scheme_Object *scheme_make_application(Scheme_Object *v, Optimize_Info *info) { Scheme_Object *o; int i, nv; @@ -4080,7 +4080,7 @@ Scheme_Object *scheme_make_application(Scheme_Object *v) == SCHEME_PRIM_OPT_FOLDING)) || (SAME_TYPE(SCHEME_TYPE(f), scheme_closure_type) && (foldable_body(f)))) { - f = scheme_try_apply(f, SCHEME_CDR(v), scheme_false); + f = scheme_try_apply(f, SCHEME_CDR(v), info); if (f) return f; @@ -4246,7 +4246,7 @@ static Scheme_Object *compile_application(Scheme_Object *form, Scheme_Comp_Env * scheme_compile_rec_done_local(rec, drec); form = scheme_inner_compile_list(form, scheme_no_defines(env), rec, drec, 1); - result = scheme_make_application(form); + result = scheme_make_application(form, NULL); return result; } diff --git a/src/racket/src/cstartup.inc b/src/racket/src/cstartup.inc index 83118246fd..f47a0f27eb 100644 --- a/src/racket/src/cstartup.inc +++ b/src/racket/src/cstartup.inc @@ -1,14 +1,14 @@ { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,50,50,84,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,50,51,84,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,51,0,0,0,1,0,0,10,0,14, -0,21,0,26,0,30,0,33,0,38,0,51,0,58,0,62,0,67,0,74,0, +0,27,0,34,0,39,0,43,0,46,0,51,0,58,0,62,0,67,0,74,0, 83,0,87,0,93,0,107,0,121,0,124,0,130,0,134,0,136,0,147,0,149, 0,163,0,170,0,192,0,194,0,208,0,19,1,48,1,59,1,70,1,96,1, 129,1,162,1,221,1,21,2,99,2,155,2,160,2,180,2,73,3,93,3,145, 3,211,3,100,4,242,4,40,5,51,5,130,5,0,0,92,7,0,0,69,35, -37,109,105,110,45,115,116,120,29,11,11,11,66,108,101,116,114,101,99,64,108, -101,116,42,63,97,110,100,62,111,114,64,119,104,101,110,72,112,97,114,97,109, -101,116,101,114,105,122,101,66,100,101,102,105,110,101,63,108,101,116,64,99,111, +37,109,105,110,45,115,116,120,29,11,11,11,72,112,97,114,97,109,101,116,101, +114,105,122,101,66,108,101,116,114,101,99,64,108,101,116,42,63,97,110,100,62, +111,114,64,119,104,101,110,66,100,101,102,105,110,101,63,108,101,116,64,99,111, 110,100,66,117,110,108,101,115,115,68,104,101,114,101,45,115,116,120,29,11,11, 11,65,113,117,111,116,101,29,94,2,15,68,35,37,107,101,114,110,101,108,11, 29,94,2,15,68,35,37,112,97,114,97,109,122,11,62,105,102,65,98,101,103, @@ -16,28 +16,28 @@ 73,108,101,116,114,101,99,45,118,97,108,117,101,115,66,108,97,109,98,100,97, 1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101, 121,61,118,73,100,101,102,105,110,101,45,118,97,108,117,101,115,97,36,11,8, -240,190,86,0,0,95,159,2,17,36,36,159,2,16,36,36,159,2,16,36,36, +240,215,86,0,0,95,159,2,17,36,36,159,2,16,36,36,159,2,16,36,36, 16,20,2,3,2,2,2,4,2,2,2,5,2,2,2,6,2,2,2,7,2, 2,2,8,2,2,2,9,2,2,2,10,2,2,2,11,2,2,2,12,2,2, -97,37,11,8,240,190,86,0,0,93,159,2,16,36,37,16,2,2,13,161,2, -2,37,2,13,2,2,2,13,96,11,11,8,240,190,86,0,0,16,0,96,38, -11,8,240,190,86,0,0,16,0,18,98,64,104,101,114,101,13,16,6,36,2, +97,37,11,8,240,215,86,0,0,93,159,2,16,36,37,16,2,2,13,161,2, +2,37,2,13,2,2,2,13,96,11,11,8,240,215,86,0,0,16,0,96,38, +11,8,240,215,86,0,0,16,0,18,98,64,104,101,114,101,13,16,6,36,2, 14,2,2,11,11,11,8,32,8,31,8,30,8,29,27,248,22,163,4,195,249, 22,156,4,80,158,39,36,251,22,89,2,18,248,22,104,199,12,249,22,79,2, 19,248,22,106,201,27,248,22,163,4,195,249,22,156,4,80,158,39,36,251,22, 89,2,18,248,22,104,199,249,22,79,2,19,248,22,106,201,12,27,248,22,81, 248,22,163,4,196,28,248,22,87,193,20,14,159,37,36,37,28,248,22,87,248, 22,81,194,248,22,80,193,249,22,156,4,80,158,39,36,251,22,89,2,18,248, -22,80,199,249,22,79,2,5,248,22,81,201,11,18,100,10,13,16,6,36,2, +22,80,199,249,22,79,2,6,248,22,81,201,11,18,100,10,13,16,6,36,2, 14,2,2,11,11,11,8,32,8,31,8,30,8,29,16,4,11,11,2,20,3, -1,8,101,110,118,49,54,57,54,53,16,4,11,11,2,21,3,1,8,101,110, -118,49,54,57,54,54,27,248,22,81,248,22,163,4,196,28,248,22,87,193,20, +1,8,101,110,118,49,55,48,50,53,16,4,11,11,2,21,3,1,8,101,110, +118,49,55,48,50,54,27,248,22,81,248,22,163,4,196,28,248,22,87,193,20, 14,159,37,36,37,28,248,22,87,248,22,81,194,248,22,80,193,249,22,156,4, 80,158,39,36,250,22,89,2,22,248,22,89,249,22,89,248,22,89,2,23,248, -22,80,201,251,22,89,2,18,2,23,2,23,249,22,79,2,6,248,22,81,204, +22,80,201,251,22,89,2,18,2,23,2,23,249,22,79,2,7,248,22,81,204, 18,100,11,13,16,6,36,2,14,2,2,11,11,11,8,32,8,31,8,30,8, -29,16,4,11,11,2,20,3,1,8,101,110,118,49,54,57,54,56,16,4,11, -11,2,21,3,1,8,101,110,118,49,54,57,54,57,248,22,163,4,193,27,248, +29,16,4,11,11,2,20,3,1,8,101,110,118,49,55,48,50,56,16,4,11, +11,2,21,3,1,8,101,110,118,49,55,48,50,57,248,22,163,4,193,27,248, 22,163,4,194,249,22,79,248,22,89,248,22,80,196,248,22,81,195,27,248,22, 81,248,22,163,4,23,197,1,249,22,156,4,80,158,39,36,28,248,22,64,248, 22,157,4,248,22,80,23,198,2,27,249,22,2,32,0,88,163,8,36,37,43, @@ -52,7 +52,7 @@ 248,22,80,201,248,22,81,198,27,248,22,81,248,22,163,4,196,27,248,22,163, 4,248,22,80,195,249,22,156,4,80,158,40,36,28,248,22,87,195,250,22,90, 2,22,9,248,22,81,199,250,22,89,2,10,248,22,89,248,22,80,199,250,22, -90,2,4,248,22,81,201,248,22,81,202,27,248,22,81,248,22,163,4,23,197, +90,2,5,248,22,81,201,248,22,81,202,27,248,22,81,248,22,163,4,23,197, 1,27,249,22,1,22,93,249,22,2,22,163,4,248,22,163,4,248,22,80,199, 248,22,183,4,249,22,156,4,80,158,41,36,251,22,89,1,22,119,105,116,104, 45,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107,2,26,250, @@ -67,8 +67,8 @@ 22,89,2,18,28,249,22,152,9,248,22,157,4,248,22,80,200,64,101,108,115, 101,10,248,22,80,197,250,22,90,2,22,9,248,22,81,200,249,22,79,2,11, 248,22,81,202,99,13,16,6,36,2,14,2,2,11,11,11,8,32,8,31,8, -30,8,29,16,4,11,11,2,20,3,1,8,101,110,118,49,54,57,57,49,16, -4,11,11,2,21,3,1,8,101,110,118,49,54,57,57,50,18,158,94,10,64, +30,8,29,16,4,11,11,2,20,3,1,8,101,110,118,49,55,48,53,49,16, +4,11,11,2,21,3,1,8,101,110,118,49,55,48,53,50,18,158,94,10,64, 118,111,105,100,8,48,27,248,22,81,248,22,163,4,196,249,22,156,4,80,158, 39,36,28,248,22,64,248,22,157,4,248,22,80,197,250,22,89,2,28,248,22, 89,248,22,80,199,248,22,104,198,27,248,22,157,4,248,22,80,197,250,22,89, @@ -82,16 +82,16 @@ 0,16,0,36,36,11,12,11,11,16,0,16,0,16,0,36,36,16,11,16,5, 11,20,15,16,2,20,14,159,36,36,37,80,158,36,36,36,20,113,159,36,16, 1,2,13,16,1,33,33,10,16,5,2,12,88,163,8,36,37,53,37,9,223, -0,33,34,36,20,113,159,36,16,1,2,13,16,0,11,16,5,2,7,88,163, +0,33,34,36,20,113,159,36,16,1,2,13,16,0,11,16,5,2,8,88,163, 8,36,37,53,37,9,223,0,33,35,36,20,113,159,36,16,1,2,13,16,0, -11,16,5,2,5,88,163,8,36,37,53,37,9,223,0,33,36,36,20,113,159, -36,16,1,2,13,16,1,33,37,11,16,5,2,6,88,163,8,36,37,56,37, +11,16,5,2,6,88,163,8,36,37,53,37,9,223,0,33,36,36,20,113,159, +36,16,1,2,13,16,1,33,37,11,16,5,2,7,88,163,8,36,37,56,37, 9,223,0,33,38,36,20,113,159,36,16,1,2,13,16,1,33,39,11,16,5, 2,10,88,163,8,36,37,58,37,9,223,0,33,42,36,20,113,159,36,16,1, -2,13,16,0,11,16,5,2,3,88,163,8,36,37,53,37,9,223,0,33,44, -36,20,113,159,36,16,1,2,13,16,0,11,16,5,2,4,88,163,8,36,37, +2,13,16,0,11,16,5,2,4,88,163,8,36,37,53,37,9,223,0,33,44, +36,20,113,159,36,16,1,2,13,16,0,11,16,5,2,5,88,163,8,36,37, 54,37,9,223,0,33,45,36,20,113,159,36,16,1,2,13,16,0,11,16,5, -2,8,88,163,8,36,37,56,37,9,223,0,33,46,36,20,113,159,36,16,1, +2,3,88,163,8,36,37,56,37,9,223,0,33,46,36,20,113,159,36,16,1, 2,13,16,0,11,16,5,2,11,88,163,8,36,37,58,37,9,223,0,33,47, 36,20,113,159,36,16,1,2,13,16,1,33,49,11,16,5,2,9,88,163,8, 36,37,54,37,9,223,0,33,50,36,20,113,159,36,16,1,2,13,16,0,11, @@ -99,7 +99,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 2029); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,50,50,84,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,50,51,84,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,115,0,0,0,1,0,0,8,0,21, 0,26,0,43,0,65,0,94,0,109,0,127,0,139,0,155,0,169,0,191,0, 207,0,224,0,246,0,1,1,7,1,16,1,23,1,30,1,42,1,58,1,82, @@ -151,177 +151,177 @@ 105,120,32,116,111,32,97,32,114,111,111,116,32,112,97,116,104,58,32,6,11, 11,80,76,84,67,79,76,76,69,67,84,83,69,97,100,100,111,110,45,100,105, 114,6,8,8,99,111,108,108,101,99,116,115,27,20,13,159,80,159,37,52,37, -254,80,159,44,53,37,249,22,33,11,80,159,46,52,37,22,158,14,10,22,165, -14,10,22,166,14,10,248,22,139,6,23,196,2,28,248,22,137,7,23,194,2, +254,80,159,44,53,37,249,22,33,11,80,159,46,52,37,22,159,14,10,22,166, +14,10,22,167,14,10,248,22,139,6,23,196,2,28,248,22,137,7,23,194,2, 12,86,94,248,22,160,9,23,194,1,27,20,13,159,80,159,38,52,37,254,80, -159,45,53,37,249,22,33,11,80,159,47,52,37,22,158,14,10,22,165,14,10, -22,166,14,10,248,22,139,6,23,197,2,28,248,22,137,7,23,194,2,12,86, +159,45,53,37,249,22,33,11,80,159,47,52,37,22,159,14,10,22,166,14,10, +22,167,14,10,248,22,139,6,23,197,2,28,248,22,137,7,23,194,2,12,86, 94,248,22,160,9,23,194,1,27,20,13,159,80,159,39,52,37,254,80,159,46, -53,37,249,22,33,11,80,159,48,52,37,22,158,14,10,22,165,14,10,22,166, +53,37,249,22,33,11,80,159,48,52,37,22,159,14,10,22,166,14,10,22,167, 14,10,248,22,139,6,23,198,2,28,248,22,137,7,23,194,2,12,86,94,248, 22,160,9,23,194,1,248,80,159,40,8,32,39,197,28,248,22,87,23,195,2, -9,27,248,22,80,23,196,2,27,28,248,22,144,15,23,195,2,23,194,1,28, -248,22,143,15,23,195,2,249,22,145,15,23,196,1,250,80,159,43,39,39,248, -22,160,15,2,32,11,10,250,80,159,41,39,39,248,22,160,15,2,32,23,197, -1,10,28,23,193,2,249,22,79,248,22,147,15,249,22,145,15,23,198,1,247, -22,161,15,27,248,22,81,23,200,1,28,248,22,87,23,194,2,9,27,248,22, -80,23,195,2,27,28,248,22,144,15,23,195,2,23,194,1,28,248,22,143,15, -23,195,2,249,22,145,15,23,196,1,250,80,159,48,39,39,248,22,160,15,2, -32,11,10,250,80,159,46,39,39,248,22,160,15,2,32,23,197,1,10,28,23, -193,2,249,22,79,248,22,147,15,249,22,145,15,23,198,1,247,22,161,15,248, +9,27,248,22,80,23,196,2,27,28,248,22,145,15,23,195,2,23,194,1,28, +248,22,144,15,23,195,2,249,22,146,15,23,196,1,250,80,159,43,39,39,248, +22,161,15,2,32,11,10,250,80,159,41,39,39,248,22,161,15,2,32,23,197, +1,10,28,23,193,2,249,22,79,248,22,148,15,249,22,146,15,23,198,1,247, +22,162,15,27,248,22,81,23,200,1,28,248,22,87,23,194,2,9,27,248,22, +80,23,195,2,27,28,248,22,145,15,23,195,2,23,194,1,28,248,22,144,15, +23,195,2,249,22,146,15,23,196,1,250,80,159,48,39,39,248,22,161,15,2, +32,11,10,250,80,159,46,39,39,248,22,161,15,2,32,23,197,1,10,28,23, +193,2,249,22,79,248,22,148,15,249,22,146,15,23,198,1,247,22,162,15,248, 80,159,46,8,31,39,248,22,81,23,199,1,86,94,23,193,1,248,80,159,44, 8,31,39,248,22,81,23,197,1,86,94,23,193,1,27,248,22,81,23,198,1, -28,248,22,87,23,194,2,9,27,248,22,80,23,195,2,27,28,248,22,144,15, -23,195,2,23,194,1,28,248,22,143,15,23,195,2,249,22,145,15,23,196,1, -250,80,159,46,39,39,248,22,160,15,2,32,11,10,250,80,159,44,39,39,248, -22,160,15,2,32,23,197,1,10,28,23,193,2,249,22,79,248,22,147,15,249, -22,145,15,23,198,1,247,22,161,15,248,80,159,44,8,31,39,248,22,81,23, +28,248,22,87,23,194,2,9,27,248,22,80,23,195,2,27,28,248,22,145,15, +23,195,2,23,194,1,28,248,22,144,15,23,195,2,249,22,146,15,23,196,1, +250,80,159,46,39,39,248,22,161,15,2,32,11,10,250,80,159,44,39,39,248, +22,161,15,2,32,23,197,1,10,28,23,193,2,249,22,79,248,22,148,15,249, +22,146,15,23,198,1,247,22,162,15,248,80,159,44,8,31,39,248,22,81,23, 199,1,248,80,159,42,8,31,39,248,22,81,196,28,248,22,87,23,195,2,9, -27,248,22,80,23,196,2,27,28,248,22,144,15,23,195,2,23,194,1,28,248, -22,143,15,23,195,2,249,22,145,15,23,196,1,250,80,159,43,39,39,248,22, -160,15,2,32,11,10,250,80,159,41,39,39,248,22,160,15,2,32,23,197,1, -10,28,23,193,2,249,22,79,248,22,147,15,249,22,145,15,23,198,1,247,22, -161,15,248,80,159,41,8,30,39,248,22,81,23,200,1,248,80,159,39,8,30, +27,248,22,80,23,196,2,27,28,248,22,145,15,23,195,2,23,194,1,28,248, +22,144,15,23,195,2,249,22,146,15,23,196,1,250,80,159,43,39,39,248,22, +161,15,2,32,11,10,250,80,159,41,39,39,248,22,161,15,2,32,23,197,1, +10,28,23,193,2,249,22,79,248,22,148,15,249,22,146,15,23,198,1,247,22, +162,15,248,80,159,41,8,30,39,248,22,81,23,200,1,248,80,159,39,8,30, 39,248,22,81,197,28,248,22,87,23,195,2,9,27,248,22,80,23,196,2,27, -28,248,22,144,15,23,195,2,23,194,1,28,248,22,143,15,23,195,2,249,22, -145,15,23,196,1,250,80,159,43,39,39,248,22,160,15,2,32,11,10,250,80, -159,41,39,39,248,22,160,15,2,32,23,197,1,10,28,23,193,2,249,22,79, -248,22,147,15,249,22,145,15,23,198,1,247,22,161,15,248,80,159,41,8,29, +28,248,22,145,15,23,195,2,23,194,1,28,248,22,144,15,23,195,2,249,22, +146,15,23,196,1,250,80,159,43,39,39,248,22,161,15,2,32,11,10,250,80, +159,41,39,39,248,22,161,15,2,32,23,197,1,10,28,23,193,2,249,22,79, +248,22,148,15,249,22,146,15,23,198,1,247,22,162,15,248,80,159,41,8,29, 39,248,22,81,23,200,1,248,80,159,39,8,29,39,248,22,81,197,27,248,22, -184,14,23,195,2,28,23,193,2,192,86,94,23,193,1,28,248,22,142,7,23, -195,2,27,248,22,142,15,195,28,192,192,248,22,143,15,195,11,86,94,28,28, -248,22,185,14,23,195,2,10,28,248,22,184,14,23,195,2,10,28,248,22,142, -7,23,195,2,28,248,22,142,15,23,195,2,10,248,22,143,15,23,195,2,11, +185,14,23,195,2,28,23,193,2,192,86,94,23,193,1,28,248,22,142,7,23, +195,2,27,248,22,143,15,195,28,192,192,248,22,144,15,195,11,86,94,28,28, +248,22,186,14,23,195,2,10,28,248,22,185,14,23,195,2,10,28,248,22,142, +7,23,195,2,28,248,22,143,15,23,195,2,10,248,22,144,15,23,195,2,11, 12,250,22,189,9,76,110,111,114,109,97,108,45,112,97,116,104,45,99,97,115, -101,2,33,23,197,2,28,28,248,22,185,14,23,195,2,249,22,152,9,248,22, -186,14,23,197,2,2,34,249,22,152,9,247,22,164,8,2,34,27,28,248,22, -142,7,23,196,2,23,195,2,248,22,154,8,248,22,189,14,23,197,2,28,249, -22,176,15,0,21,35,114,120,34,94,91,92,92,93,91,92,92,93,91,63,93, -91,92,92,93,34,23,195,2,28,248,22,142,7,195,248,22,128,15,195,194,27, -248,22,181,7,23,195,1,249,22,129,15,248,22,157,8,250,22,184,15,0,6, -35,114,120,34,47,34,28,249,22,176,15,0,22,35,114,120,34,91,47,92,92, +101,2,33,23,197,2,28,28,248,22,186,14,23,195,2,249,22,152,9,248,22, +187,14,23,197,2,2,34,249,22,152,9,247,22,164,8,2,34,27,28,248,22, +142,7,23,196,2,23,195,2,248,22,154,8,248,22,190,14,23,197,2,28,249, +22,177,15,0,21,35,114,120,34,94,91,92,92,93,91,92,92,93,91,63,93, +91,92,92,93,34,23,195,2,28,248,22,142,7,195,248,22,129,15,195,194,27, +248,22,181,7,23,195,1,249,22,130,15,248,22,157,8,250,22,185,15,0,6, +35,114,120,34,47,34,28,249,22,177,15,0,22,35,114,120,34,91,47,92,92, 93,91,46,32,93,43,91,47,92,92,93,42,36,34,23,201,2,23,199,1,250, -22,184,15,0,19,35,114,120,34,91,32,46,93,43,40,91,47,92,92,93,42, +22,185,15,0,19,35,114,120,34,91,32,46,93,43,40,91,47,92,92,93,42, 41,36,34,23,202,1,6,2,2,92,49,80,159,44,37,38,2,34,28,248,22, -142,7,194,248,22,128,15,194,193,32,58,88,163,8,36,39,53,11,70,102,111, +142,7,194,248,22,129,15,194,193,32,58,88,163,8,36,39,53,11,70,102,111, 117,110,100,45,101,120,101,99,222,33,61,32,59,88,163,8,36,40,58,11,64, -110,101,120,116,222,33,60,27,248,22,146,15,23,196,2,28,249,22,154,9,23, -195,2,23,197,1,11,28,248,22,142,15,23,194,2,27,249,22,138,15,23,197, -1,23,196,1,28,23,197,2,90,159,39,11,89,161,39,36,11,248,22,141,15, -23,197,2,86,95,23,195,1,23,194,1,27,28,23,202,2,27,248,22,146,15, -23,199,2,28,249,22,154,9,23,195,2,23,200,2,11,28,248,22,142,15,23, -194,2,250,2,58,23,205,2,23,206,2,249,22,138,15,23,200,2,23,198,1, +110,101,120,116,222,33,60,27,248,22,147,15,23,196,2,28,249,22,154,9,23, +195,2,23,197,1,11,28,248,22,143,15,23,194,2,27,249,22,139,15,23,197, +1,23,196,1,28,23,197,2,90,159,39,11,89,161,39,36,11,248,22,142,15, +23,197,2,86,95,23,195,1,23,194,1,27,28,23,202,2,27,248,22,147,15, +23,199,2,28,249,22,154,9,23,195,2,23,200,2,11,28,248,22,143,15,23, +194,2,250,2,58,23,205,2,23,206,2,249,22,139,15,23,200,2,23,198,1, 250,2,58,23,205,2,23,206,2,23,196,1,11,28,23,193,2,192,86,94,23, -193,1,27,28,248,22,184,14,23,196,2,27,249,22,138,15,23,198,2,23,205, -2,28,28,248,22,133,15,193,10,248,22,132,15,193,192,11,11,28,23,193,2, -192,86,94,23,193,1,28,23,203,2,11,27,248,22,146,15,23,200,2,28,249, -22,154,9,23,195,2,23,201,1,11,28,248,22,142,15,23,194,2,250,2,58, -23,206,1,23,207,1,249,22,138,15,23,201,1,23,198,1,250,2,58,205,206, +193,1,27,28,248,22,185,14,23,196,2,27,249,22,139,15,23,198,2,23,205, +2,28,28,248,22,134,15,193,10,248,22,133,15,193,192,11,11,28,23,193,2, +192,86,94,23,193,1,28,23,203,2,11,27,248,22,147,15,23,200,2,28,249, +22,154,9,23,195,2,23,201,1,11,28,248,22,143,15,23,194,2,250,2,58, +23,206,1,23,207,1,249,22,139,15,23,201,1,23,198,1,250,2,58,205,206, 195,192,86,94,23,194,1,28,23,196,2,90,159,39,11,89,161,39,36,11,248, -22,141,15,23,197,2,86,95,23,195,1,23,194,1,27,28,23,201,2,27,248, -22,146,15,23,199,2,28,249,22,154,9,23,195,2,23,200,2,11,28,248,22, -142,15,23,194,2,250,2,58,23,204,2,23,205,2,249,22,138,15,23,200,2, +22,142,15,23,197,2,86,95,23,195,1,23,194,1,27,28,23,201,2,27,248, +22,147,15,23,199,2,28,249,22,154,9,23,195,2,23,200,2,11,28,248,22, +143,15,23,194,2,250,2,58,23,204,2,23,205,2,249,22,139,15,23,200,2, 23,198,1,250,2,58,23,204,2,23,205,2,23,196,1,11,28,23,193,2,192, -86,94,23,193,1,27,28,248,22,184,14,23,196,2,27,249,22,138,15,23,198, -2,23,204,2,28,28,248,22,133,15,193,10,248,22,132,15,193,192,11,11,28, -23,193,2,192,86,94,23,193,1,28,23,202,2,11,27,248,22,146,15,23,200, -2,28,249,22,154,9,23,195,2,23,201,1,11,28,248,22,142,15,23,194,2, -250,2,58,23,205,1,23,206,1,249,22,138,15,23,201,1,23,198,1,250,2, -58,204,205,195,192,28,23,193,2,90,159,39,11,89,161,39,36,11,248,22,141, +86,94,23,193,1,27,28,248,22,185,14,23,196,2,27,249,22,139,15,23,198, +2,23,204,2,28,28,248,22,134,15,193,10,248,22,133,15,193,192,11,11,28, +23,193,2,192,86,94,23,193,1,28,23,202,2,11,27,248,22,147,15,23,200, +2,28,249,22,154,9,23,195,2,23,201,1,11,28,248,22,143,15,23,194,2, +250,2,58,23,205,1,23,206,1,249,22,139,15,23,201,1,23,198,1,250,2, +58,204,205,195,192,28,23,193,2,90,159,39,11,89,161,39,36,11,248,22,142, 15,23,199,2,86,95,23,195,1,23,194,1,27,28,23,198,2,251,2,59,23, 198,2,23,203,2,23,201,2,23,202,2,11,28,23,193,2,192,86,94,23,193, -1,27,28,248,22,184,14,195,27,249,22,138,15,197,200,28,28,248,22,133,15, -193,10,248,22,132,15,193,192,11,11,28,192,192,28,198,11,251,2,59,198,203, +1,27,28,248,22,185,14,195,27,249,22,139,15,197,200,28,28,248,22,134,15, +193,10,248,22,133,15,193,192,11,11,28,192,192,28,198,11,251,2,59,198,203, 201,202,194,32,62,88,163,8,36,40,58,11,2,31,222,33,63,28,248,22,87, -23,197,2,11,27,248,22,145,15,248,22,80,23,199,2,27,249,22,138,15,23, -196,1,23,197,2,28,248,22,132,15,23,194,2,250,2,58,198,199,195,86,94, +23,197,2,11,27,248,22,146,15,248,22,80,23,199,2,27,249,22,139,15,23, +196,1,23,197,2,28,248,22,133,15,23,194,2,250,2,58,198,199,195,86,94, 23,193,1,27,248,22,81,23,200,1,28,248,22,87,23,194,2,11,27,248,22, -145,15,248,22,80,23,196,2,27,249,22,138,15,23,196,1,23,200,2,28,248, -22,132,15,23,194,2,250,2,58,201,202,195,86,94,23,193,1,27,248,22,81, -23,197,1,28,248,22,87,23,194,2,11,27,248,22,145,15,248,22,80,195,27, -249,22,138,15,23,196,1,202,28,248,22,132,15,193,250,2,58,204,205,195,251, -2,62,204,205,206,248,22,81,199,86,95,28,28,248,22,184,14,23,195,2,10, -28,248,22,142,7,23,195,2,28,248,22,142,15,23,195,2,10,248,22,143,15, +146,15,248,22,80,23,196,2,27,249,22,139,15,23,196,1,23,200,2,28,248, +22,133,15,23,194,2,250,2,58,201,202,195,86,94,23,193,1,27,248,22,81, +23,197,1,28,248,22,87,23,194,2,11,27,248,22,146,15,248,22,80,195,27, +249,22,139,15,23,196,1,202,28,248,22,133,15,193,250,2,58,204,205,195,251, +2,62,204,205,206,248,22,81,199,86,95,28,28,248,22,185,14,23,195,2,10, +28,248,22,142,7,23,195,2,28,248,22,143,15,23,195,2,10,248,22,144,15, 23,195,2,11,12,250,22,189,9,2,5,2,35,23,197,2,28,28,23,195,2, -28,28,248,22,184,14,23,196,2,10,28,248,22,142,7,23,196,2,28,248,22, -142,15,23,196,2,10,248,22,143,15,23,196,2,11,248,22,142,15,23,196,2, +28,28,248,22,185,14,23,196,2,10,28,248,22,142,7,23,196,2,28,248,22, +143,15,23,196,2,10,248,22,144,15,23,196,2,11,248,22,143,15,23,196,2, 11,10,12,250,22,189,9,2,5,6,45,45,40,111,114,47,99,32,35,102,32, 40,97,110,100,47,99,32,112,97,116,104,45,115,116,114,105,110,103,63,32,114, 101,108,97,116,105,118,101,45,112,97,116,104,63,41,41,23,198,2,28,28,248, -22,142,15,23,195,2,90,159,39,11,89,161,39,36,11,248,22,141,15,23,198, +22,143,15,23,195,2,90,159,39,11,89,161,39,36,11,248,22,142,15,23,198, 2,249,22,152,9,194,2,36,11,27,248,22,162,8,6,4,4,80,65,84,72, 27,28,23,194,2,249,80,158,40,40,23,196,1,9,86,94,23,194,1,9,27, -28,249,22,152,9,247,22,164,8,2,34,249,22,79,248,22,129,15,5,1,46, -23,196,1,23,194,1,28,248,22,87,23,194,2,11,27,248,22,145,15,248,22, -80,23,196,2,27,249,22,138,15,23,196,1,23,201,2,28,248,22,132,15,23, +28,249,22,152,9,247,22,164,8,2,34,249,22,79,248,22,130,15,5,1,46, +23,196,1,23,194,1,28,248,22,87,23,194,2,11,27,248,22,146,15,248,22, +80,23,196,2,27,249,22,139,15,23,196,1,23,201,2,28,248,22,133,15,23, 194,2,250,2,58,202,203,195,86,94,23,193,1,27,248,22,81,23,197,1,28, -248,22,87,23,194,2,11,27,248,22,145,15,248,22,80,23,196,2,27,249,22, -138,15,23,196,1,23,204,2,28,248,22,132,15,23,194,2,250,2,58,205,206, +248,22,87,23,194,2,11,27,248,22,146,15,248,22,80,23,196,2,27,249,22, +139,15,23,196,1,23,204,2,28,248,22,133,15,23,194,2,250,2,58,205,206, 195,86,94,23,193,1,27,248,22,81,23,197,1,28,248,22,87,23,194,2,11, -27,248,22,145,15,248,22,80,195,27,249,22,138,15,23,196,1,206,28,248,22, -132,15,193,250,2,58,23,16,23,17,195,251,2,62,23,16,23,17,23,18,248, -22,81,199,27,248,22,145,15,23,196,1,28,248,22,132,15,193,250,2,58,198, +27,248,22,146,15,248,22,80,195,27,249,22,139,15,23,196,1,206,28,248,22, +133,15,193,250,2,58,23,16,23,17,195,251,2,62,23,16,23,17,23,18,248, +22,81,199,27,248,22,146,15,23,196,1,28,248,22,133,15,193,250,2,58,198, 199,195,11,250,80,159,39,39,39,196,197,11,250,80,159,39,39,39,196,11,11, 32,67,88,163,8,36,39,57,11,2,31,222,33,69,0,8,35,114,120,35,34, -92,34,34,27,249,22,172,15,23,197,2,23,198,2,28,23,193,2,86,94,23, -196,1,27,248,22,104,23,195,2,27,27,248,22,113,23,197,1,27,249,22,172, +92,34,34,27,249,22,173,15,23,197,2,23,198,2,28,23,193,2,86,94,23, +196,1,27,248,22,104,23,195,2,27,27,248,22,113,23,197,1,27,249,22,173, 15,23,201,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22,104,23, 195,2,27,250,2,67,23,203,2,23,204,1,248,22,113,23,199,1,28,249,22, -139,8,23,196,2,2,37,249,22,93,23,202,2,194,249,22,79,248,22,129,15, -28,249,22,152,9,247,22,164,8,2,34,250,22,184,15,2,68,23,200,1,2, +139,8,23,196,2,2,37,249,22,93,23,202,2,194,249,22,79,248,22,130,15, +28,249,22,152,9,247,22,164,8,2,34,250,22,185,15,2,68,23,200,1,2, 37,23,197,1,194,86,95,23,199,1,23,193,1,28,249,22,139,8,23,196,2, -2,37,249,22,93,23,200,2,9,249,22,79,248,22,129,15,28,249,22,152,9, -247,22,164,8,2,34,250,22,184,15,2,68,23,200,1,2,37,23,197,1,9, +2,37,249,22,93,23,200,2,9,249,22,79,248,22,130,15,28,249,22,152,9, +247,22,164,8,2,34,250,22,185,15,2,68,23,200,1,2,37,23,197,1,9, 28,249,22,139,8,23,196,2,2,37,249,22,93,197,194,86,94,23,196,1,249, -22,79,248,22,129,15,28,249,22,152,9,247,22,164,8,2,34,250,22,184,15, +22,79,248,22,130,15,28,249,22,152,9,247,22,164,8,2,34,250,22,185,15, 2,68,23,200,1,2,37,23,197,1,194,86,94,23,193,1,28,249,22,139,8, -23,198,2,2,37,249,22,93,195,9,86,94,23,194,1,249,22,79,248,22,129, -15,28,249,22,152,9,247,22,164,8,2,34,250,22,184,15,2,68,23,202,1, +23,198,2,2,37,249,22,93,195,9,86,94,23,194,1,249,22,79,248,22,130, +15,28,249,22,152,9,247,22,164,8,2,34,250,22,185,15,2,68,23,202,1, 2,37,23,199,1,9,86,95,28,28,248,22,131,8,194,10,248,22,142,7,194, 12,250,22,189,9,2,6,6,21,21,40,111,114,47,99,32,98,121,116,101,115, 63,32,115,116,114,105,110,103,63,41,196,28,28,248,22,88,195,249,22,4,22, -184,14,196,11,12,250,22,189,9,2,6,6,14,14,40,108,105,115,116,111,102, +185,14,196,11,12,250,22,189,9,2,6,6,14,14,40,108,105,115,116,111,102, 32,112,97,116,104,63,41,197,250,2,67,197,195,28,248,22,142,7,197,248,22, -156,8,197,196,86,94,28,28,248,22,184,14,194,10,28,248,22,142,7,194,28, -248,22,142,15,194,10,248,22,143,15,194,11,12,250,22,189,9,195,2,35,196, -28,248,22,142,15,194,12,251,22,191,9,196,2,38,2,39,197,86,94,28,28, -248,22,184,14,194,10,28,248,22,142,7,194,28,248,22,142,15,194,10,248,22, -143,15,194,11,12,250,22,189,9,195,2,35,196,28,248,22,142,15,194,12,251, -22,191,9,196,2,38,2,39,197,86,94,86,94,28,28,248,22,184,14,23,195, -2,10,28,248,22,142,7,23,195,2,28,248,22,142,15,23,195,2,10,248,22, -143,15,23,195,2,11,12,250,22,189,9,195,2,35,23,197,2,28,248,22,142, +156,8,197,196,86,94,28,28,248,22,185,14,194,10,28,248,22,142,7,194,28, +248,22,143,15,194,10,248,22,144,15,194,11,12,250,22,189,9,195,2,35,196, +28,248,22,143,15,194,12,251,22,191,9,196,2,38,2,39,197,86,94,28,28, +248,22,185,14,194,10,28,248,22,142,7,194,28,248,22,143,15,194,10,248,22, +144,15,194,11,12,250,22,189,9,195,2,35,196,28,248,22,143,15,194,12,251, +22,191,9,196,2,38,2,39,197,86,94,86,94,28,28,248,22,185,14,23,195, +2,10,28,248,22,142,7,23,195,2,28,248,22,143,15,23,195,2,10,248,22, +144,15,23,195,2,11,12,250,22,189,9,195,2,35,23,197,2,28,248,22,143, 15,23,195,2,12,251,22,191,9,196,2,38,2,39,23,198,1,249,22,3,88, 163,8,36,37,47,11,9,223,2,33,72,196,28,28,248,22,0,194,249,22,50, -195,37,11,12,250,22,189,9,195,2,40,196,86,94,28,28,248,22,184,14,193, -10,28,248,22,142,7,193,28,248,22,142,15,193,10,248,22,143,15,193,11,12, -250,22,189,9,2,10,2,35,195,28,248,22,142,15,193,12,251,22,191,9,2, -10,2,38,2,39,196,86,95,86,94,86,94,28,28,248,22,184,14,195,10,28, -248,22,142,7,195,28,248,22,142,15,195,10,248,22,143,15,195,11,12,250,22, -189,9,2,10,2,35,197,28,248,22,142,15,195,12,251,22,191,9,2,10,2, +195,37,11,12,250,22,189,9,195,2,40,196,86,94,28,28,248,22,185,14,193, +10,28,248,22,142,7,193,28,248,22,143,15,193,10,248,22,144,15,193,11,12, +250,22,189,9,2,10,2,35,195,28,248,22,143,15,193,12,251,22,191,9,2, +10,2,38,2,39,196,86,95,86,94,86,94,28,28,248,22,185,14,195,10,28, +248,22,142,7,195,28,248,22,143,15,195,10,248,22,144,15,195,11,12,250,22, +189,9,2,10,2,35,197,28,248,22,143,15,195,12,251,22,191,9,2,10,2, 38,2,39,198,249,22,3,32,0,88,163,8,36,37,46,11,9,222,33,75,197, 28,28,248,22,0,194,249,22,50,195,37,11,12,250,22,189,9,2,10,2,40, -196,251,80,158,40,45,197,198,199,11,86,94,28,28,248,22,184,14,193,10,28, -248,22,142,7,193,28,248,22,142,15,193,10,248,22,143,15,193,11,12,250,22, -189,9,2,12,2,35,195,28,248,22,142,15,193,12,251,22,191,9,2,12,2, -38,2,39,196,86,96,86,94,28,28,248,22,184,14,195,10,28,248,22,142,7, -195,28,248,22,142,15,195,10,248,22,143,15,195,11,12,250,22,189,9,2,12, -2,35,197,28,248,22,142,15,195,12,251,22,191,9,2,12,2,38,2,39,198, -86,94,86,94,28,28,248,22,184,14,196,10,28,248,22,142,7,196,28,248,22, -142,15,196,10,248,22,143,15,196,11,12,250,22,189,9,2,12,2,35,198,28, -248,22,142,15,196,12,251,22,191,9,2,12,2,38,2,39,199,249,22,3,32, +196,251,80,158,40,45,197,198,199,11,86,94,28,28,248,22,185,14,193,10,28, +248,22,142,7,193,28,248,22,143,15,193,10,248,22,144,15,193,11,12,250,22, +189,9,2,12,2,35,195,28,248,22,143,15,193,12,251,22,191,9,2,12,2, +38,2,39,196,86,96,86,94,28,28,248,22,185,14,195,10,28,248,22,142,7, +195,28,248,22,143,15,195,10,248,22,144,15,195,11,12,250,22,189,9,2,12, +2,35,197,28,248,22,143,15,195,12,251,22,191,9,2,12,2,38,2,39,198, +86,94,86,94,28,28,248,22,185,14,196,10,28,248,22,142,7,196,28,248,22, +143,15,196,10,248,22,144,15,196,11,12,250,22,189,9,2,12,2,35,198,28, +248,22,143,15,196,12,251,22,191,9,2,12,2,38,2,39,199,249,22,3,32, 0,88,163,8,36,37,46,11,9,222,33,77,198,28,28,248,22,0,194,249,22, 50,195,37,11,12,250,22,189,9,2,12,2,40,196,251,80,158,40,45,197,199, -200,198,0,6,45,105,110,102,46,48,27,248,22,160,15,2,41,27,28,248,22, -143,15,23,195,2,193,20,13,159,80,159,38,52,37,250,80,159,41,53,37,249, -22,33,11,80,159,43,52,37,22,161,15,248,22,160,15,68,111,114,105,103,45, -100,105,114,27,248,22,160,15,2,32,250,80,159,42,39,39,23,196,1,23,198, -1,11,28,192,250,22,138,15,195,6,6,6,99,111,110,102,105,103,6,10,10, +200,198,0,6,45,105,110,102,46,48,27,248,22,161,15,2,41,27,28,248,22, +144,15,23,195,2,193,20,13,159,80,159,38,52,37,250,80,159,41,53,37,249, +22,33,11,80,159,43,52,37,22,162,15,248,22,161,15,68,111,114,105,103,45, +100,105,114,27,248,22,161,15,2,32,250,80,159,42,39,39,23,196,1,23,198, +1,11,28,192,250,22,139,15,195,6,6,6,99,111,110,102,105,103,6,10,10, 108,105,110,107,115,46,114,107,116,100,11,86,94,27,247,22,148,10,28,249,22, 140,10,23,195,2,2,42,251,22,144,10,23,197,1,2,42,250,22,190,7,2, -43,28,23,202,1,80,159,46,47,38,80,159,46,50,38,248,22,184,11,23,205, +43,28,23,202,1,80,159,46,47,38,80,159,46,50,38,248,22,185,11,23,205, 1,247,22,29,12,248,193,247,22,140,2,2,79,86,95,27,247,22,148,10,28, 249,22,140,10,23,195,2,2,42,251,22,144,10,23,197,1,2,42,250,22,190, -7,2,43,28,202,80,159,47,47,38,80,159,47,50,38,248,22,184,11,23,206, +7,2,43,28,202,80,159,47,47,38,80,159,47,50,38,248,22,185,11,23,206, 1,247,22,29,12,28,192,28,194,86,94,20,18,159,11,80,158,39,48,247,22, 140,2,20,18,159,11,80,158,39,49,192,86,94,20,18,159,11,80,158,39,54, 247,22,140,2,20,18,159,11,80,158,39,55,192,12,248,194,247,22,140,2,20, @@ -331,32 +331,32 @@ 193,28,248,22,88,23,194,2,28,28,249,22,191,3,38,248,22,92,23,196,2, 10,249,22,191,3,39,248,22,92,23,196,2,28,28,248,22,142,7,248,22,80, 23,195,2,10,249,22,152,9,64,114,111,111,116,248,22,80,23,196,2,28,27, -248,22,104,194,28,248,22,184,14,23,194,2,10,28,248,22,142,7,23,194,2, -28,248,22,142,15,23,194,2,10,248,22,143,15,23,194,1,11,27,248,22,87, -248,22,106,195,28,192,192,248,22,185,15,248,22,113,195,11,11,11,11,250,22, +248,22,104,194,28,248,22,185,14,23,194,2,10,28,248,22,142,7,23,194,2, +28,248,22,143,15,23,194,2,10,248,22,144,15,23,194,1,11,27,248,22,87, +248,22,106,195,28,192,192,248,22,186,15,248,22,113,195,11,11,11,11,250,22, 158,2,196,197,249,22,79,197,200,28,28,248,22,87,248,22,106,23,197,2,10, -249,22,176,15,248,22,113,23,198,2,247,22,160,8,27,248,22,147,15,249,22, -145,15,248,22,104,23,200,2,23,198,1,28,248,22,64,248,22,80,23,198,2, +249,22,177,15,248,22,113,23,198,2,247,22,160,8,27,248,22,148,15,249,22, +146,15,248,22,104,23,200,2,23,198,1,28,248,22,64,248,22,80,23,198,2, 86,94,23,196,1,86,94,28,250,22,160,2,196,11,11,12,250,22,158,2,196, 11,9,249,22,164,2,195,88,163,8,36,38,50,11,9,224,3,2,33,87,27, 248,22,67,248,22,80,23,199,1,250,22,158,2,23,198,2,23,196,2,249,22, 79,248,22,131,2,23,200,1,250,22,160,2,23,203,1,23,201,1,9,12,250, 22,158,2,195,196,248,22,94,198,20,13,159,80,159,37,57,37,88,163,36,37, -54,8,240,0,72,0,0,9,225,1,0,2,33,81,27,250,22,155,15,28,23, +54,8,240,0,72,0,0,9,225,1,0,2,33,81,27,250,22,156,15,28,23, 197,2,80,159,41,47,38,80,159,41,50,38,11,32,0,88,163,8,36,36,41, 11,9,222,33,82,28,249,22,129,4,23,195,2,28,23,196,2,80,158,40,49, 80,158,40,55,20,13,159,80,159,38,57,37,20,20,94,88,163,36,37,55,8, 240,0,120,12,0,9,226,2,1,3,0,33,83,23,196,1,20,13,159,80,159, 38,52,37,26,29,80,159,8,31,53,37,249,22,33,11,80,159,8,33,52,37, -22,154,14,10,22,155,14,10,22,156,14,10,22,159,14,10,22,158,14,10,22, -160,14,10,22,157,14,10,22,161,14,10,22,162,14,10,22,163,14,10,22,164, -14,10,22,165,14,10,22,166,14,11,22,152,14,11,27,249,22,182,5,28,196, +22,155,14,10,22,156,14,10,22,157,14,10,22,160,14,10,22,159,14,10,22, +161,14,10,22,158,14,10,22,162,14,10,22,163,14,10,22,164,14,10,22,165, +14,10,22,166,14,10,22,167,14,11,22,153,14,11,27,249,22,182,5,28,196, 80,159,41,47,38,80,159,41,50,38,66,98,105,110,97,114,121,27,250,22,46, 22,37,88,163,8,36,36,44,11,9,223,4,33,84,20,20,94,88,163,36,36, 43,11,9,223,4,33,85,23,197,1,86,94,28,28,248,22,88,23,194,2,249, 22,4,32,0,88,163,8,36,37,45,11,9,222,33,86,23,195,2,11,12,248, 22,185,9,6,18,18,105,108,108,45,102,111,114,109,101,100,32,99,111,110,116, -101,110,116,27,247,22,140,2,27,90,159,39,11,89,161,39,36,11,248,22,141, +101,110,116,27,247,22,140,2,27,90,159,39,11,89,161,39,36,11,248,22,142, 15,28,201,80,159,46,47,38,80,159,46,50,38,192,86,96,249,22,3,20,20, 94,88,163,8,36,37,54,11,9,224,2,3,33,88,23,195,1,23,197,1,249, 22,164,2,195,88,163,8,36,38,48,11,9,223,3,33,89,28,197,86,94,20, @@ -364,28 +364,28 @@ 159,11,80,158,42,54,193,20,18,159,11,80,158,42,55,196,193,28,193,80,158, 38,48,80,158,38,54,248,22,8,88,163,8,32,37,8,40,8,240,0,120,47, 0,9,224,1,2,33,90,0,7,35,114,120,34,47,43,34,28,248,22,142,7, -23,195,2,27,249,22,174,15,2,92,196,28,192,28,249,22,191,3,248,22,103, +23,195,2,27,249,22,175,15,2,92,196,28,192,28,249,22,191,3,248,22,103, 195,248,22,181,3,248,22,145,7,198,249,22,7,250,22,164,7,199,36,248,22, 103,198,197,249,22,7,250,22,164,7,199,36,248,22,103,198,249,22,79,249,22, 164,7,200,248,22,105,199,199,249,22,7,196,197,90,159,39,11,89,161,39,36, -11,248,22,141,15,23,198,1,86,94,23,195,1,28,249,22,152,9,23,195,2, +11,248,22,142,15,23,198,1,86,94,23,195,1,28,249,22,152,9,23,195,2, 2,36,249,22,7,195,199,27,249,22,79,23,197,1,23,201,1,28,248,22,142, -7,23,195,2,27,249,22,174,15,2,92,196,28,192,28,249,22,191,3,248,22, +7,23,195,2,27,249,22,175,15,2,92,196,28,192,28,249,22,191,3,248,22, 103,195,248,22,181,3,248,22,145,7,198,249,22,7,250,22,164,7,199,36,248, 22,103,198,195,249,22,7,250,22,164,7,199,36,248,22,103,198,249,22,79,249, 22,164,7,200,248,22,105,199,197,249,22,7,196,195,90,159,39,11,89,161,39, -36,11,248,22,141,15,23,198,1,28,249,22,152,9,194,2,36,249,22,7,195, +36,11,248,22,142,15,23,198,1,28,249,22,152,9,194,2,36,249,22,7,195, 197,249,80,159,45,58,39,194,249,22,79,197,199,32,94,88,163,36,43,8,27, 11,65,99,108,111,111,112,222,33,103,32,95,88,163,8,36,37,47,11,2,31, 222,33,98,32,96,88,163,36,37,43,11,69,116,111,45,115,116,114,105,110,103, -222,33,97,28,248,22,184,14,193,248,22,188,14,193,192,28,248,22,87,248,22, +222,33,97,28,248,22,185,14,193,248,22,189,14,193,192,28,248,22,87,248,22, 81,23,195,2,248,22,89,248,2,96,248,22,80,23,196,1,250,22,90,248,2, 96,248,22,80,23,198,2,2,45,248,2,95,248,22,81,23,198,1,249,22,190, 7,2,46,194,32,100,88,163,36,38,48,11,66,102,105,108,116,101,114,222,33, 101,28,248,22,87,23,195,2,9,28,248,23,194,2,248,22,80,23,196,2,249, 22,79,248,22,80,23,197,2,249,2,100,23,197,1,248,22,81,23,199,1,249, 2,100,194,248,22,81,196,249,22,190,7,2,46,248,22,134,2,23,196,1,28, -248,22,87,23,199,2,86,94,23,198,1,28,23,199,2,28,196,249,22,138,15, +248,22,87,23,199,2,86,94,23,198,1,28,23,199,2,28,196,249,22,139,15, 200,198,198,27,28,248,22,87,23,197,2,2,44,249,22,1,22,165,7,248,2, 95,23,199,2,248,23,198,1,251,22,190,7,6,70,70,99,111,108,108,101,99, 116,105,111,110,32,110,111,116,32,102,111,117,110,100,10,32,32,99,111,108,108, @@ -393,78 +393,78 @@ 99,116,105,111,110,32,100,105,114,101,99,116,111,114,105,101,115,58,126,97,126, 97,28,248,22,87,23,202,1,248,2,96,23,201,1,250,22,165,7,248,2,96, 23,204,1,2,45,23,201,2,249,22,1,22,165,7,249,22,2,32,0,88,163, -8,36,37,44,11,9,222,33,99,249,2,100,22,184,14,23,205,2,28,249,22, +8,36,37,44,11,9,222,33,99,249,2,100,22,185,14,23,205,2,28,249,22, 5,22,133,2,23,201,2,250,22,190,7,6,49,49,10,32,32,32,115,117,98, 45,99,111,108,108,101,99,116,105,111,110,58,32,126,115,10,32,32,105,110,32, 112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,58,126,97, 23,201,1,249,22,1,22,165,7,249,22,2,32,0,88,163,8,36,37,45,11, 9,222,33,102,249,2,100,22,133,2,23,208,1,86,95,23,199,1,23,198,1, -2,44,27,248,22,80,23,200,2,27,28,248,22,184,14,23,195,2,249,22,138, -15,23,196,1,23,198,2,248,22,134,2,23,195,1,28,28,248,22,184,14,248, -22,80,23,202,2,248,22,133,15,23,194,2,10,27,250,22,1,22,138,15,23, -197,1,23,201,2,28,28,248,22,87,23,199,2,10,248,22,133,15,23,194,2, -28,23,200,2,28,28,248,22,132,15,249,22,138,15,195,202,10,27,28,248,22, -184,14,201,248,22,188,14,201,200,27,248,22,145,7,23,195,2,27,28,249,22, +2,44,27,248,22,80,23,200,2,27,28,248,22,185,14,23,195,2,249,22,139, +15,23,196,1,23,198,2,248,22,134,2,23,195,1,28,28,248,22,185,14,248, +22,80,23,202,2,248,22,134,15,23,194,2,10,27,250,22,1,22,139,15,23, +197,1,23,201,2,28,28,248,22,87,23,199,2,10,248,22,134,15,23,194,2, +28,23,200,2,28,28,248,22,133,15,249,22,139,15,195,202,10,27,28,248,22, +185,14,201,248,22,189,14,201,200,27,248,22,145,7,23,195,2,27,28,249,22, 131,4,23,196,2,40,28,249,22,148,7,6,4,4,46,114,107,116,249,22,164, 7,23,199,2,249,22,183,3,23,200,2,40,249,22,165,7,250,22,164,7,23, 200,1,36,249,22,183,3,23,201,1,40,6,3,3,46,115,115,86,95,23,195, -1,23,194,1,11,11,28,23,193,2,248,22,132,15,249,22,138,15,198,23,196, -1,11,28,199,249,22,138,15,194,201,192,254,2,94,202,203,204,205,206,248,22, -81,23,16,28,23,16,23,16,199,28,199,249,22,138,15,194,201,192,254,2,94, +1,23,194,1,11,11,28,23,193,2,248,22,133,15,249,22,139,15,198,23,196, +1,11,28,199,249,22,139,15,194,201,192,254,2,94,202,203,204,205,206,248,22, +81,23,16,28,23,16,23,16,199,28,199,249,22,139,15,194,201,192,254,2,94, 202,203,204,205,206,248,22,81,23,16,23,16,254,2,94,201,202,203,204,205,248, 22,81,23,15,23,15,90,159,38,11,89,161,38,36,11,249,80,159,40,58,39, -23,199,1,23,200,1,27,248,22,67,28,248,22,184,14,195,248,22,188,14,195, -194,27,247,22,165,15,27,250,22,93,28,23,197,2,28,247,22,164,15,27,248, +23,199,1,23,200,1,27,248,22,67,28,248,22,185,14,195,248,22,189,14,195, +194,27,247,22,166,15,27,250,22,93,28,23,197,2,28,247,22,165,15,27,248, 80,159,46,56,39,10,27,250,22,160,2,23,197,2,23,203,2,11,28,23,193, 2,192,86,94,23,193,1,250,22,160,2,23,197,1,11,9,9,9,28,23,197, 1,28,80,159,44,50,38,27,248,80,159,46,56,39,11,27,250,22,160,2,23, 197,2,23,203,1,11,28,23,193,2,192,86,94,23,193,1,250,22,160,2,23, -197,1,11,9,86,94,23,198,1,9,9,247,22,162,15,254,2,94,199,202,203, -205,23,16,199,11,86,95,28,28,248,22,185,14,23,194,2,10,28,248,22,184, -14,23,194,2,10,28,248,22,142,7,23,194,2,28,248,22,142,15,23,194,2, -10,248,22,143,15,23,194,2,11,12,252,22,189,9,23,200,2,2,33,36,23, +197,1,11,9,86,94,23,198,1,9,9,247,22,163,15,254,2,94,199,202,203, +205,23,16,199,11,86,95,28,28,248,22,186,14,23,194,2,10,28,248,22,185, +14,23,194,2,10,28,248,22,142,7,23,194,2,28,248,22,143,15,23,194,2, +10,248,22,144,15,23,194,2,11,12,252,22,189,9,23,200,2,2,33,36,23, 198,2,23,199,2,28,28,248,22,142,7,23,195,2,10,248,22,131,8,23,195, 2,86,94,23,194,1,12,252,22,189,9,23,200,2,2,47,37,23,198,2,23, -199,1,90,159,39,11,89,161,39,36,11,248,22,141,15,23,197,2,86,94,23, +199,1,90,159,39,11,89,161,39,36,11,248,22,142,15,23,197,2,86,94,23, 195,1,86,94,28,192,12,250,22,128,10,23,201,1,2,48,23,199,1,249,22, -7,194,195,90,159,38,11,89,161,38,36,11,86,95,28,28,248,22,185,14,23, -196,2,10,28,248,22,184,14,23,196,2,10,28,248,22,142,7,23,196,2,28, -248,22,142,15,23,196,2,10,248,22,143,15,23,196,2,11,12,252,22,189,9, +7,194,195,90,159,38,11,89,161,38,36,11,86,95,28,28,248,22,186,14,23, +196,2,10,28,248,22,185,14,23,196,2,10,28,248,22,142,7,23,196,2,28, +248,22,143,15,23,196,2,10,248,22,144,15,23,196,2,11,12,252,22,189,9, 2,26,2,33,36,23,200,2,23,201,2,28,28,248,22,142,7,23,197,2,10, 248,22,131,8,23,197,2,12,252,22,189,9,2,26,2,47,37,23,200,2,23, -201,2,90,159,39,11,89,161,39,36,11,248,22,141,15,23,199,2,86,94,23, +201,2,90,159,39,11,89,161,39,36,11,248,22,142,15,23,199,2,86,94,23, 195,1,86,94,28,192,12,250,22,128,10,2,26,2,48,23,201,2,249,22,7, -194,195,27,249,22,130,15,250,22,183,15,0,20,35,114,120,35,34,40,63,58, -91,46,93,91,94,46,93,42,124,41,36,34,248,22,190,14,23,201,1,28,248, +194,195,27,249,22,131,15,250,22,184,15,0,20,35,114,120,35,34,40,63,58, +91,46,93,91,94,46,93,42,124,41,36,34,248,22,191,14,23,201,1,28,248, 22,142,7,23,203,2,249,22,157,8,23,204,1,8,63,23,202,1,28,248,22, -185,14,23,199,2,248,22,186,14,23,199,1,86,94,23,198,1,247,22,187,14, -28,248,22,184,14,194,249,22,138,15,195,194,192,90,159,38,11,89,161,38,36, -11,86,95,28,28,248,22,185,14,23,196,2,10,28,248,22,184,14,23,196,2, -10,28,248,22,142,7,23,196,2,28,248,22,142,15,23,196,2,10,248,22,143, +186,14,23,199,2,248,22,187,14,23,199,1,86,94,23,198,1,247,22,188,14, +28,248,22,185,14,194,249,22,139,15,195,194,192,90,159,38,11,89,161,38,36, +11,86,95,28,28,248,22,186,14,23,196,2,10,28,248,22,185,14,23,196,2, +10,28,248,22,142,7,23,196,2,28,248,22,143,15,23,196,2,10,248,22,144, 15,23,196,2,11,12,252,22,189,9,2,27,2,33,36,23,200,2,23,201,2, 28,28,248,22,142,7,23,197,2,10,248,22,131,8,23,197,2,12,252,22,189, 9,2,27,2,47,37,23,200,2,23,201,2,90,159,39,11,89,161,39,36,11, -248,22,141,15,23,199,2,86,94,23,195,1,86,94,28,192,12,250,22,128,10, -2,27,2,48,23,201,2,249,22,7,194,195,27,249,22,130,15,249,22,143,8, -250,22,184,15,0,9,35,114,120,35,34,91,46,93,34,248,22,190,14,23,203, +248,22,142,15,23,199,2,86,94,23,195,1,86,94,28,192,12,250,22,128,10, +2,27,2,48,23,201,2,249,22,7,194,195,27,249,22,131,15,249,22,143,8, +250,22,185,15,0,9,35,114,120,35,34,91,46,93,34,248,22,191,14,23,203, 1,6,1,1,95,28,248,22,142,7,23,202,2,249,22,157,8,23,203,1,8, -63,23,201,1,28,248,22,185,14,23,199,2,248,22,186,14,23,199,1,86,94, -23,198,1,247,22,187,14,28,248,22,184,14,194,249,22,138,15,195,194,192,249, -247,22,171,5,194,11,249,247,22,171,5,194,11,27,247,22,164,15,249,80,159, +63,23,201,1,28,248,22,186,14,23,199,2,248,22,187,14,23,199,1,86,94, +23,198,1,247,22,188,14,28,248,22,185,14,194,249,22,139,15,195,194,192,249, +247,22,171,5,194,11,249,247,22,171,5,194,11,27,247,22,165,15,249,80,159, 39,40,38,28,23,195,2,27,248,22,162,8,2,49,28,192,192,2,44,2,44, -27,28,23,196,1,250,22,138,15,248,22,160,15,2,50,247,22,160,8,2,51, -11,27,248,80,159,42,8,29,39,250,22,93,9,248,22,89,248,22,160,15,2, -41,9,28,193,249,22,79,195,194,192,27,247,22,164,15,249,80,159,39,40,38, +27,28,23,196,1,250,22,139,15,248,22,161,15,2,50,247,22,160,8,2,51, +11,27,248,80,159,42,8,29,39,250,22,93,9,248,22,89,248,22,161,15,2, +41,9,28,193,249,22,79,195,194,192,27,247,22,165,15,249,80,159,39,40,38, 28,23,195,2,27,248,22,162,8,2,49,28,192,192,2,44,2,44,27,28,23, -196,1,250,22,138,15,248,22,160,15,2,50,247,22,160,8,2,51,11,27,248, -80,159,42,8,30,39,250,22,93,23,203,1,248,22,89,248,22,160,15,2,41, -9,28,193,249,22,79,195,194,192,27,247,22,164,15,249,80,159,39,40,38,28, +196,1,250,22,139,15,248,22,161,15,2,50,247,22,160,8,2,51,11,27,248, +80,159,42,8,30,39,250,22,93,23,203,1,248,22,89,248,22,161,15,2,41, +9,28,193,249,22,79,195,194,192,27,247,22,165,15,249,80,159,39,40,38,28, 23,195,2,27,248,22,162,8,2,49,28,192,192,2,44,2,44,27,28,23,196, -1,250,22,138,15,248,22,160,15,2,50,247,22,160,8,2,51,11,27,248,80, -159,42,8,31,39,250,22,93,23,203,1,248,22,89,248,22,160,15,2,41,23, +1,250,22,139,15,248,22,161,15,2,50,247,22,160,8,2,51,11,27,248,80, +159,42,8,31,39,250,22,93,23,203,1,248,22,89,248,22,161,15,2,41,23, 204,1,28,193,249,22,79,195,194,192,86,94,249,22,130,7,247,22,167,5,195, 248,22,154,6,249,22,135,4,36,249,22,183,3,197,198,27,28,23,197,2,86, -95,23,196,1,23,195,1,23,197,1,86,94,23,197,1,27,248,22,160,15,2, +95,23,196,1,23,195,1,23,197,1,86,94,23,197,1,27,248,22,161,15,2, 32,27,250,80,159,42,39,39,23,197,1,11,11,27,248,22,138,4,23,199,1, 27,28,23,194,2,23,194,1,86,94,23,194,1,36,27,248,22,138,4,23,202, 1,27,28,23,194,2,23,194,1,86,94,23,194,1,36,249,22,134,6,23,199, @@ -496,7 +496,7 @@ 16,2,88,163,36,37,54,38,2,4,223,0,33,57,80,159,36,38,37,20,15, 16,2,20,25,96,2,5,88,163,8,36,39,8,25,52,9,223,0,33,64,88, 163,36,38,47,44,9,223,0,33,65,88,163,36,37,46,44,9,223,0,33,66, -80,159,36,39,37,20,15,16,2,27,248,22,168,15,248,22,156,8,27,28,249, +80,159,36,39,37,20,15,16,2,27,248,22,169,15,248,22,156,8,27,28,249, 22,152,9,247,22,164,8,2,34,6,1,1,59,6,1,1,58,250,22,190,7, 6,14,14,40,91,94,126,97,93,42,41,126,97,40,46,42,41,23,196,2,23, 196,1,88,163,8,36,38,48,11,2,6,223,0,33,70,80,159,36,40,37,20, @@ -505,7 +505,7 @@ 36,42,37,20,15,16,2,32,0,88,163,8,36,38,46,11,2,9,222,33,74, 80,159,36,43,37,20,15,16,2,88,163,45,39,49,8,128,8,2,10,223,0, 33,76,80,159,36,44,37,20,15,16,2,88,163,45,40,50,8,128,8,2,12, -223,0,33,78,80,159,36,46,37,20,15,16,2,248,22,160,15,70,108,105,110, +223,0,33,78,80,159,36,46,37,20,15,16,2,248,22,161,15,70,108,105,110, 107,115,45,102,105,108,101,80,159,36,47,37,20,15,16,2,247,22,140,2,80, 158,36,48,20,15,16,2,2,79,80,158,36,49,20,15,16,2,248,80,159,37, 51,37,88,163,36,36,49,8,240,8,0,3,0,9,223,1,33,80,80,159,36, @@ -529,7 +529,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 8952); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,50,50,84,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,50,51,84,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,1,0,0,15,0,40, 0,57,0,75,0,97,0,120,0,140,0,162,0,169,0,176,0,183,0,0,0, 179,1,0,0,74,35,37,112,108,97,99,101,45,115,116,114,117,99,116,1,23, @@ -547,8 +547,8 @@ 5,2,6,38,11,11,11,16,5,2,3,2,7,2,8,2,4,2,2,16,5, 11,11,11,11,11,16,5,2,3,2,7,2,8,2,4,2,2,41,41,37,12, 11,11,16,0,16,0,16,0,36,36,11,12,11,11,16,0,16,0,16,0,36, -36,16,2,20,15,16,6,253,22,135,11,2,3,11,38,36,11,248,22,89,249, -22,79,22,186,10,88,163,36,37,45,44,9,223,9,33,9,80,159,36,36,37, +36,16,2,20,15,16,6,253,22,136,11,2,3,11,38,36,11,248,22,89,249, +22,79,22,187,10,88,163,36,37,45,44,9,223,9,33,9,80,159,36,36,37, 80,159,36,37,37,80,159,36,38,37,80,159,36,39,37,80,159,36,40,37,20, 15,16,3,249,22,7,88,163,36,37,45,44,9,223,2,33,10,88,163,36,37, 45,44,9,223,2,33,11,80,159,36,41,37,80,159,36,42,37,93,29,94,65, @@ -556,7 +556,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 502); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,50,50,84,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,50,51,84,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,1,0,0,7,0,18, 0,45,0,51,0,60,0,67,0,89,0,102,0,128,0,145,0,167,0,175,0, 187,0,202,0,218,0,236,0,0,1,12,1,28,1,51,1,63,1,94,1,101, @@ -590,33 +590,33 @@ 109,111,100,6,2,2,46,46,6,1,1,46,64,102,105,108,101,66,112,108,97, 110,101,116,6,8,8,109,97,105,110,46,114,107,116,6,4,4,46,114,107,116, 67,105,103,110,111,114,101,100,249,22,14,195,80,159,38,50,38,249,80,159,38, -53,39,195,10,90,159,39,11,89,161,39,36,11,248,22,141,15,197,86,95,23, -195,1,23,193,1,28,249,22,172,15,0,11,35,114,120,34,91,46,93,115,115, -36,34,248,22,189,14,23,197,1,249,80,159,41,57,39,198,2,26,196,27,28, +53,39,195,10,90,159,39,11,89,161,39,36,11,248,22,142,15,197,86,95,23, +195,1,23,193,1,28,249,22,173,15,0,11,35,114,120,34,91,46,93,115,115, +36,34,248,22,190,14,23,197,1,249,80,159,41,57,39,198,2,26,196,27,28, 23,195,2,28,249,22,152,9,23,197,2,80,158,39,51,86,94,23,195,1,80, 158,37,52,27,248,22,148,5,23,197,2,27,28,248,22,77,23,195,2,248,22, -80,23,195,1,23,194,1,28,248,22,184,14,23,194,2,90,159,39,11,89,161, -39,36,11,248,22,141,15,23,197,1,86,95,20,18,159,11,80,158,42,51,199, +80,23,195,1,23,194,1,28,248,22,185,14,23,194,2,90,159,39,11,89,161, +39,36,11,248,22,142,15,23,197,1,86,95,20,18,159,11,80,158,42,51,199, 20,18,159,11,80,158,42,52,192,192,11,11,28,23,193,2,192,86,94,23,193, -1,27,247,22,172,5,28,192,192,247,22,161,15,28,24,194,2,12,20,13,159, +1,27,247,22,172,5,28,192,192,247,22,162,15,28,24,194,2,12,20,13,159, 80,159,36,56,37,80,158,36,54,89,161,37,37,10,249,22,190,4,21,94,2, 27,6,19,19,112,108,97,110,101,116,47,114,101,115,111,108,118,101,114,46,114, 107,116,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,12,250,22,138,15,23,197,1,23,199,1, -249,80,159,43,42,39,23,198,1,2,30,250,22,138,15,23,197,1,23,199,1, -249,80,159,43,42,39,23,198,1,2,30,252,22,138,15,23,199,1,23,201,1, +101,45,114,101,115,111,108,118,101,114,12,250,22,139,15,23,197,1,23,199,1, +249,80,159,43,42,39,23,198,1,2,30,250,22,139,15,23,197,1,23,199,1, +249,80,159,43,42,39,23,198,1,2,30,252,22,139,15,23,199,1,23,201,1, 2,31,247,22,165,8,249,80,159,45,42,39,23,200,1,80,159,45,36,38,252, -22,138,15,23,199,1,23,201,1,2,31,247,22,165,8,249,80,159,45,42,39, -23,200,1,80,159,45,36,38,27,252,22,138,15,23,200,1,23,202,1,2,31, +22,139,15,23,199,1,23,201,1,2,31,247,22,165,8,249,80,159,45,42,39, +23,200,1,80,159,45,36,38,27,252,22,139,15,23,200,1,23,202,1,2,31, 247,22,165,8,249,80,159,46,42,39,23,201,1,80,159,46,36,38,27,250,22, -155,15,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,79, -195,194,11,27,252,22,138,15,23,200,1,23,202,1,2,31,247,22,165,8,249, -80,159,46,42,39,23,201,1,80,159,46,36,38,27,250,22,155,15,196,11,32, +156,15,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,79, +195,194,11,27,252,22,139,15,23,200,1,23,202,1,2,31,247,22,165,8,249, +80,159,46,42,39,23,201,1,80,159,46,36,38,27,250,22,156,15,196,11,32, 0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,79,195,194,11,27,250, -22,138,15,23,198,1,23,200,1,249,80,159,44,42,39,23,199,1,2,30,27, -250,22,155,15,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249, -22,79,195,194,11,27,250,22,138,15,23,198,1,23,200,1,249,80,159,44,42, -39,23,199,1,2,30,27,250,22,155,15,196,11,32,0,88,163,8,36,36,41, +22,139,15,23,198,1,23,200,1,249,80,159,44,42,39,23,199,1,2,30,27, +250,22,156,15,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249, +22,79,195,194,11,27,250,22,139,15,23,198,1,23,200,1,249,80,159,44,42, +39,23,199,1,2,30,27,250,22,156,15,196,11,32,0,88,163,8,36,36,41, 11,9,222,11,28,192,249,22,79,195,194,11,86,95,28,248,80,159,37,40,39, 23,195,2,12,250,22,189,9,2,28,6,12,12,112,97,116,104,45,115,116,114, 105,110,103,63,23,197,2,28,28,23,195,2,28,248,22,64,23,196,2,10,28, @@ -627,30 +627,30 @@ 111,110,115,47,99,32,40,111,114,47,99,32,35,102,32,115,121,109,98,111,108, 63,41,32,40,110,111,110,45,101,109,112,116,121,45,108,105,115,116,111,102,32, 115,121,109,98,111,108,63,41,41,41,23,197,2,27,28,23,196,2,247,22,188, -4,11,27,28,23,194,2,250,22,160,2,80,158,41,41,248,22,133,16,247,22, -159,13,11,11,27,28,23,194,2,250,22,160,2,248,22,81,23,198,2,23,198, +4,11,27,28,23,194,2,250,22,160,2,80,158,41,41,248,22,134,16,247,22, +160,13,11,11,27,28,23,194,2,250,22,160,2,248,22,81,23,198,2,23,198, 2,11,11,28,23,193,2,86,96,23,197,1,23,195,1,23,194,1,20,13,159, 80,159,39,38,37,250,80,159,42,39,37,249,22,33,11,80,159,44,38,37,22, 189,4,248,22,104,196,27,248,22,113,194,20,13,159,80,159,40,38,37,250,80, -159,43,39,37,249,22,33,11,80,159,45,38,37,22,172,5,28,248,22,184,14, -23,197,2,23,196,1,86,94,23,196,1,247,22,161,15,249,247,22,170,5,248, +159,43,39,37,249,22,33,11,80,159,45,38,37,22,172,5,28,248,22,185,14, +23,197,2,23,196,1,86,94,23,196,1,247,22,162,15,249,247,22,170,5,248, 22,80,196,200,86,94,23,193,1,90,159,46,11,89,161,37,36,11,28,248,22, -144,15,23,208,2,23,207,2,27,247,22,172,5,28,23,193,2,249,22,145,15, -23,210,2,23,195,1,23,208,2,89,161,39,37,11,248,22,141,15,23,208,1, -86,94,23,196,1,89,161,38,40,11,28,23,208,2,27,248,22,189,14,23,197, +145,15,23,208,2,23,207,2,27,247,22,172,5,28,23,193,2,249,22,146,15, +23,210,2,23,195,1,23,208,2,89,161,39,37,11,248,22,142,15,23,208,1, +86,94,23,196,1,89,161,38,40,11,28,23,208,2,27,248,22,190,14,23,197, 2,27,248,22,136,8,23,195,2,28,28,249,22,131,4,23,195,2,40,249,22, 139,8,2,26,249,22,142,8,23,198,2,249,22,183,3,23,199,2,40,11,249, -22,7,23,199,2,248,22,129,15,249,22,143,8,250,22,142,8,23,202,1,36, +22,7,23,199,2,248,22,130,15,249,22,143,8,250,22,142,8,23,202,1,36, 249,22,183,3,23,203,1,40,5,3,46,115,115,249,22,7,23,199,2,11,249, 22,7,23,197,2,11,89,161,37,42,11,28,249,22,152,9,23,199,2,23,197, -2,23,193,2,249,22,138,15,23,196,2,23,199,2,89,161,37,43,11,28,23, +2,23,193,2,249,22,139,15,23,196,2,23,199,2,89,161,37,43,11,28,23, 198,2,28,249,22,152,9,23,200,2,23,197,1,23,193,1,86,94,23,193,1, -249,22,138,15,23,196,2,23,200,2,86,94,23,195,1,11,89,161,37,44,11, +249,22,139,15,23,196,2,23,200,2,86,94,23,195,1,11,89,161,37,44,11, 28,249,22,152,9,23,196,2,68,114,101,108,97,116,105,118,101,86,94,23,194, -1,2,29,23,194,1,89,161,37,45,11,247,22,163,15,27,250,22,155,15,23, +1,2,29,23,194,1,89,161,37,45,11,247,22,164,15,27,250,22,156,15,23, 203,2,11,32,0,88,163,8,36,36,41,11,9,222,11,27,28,23,194,2,249, 22,79,23,203,2,23,196,1,86,94,23,194,1,11,27,28,23,203,2,28,23, -194,2,11,27,250,22,155,15,23,207,2,11,32,0,88,163,8,36,36,41,11, +194,2,11,27,250,22,156,15,23,207,2,11,32,0,88,163,8,36,36,41,11, 9,222,11,28,192,249,22,79,23,206,2,194,11,11,27,28,23,195,2,23,195, 2,23,194,2,27,88,163,36,37,50,8,64,62,122,111,225,18,13,9,33,47, 27,88,163,36,37,50,8,64,66,97,108,116,45,122,111,225,19,14,11,33,48, @@ -666,8 +666,8 @@ 194,1,20,13,159,80,159,8,24,38,37,250,80,159,8,27,39,37,249,22,33, 11,80,159,8,29,38,37,22,189,4,11,20,13,159,80,159,8,24,38,37,250, 80,159,8,27,39,37,249,22,33,11,80,159,8,29,38,37,22,172,5,28,248, -22,184,14,23,216,2,23,215,1,86,94,23,215,1,247,22,161,15,249,247,22, -167,15,248,22,80,195,23,28,86,94,23,193,1,27,28,23,195,2,28,23,197, +22,185,14,23,216,2,23,215,1,86,94,23,215,1,247,22,162,15,249,247,22, +168,15,248,22,80,195,23,28,86,94,23,193,1,27,28,23,195,2,28,23,197, 1,27,249,22,5,88,163,8,36,37,53,8,65,9,225,28,23,20,33,52,23, 217,2,27,28,23,204,2,11,193,28,192,192,28,193,28,203,28,249,22,131,4, 248,22,81,196,248,22,81,206,193,11,11,11,11,86,94,23,197,1,11,28,23, @@ -675,8 +675,8 @@ 1,23,201,1,23,200,1,23,199,1,23,196,1,23,195,1,20,13,159,80,159, 8,25,38,37,250,80,159,8,28,39,37,249,22,33,11,80,159,8,30,38,37, 22,189,4,23,215,1,20,13,159,80,159,8,25,38,37,250,80,159,8,28,39, -37,249,22,33,11,80,159,8,30,38,37,22,172,5,28,248,22,184,14,23,217, -2,23,216,1,86,94,23,216,1,247,22,161,15,249,247,22,167,15,248,22,80, +37,249,22,33,11,80,159,8,30,38,37,22,172,5,28,248,22,185,14,23,217, +2,23,216,1,86,94,23,216,1,247,22,162,15,249,247,22,168,15,248,22,80, 195,23,29,86,94,23,193,1,27,28,23,197,2,28,23,201,1,27,249,22,5, 20,20,94,88,163,8,36,37,51,8,64,9,225,29,24,20,33,53,23,213,1, 23,218,2,27,28,23,204,2,11,193,28,192,192,28,193,28,23,204,2,28,249, @@ -687,8 +687,8 @@ 22,89,23,199,1,11,23,221,2,12,20,13,159,80,159,8,26,38,37,250,80, 159,8,29,39,37,249,22,33,11,80,159,8,31,38,37,22,189,4,11,20,13, 159,80,159,8,26,38,37,250,80,159,8,29,39,37,249,22,33,11,80,159,8, -31,38,37,22,172,5,28,248,22,184,14,23,218,2,23,217,1,86,94,23,217, -1,247,22,161,15,249,247,22,170,5,248,22,80,195,23,30,86,94,23,193,1, +31,38,37,22,172,5,28,248,22,185,14,23,218,2,23,217,1,86,94,23,217, +1,247,22,162,15,249,247,22,170,5,248,22,80,195,23,30,86,94,23,193,1, 27,28,23,197,1,28,23,201,1,27,249,22,5,20,20,94,88,163,8,36,37, 51,8,64,9,225,30,25,22,33,54,23,215,1,23,219,1,27,28,23,205,2, 11,193,28,192,192,28,193,28,204,28,249,22,131,4,248,22,81,196,248,22,81, @@ -698,16 +698,16 @@ 23,221,2,23,222,2,12,20,13,159,80,159,8,27,38,37,250,80,159,8,30, 39,37,249,22,33,11,80,159,8,32,38,37,22,189,4,23,217,1,20,13,159, 80,159,8,27,38,37,250,80,159,8,30,39,37,249,22,33,11,80,159,8,32, -38,37,22,172,5,28,248,22,184,14,23,219,2,23,218,1,86,94,23,218,1, -247,22,161,15,249,247,22,170,5,248,22,80,195,23,31,86,94,23,193,1,28, +38,37,22,172,5,28,248,22,185,14,23,219,2,23,218,1,86,94,23,218,1, +247,22,162,15,249,247,22,170,5,248,22,80,195,23,31,86,94,23,193,1,28, 28,248,22,77,23,223,2,248,22,80,23,223,2,10,27,28,23,199,2,86,94, 23,215,1,23,214,1,86,94,23,214,1,23,215,1,28,28,248,22,77,23,224, -32,0,0,0,2,248,22,150,9,248,22,132,15,23,195,2,11,12,20,13,159, +32,0,0,0,2,248,22,150,9,248,22,133,15,23,195,2,11,12,20,13,159, 80,159,8,28,38,37,250,80,159,8,31,39,37,249,22,33,11,80,159,8,33, 38,37,22,189,4,28,23,33,28,23,202,1,11,195,86,94,23,202,1,11,20, 13,159,80,159,8,28,38,37,250,80,159,8,31,39,37,249,22,33,11,80,159, -8,33,38,37,22,172,5,28,248,22,184,14,23,220,2,23,219,1,86,94,23, -219,1,247,22,161,15,249,247,22,170,5,194,23,32,12,28,193,250,22,158,2, +8,33,38,37,22,172,5,28,248,22,185,14,23,220,2,23,219,1,86,94,23, +219,1,247,22,162,15,249,247,22,170,5,194,23,32,12,28,193,250,22,158,2, 248,22,81,197,195,250,22,89,200,201,202,12,27,249,22,172,8,80,159,39,46, 38,249,22,190,3,248,22,186,3,248,22,173,2,200,8,128,8,27,28,193,248, 22,176,2,194,11,28,192,27,249,22,102,198,195,28,192,248,22,81,193,11,11, @@ -715,12 +715,12 @@ 8,80,159,40,46,38,195,27,28,193,248,22,176,2,194,11,250,22,173,8,80, 159,42,46,38,197,248,22,175,2,249,22,79,249,22,79,204,205,28,198,198,9, 0,17,35,114,120,34,94,40,46,42,63,41,47,40,46,42,41,36,34,32,60, -88,163,8,36,37,59,11,2,32,222,33,61,27,249,22,172,15,2,59,23,196, +88,163,8,36,37,59,11,2,32,222,33,61,27,249,22,173,15,2,59,23,196, 2,28,23,193,2,86,94,23,194,1,249,22,79,248,22,104,23,196,2,27,248, -22,113,23,197,1,27,249,22,172,15,2,59,23,196,2,28,23,193,2,86,94, +22,113,23,197,1,27,249,22,173,15,2,59,23,196,2,28,23,193,2,86,94, 23,194,1,249,22,79,248,22,104,23,196,2,27,248,22,113,23,197,1,27,249, -22,172,15,2,59,23,196,2,28,23,193,2,86,94,23,194,1,249,22,79,248, -22,104,23,196,2,27,248,22,113,23,197,1,27,249,22,172,15,2,59,23,196, +22,173,15,2,59,23,196,2,28,23,193,2,86,94,23,194,1,249,22,79,248, +22,104,23,196,2,27,248,22,113,23,197,1,27,249,22,173,15,2,59,23,196, 2,28,23,193,2,86,94,23,194,1,249,22,79,248,22,104,23,196,2,248,2, 60,248,22,113,23,197,1,248,22,89,194,248,22,89,194,248,22,89,194,248,22, 89,194,32,62,88,163,36,37,55,11,2,32,222,33,63,28,248,22,87,248,22, @@ -730,12 +730,12 @@ 22,81,23,195,2,249,22,7,9,248,22,80,195,90,159,38,11,89,161,38,36, 11,248,2,62,248,22,81,196,249,22,7,249,22,79,248,22,80,199,196,195,249, 22,7,249,22,79,248,22,80,199,196,195,249,22,7,249,22,79,248,22,80,199, -196,195,27,27,249,22,172,15,2,59,23,197,2,28,23,193,2,86,94,23,195, -1,249,22,79,248,22,104,23,196,2,27,248,22,113,23,197,1,27,249,22,172, +196,195,27,27,249,22,173,15,2,59,23,197,2,28,23,193,2,86,94,23,195, +1,249,22,79,248,22,104,23,196,2,27,248,22,113,23,197,1,27,249,22,173, 15,2,59,23,196,2,28,23,193,2,86,94,23,194,1,249,22,79,248,22,104, -23,196,2,27,248,22,113,23,197,1,27,249,22,172,15,2,59,23,196,2,28, +23,196,2,27,248,22,113,23,197,1,27,249,22,173,15,2,59,23,196,2,28, 23,193,2,86,94,23,194,1,249,22,79,248,22,104,23,196,2,27,248,22,113, -23,197,1,27,249,22,172,15,2,59,23,196,2,28,23,193,2,86,94,23,194, +23,197,1,27,249,22,173,15,2,59,23,196,2,28,23,193,2,86,94,23,194, 1,249,22,79,248,22,104,23,196,2,248,2,60,248,22,113,23,197,1,248,22, 89,194,248,22,89,194,248,22,89,194,248,22,89,195,28,23,195,1,192,28,248, 22,87,248,22,81,23,195,2,249,22,7,9,248,22,80,195,27,248,22,81,194, @@ -746,16 +746,16 @@ 201,196,195,249,22,7,249,22,79,248,22,80,202,196,195,249,22,7,249,22,79, 248,22,80,200,196,195,86,96,28,248,22,146,5,23,196,2,12,250,22,189,9, 2,22,6,21,21,114,101,115,111,108,118,101,100,45,109,111,100,117,108,101,45, -112,97,116,104,63,23,198,2,28,28,23,196,2,248,22,160,13,23,197,2,10, +112,97,116,104,63,23,198,2,28,28,23,196,2,248,22,161,13,23,197,2,10, 12,250,22,189,9,2,22,6,20,20,40,111,114,47,99,32,35,102,32,110,97, 109,101,115,112,97,99,101,63,41,23,199,2,28,24,193,2,248,24,194,1,23, -196,2,86,94,23,193,1,12,27,250,22,160,2,80,159,41,41,38,248,22,133, -16,247,22,159,13,11,27,28,23,194,2,23,194,1,86,94,23,194,1,27,249, +196,2,86,94,23,193,1,12,27,250,22,160,2,80,159,41,41,38,248,22,134, +16,247,22,160,13,11,27,28,23,194,2,23,194,1,86,94,23,194,1,27,249, 22,79,247,22,140,2,247,22,140,2,86,94,250,22,158,2,80,159,43,41,38, -248,22,133,16,247,22,159,13,195,192,86,94,250,22,158,2,248,22,80,23,197, +248,22,134,16,247,22,160,13,195,192,86,94,250,22,158,2,248,22,80,23,197, 2,23,200,2,68,100,101,99,108,97,114,101,100,28,23,198,2,27,28,248,22, 77,248,22,148,5,23,200,2,248,22,147,5,248,22,80,248,22,148,5,23,201, -1,23,198,1,27,250,22,160,2,80,159,44,41,38,248,22,133,16,23,204,1, +1,23,198,1,27,250,22,160,2,80,159,44,41,38,248,22,134,16,23,204,1, 11,28,23,193,2,27,250,22,160,2,248,22,81,23,198,1,197,11,28,192,250, 22,158,2,248,22,81,199,197,195,12,12,12,251,211,197,198,199,10,32,67,88, 163,36,38,47,11,76,102,108,97,116,116,101,110,45,115,117,98,45,112,97,116, @@ -765,7 +765,7 @@ 23,195,1,250,22,185,9,2,22,6,37,37,116,111,111,32,109,97,110,121,32, 34,46,46,34,115,32,105,110,32,115,117,98,109,111,100,117,108,101,32,112,97, 116,104,58,32,126,46,115,250,22,90,2,34,28,249,22,154,9,23,201,2,2, -36,198,28,248,22,184,14,199,198,249,22,89,28,248,22,64,201,2,4,2,37, +36,198,28,248,22,185,14,199,198,249,22,89,28,248,22,64,201,2,4,2,37, 200,199,251,2,68,196,197,248,22,81,199,248,22,81,200,251,2,68,196,197,249, 22,79,248,22,80,202,200,248,22,81,200,251,2,68,196,197,9,197,27,249,22, 165,7,6,31,31,115,116,97,110,100,97,114,100,45,109,111,100,117,108,101,45, @@ -777,16 +777,16 @@ 198,39,249,22,165,7,250,22,164,7,198,36,249,22,183,3,199,39,2,40,193, 193,0,8,35,114,120,34,91,46,93,34,32,76,88,163,8,36,37,47,11,2, 32,222,33,77,28,248,22,87,23,194,2,9,250,22,90,6,4,4,10,32,32, -32,248,22,188,14,248,22,105,23,198,2,248,2,76,248,22,81,23,198,1,28, +32,248,22,189,14,248,22,105,23,198,2,248,2,76,248,22,81,23,198,1,28, 249,22,154,9,248,22,81,23,200,2,23,197,1,28,249,22,152,9,248,22,80, 23,200,1,23,196,1,251,22,185,9,2,22,6,41,41,99,121,99,108,101,32, 105,110,32,108,111,97,100,105,110,103,10,32,32,97,116,32,112,97,116,104,58, 32,126,97,10,32,32,112,97,116,104,115,58,126,97,23,200,1,249,22,1,22, 165,7,248,2,76,248,22,94,23,201,1,12,12,247,192,20,13,159,80,159,43, -49,38,249,22,79,249,22,79,248,22,133,16,247,22,159,13,23,201,1,23,195, +49,38,249,22,79,249,22,79,248,22,134,16,247,22,160,13,23,201,1,23,195, 1,20,13,159,80,159,43,38,37,250,80,159,46,39,37,249,22,33,11,80,159, 48,38,37,22,188,4,23,198,2,249,247,22,171,5,23,200,1,27,248,22,67, -248,22,188,14,23,201,1,28,23,202,2,28,250,22,160,2,248,22,80,23,201, +248,22,189,14,23,201,1,28,23,202,2,28,250,22,160,2,248,22,80,23,201, 1,23,201,1,11,249,22,79,11,203,249,22,79,194,203,192,86,94,28,248,22, 156,5,23,196,2,12,28,23,197,2,250,22,187,9,11,6,15,15,98,97,100, 32,109,111,100,117,108,101,32,112,97,116,104,23,200,2,250,22,189,9,2,22, @@ -826,7 +826,7 @@ 249,2,67,2,36,28,249,22,154,9,248,22,104,23,204,2,2,35,248,22,81, 23,202,1,248,22,106,23,202,1,28,248,22,77,193,248,22,81,193,11,11,11, 27,28,248,22,64,23,196,2,27,248,80,159,43,47,39,249,22,79,23,199,2, -247,22,162,15,28,23,193,2,192,86,94,23,193,1,90,159,38,11,89,161,38, +247,22,163,15,28,23,193,2,192,86,94,23,193,1,90,159,38,11,89,161,38, 36,11,249,80,159,46,53,39,248,22,70,23,201,2,11,27,28,248,22,87,23, 195,2,2,39,249,22,165,7,23,197,2,2,40,251,80,159,49,58,39,23,204, 1,28,248,22,87,23,199,2,23,199,1,86,94,23,199,1,248,22,80,23,199, @@ -834,45 +834,45 @@ 197,1,28,248,22,142,7,23,196,2,86,94,23,196,1,27,248,80,159,43,8, 28,39,23,202,2,27,248,80,159,44,47,39,249,22,79,23,200,2,23,197,2, 28,23,193,2,192,86,94,23,193,1,90,159,38,11,89,161,38,36,11,249,80, -159,47,53,39,23,201,2,11,250,22,1,22,138,15,23,199,1,249,22,93,249, +159,47,53,39,23,201,2,11,250,22,1,22,139,15,23,199,1,249,22,93,249, 22,2,32,0,88,163,8,36,37,44,11,9,222,33,72,23,200,1,248,22,89, -248,2,73,23,201,1,28,248,22,184,14,23,196,2,86,94,23,196,1,248,80, -159,42,8,29,39,248,22,147,15,28,248,22,144,15,23,198,2,23,197,2,249, -22,145,15,23,199,2,248,80,159,46,8,28,39,23,205,2,28,249,22,152,9, +248,2,73,23,201,1,28,248,22,185,14,23,196,2,86,94,23,196,1,248,80, +159,42,8,29,39,248,22,148,15,28,248,22,145,15,23,198,2,23,197,2,249, +22,146,15,23,199,2,248,80,159,46,8,28,39,23,205,2,28,249,22,152,9, 248,22,80,23,198,2,2,27,27,248,80,159,43,47,39,249,22,79,23,199,2, -247,22,162,15,28,23,193,2,192,86,94,23,193,1,90,159,39,11,89,161,38, +247,22,163,15,28,23,193,2,192,86,94,23,193,1,90,159,39,11,89,161,38, 36,11,249,80,159,47,53,39,248,22,104,23,202,2,11,89,161,37,38,11,28, -248,22,87,248,22,106,23,201,2,28,248,22,87,23,194,2,249,22,176,15,2, +248,22,87,248,22,106,23,201,2,28,248,22,87,23,194,2,249,22,177,15,2, 75,23,196,2,11,10,27,28,23,196,2,248,2,73,23,196,2,28,248,22,87, -23,195,2,2,39,28,249,22,176,15,2,75,23,197,2,248,2,73,23,196,2, +23,195,2,2,39,28,249,22,177,15,2,75,23,197,2,248,2,73,23,196,2, 249,22,165,7,23,197,2,2,40,27,28,23,197,1,86,94,23,196,1,249,22, 93,28,248,22,87,248,22,106,23,205,2,21,93,6,5,5,109,122,108,105,98, 249,22,1,22,93,249,22,2,80,159,53,8,30,39,248,22,106,23,208,2,23, 197,1,28,248,22,87,23,196,2,86,94,23,195,1,248,22,89,23,197,1,86, 94,23,196,1,23,195,1,251,80,159,51,58,39,23,206,1,248,22,80,23,198, 2,248,22,81,23,198,1,23,198,1,28,249,22,152,9,248,22,80,23,198,2, -2,37,248,80,159,42,8,29,39,248,22,147,15,249,22,145,15,248,22,149,15, +2,37,248,80,159,42,8,29,39,248,22,148,15,249,22,146,15,248,22,150,15, 248,22,104,23,201,2,248,80,159,46,8,28,39,23,205,2,12,86,94,28,28, -248,22,184,14,23,194,2,10,248,22,167,8,23,194,2,86,94,23,201,1,12, +248,22,185,14,23,194,2,10,248,22,167,8,23,194,2,86,94,23,201,1,12, 28,23,201,2,250,22,187,9,67,114,101,113,117,105,114,101,249,22,190,7,6, 17,17,98,97,100,32,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23, 198,2,248,22,80,23,199,2,6,0,0,23,204,1,86,94,23,201,1,250,22, 189,9,2,22,2,33,23,198,2,27,28,248,22,167,8,23,195,2,249,22,172, -8,23,196,2,36,249,22,147,15,248,22,148,15,23,197,2,11,27,28,248,22, +8,23,196,2,36,249,22,148,15,248,22,149,15,23,197,2,11,27,28,248,22, 167,8,23,196,2,249,22,172,8,23,197,2,37,248,80,159,44,59,39,23,195, 2,90,159,39,11,89,161,39,36,11,28,248,22,167,8,23,199,2,250,22,7, -2,41,249,22,172,8,23,203,2,38,2,41,248,22,141,15,23,198,2,86,95, +2,41,249,22,172,8,23,203,2,38,2,41,248,22,142,15,23,198,2,86,95, 23,195,1,23,193,1,27,28,248,22,167,8,23,200,2,249,22,172,8,23,201, 2,39,249,80,159,49,57,39,23,197,2,5,0,27,28,248,22,167,8,23,201, 2,249,22,172,8,23,202,2,40,248,22,147,5,23,200,2,27,250,22,160,2, -80,159,52,41,38,248,22,133,16,247,22,159,13,11,27,28,23,194,2,23,194, +80,159,52,41,38,248,22,134,16,247,22,160,13,11,27,28,23,194,2,23,194, 1,86,94,23,194,1,27,249,22,79,247,22,140,2,247,22,140,2,86,94,250, -22,158,2,80,159,54,41,38,248,22,133,16,247,22,159,13,195,192,27,28,23, +22,158,2,80,159,54,41,38,248,22,134,16,247,22,160,13,195,192,27,28,23, 204,2,248,22,147,5,249,22,79,248,22,148,5,23,200,2,23,207,2,23,196, 2,86,95,28,23,212,1,27,250,22,160,2,248,22,80,23,199,2,196,11,28, 23,193,1,12,27,27,28,248,22,17,80,159,55,50,38,80,159,54,50,38,247, -22,19,251,22,33,11,80,159,58,49,38,9,23,197,1,27,248,22,133,16,247, -22,159,13,86,94,249,22,3,20,20,94,88,163,8,36,37,54,11,9,226,14, +22,19,251,22,33,11,80,159,58,49,38,9,23,197,1,27,248,22,134,16,247, +22,160,13,86,94,249,22,3,20,20,94,88,163,8,36,37,54,11,9,226,14, 13,2,3,33,78,23,195,1,23,196,2,248,28,248,22,17,80,159,56,50,38, 32,0,88,163,36,37,42,11,9,222,33,79,80,159,55,8,31,39,20,20,96, 88,163,36,36,56,8,140,128,9,230,19,15,13,12,8,7,5,2,33,80,23, @@ -880,11 +880,11 @@ 22,142,7,23,206,2,10,28,248,22,64,23,206,2,10,28,248,22,77,23,206, 2,249,22,152,9,248,22,80,23,208,2,2,27,11,249,80,159,53,48,39,28, 248,22,142,7,23,208,2,249,22,79,23,209,1,248,80,159,56,8,28,39,23, -215,1,86,94,23,212,1,249,22,79,23,209,1,247,22,162,15,252,22,169,8, +215,1,86,94,23,212,1,249,22,79,23,209,1,247,22,163,15,252,22,169,8, 23,209,1,23,208,1,23,206,1,23,204,1,23,203,1,12,192,86,96,20,18, 159,11,80,158,36,54,248,80,159,37,8,26,37,249,22,33,11,80,159,39,56, 37,248,22,187,4,80,159,37,55,38,248,22,171,5,80,159,37,37,39,248,22, -153,14,80,159,37,44,39,20,18,159,11,80,158,36,54,248,80,159,37,8,26, +154,14,80,159,37,44,39,20,18,159,11,80,158,36,54,248,80,159,37,8,26, 37,249,22,33,11,80,159,39,56,37,20,18,159,11,80,158,36,54,248,80,159, 37,8,26,37,249,22,33,11,80,159,39,56,37,159,36,20,113,159,36,16,1, 11,16,0,20,26,144,9,2,1,2,1,29,11,11,11,9,9,11,11,11,10, @@ -937,7 +937,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 7928); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,50,50,84,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,50,51,84,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,1,0,0,10,0,16, 0,29,0,44,0,58,0,78,0,90,0,104,0,118,0,170,0,0,0,98,1, 0,0,69,35,37,98,117,105,108,116,105,110,65,113,117,111,116,101,29,94,2, @@ -945,7 +945,7 @@ 111,114,107,11,29,94,2,2,68,35,37,112,97,114,97,109,122,11,29,94,2, 2,74,35,37,112,108,97,99,101,45,115,116,114,117,99,116,11,29,94,2,2, 66,35,37,98,111,111,116,11,29,94,2,2,68,35,37,101,120,112,111,98,115, -11,29,94,2,2,68,35,37,107,101,114,110,101,108,11,97,36,11,8,240,190, +11,29,94,2,2,68,35,37,107,101,114,110,101,108,11,97,36,11,8,240,215, 88,0,0,100,159,2,3,36,36,159,2,4,36,36,159,2,5,36,36,159,2, 6,36,36,159,2,7,36,36,159,2,8,36,36,159,2,9,36,36,159,2,9, 36,36,16,0,159,36,20,113,159,36,16,1,11,16,0,20,26,144,9,2,1, diff --git a/src/racket/src/env.c b/src/racket/src/env.c index 240f2d8074..e61c4d2359 100644 --- a/src/racket/src/env.c +++ b/src/racket/src/env.c @@ -280,6 +280,8 @@ Scheme_Env *scheme_engine_instance_init() #endif make_kernel_env(); + scheme_init_logging_once(); + #if defined(MZ_PLACES_WAITPID) scheme_places_start_child_signal_handler(); #endif diff --git a/src/racket/src/error.c b/src/racket/src/error.c index e675211047..34d154282a 100644 --- a/src/racket/src/error.c +++ b/src/racket/src/error.c @@ -55,9 +55,11 @@ void scheme_set_exit(Scheme_Exit_Proc p) { scheme_exit = p; } HOOK_SHARED_OK void (*scheme_console_output)(char *str, intptr_t len); void scheme_set_console_output(scheme_console_output_t p) { scheme_console_output = p; } -SHARED_OK static int init_syslog_level = INIT_SYSLOG_LEVEL; -SHARED_OK static int init_stderr_level = SCHEME_LOG_ERROR; +SHARED_OK static Scheme_Object *init_syslog_level = NULL; +SHARED_OK static Scheme_Object *init_stderr_level = NULL; THREAD_LOCAL_DECL(static Scheme_Logger *scheme_main_logger); +THREAD_LOCAL_DECL(static Scheme_Logger *scheme_gc_logger); +THREAD_LOCAL_DECL(static Scheme_Logger *scheme_future_logger); /* readonly globals */ READ_ONLY const char *scheme_compile_stx_string = "compile"; @@ -66,6 +68,7 @@ READ_ONLY const char *scheme_application_stx_string = "application"; READ_ONLY const char *scheme_set_stx_string = "set!"; READ_ONLY const char *scheme_var_ref_string = "#%variable-reference"; READ_ONLY const char *scheme_begin_stx_string = "begin"; +ROSYM static Scheme_Object *none_symbol; ROSYM static Scheme_Object *fatal_symbol; ROSYM static Scheme_Object *error_symbol; ROSYM static Scheme_Object *warning_symbol; @@ -125,7 +128,6 @@ static int log_reader_get(Scheme_Object *ch, Scheme_Schedule_Info *sinfo); static Scheme_Object *do_raise(Scheme_Object *arg, int need_debug, int barrier); static Scheme_Object *nested_exn_handler(void *old_exn, int argc, Scheme_Object *argv[]); -static Scheme_Logger *make_a_logger(Scheme_Logger *parent, Scheme_Object *name); static void update_want_level(Scheme_Logger *logger); static Scheme_Object *check_arity_property_value_ok(int argc, Scheme_Object *argv[]); @@ -136,9 +138,42 @@ static char *init_buf(intptr_t *len, intptr_t *blen); void scheme_set_logging(int syslog_level, int stderr_level) { if (syslog_level > -1) - init_syslog_level = syslog_level; + init_syslog_level = scheme_make_integer(syslog_level); if (stderr_level > -1) + init_stderr_level = scheme_make_integer(stderr_level); +} + +void scheme_set_logging_spec(Scheme_Object *syslog_level, Scheme_Object *stderr_level) +{ + /* A spec is (list* .... ) */ + if (syslog_level) { + REGISTER_SO(init_syslog_level); + init_syslog_level = syslog_level; + } + if (stderr_level) { + REGISTER_SO(init_stderr_level); init_stderr_level = stderr_level; + } +} + +void scheme_init_logging_once(void) +{ + /* Convert specs to use symbols */ + int j; + Scheme_Object *l, *s; + + for (j = 0; j < 2; j++) { + l = (j ? init_stderr_level : init_syslog_level); + if (l) { + while (!SCHEME_INTP(l)) { + l = SCHEME_CDR(l); + s = scheme_intern_exact_symbol(SCHEME_BYTE_STR_VAL(SCHEME_CAR(l)), + SCHEME_BYTE_STRLEN_VAL(SCHEME_CAR(l))); + SCHEME_CAR(l) = s; + l = SCHEME_CDR(l); + } + } + } } typedef struct { @@ -656,7 +691,7 @@ void scheme_init_error(Scheme_Env *env) GLOBAL_NONCM_PRIM("log-level?", log_level_p, 2, 2, env); GLOBAL_NONCM_PRIM("log-max-level", log_max_level, 1, 1, env); GLOBAL_NONCM_PRIM("make-logger", make_logger, 0, 2, env); - GLOBAL_NONCM_PRIM("make-log-receiver", make_log_reader, 2, 2, env); + GLOBAL_NONCM_PRIM("make-log-receiver", make_log_reader, 2, -1, env); GLOBAL_PRIM_W_ARITY("log-message", log_message, 4, 4, env); GLOBAL_FOLDING_PRIM("logger?", logger_p, 1, 1, 1, env); @@ -679,11 +714,13 @@ void scheme_init_error(Scheme_Env *env) REGISTER_SO(def_err_val_proc); def_err_val_proc = scheme_make_prim_w_arity(def_error_value_string_proc, "default-error-value->string-handler", 2, 2); + REGISTER_SO(none_symbol); REGISTER_SO(fatal_symbol); REGISTER_SO(error_symbol); REGISTER_SO(warning_symbol); REGISTER_SO(info_symbol); REGISTER_SO(debug_symbol); + none_symbol = scheme_intern_symbol("none"); fatal_symbol = scheme_intern_symbol("fatal"); error_symbol = scheme_intern_symbol("error"); warning_symbol = scheme_intern_symbol("warning"); @@ -708,15 +745,29 @@ void scheme_init_error(Scheme_Env *env) void scheme_init_logger() { REGISTER_SO(scheme_main_logger); - scheme_main_logger = make_a_logger(NULL, NULL); + scheme_main_logger = scheme_make_logger(NULL, NULL); scheme_main_logger->syslog_level = init_syslog_level; scheme_main_logger->stderr_level = init_stderr_level; + + REGISTER_SO(scheme_gc_logger); + scheme_gc_logger = scheme_make_logger(scheme_main_logger, scheme_intern_symbol("GC")); + + REGISTER_SO(scheme_future_logger); + scheme_future_logger = scheme_make_logger(scheme_main_logger, scheme_intern_symbol("future")); } Scheme_Logger *scheme_get_main_logger() { return scheme_main_logger; } +Scheme_Logger *scheme_get_gc_logger() { + return scheme_gc_logger; +} + +Scheme_Logger *scheme_get_future_logger() { + return scheme_future_logger; +} + void scheme_init_error_config(void) { scheme_set_root_param(MZCONFIG_EXIT_HANDLER, scheme_def_exit_proc); @@ -733,12 +784,12 @@ static void call_error(char *buffer, int len, Scheme_Object *exn) { if (scheme_current_thread->constant_folding) { - if (SCHEME_TRUEP(scheme_current_thread->constant_folding)) - scheme_log(NULL, + if (scheme_current_thread->constant_folding != (Optimize_Info *)scheme_false) + scheme_log(scheme_optimize_info_logger(scheme_current_thread->constant_folding), SCHEME_LOG_WARNING, 0, - "optimizer constant-fold attempt failed%s: %s", - scheme_optimize_context_to_string(scheme_current_thread->constant_folding), + "constant-fold attempt failed%s: %s", + scheme_optimize_info_context(scheme_current_thread->constant_folding), buffer); if (SCHEME_CHAPERONE_STRUCTP(exn) && scheme_is_struct_instance(exn_table[MZEXN_BREAK].type, exn)) { @@ -3238,59 +3289,67 @@ static Scheme_Object *default_yield_handler(int argc, Scheme_Object **argv) /***********************************************************************/ +static int extract_spec_level(Scheme_Object *level_spec, Scheme_Object *name) +{ + if (!level_spec) return 0; + + while (1) { + if (SCHEME_INTP(level_spec)) + return SCHEME_INT_VAL(level_spec); + else if (name && SAME_OBJ(SCHEME_CADR(level_spec), name)) + return SCHEME_INT_VAL(SCHEME_CAR(level_spec)); + level_spec = SCHEME_CDR(SCHEME_CDR(level_spec)); + } +} + void update_want_level(Scheme_Logger *logger) { Scheme_Log_Reader *lr; Scheme_Object *stack = NULL, *queue, *b, *prev; Scheme_Logger *parent = logger; - int want_level; + int want_level, level; while (parent) { stack = scheme_make_raw_pair((Scheme_Object *)parent, stack); - - if (parent->local_timestamp < *parent->timestamp) - parent = parent->parent; - else - parent = NULL; + parent = parent->parent; } want_level = 0; while (stack) { parent = (Scheme_Logger *)SCHEME_CAR(stack); - if (parent->local_timestamp < *parent->timestamp) { - queue = parent->readers; - prev = NULL; - while (queue) { - b = SCHEME_CAR(queue); - b = SCHEME_CAR(b); - lr = (Scheme_Log_Reader *)SCHEME_BOX_VAL(b); - if (lr) { - if (lr->want_level > want_level) - want_level = lr->want_level; - prev = queue; - } else { - if (prev) - SCHEME_CDR(prev) = SCHEME_CDR(queue); - else - parent->readers = SCHEME_CDR(queue); - } - queue = SCHEME_CDR(queue); + queue = parent->readers; + prev = NULL; + while (queue) { + b = SCHEME_CAR(queue); + b = SCHEME_CAR(b); + lr = (Scheme_Log_Reader *)SCHEME_BOX_VAL(b); + if (lr) { + level = extract_spec_level(lr->level, logger->name); + if (level > want_level) + want_level = level; + prev = queue; + } else { + if (prev) + SCHEME_CDR(prev) = SCHEME_CDR(queue); + else + parent->readers = SCHEME_CDR(queue); } - - if (parent->syslog_level > want_level) - want_level = parent->syslog_level; - if (parent->stderr_level > want_level) - want_level = parent->stderr_level; - - parent->want_level = want_level; - parent->local_timestamp = *parent->timestamp; - } else { - want_level = parent->want_level; + queue = SCHEME_CDR(queue); } + level = extract_spec_level(parent->syslog_level, logger->name); + if (level > want_level) + want_level = level; + level = extract_spec_level(parent->stderr_level, logger->name); + if (level > want_level) + want_level = level; + stack = SCHEME_CDR(stack); } + + logger->want_level = want_level; + logger->local_timestamp = *logger->timestamp; } #ifdef USE_WINDOWS_EVENT_LOG @@ -3320,13 +3379,13 @@ void scheme_log_message(Scheme_Logger *logger, int level, char *buffer, intptr_t if (logger->local_timestamp < *logger->timestamp) update_want_level(logger); + if (logger->want_level < level) + return; + orig_logger = logger; while (logger) { - if (logger->want_level < level) - return; - - if (logger->syslog_level >= level) { + if (extract_spec_level(logger->syslog_level, orig_logger->name) >= level) { #ifdef USE_C_SYSLOG int pri; switch (level) { @@ -3418,7 +3477,7 @@ void scheme_log_message(Scheme_Logger *logger, int level, char *buffer, intptr_t } #endif } - if (logger->stderr_level >= level) { + if (extract_spec_level(logger->stderr_level, orig_logger->name) >= level) { if (orig_logger->name) { intptr_t slen; slen = SCHEME_SYM_LEN(orig_logger->name); @@ -3428,14 +3487,14 @@ void scheme_log_message(Scheme_Logger *logger, int level, char *buffer, intptr_t fwrite(buffer, len, 1, stderr); fwrite("\n", 1, 1, stderr); } - + queue = logger->readers; while (queue) { b = SCHEME_CAR(queue); b = SCHEME_CAR(b); lr = (Scheme_Log_Reader *)SCHEME_BOX_VAL(b); if (lr) { - if (lr->want_level >= level) { + if (extract_spec_level(lr->level, orig_logger->name) >= level) { if (!msg) { Scheme_Object *v; msg = scheme_make_vector(3, NULL); @@ -3563,13 +3622,15 @@ void scheme_glib_log_message(const char *log_domain, scheme_log_message(scheme_main_logger, level, together, len2, scheme_false); } -static int extract_level(const char *who, int which, int argc, Scheme_Object **argv) +static int extract_level(const char *who, int none_ok, int which, int argc, Scheme_Object **argv) { Scheme_Object *v; int level; v = argv[which]; - if (SAME_OBJ(v, fatal_symbol)) + if (SAME_OBJ(v, none_symbol)) + level = 0; + else if (SAME_OBJ(v, fatal_symbol)) level = SCHEME_LOG_FATAL; else if (SAME_OBJ(v, error_symbol)) level = SCHEME_LOG_ERROR; @@ -3580,7 +3641,11 @@ static int extract_level(const char *who, int which, int argc, Scheme_Object **a else if (SAME_OBJ(v, debug_symbol)) level = SCHEME_LOG_DEBUG; else { - scheme_wrong_contract(who, "(or/c 'fatal 'error 'warning 'info 'debug)", which, argc, argv); + scheme_wrong_contract(who, + (none_ok + ? "(or/c 'none 'fatal 'error 'warning 'info 'debug)" + : "(or/c 'fatal 'error 'warning 'info 'debug)"), + which, argc, argv); return 0; } @@ -3598,7 +3663,7 @@ log_message(int argc, Scheme_Object *argv[]) scheme_wrong_contract("log-message", "logger?", 0, argc, argv); logger = (Scheme_Logger *)argv[0]; - level = extract_level("log-message", 1, argc, argv); + level = extract_level("log-message", 0, 1, argc, argv); bytes = argv[2]; if (!SCHEME_CHAR_STRINGP(bytes)) @@ -3620,7 +3685,7 @@ log_level_p(int argc, Scheme_Object *argv[]) scheme_wrong_contract("log-level?", "logger?", 0, argc, argv); logger = (Scheme_Logger *)argv[0]; - level = extract_level("log-level?", 1, argc, argv); + level = extract_level("log-level?", 0, 1, argc, argv); if (logger->local_timestamp < *logger->timestamp) update_want_level(logger); @@ -3679,13 +3744,13 @@ make_logger(int argc, Scheme_Object *argv[]) } else parent = NULL; - return (Scheme_Object *)make_a_logger(parent, - (argc - ? (SCHEME_FALSEP(argv[0]) ? NULL : argv[0]) - : NULL)); + return (Scheme_Object *)scheme_make_logger(parent, + (argc + ? (SCHEME_FALSEP(argv[0]) ? NULL : argv[0]) + : NULL)); } -static Scheme_Logger *make_a_logger(Scheme_Logger *parent, Scheme_Object *name) +Scheme_Logger *scheme_make_logger(Scheme_Logger *parent, Scheme_Object *name) { Scheme_Logger *logger; @@ -3740,17 +3805,38 @@ make_log_reader(int argc, Scheme_Object *argv[]) Scheme_Logger *logger; Scheme_Log_Reader *lr; Scheme_Object *sema, *q; - int level; + int default_lvl = 0, lvl, i; + Scheme_Object *level = scheme_null, *last = NULL; if (!SAME_TYPE(SCHEME_TYPE(argv[0]), scheme_logger_type)) scheme_wrong_contract("make-log-receiver", "logger?", 0, argc, argv); logger = (Scheme_Logger *)argv[0]; - level = extract_level("make-log-receiver", 1, argc, argv); + for (i = 1; i < argc; i += 2) { + lvl = extract_level("make-log-receiver", 1, i, argc, argv); + if ((i+1) < argc) { + if (SCHEME_FALSEP(argv[i+1])) + default_lvl = lvl; + else { + if (!SCHEME_SYMBOLP(argv[i+1])) + scheme_wrong_contract("make-log-receiver", "(or/c symbol? #f)", i+1, argc, argv); + level = scheme_make_pair(argv[i+1], level); + if (!last) last = level; + level = scheme_make_pair(scheme_make_integer(lvl), level); + } + } else { + default_lvl = lvl; + } + } + + if (last) + SCHEME_CDR(last) = scheme_make_integer(default_lvl); + else + level = scheme_make_integer(default_lvl); lr = MALLOC_ONE_TAGGED(Scheme_Log_Reader); lr->so.type = scheme_log_reader_type; - lr->want_level = level; + lr->level = level; sema = scheme_make_sema(0); lr->sema = sema; @@ -4023,17 +4109,17 @@ do_raise(Scheme_Object *arg, int need_debug, int eb) Scheme_Thread *p = scheme_current_thread; if (p->constant_folding) { - if (SCHEME_TRUEP(p->constant_folding)) { + if (p->constant_folding != (Optimize_Info *)scheme_false) { const char *msg; if (need_debug) { msg = scheme_display_to_string(((Scheme_Structure *)arg)->slots[0], NULL); } else msg = scheme_print_to_string(arg, NULL); - scheme_log(NULL, + scheme_log(scheme_optimize_info_logger(p->constant_folding), SCHEME_LOG_WARNING, 0, - "warning%s: optimizer constant-fold attempt failed: %s", - scheme_optimize_context_to_string(p->constant_folding), + "warning%s: constant-fold attempt failed: %s", + scheme_optimize_info_context(p->constant_folding), msg); } if (SCHEME_CHAPERONE_STRUCTP(arg) diff --git a/src/racket/src/eval.c b/src/racket/src/eval.c index 65d138e40a..b928d58ff3 100644 --- a/src/racket/src/eval.c +++ b/src/racket/src/eval.c @@ -3953,7 +3953,7 @@ static void *compile_k(void) break; } - oi = scheme_optimize_info_create(cenv->prefix); + oi = scheme_optimize_info_create(cenv->prefix, 1); scheme_optimize_info_enforce_const(oi, enforce_consts); if (!(comp_flags & COMP_CAN_INLINE)) scheme_optimize_info_never_inline(oi); diff --git a/src/racket/src/future.c b/src/racket/src/future.c index 7abce6dba9..58babfef63 100644 --- a/src/racket/src/future.c +++ b/src/racket/src/future.c @@ -1071,13 +1071,13 @@ static void end_traversal(Fevent_Buffer *b) } static void log_future_event(Scheme_Future_State *fs, - const char *msg_str, - const char *extra_str, - int which, - int what, - double timestamp, - int fid, - Scheme_Object *user_data) + const char *msg_str, + const char *extra_str, + int which, + int what, + double timestamp, + int fid, + Scheme_Object *user_data) { Scheme_Object *data, *v; @@ -1107,7 +1107,7 @@ static void log_future_event(Scheme_Future_State *fs, ((Scheme_Structure *)data)->slots[5] = user_data; - scheme_log_w_data(scheme_main_logger, SCHEME_LOG_DEBUG, 0, + scheme_log_w_data(scheme_get_future_logger(), SCHEME_LOG_DEBUG, 0, data, msg_str, fid, @@ -1123,7 +1123,7 @@ static Scheme_Object *mark_future_trace_end(int argc, Scheme_Object **argv) Scheme_Future_State *fs; fs = scheme_future_state; log_future_event(fs, - "future %d, process %d: %s: %s; time: %f", + "id %d, process %d: %s: %s; time: %f", "tracing", -1, FEVENT_STOP_TRACE, @@ -1137,7 +1137,7 @@ static Scheme_Object *mark_future_trace_end(int argc, Scheme_Object **argv) static void log_overflow_event(Scheme_Future_State *fs, int which, double timestamp) { log_future_event(fs, - "future ??%-, process %d: %s%s; before time: %f", + "id ??%-, process %d: %s%s; before time: %f", "", which, FEVENT_MISSING, @@ -1154,7 +1154,7 @@ static void flush_future_logs(Scheme_Future_State *fs) Fevent_Buffer *b, *min_b; Scheme_Object *data_val; - if (scheme_log_level_p(scheme_main_logger, SCHEME_LOG_DEBUG)) { + if (scheme_log_level_p(scheme_get_future_logger(), SCHEME_LOG_DEBUG)) { /* Hold lock while swapping buffers: */ mzrt_mutex_lock(fs->future_mutex); for (i = 0; i < fs->thread_pool_size; i++) { @@ -1223,7 +1223,7 @@ static void flush_future_logs(Scheme_Future_State *fs) data_val = scheme_make_integer(min_b->a[min_b->i].data); log_future_event(fs, - "future %d, process %d: %s%s; time: %f", + "id %d, process %d: %s%s; time: %f", "", min_which, min_b->a[min_b->i].what, @@ -2095,7 +2095,7 @@ Scheme_Object *touch(int argc, Scheme_Object *argv[]) Scheme_Object *targid_obj; targid_obj = scheme_make_integer(targ_ft->id); log_future_event(fs, - "future %d, process %d: %s: %s; time: %f", + "id %d, process %d: %s: %s; time: %f", "touch", -1, FEVENT_RTCALL_TOUCH, @@ -3352,7 +3352,7 @@ static void do_invoke_rtcall(Scheme_Future_State *fs, future_t *future) g_rtcall_count++; #endif - if (scheme_log_level_p(scheme_main_logger, SCHEME_LOG_DEBUG)) { + if (scheme_log_level_p(scheme_get_future_logger(), SCHEME_LOG_DEBUG)) { const char *src; Scheme_Object *userdata; @@ -3396,7 +3396,7 @@ static void do_invoke_rtcall(Scheme_Future_State *fs, future_t *future) } log_future_event(fs, - "future %d, process %d: %s: %s; time: %f", + "id %d, process %d: %s: %s; time: %f", src, -1, (future->rt_prim_is_atomic ? FEVENT_HANDLE_RTCALL_ATOMIC : FEVENT_HANDLE_RTCALL), diff --git a/src/racket/src/module.c b/src/racket/src/module.c index 53130572cd..20dcd11b46 100644 --- a/src/racket/src/module.c +++ b/src/racket/src/module.c @@ -7995,7 +7995,7 @@ static Scheme_Object *do_module_begin(Scheme_Object *orig_form, Scheme_Comp_Env o = scheme_get_param(scheme_current_config(), MZCONFIG_USE_JIT); use_jit = SCHEME_TRUEP(o); - oi = scheme_optimize_info_create(env->prefix); + oi = scheme_optimize_info_create(env->prefix, 1); scheme_optimize_info_enforce_const(oi, rec[drec].comp_flags & COMP_ENFORCE_CONSTS); if (!(rec[drec].comp_flags & COMP_CAN_INLINE)) scheme_optimize_info_never_inline(oi); @@ -8592,7 +8592,7 @@ static Scheme_Object *do_module_begin_at_phase(Scheme_Object *form, Scheme_Comp_ if (!for_stx) lifted_reqs = scheme_append(scheme_frame_get_require_lifts(eenv), lifted_reqs); - oi = scheme_optimize_info_create(eenv->prefix); + oi = scheme_optimize_info_create(eenv->prefix, 1); scheme_optimize_info_set_context(oi, (Scheme_Object *)env->genv->module); if (!(rec[drec].comp_flags & COMP_CAN_INLINE)) scheme_optimize_info_never_inline(oi); diff --git a/src/racket/src/mzmark_optimize.inc b/src/racket/src/mzmark_optimize.inc index 0c1fd16d7e..4f37e259a4 100644 --- a/src/racket/src/mzmark_optimize.inc +++ b/src/racket/src/mzmark_optimize.inc @@ -18,6 +18,7 @@ static int mark_optimize_info_MARK(void *p, struct NewGC *gc) { gcMARK2(i->transitive_use, gc); gcMARK2(i->transitive_use_len, gc); gcMARK2(i->context, gc); + gcMARK2(i->logger, gc); return gcBYTES_TO_WORDS(sizeof(Optimize_Info)); @@ -36,6 +37,7 @@ static int mark_optimize_info_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(i->transitive_use, gc); gcFIXUP2(i->transitive_use_len, gc); gcFIXUP2(i->context, gc); + gcFIXUP2(i->logger, gc); return gcBYTES_TO_WORDS(sizeof(Optimize_Info)); diff --git a/src/racket/src/mzmark_type.inc b/src/racket/src/mzmark_type.inc index 70b8c0ddd4..2b52e9e1d1 100644 --- a/src/racket/src/mzmark_type.inc +++ b/src/racket/src/mzmark_type.inc @@ -2916,8 +2916,10 @@ static int mark_logger_MARK(void *p, struct NewGC *gc) { Scheme_Logger *l = (Scheme_Logger *)p; gcMARK2(l->name, gc); gcMARK2(l->parent, gc); - gcMARK2(l->readers, gc); gcMARK2(l->timestamp, gc); + gcMARK2(l->syslog_level, gc); + gcMARK2(l->stderr_level, gc); + gcMARK2(l->readers, gc); return gcBYTES_TO_WORDS(sizeof(Scheme_Logger)); } @@ -2926,8 +2928,10 @@ static int mark_logger_FIXUP(void *p, struct NewGC *gc) { Scheme_Logger *l = (Scheme_Logger *)p; gcFIXUP2(l->name, gc); gcFIXUP2(l->parent, gc); - gcFIXUP2(l->readers, gc); gcFIXUP2(l->timestamp, gc); + gcFIXUP2(l->syslog_level, gc); + gcFIXUP2(l->stderr_level, gc); + gcFIXUP2(l->readers, gc); return gcBYTES_TO_WORDS(sizeof(Scheme_Logger)); } @@ -2943,6 +2947,7 @@ static int mark_log_reader_SIZE(void *p, struct NewGC *gc) { static int mark_log_reader_MARK(void *p, struct NewGC *gc) { Scheme_Log_Reader *lr = (Scheme_Log_Reader *)p; + gcMARK2(lr->level, gc); gcMARK2(lr->sema, gc); gcMARK2(lr->head, gc); gcMARK2(lr->tail, gc); @@ -2952,6 +2957,7 @@ static int mark_log_reader_MARK(void *p, struct NewGC *gc) { static int mark_log_reader_FIXUP(void *p, struct NewGC *gc) { Scheme_Log_Reader *lr = (Scheme_Log_Reader *)p; + gcFIXUP2(lr->level, gc); gcFIXUP2(lr->sema, gc); gcFIXUP2(lr->head, gc); gcFIXUP2(lr->tail, gc); diff --git a/src/racket/src/mzmarksrc.c b/src/racket/src/mzmarksrc.c index 3215999d21..a9d43ec389 100644 --- a/src/racket/src/mzmarksrc.c +++ b/src/racket/src/mzmarksrc.c @@ -1173,8 +1173,10 @@ mark_logger { Scheme_Logger *l = (Scheme_Logger *)p; gcMARK2(l->name, gc); gcMARK2(l->parent, gc); - gcMARK2(l->readers, gc); gcMARK2(l->timestamp, gc); + gcMARK2(l->syslog_level, gc); + gcMARK2(l->stderr_level, gc); + gcMARK2(l->readers, gc); size: gcBYTES_TO_WORDS(sizeof(Scheme_Logger)); } @@ -1182,6 +1184,7 @@ mark_logger { mark_log_reader { mark: Scheme_Log_Reader *lr = (Scheme_Log_Reader *)p; + gcMARK2(lr->level, gc); gcMARK2(lr->sema, gc); gcMARK2(lr->head, gc); gcMARK2(lr->tail, gc); @@ -1305,6 +1308,7 @@ mark_optimize_info { gcMARK2(i->transitive_use, gc); gcMARK2(i->transitive_use_len, gc); gcMARK2(i->context, gc); + gcMARK2(i->logger, gc); size: gcBYTES_TO_WORDS(sizeof(Optimize_Info)); diff --git a/src/racket/src/optimize.c b/src/racket/src/optimize.c index bd7c295bf2..0cb6fc8780 100644 --- a/src/racket/src/optimize.c +++ b/src/racket/src/optimize.c @@ -73,6 +73,7 @@ struct Optimize_Info int *transitive_use_len; Scheme_Object *context; /* for logging */ + Scheme_Logger *logger; }; static char *get_closure_flonum_map(Scheme_Closure_Data *data, int arg_n, int *ok); @@ -192,10 +193,10 @@ static void note_match(int actual, int expected, Optimize_Info *warn_info) return; if (actual != expected) { - scheme_log(NULL, + scheme_log(warn_info->logger, SCHEME_LOG_WARNING, 0, - "warning%s: optimizer detects %d values produced when %d expected", + "warning%s: %d values produced when %d expected", scheme_optimize_context_to_string(warn_info->context), actual, expected); } @@ -649,7 +650,7 @@ static Scheme_Object *try_optimize_fold(Scheme_Object *f, Scheme_Object *o, Opti break; } - return scheme_try_apply(f, args, info->context); + return scheme_try_apply(f, args, info); } return NULL; @@ -845,7 +846,7 @@ static Scheme_Object *apply_inlined(Scheme_Object *p, Scheme_Closure_Data *data, l = cons(val, l); } l = cons(scheme_list_proc, l); - val = scheme_make_application(l); + val = scheme_make_application(l, info); } else if (app) val = app->args[i + 1]; else if (app3) @@ -1089,10 +1090,10 @@ Scheme_Object *optimize_for_inline(Optimize_Info *info, Scheme_Object *le, int a if (le) { LOG_INLINE(fprintf(stderr, "Inline %d[%d]<=%d@%d %d %s\n", sz, is_leaf, threshold, info->inline_fuel, single_use, scheme_write_to_string(data->name ? data->name : scheme_false, NULL))); - scheme_log(NULL, + scheme_log(info->logger, SCHEME_LOG_DEBUG, 0, - "mzc optimizer: inlining: involving: %s%s size: %d threshold: %d", + "inlining: involving: %s%s size: %d threshold: %d", scheme_write_to_string(data->name ? data->name : scheme_false, NULL), scheme_optimize_context_to_string(info->context), sz, @@ -1104,10 +1105,10 @@ Scheme_Object *optimize_for_inline(Optimize_Info *info, Scheme_Object *le, int a return le; } else { LOG_INLINE(fprintf(stderr, "No inline %s\n", scheme_write_to_string(data->name ? data->name : scheme_false, NULL))); - scheme_log(NULL, + scheme_log(info->logger, SCHEME_LOG_DEBUG, 0, - "mzc optimizer: no inlining: involving: %s%s size: %d threshold: %d", + "no inlining: involving: %s%s size: %d threshold: %d", scheme_write_to_string(data->name ? data->name : scheme_false, NULL), scheme_optimize_context_to_string(info->context), sz, @@ -1117,10 +1118,10 @@ Scheme_Object *optimize_for_inline(Optimize_Info *info, Scheme_Object *le, int a LOG_INLINE(fprintf(stderr, "No fuel %s %d[%d]>%d@%d %d\n", scheme_write_to_string(data->name ? data->name : scheme_false, NULL), sz, is_leaf, threshold, info->inline_fuel, info->use_psize)); - scheme_log(NULL, + scheme_log(info->logger, SCHEME_LOG_DEBUG, 0, - "mzc optimizer: no inlining, out of fuel: involving: %s%s size: %d threshold: %d", + "no inlining, out of fuel: involving: %s%s size: %d threshold: %d", scheme_write_to_string(data->name ? data->name : scheme_false, NULL), scheme_optimize_context_to_string(info->context), sz, @@ -1161,7 +1162,7 @@ Scheme_Object *optimize_for_inline(Optimize_Info *info, Scheme_Object *le, int a const char *pname, *context; pname = scheme_get_proc_name(bad_app, &len, 0); context = scheme_optimize_context_to_string(info->context); - scheme_log(NULL, + scheme_log(info->logger, SCHEME_LOG_WARNING, 0, "warning%s: optimizer detects procedure incorrectly applied to %d arguments%s%s", @@ -1329,6 +1330,16 @@ char *scheme_optimize_context_to_string(Scheme_Object *context) return ""; } +char *scheme_optimize_info_context(Optimize_Info *info) +{ + return scheme_optimize_context_to_string(info->context); +} + +Scheme_Logger *scheme_optimize_info_logger(Optimize_Info *info) +{ + return info->logger; +} + static void reset_rator(Scheme_Object *app, Scheme_Object *a) { switch (SCHEME_TYPE(app)) { @@ -1592,7 +1603,7 @@ static Scheme_Object *finish_optimize_app(Scheme_Object *o, Optimize_Info *info, } } -static Scheme_Object *direct_apply(Scheme_Object *expr, Scheme_Object *rator, Scheme_Object *last_rand) +static Scheme_Object *direct_apply(Scheme_Object *expr, Scheme_Object *rator, Scheme_Object *last_rand, Optimize_Info *info) { if (SAME_OBJ(rator, scheme_apply_proc)) { switch(SCHEME_TYPE(last_rand)) { @@ -1658,7 +1669,7 @@ static Scheme_Object *direct_apply(Scheme_Object *expr, Scheme_Object *rator, Sc break; } - return scheme_make_application(l); + return scheme_make_application(l, info); } } @@ -1674,7 +1685,7 @@ static Scheme_Object *optimize_application(Scheme_Object *o, Optimize_Info *info app = (Scheme_App_Rec *)o; /* Check for (apply ... (list ...)) early: */ - le = direct_apply((Scheme_Object *)app, app->args[0], app->args[app->num_args]); + le = direct_apply((Scheme_Object *)app, app->args[0], app->args[app->num_args], info); if (le) return scheme_optimize_expr(le, info, context); le = check_app_let_rator(o, app->args[0], info, app->num_args, context); @@ -1705,7 +1716,7 @@ static Scheme_Object *optimize_application(Scheme_Object *o, Optimize_Info *info } /* Check for (apply ... (list ...)) after some optimizations: */ - le = direct_apply((Scheme_Object *)app, app->args[0], app->args[app->num_args]); + le = direct_apply((Scheme_Object *)app, app->args[0], app->args[app->num_args], info); if (le) return finish_optimize_app(le, info, context, rator_flags); /* Convert (hash-ref '#hash... key (lambda () literal)) @@ -1985,7 +1996,7 @@ static Scheme_Object *optimize_application3(Scheme_Object *o, Optimize_Info *inf app = (Scheme_App3_Rec *)o; /* Check for (apply ... (list ...)) early: */ - le = direct_apply((Scheme_Object *)app, app->rator, app->rand2); + le = direct_apply((Scheme_Object *)app, app->rator, app->rand2, info); if (le) return scheme_optimize_expr(le, info, context); le = check_app_let_rator(o, app->rator, info, 2, context); @@ -2024,7 +2035,7 @@ static Scheme_Object *optimize_application3(Scheme_Object *o, Optimize_Info *inf app->rand2 = le; /* Check for (apply ... (list ...)) after some optimizations: */ - le = direct_apply((Scheme_Object *)app, app->rator, app->rand2); + le = direct_apply((Scheme_Object *)app, app->rator, app->rand2, info); if (le) return finish_optimize_app(le, info, context, rator_flags); return finish_optimize_application3(app, info, context, rator_flags); @@ -2890,9 +2901,10 @@ static Scheme_Object *do_define_syntaxes_optimize(Scheme_Object *data, Optimize_ val = SCHEME_VEC_ELS(data)[3]; - einfo = scheme_optimize_info_create(info->cp); + einfo = scheme_optimize_info_create(info->cp, 0); if (info->inline_fuel < 0) einfo->inline_fuel = -1; + einfo->logger = info->logger; val = scheme_optimize_expr(val, einfo, 0); @@ -2914,9 +2926,10 @@ static Scheme_Object *begin_for_syntax_optimize(Scheme_Object *data, Optimize_In l = SCHEME_VEC_ELS(data)[2]; while (!SCHEME_NULLP(l)) { - einfo = scheme_optimize_info_create(info->cp); + einfo = scheme_optimize_info_create(info->cp, 0); if (info->inline_fuel < 0) einfo->inline_fuel = -1; + einfo->logger = info->logger; a = SCHEME_CAR(l); a = scheme_optimize_expr(a, einfo, 0); @@ -5472,7 +5485,7 @@ Scheme_Object *optimize_shift(Scheme_Object *expr, int delta, int after_depth) /* compile-time env for optimization */ /*========================================================================*/ -Optimize_Info *scheme_optimize_info_create(Comp_Prefix *cp) +Optimize_Info *scheme_optimize_info_create(Comp_Prefix *cp, int get_logger) { Optimize_Info *info; @@ -5483,6 +5496,13 @@ Optimize_Info *scheme_optimize_info_create(Comp_Prefix *cp) info->inline_fuel = 32; info->cp = cp; + if (get_logger) { + Scheme_Logger *logger; + logger = (Scheme_Logger *)scheme_get_param(scheme_current_config(), MZCONFIG_LOGGER); + logger = scheme_make_logger(logger, scheme_intern_symbol("optimizer")); + info->logger = logger; + } + return info; } @@ -6026,7 +6046,7 @@ static Optimize_Info *optimize_info_add_frame(Optimize_Info *info, int orig, int { Optimize_Info *naya; - naya = scheme_optimize_info_create(info->cp); + naya = scheme_optimize_info_create(info->cp, 0); naya->flags = (short)flags; naya->next = info; naya->original_frame = orig; @@ -6038,6 +6058,7 @@ static Optimize_Info *optimize_info_add_frame(Optimize_Info *info, int orig, int naya->context = info->context; naya->vclock = info->vclock; naya->use_psize = info->use_psize; + naya->logger = info->logger; return naya; } diff --git a/src/racket/src/regexp.c b/src/racket/src/regexp.c index a52d0f73f3..adf83ddb26 100644 --- a/src/racket/src/regexp.c +++ b/src/racket/src/regexp.c @@ -5586,6 +5586,14 @@ static Scheme_Object *compare_bool(int argc, Scheme_Object *argv[]) return gen_compare("regexp-match?", 2, argc, argv, 0, 0, 0); } +int scheme_regexp_match_p(Scheme_Object *regexp, Scheme_Object *target) +{ + Scheme_Object *a[2]; + a[0] = regexp; + a[1] = target; + return SCHEME_TRUEP(compare_bool(2, a)); +} + static Scheme_Object *compare_peek(int argc, Scheme_Object *argv[]) { return gen_compare("regexp-match-peek", 0, argc, argv, 1, 0, 0); diff --git a/src/racket/src/schminc.h b/src/racket/src/schminc.h index 1c3bdc0445..1469fdbef1 100644 --- a/src/racket/src/schminc.h +++ b/src/racket/src/schminc.h @@ -12,7 +12,7 @@ finally, set EXPECTED_PRIM_COUNT to the right value and USE_COMPILED_STARTUP to 1 and `make' again. */ -#define USE_COMPILED_STARTUP 1 +#define USE_COMPILED_STARTUP 0 #define EXPECTED_PRIM_COUNT 1072 #define EXPECTED_UNSAFE_COUNT 79 diff --git a/src/racket/src/schpriv.h b/src/racket/src/schpriv.h index f53eae7613..3f47065f98 100644 --- a/src/racket/src/schpriv.h +++ b/src/racket/src/schpriv.h @@ -287,11 +287,14 @@ void scheme_init_gmp_places(void); void scheme_init_print_global_constants(void); void scheme_init_variable_references_constants(void); void scheme_init_logger(void); +void scheme_init_logging_once(void); void scheme_init_file_places(void); void scheme_init_foreign_places(void); void scheme_init_place_local_symbol_table(void); Scheme_Logger *scheme_get_main_logger(void); +Scheme_Logger *scheme_get_gc_logger(void); +Scheme_Logger *scheme_get_future_logger(void); void scheme_init_logger_config(void); void register_network_evts(); @@ -2701,11 +2704,14 @@ int scheme_resolve_info_use_jit(Resolve_Info *ri); void scheme_enable_expression_resolve_lifts(Resolve_Info *ri); Scheme_Object *scheme_merge_expression_resolve_lifts(Scheme_Object *expr, Resolve_Prefix *rp, Resolve_Info *ri); -Optimize_Info *scheme_optimize_info_create(Comp_Prefix *cp); +Optimize_Info *scheme_optimize_info_create(Comp_Prefix *cp, int get_logger); void scheme_optimize_info_enforce_const(Optimize_Info *, int enforce_const); void scheme_optimize_info_set_context(Optimize_Info *, Scheme_Object *ctx); void scheme_optimize_info_never_inline(Optimize_Info *); +char *scheme_optimize_info_context(Optimize_Info *); +Scheme_Logger *scheme_optimize_info_logger(Optimize_Info *); + Scheme_Object *scheme_toplevel_to_flagged_toplevel(Scheme_Object *tl, int flags); int scheme_wants_flonum_arguments(Scheme_Object *rator, int argpos); @@ -2879,8 +2885,8 @@ int scheme_is_env_variable_boxed(Scheme_Comp_Env *env, int which); int scheme_get_eval_type(Scheme_Object *obj); -Scheme_Object *scheme_make_application(Scheme_Object *v); -Scheme_Object *scheme_try_apply(Scheme_Object *f, Scheme_Object *args, Scheme_Object *context); +Scheme_Object *scheme_make_application(Scheme_Object *v, Optimize_Info *info); +Scheme_Object *scheme_try_apply(Scheme_Object *f, Scheme_Object *args, Optimize_Info *info); Scheme_Object *scheme_get_stop_expander(void); @@ -3414,17 +3420,20 @@ struct Scheme_Logger { Scheme_Logger *parent; int want_level; intptr_t *timestamp, local_timestamp; /* determines when want_level is up-to-date */ - int syslog_level, stderr_level; + Scheme_Object *syslog_level; /* (list* ... ) */ + Scheme_Object *stderr_level; Scheme_Object *readers; /* list of (cons (make-weak-box ) ) */ }; typedef struct Scheme_Log_Reader { Scheme_Object so; - int want_level; + Scheme_Object *level; /* (list* ... ) */ Scheme_Object *sema; Scheme_Object *head, *tail; } Scheme_Log_Reader; +Scheme_Logger *scheme_make_logger(Scheme_Logger *parent, Scheme_Object *name); + char *scheme_optimize_context_to_string(Scheme_Object *context); void scheme_write_proc_context(Scheme_Object *port, int print_width, @@ -3743,6 +3752,10 @@ Scheme_Object *scheme_make_regexp(Scheme_Object *str, int byte, int pcre, int * int scheme_is_pregexp(Scheme_Object *o); void scheme_clear_rx_buffers(void); +int scheme_regexp_match_p(Scheme_Object *regexp, Scheme_Object *target); + +Scheme_Object *scheme_symbol_to_string(Scheme_Object *sym); + #ifdef SCHEME_BIG_ENDIAN # define MZ_UCS4_NAME "UCS-4BE" #else diff --git a/src/racket/src/schvers.h b/src/racket/src/schvers.h index b8d0285d30..0323494792 100644 --- a/src/racket/src/schvers.h +++ b/src/racket/src/schvers.h @@ -13,12 +13,12 @@ consistently.) */ -#define MZSCHEME_VERSION "5.3.0.22" +#define MZSCHEME_VERSION "5.3.0.23" #define MZSCHEME_VERSION_X 5 #define MZSCHEME_VERSION_Y 3 #define MZSCHEME_VERSION_Z 0 -#define MZSCHEME_VERSION_W 22 +#define MZSCHEME_VERSION_W 23 #define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y) #define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W) diff --git a/src/racket/src/symbol.c b/src/racket/src/symbol.c index 738b184a2c..781195190d 100644 --- a/src/racket/src/symbol.c +++ b/src/racket/src/symbol.c @@ -791,19 +791,13 @@ string_to_unreadable_symbol_prim (int argc, Scheme_Object *argv[]) return scheme_intern_exact_parallel_symbol(bs, blen); } -static Scheme_Object * -symbol_to_string_prim (int argc, Scheme_Object *argv[]) +Scheme_Object *scheme_symbol_to_string(Scheme_Object *sym) { - Scheme_Object *sym, *str; + Scheme_Object *str; GC_CAN_IGNORE unsigned char *s; GC_CAN_IGNORE mzchar *s2; intptr_t len, i; - sym = argv[0]; - - if (!SCHEME_SYMBOLP(sym)) - scheme_wrong_contract("symbol->string", "symbol?", 0, argc, argv); - s = (unsigned char *)SCHEME_SYM_VAL(sym); len = SCHEME_SYM_LEN(sym); for (i = 0; i < len; i++) { @@ -828,6 +822,20 @@ symbol_to_string_prim (int argc, Scheme_Object *argv[]) } } +static Scheme_Object * +symbol_to_string_prim (int argc, Scheme_Object *argv[]) +{ + Scheme_Object *sym; + + sym = argv[0]; + + if (!SCHEME_SYMBOLP(sym)) + scheme_wrong_contract("symbol->string", "symbol?", 0, argc, argv); + + return scheme_symbol_to_string(sym); +} + + static Scheme_Object * keyword_p_prim (int argc, Scheme_Object *argv[]) { diff --git a/src/racket/src/thread.c b/src/racket/src/thread.c index ad9e9442b1..df2bf732df 100644 --- a/src/racket/src/thread.c +++ b/src/racket/src/thread.c @@ -8387,13 +8387,13 @@ static void done_with_GC() #ifndef MZ_PRECISE_GC { - Scheme_Logger *logger = scheme_get_main_logger(); + Scheme_Logger *logger = scheme_get_gc_logger(); if (logger) { char buf[64]; intptr_t buflen; sprintf(buf, - "GC in %" PRIdPTR " msec", + "in %" PRIdPTR " msec", end_this_gc_time - start_this_gc_time); buflen = strlen(buf); @@ -8444,7 +8444,7 @@ static void inform_GC(int master_gc, int major_gc, intptr_t post_child_places_used) { Scheme_Logger *logger; - logger = scheme_get_main_logger(); + logger = scheme_get_gc_logger(); if (logger && scheme_log_level_p(logger, SCHEME_LOG_DEBUG)) { /* Don't use scheme_log(), because it wants to allocate a buffer based on the max value-print width, and we may not be at a @@ -8486,7 +8486,7 @@ static void inform_GC(int master_gc, int major_gc, delta = pre_used - post_used; admin_delta = (pre_admin - post_admin) - delta; sprintf(buf, - "GC[" PLACE_ID_FORMAT "%s] @ %sK(+%sK)[+%sK];" + "" PLACE_ID_FORMAT "%s @ %sK(+%sK)[+%sK];" " free %sK(%s%sK) %" PRIdPTR "ms @ %" PRIdPTR, #ifdef MZ_USE_PLACES scheme_current_place_id,