From ce2d286586da819818b9610fc31ca2a8ad67c0fe Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Tue, 13 Apr 2010 02:48:40 +0000 Subject: [PATCH] add current-module-declare-source, variable-reference->module-source, convert soe sues of module paths to module sources svn: r18804 --- collects/compiler/cm.ss | 57 +- collects/drscheme/private/module-language.ss | 5 +- collects/errortrace/lang/body.ss | 9 +- collects/r6rs/run.ss | 3 +- collects/scheme/contract/private/base.ss | 2 +- collects/scheme/contract/private/legacy.ss | 11 +- collects/scheme/contract/private/provide.ss | 4 +- collects/scribblings/reference/eval.scrbl | 24 +- .../reference/module-reflect.scrbl | 22 +- .../scribblings/reference/namespaces.scrbl | 10 + collects/unstable/location.ss | 8 + collects/unstable/scribblings/srcloc.scrbl | 10 +- src/mzscheme/include/scheme.h | 1 + src/mzscheme/src/cstartup.inc | 1464 +++++++++-------- src/mzscheme/src/env.c | 20 + src/mzscheme/src/error.c | 2 +- src/mzscheme/src/eval.c | 6 +- src/mzscheme/src/module.c | 75 +- src/mzscheme/src/mzmark.c | 2 + src/mzscheme/src/mzmarksrc.c | 1 + src/mzscheme/src/mzrt.c | 29 - src/mzscheme/src/schminc.h | 2 +- src/mzscheme/src/schpriv.h | 1 + src/mzscheme/src/schvers.h | 4 +- src/mzscheme/src/startup.inc | 32 +- src/mzscheme/src/startup.ss | 36 +- src/mzscheme/src/syntax.c | 2 +- 27 files changed, 992 insertions(+), 850 deletions(-) diff --git a/collects/compiler/cm.ss b/collects/compiler/cm.ss index 8897b45ea7..b560e4ddff 100644 --- a/collects/compiler/cm.ss +++ b/collects/compiler/cm.ss @@ -282,32 +282,39 @@ (define depth (make-parameter 0)) +(define (actual-source-path path) + (if (file-exists? path) + path + (let ([alt-path (rkt->ss path)]) + (if (file-exists? alt-path) + alt-path + path)))) + (define (compile-zo mode path orig-path read-src-syntax) - ;; The `path' argument has been converted to .rkt or .ss form, - ;; as appropriate. - ((manager-compile-notify-handler) orig-path) - (trace-printf "compiling: ~a" orig-path) - (parameterize ([indent (string-append " " (indent))]) - (let* ([zo-name (path-add-suffix (get-compilation-path mode path) #".zo")] - [zo-exists? (file-exists? zo-name)]) - (if (and zo-exists? (trust-existing-zos)) - (touch zo-name) - (begin (when zo-exists? (delete-file zo-name)) - (log-info (format "cm: ~acompiling ~a" - (build-string - (depth) - (λ (x) (if (= 2 (modulo x 3)) #\| #\space))) - orig-path)) - (parameterize ([depth (+ (depth) 1)]) - (with-handlers - ([exn:get-module-code? - (lambda (ex) - (compilation-failure mode path zo-name - (exn:get-module-code-path ex) - (exn-message ex)) - (raise ex))]) - (compile-zo* mode path read-src-syntax zo-name))))))) - (trace-printf "end compile: ~a" orig-path)) + (let ([actual-path (actual-source-path orig-path)]) + ((manager-compile-notify-handler) actual-path) + (trace-printf "compiling: ~a" actual-path) + (parameterize ([indent (string-append " " (indent))]) + (let* ([zo-name (path-add-suffix (get-compilation-path mode path) #".zo")] + [zo-exists? (file-exists? zo-name)]) + (if (and zo-exists? (trust-existing-zos)) + (touch zo-name) + (begin (when zo-exists? (delete-file zo-name)) + (log-info (format "cm: ~acompiling ~a" + (build-string + (depth) + (λ (x) (if (= 2 (modulo x 3)) #\| #\space))) + actual-path)) + (parameterize ([depth (+ (depth) 1)]) + (with-handlers + ([exn:get-module-code? + (lambda (ex) + (compilation-failure mode path zo-name + (exn:get-module-code-path ex) + (exn-message ex)) + (raise ex))]) + (compile-zo* mode path read-src-syntax zo-name))))))) + (trace-printf "end compile: ~a" actual-path))) (define (get-compiled-time mode path) (define-values (dir name) (get-compilation-dir+name mode path)) diff --git a/collects/drscheme/private/module-language.ss b/collects/drscheme/private/module-language.ss index 5b2ea69a8b..98ab117a4d 100644 --- a/collects/drscheme/private/module-language.ss +++ b/collects/drscheme/private/module-language.ss @@ -293,13 +293,16 @@ ;; module. So the code is split among several thunks that follow. (define (*pre) (thread-cell-set! repl-init-thunk *error) - (current-module-declare-name resolved-modpath)) + (current-module-declare-name resolved-modpath) + (current-module-declare-source path)) (define (*post) (current-module-declare-name #f) + (current-module-declare-source #f) (when path ((current-module-name-resolver) resolved-modpath)) (thread-cell-set! repl-init-thunk *init)) (define (*error) (current-module-declare-name #f) + (current-module-declare-source #f) ;; syntax error => try to require the language to get a working repl (with-handlers ([void (λ (e) (raise-hopeless-syntax-error diff --git a/collects/errortrace/lang/body.ss b/collects/errortrace/lang/body.ss index c89d5b359e..48cfe9b78f 100644 --- a/collects/errortrace/lang/body.ss +++ b/collects/errortrace/lang/body.ss @@ -9,12 +9,13 @@ (syntax-case stx () [(_ lang . body) (let ([e (annotate-top - (local-expand #`(module . #,(strip-context #`(n lang . body))) - 'top-level - null) + (syntax-local-introduce + (local-expand #`(module . #,(strip-context #`(n lang . body))) + 'top-level + null)) 0)]) (syntax-case e () [(mod nm lang (mb . body)) - #'(#%plain-module-begin + #`(#%plain-module-begin (require (only-in lang) errortrace/errortrace-key) . body)]))])) diff --git a/collects/r6rs/run.ss b/collects/r6rs/run.ss index 6db517a710..2b3b7c330e 100644 --- a/collects/r6rs/run.ss +++ b/collects/r6rs/run.ss @@ -202,6 +202,7 @@ (let ([code (get-module-code main #:source-reader r6rs-read-syntax)] [rpath (module-path-index-resolve (module-path-index-join main #f))]) - (parameterize ([current-module-declare-name rpath]) + (parameterize ([current-module-declare-name rpath] + [current-module-declare-source main]) (eval code)) (dynamic-require rpath #f))))]) diff --git a/collects/scheme/contract/private/base.ss b/collects/scheme/contract/private/base.ss index 13a89a2559..ef89bfcc1c 100644 --- a/collects/scheme/contract/private/base.ss +++ b/collects/scheme/contract/private/base.ss @@ -21,7 +21,7 @@ improve method arity mismatch contract violation error messages? "blame.ss") (define-syntax-parameter current-contract-region - (λ (stx) #'(quote-module-path))) + (λ (stx) #'(quote-module-source))) (define-syntax (contract stx) (syntax-case stx () diff --git a/collects/scheme/contract/private/legacy.ss b/collects/scheme/contract/private/legacy.ss index cb1c02482e..cdf7bee81d 100644 --- a/collects/scheme/contract/private/legacy.ss +++ b/collects/scheme/contract/private/legacy.ss @@ -96,15 +96,14 @@ ;; Other representations of blame are returned as-is. (define (unpack-blame blame) (if (variable-reference? blame) - (let ([rp (variable-reference->resolved-module-path blame)]) + (let ([resolved (variable-reference->module-source blame)]) (cond - [(not rp) + [(not resolved) 'top-level] [else - (let ([resolved (resolved-module-path-name rp)]) - (cond - [(symbol? resolved) `(quote ,resolved)] - [else `(file ,(path->string resolved))]))])) + (cond + [(symbol? resolved) `(quote ,resolved)] + [else `(file ,(path->string resolved))])])) blame)) (define (unpack-source info) diff --git a/collects/scheme/contract/private/provide.ss b/collects/scheme/contract/private/provide.ss index 41676a3895..24f02889fe 100644 --- a/collects/scheme/contract/private/provide.ss +++ b/collects/scheme/contract/private/provide.ss @@ -46,7 +46,7 @@ #`(contract contract-id id pos-module-source - (quote-module-path) + (quote-module-source) 'external-id (quote-srcloc id))))))]) (when key @@ -646,7 +646,7 @@ (with-syntax ([code (quasisyntax/loc stx (begin - (define pos-module-source (quote-module-path)) + (define pos-module-source (quote-module-source)) #,@(if no-need-to-check-ctrct? (list) diff --git a/collects/scribblings/reference/eval.scrbl b/collects/scribblings/reference/eval.scrbl index 868da20ba4..23a5713cd1 100644 --- a/collects/scribblings/reference/eval.scrbl +++ b/collects/scribblings/reference/eval.scrbl @@ -214,11 +214,12 @@ The protocol for a @tech{compiled-load handler} is the same as for the @tech{compiled-load handler} is expected to set @scheme[current-load-relative-directory] itself. The default @tech{compiled-load handler}, however, checks for a @filepath{.ss} -file when then given path ends with @filepath{.rkt} and no -@filepath{.rkt} file exists. In addition, the default -@tech{compiled-load handler} checks for @filepath{.zo} (bytecode) -files and @filepath{.so} (native Unix), @filepath{.dll} (native -Windows), or @filepath{.dylib} (native Mac OS X) files. +file when the given path ends with @filepath{.rkt}, no @filepath{.rkt} +file exists, and when the handler's second argument is a symbol. In +addition, the default @tech{compiled-load handler} checks for +@filepath{.zo} (bytecode) files and @filepath{.so} (native Unix), +@filepath{.dll} (native Windows), or @filepath{.dylib} (native Mac OS +X) files. The check for a compiled file occurs whenever the given path @scheme[_file] ends with any extension (e.g., @filepath{.rkt} or @@ -236,15 +237,22 @@ file is loaded only if its modification date is not older than the date for @scheme[_file]. If both @filepath{.zo} and @filepath{.so}/@filepath{.dll}/@filepath{.dylib} files are available, the @filepath{.so}/@filepath{.dll}/@filepath{.dylib} file is used. If -@scheme[_file] ends with @filepath{.rkt}, no such file exists, and a -@filepath{.ss} file exists, then @filepath{.zo} and +@scheme[_file] ends with @filepath{.rkt}, no such file exists, the +handler's second argument is a symbol, and a @filepath{.ss} file +exists, then @filepath{.zo} and @filepath{.so}/@filepath{.dll}/@filepath{.dylib} files are used only with names based on @scheme[_file] with its suffixed replaced by @filepath{.ss}. While a @filepath{.zo}, @filepath{.so}, @filepath{.dll}, or @filepath{.dylib} file is loaded, the current @scheme[load-relative] -directory is set to the directory of the original @scheme[_file]. +directory is set to the directory of the original @scheme[_file]. If +the file to be loaded has the suffix @filepath{.ss} while the +requested file has the suffix @filepath{.rkt}, then the +@scheme[current-module-declare-source] parameter is set to the full +path of the loaded file, otherwise the +@scheme[current-module-declare-source] parameter is set to +@scheme[#f]. If the original @scheme[_file] is loaded or a @filepath{.zo} variant is loaded, the @tech{load handler} is called to load the file. If any diff --git a/collects/scribblings/reference/module-reflect.scrbl b/collects/scribblings/reference/module-reflect.scrbl index c97904ecb1..3ee439bc7e 100644 --- a/collects/scribblings/reference/module-reflect.scrbl +++ b/collects/scribblings/reference/module-reflect.scrbl @@ -104,11 +104,13 @@ the table and the corresponding file is loaded with a variant of While loading a file, the default @tech{module name resolver} sets the @scheme[current-module-declare-name] parameter to the resolved module -name. Also, the default @tech{module name resolver} records in a -private @tech{continuation mark} the filename being loaded, and it -checks whether such a mark already exists; if such a continuation mark -does exist in the current continuation, then the @exnraise[exn:fail] -with a message about a dependency cycle. +name (while the @tech{compiled-load handler} sets +@scheme[current-module-declare-source]). Also, the default +@tech{module name resolver} records in a private @tech{continuation +mark} the module being loaded, and it checks whether such a mark +already exists; if such a continuation mark does exist in the current +continuation, then the @exnraise[exn:fail] with a message about a +dependency cycle. Module loading is suppressed (i.e., @scheme[#f] is supplied as a third argument to the module name resolver) when resolving module paths in @@ -134,6 +136,16 @@ a @scheme[module] declaration (when the parameter value is not declaration is ignored, and the parameter's value is used as the name of the declared module.} +@defparam[current-module-declare-source src (or/c symbol? (and/c path? complete-path?) #f)]{ + +A parameter that determines source information to be associated with a +module when evaluating a @scheme[module] declaration. Source +information is used in error messages and reflected by +@scheme[variable-reference->module-source]. When the parameter value +is @scheme[#f], the module's name (as determined by +@scheme[current-module-declare-name]) is used as the source name +instead of the parameter value.} + @;------------------------------------------------------------------------ @section[#:tag "modpathidx"]{Compiled Modules and References} diff --git a/collects/scribblings/reference/namespaces.scrbl b/collects/scribblings/reference/namespaces.scrbl index 57d412de56..313dfcad0b 100644 --- a/collects/scribblings/reference/namespaces.scrbl +++ b/collects/scribblings/reference/namespaces.scrbl @@ -377,6 +377,16 @@ result is a @tech{resolved module path} naming the module. If @scheme[varref] refers to a @tech{top-level variable}, then the result is @scheme[#f].} +@defproc[(variable-reference->module-source [varref variable-reference?]) + (or/c symbol? (and/c path? complete-path?) #f)]{ + +If @scheme[varref] refers to a @tech{module-level variable}, the +result is a path or symbol naming the module's source (which is +typically, but not always, the same as in the resolved module path). + +If @scheme[varref] refers to a @tech{top-level variable}, then the +result is @scheme[#f].} + @defproc[(variable-reference->phase [varref variable-reference?]) exact-nonnegative-integer?]{ diff --git a/collects/unstable/location.ss b/collects/unstable/location.ss index 75a46e39fc..20747356f5 100644 --- a/collects/unstable/location.ss +++ b/collects/unstable/location.ss @@ -9,6 +9,7 @@ quote-character-position quote-character-span quote-module-path + quote-module-source quote-module-name) (define-syntax (quote-srcloc stx) @@ -49,6 +50,9 @@ (define-syntax-rule (quote-module-path) (variable-reference->module-path (#%variable-reference))) +(define-syntax-rule (quote-module-source) + (variable-reference->module-src (#%variable-reference))) + (define (variable-reference->module-path var) (module-name->module-path (variable-reference->module-name var))) @@ -64,3 +68,7 @@ [(path? name) `(file ,(path->string name))] [(symbol? name) `(quote ,name)] [else 'top-level])) + +(define (variable-reference->module-src var) + (or (variable-reference->module-source var) + 'top-level)) diff --git a/collects/unstable/scribblings/srcloc.scrbl b/collects/unstable/scribblings/srcloc.scrbl index 551d9fd58c..06285898eb 100644 --- a/collects/unstable/scribblings/srcloc.scrbl +++ b/collects/unstable/scribblings/srcloc.scrbl @@ -1,5 +1,5 @@ #lang scribble/manual -@(require scribble/eval "utils.ss" (for-label scheme/base unstable/srcloc)) +@(require scribble/eval "utils.ss" (for-label scheme/base unstable/srcloc unstable/location)) @(define unsyntax #f) @@ -303,6 +303,14 @@ b } +@defform[(quote-module-source)]{ + +Like @scheme[quote-module-path], but for the enclosing module's source +name, rather than its module path. The module path and source name are +typically the same, but they can be different. For example, a source +file whose name ends with @filepath{.ss} corersponds to a resolved +module path ending with @filepath{.rkt}.} + @defform[(quote-module-name)]{ This form quotes the name (@tech[#:doc reference-path]{path} or @tech[#:doc diff --git a/src/mzscheme/include/scheme.h b/src/mzscheme/include/scheme.h index 1b48bb7c8d..6f1883eca8 100644 --- a/src/mzscheme/include/scheme.h +++ b/src/mzscheme/include/scheme.h @@ -1233,6 +1233,7 @@ enum { MZCONFIG_CURRENT_MODULE_RESOLVER, MZCONFIG_CURRENT_MODULE_NAME, + MZCONFIG_CURRENT_MODULE_SRC, MZCONFIG_ERROR_PRINT_SRCLOC, diff --git a/src/mzscheme/src/cstartup.inc b/src/mzscheme/src/cstartup.inc index 3e4ffd3ddd..c8eed3a4f6 100644 --- a/src/mzscheme/src/cstartup.inc +++ b/src/mzscheme/src/cstartup.inc @@ -1,736 +1,754 @@ { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,50,46,53,46,56,50,0,0,0,1,0,0,3,0,12,0, -16,0,21,0,28,0,41,0,48,0,53,0,58,0,62,0,69,0,72,0,78, -0,92,0,106,0,109,0,115,0,119,0,121,0,132,0,134,0,148,0,155,0, -177,0,179,0,193,0,4,1,33,1,44,1,55,1,65,1,101,1,134,1,167, -1,226,1,36,2,114,2,180,2,185,2,205,2,96,3,116,3,167,3,233,3, -118,4,4,5,56,5,79,5,158,5,0,0,105,7,0,0,29,11,11,68,104, -101,114,101,45,115,116,120,63,108,101,116,64,99,111,110,100,66,117,110,108,101, -115,115,72,112,97,114,97,109,101,116,101,114,105,122,101,66,100,101,102,105,110, -101,64,119,104,101,110,64,108,101,116,42,63,97,110,100,66,108,101,116,114,101, -99,62,111,114,65,113,117,111,116,101,29,94,2,13,68,35,37,107,101,114,110, -101,108,11,29,94,2,13,68,35,37,112,97,114,97,109,122,11,62,105,102,65, -98,101,103,105,110,63,115,116,120,61,115,70,108,101,116,45,118,97,108,117,101, -115,61,120,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,117,76,0,0,95,159,2,15,36,36,159,2,14,36,36,159,2, -14,36,36,16,20,2,3,2,1,2,5,2,1,2,7,2,1,2,6,2,1, -2,8,2,1,2,9,2,1,2,10,2,1,2,4,2,1,2,11,2,1,2, -12,2,1,97,37,11,8,240,117,76,0,0,93,159,2,14,36,37,16,2,2, -2,161,2,1,37,2,2,2,1,2,2,96,11,11,8,240,117,76,0,0,16, -0,96,38,11,8,240,117,76,0,0,16,0,13,16,4,36,29,11,11,2,1, -11,18,16,2,99,64,104,101,114,101,8,31,8,30,8,29,8,28,8,27,93, -8,224,124,76,0,0,95,9,8,224,124,76,0,0,2,1,27,248,22,143,4, -195,249,22,136,4,80,158,39,36,251,22,81,2,16,248,22,96,199,12,249,22, -71,2,17,248,22,98,201,27,248,22,143,4,195,249,22,136,4,80,158,39,36, -251,22,81,2,16,248,22,96,199,249,22,71,2,17,248,22,98,201,12,27,248, -22,73,248,22,143,4,196,28,248,22,79,193,20,15,159,37,36,37,28,248,22, -79,248,22,73,194,248,22,72,193,249,22,136,4,80,158,39,36,251,22,81,2, -16,248,22,72,199,249,22,71,2,10,248,22,73,201,11,18,16,2,101,10,8, -31,8,30,8,29,8,28,8,27,16,4,11,11,2,18,3,1,8,101,110,118, -49,50,55,51,54,16,4,11,11,2,19,3,1,8,101,110,118,49,50,55,51, -55,93,8,224,125,76,0,0,95,9,8,224,125,76,0,0,2,1,27,248,22, -73,248,22,143,4,196,28,248,22,79,193,20,15,159,37,36,37,28,248,22,79, -248,22,73,194,248,22,72,193,249,22,136,4,80,158,39,36,250,22,81,2,20, -248,22,81,249,22,81,248,22,81,2,21,248,22,72,201,251,22,81,2,16,2, -21,2,21,249,22,71,2,12,248,22,73,204,18,16,2,101,11,8,31,8,30, -8,29,8,28,8,27,16,4,11,11,2,18,3,1,8,101,110,118,49,50,55, -51,57,16,4,11,11,2,19,3,1,8,101,110,118,49,50,55,52,48,93,8, -224,126,76,0,0,95,9,8,224,126,76,0,0,2,1,248,22,143,4,193,27, -248,22,143,4,194,249,22,71,248,22,81,248,22,72,196,248,22,73,195,27,248, -22,73,248,22,143,4,23,197,1,249,22,136,4,80,158,39,36,28,248,22,56, -248,22,137,4,248,22,72,23,198,2,27,249,22,2,32,0,89,162,8,44,37, -43,9,222,33,39,248,22,143,4,248,22,96,23,200,2,250,22,81,2,22,248, -22,81,249,22,81,248,22,81,248,22,72,23,204,2,250,22,82,2,23,249,22, -2,22,72,23,204,2,248,22,98,23,206,2,249,22,71,248,22,72,23,202,1, -249,22,2,22,96,23,200,1,250,22,82,2,20,249,22,2,32,0,89,162,8, -44,37,47,9,222,33,40,248,22,143,4,248,22,72,201,248,22,73,198,27,248, -22,143,4,194,249,22,71,248,22,81,248,22,72,196,248,22,73,195,27,248,22, -73,248,22,143,4,23,197,1,249,22,136,4,80,158,39,36,250,22,82,2,22, -249,22,2,32,0,89,162,8,44,37,47,9,222,33,42,248,22,143,4,248,22, -72,201,248,22,73,198,27,248,22,73,248,22,143,4,196,27,248,22,143,4,248, -22,72,195,249,22,136,4,80,158,40,36,28,248,22,79,195,250,22,82,2,20, -9,248,22,73,199,250,22,81,2,3,248,22,81,248,22,72,199,250,22,82,2, -9,248,22,73,201,248,22,73,202,27,248,22,73,248,22,143,4,23,197,1,27, -249,22,1,22,85,249,22,2,22,143,4,248,22,143,4,248,22,72,199,249,22, -136,4,80,158,40,36,251,22,81,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,24,250,22,82,1,23,101,120, -116,101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110, -21,95,1,27,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107, -45,115,101,116,45,102,105,114,115,116,11,2,24,201,250,22,82,2,20,9,248, -22,73,203,27,248,22,73,248,22,143,4,196,28,248,22,79,193,20,15,159,37, -36,37,249,22,136,4,80,158,39,36,27,248,22,143,4,248,22,72,197,28,249, -22,176,8,62,61,62,248,22,137,4,248,22,96,196,250,22,81,2,20,248,22, -81,249,22,81,21,93,2,25,248,22,72,199,250,22,82,2,4,249,22,81,2, -25,249,22,81,248,22,105,203,2,25,248,22,73,202,251,22,81,2,16,28,249, -22,176,8,248,22,137,4,248,22,72,200,64,101,108,115,101,10,248,22,72,197, -250,22,82,2,20,9,248,22,73,200,249,22,71,2,4,248,22,73,202,100,8, -31,8,30,8,29,8,28,8,27,16,4,11,11,2,18,3,1,8,101,110,118, -49,50,55,54,50,16,4,11,11,2,19,3,1,8,101,110,118,49,50,55,54, -51,93,8,224,127,76,0,0,18,16,2,158,94,10,64,118,111,105,100,8,47, -95,9,8,224,127,76,0,0,2,1,27,248,22,73,248,22,143,4,196,249,22, -136,4,80,158,39,36,28,248,22,56,248,22,137,4,248,22,72,197,250,22,81, -2,26,248,22,81,248,22,72,199,248,22,96,198,27,248,22,137,4,248,22,72, -197,250,22,81,2,26,248,22,81,248,22,72,197,250,22,82,2,23,248,22,73, -199,248,22,73,202,159,36,20,105,159,36,16,1,11,16,0,83,158,42,20,103, -144,69,35,37,109,105,110,45,115,116,120,2,1,11,11,11,10,36,80,158,36, -36,20,105,159,36,16,0,16,0,16,1,2,2,37,16,0,36,16,0,36,11, -11,39,36,11,11,11,16,10,2,3,2,4,2,5,2,6,2,7,2,8,2, -9,2,10,2,11,2,12,16,10,11,11,11,11,11,11,11,11,11,11,16,10, -2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,36, -46,37,11,11,11,16,0,16,0,16,0,36,36,11,11,11,11,16,0,16,0, -16,0,36,36,16,11,16,5,2,2,20,15,159,36,36,36,36,20,105,159,36, -16,0,16,1,33,32,10,16,5,2,5,89,162,8,44,37,53,9,223,0,33, -33,36,20,105,159,36,16,1,2,2,16,0,11,16,5,2,8,89,162,8,44, -37,53,9,223,0,33,34,36,20,105,159,36,16,1,2,2,16,0,11,16,5, -2,10,89,162,8,44,37,53,9,223,0,33,35,36,20,105,159,36,16,1,2, -2,16,1,33,36,11,16,5,2,12,89,162,8,44,37,56,9,223,0,33,37, -36,20,105,159,36,16,1,2,2,16,1,33,38,11,16,5,2,3,89,162,8, -44,37,58,9,223,0,33,41,36,20,105,159,36,16,1,2,2,16,0,11,16, -5,2,11,89,162,8,44,37,53,9,223,0,33,43,36,20,105,159,36,16,1, -2,2,16,0,11,16,5,2,9,89,162,8,44,37,54,9,223,0,33,44,36, -20,105,159,36,16,1,2,2,16,0,11,16,5,2,6,89,162,8,44,37,55, -9,223,0,33,45,36,20,105,159,36,16,1,2,2,16,0,11,16,5,2,4, -89,162,8,44,37,58,9,223,0,33,46,36,20,105,159,36,16,1,2,2,16, -1,33,48,11,16,5,2,7,89,162,8,44,37,54,9,223,0,33,49,36,20, -105,159,36,16,1,2,2,16,0,11,16,0,94,2,14,2,15,93,2,14,9, -9,36,0}; - EVAL_ONE_SIZED_STR((char *)expr, 2018); + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,50,46,53,46,57,51,0,0,0,1,0,0,10,0,13,0, +22,0,26,0,31,0,38,0,51,0,58,0,63,0,68,0,72,0,79,0,82, +0,88,0,102,0,116,0,119,0,125,0,129,0,131,0,142,0,144,0,158,0, +165,0,187,0,189,0,203,0,14,1,43,1,54,1,65,1,75,1,111,1,144, +1,177,1,236,1,46,2,124,2,190,2,195,2,215,2,106,3,126,3,177,3, +243,3,128,4,14,5,66,5,89,5,168,5,0,0,109,7,0,0,69,35,37, +109,105,110,45,115,116,120,29,11,11,68,104,101,114,101,45,115,116,120,63,108, +101,116,64,99,111,110,100,66,117,110,108,101,115,115,72,112,97,114,97,109,101, +116,101,114,105,122,101,66,100,101,102,105,110,101,64,119,104,101,110,64,108,101, +116,42,63,97,110,100,66,108,101,116,114,101,99,62,111,114,65,113,117,111,116, +101,29,94,2,14,68,35,37,107,101,114,110,101,108,11,29,94,2,14,68,35, +37,112,97,114,97,109,122,11,62,105,102,65,98,101,103,105,110,63,115,116,120, +61,115,70,108,101,116,45,118,97,108,117,101,115,61,120,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,126,76,0,0,95, +159,2,16,36,36,159,2,15,36,36,159,2,15,36,36,16,20,2,4,2,2, +2,6,2,2,2,8,2,2,2,7,2,2,2,9,2,2,2,10,2,2,2, +11,2,2,2,5,2,2,2,12,2,2,2,13,2,2,97,37,11,8,240,126, +76,0,0,93,159,2,15,36,37,16,2,2,3,161,2,2,37,2,3,2,2, +2,3,96,11,11,8,240,126,76,0,0,16,0,96,38,11,8,240,126,76,0, +0,16,0,13,16,4,36,29,11,11,2,2,11,18,16,2,99,64,104,101,114, +101,8,32,8,31,8,30,8,29,8,28,93,8,224,133,76,0,0,95,9,8, +224,133,76,0,0,2,2,27,248,22,143,4,195,249,22,136,4,80,158,39,36, +251,22,81,2,17,248,22,96,199,12,249,22,71,2,18,248,22,98,201,27,248, +22,143,4,195,249,22,136,4,80,158,39,36,251,22,81,2,17,248,22,96,199, +249,22,71,2,18,248,22,98,201,12,27,248,22,73,248,22,143,4,196,28,248, +22,79,193,20,15,159,37,36,37,28,248,22,79,248,22,73,194,248,22,72,193, +249,22,136,4,80,158,39,36,251,22,81,2,17,248,22,72,199,249,22,71,2, +11,248,22,73,201,11,18,16,2,101,10,8,32,8,31,8,30,8,29,8,28, +16,4,11,11,2,19,3,1,8,101,110,118,49,50,55,52,57,16,4,11,11, +2,20,3,1,8,101,110,118,49,50,55,53,48,93,8,224,134,76,0,0,95, +9,8,224,134,76,0,0,2,2,27,248,22,73,248,22,143,4,196,28,248,22, +79,193,20,15,159,37,36,37,28,248,22,79,248,22,73,194,248,22,72,193,249, +22,136,4,80,158,39,36,250,22,81,2,21,248,22,81,249,22,81,248,22,81, +2,22,248,22,72,201,251,22,81,2,17,2,22,2,22,249,22,71,2,13,248, +22,73,204,18,16,2,101,11,8,32,8,31,8,30,8,29,8,28,16,4,11, +11,2,19,3,1,8,101,110,118,49,50,55,53,50,16,4,11,11,2,20,3, +1,8,101,110,118,49,50,55,53,51,93,8,224,135,76,0,0,95,9,8,224, +135,76,0,0,2,2,248,22,143,4,193,27,248,22,143,4,194,249,22,71,248, +22,81,248,22,72,196,248,22,73,195,27,248,22,73,248,22,143,4,23,197,1, +249,22,136,4,80,158,39,36,28,248,22,56,248,22,137,4,248,22,72,23,198, +2,27,249,22,2,32,0,89,162,8,44,37,43,9,222,33,40,248,22,143,4, +248,22,96,23,200,2,250,22,81,2,23,248,22,81,249,22,81,248,22,81,248, +22,72,23,204,2,250,22,82,2,24,249,22,2,22,72,23,204,2,248,22,98, +23,206,2,249,22,71,248,22,72,23,202,1,249,22,2,22,96,23,200,1,250, +22,82,2,21,249,22,2,32,0,89,162,8,44,37,47,9,222,33,41,248,22, +143,4,248,22,72,201,248,22,73,198,27,248,22,143,4,194,249,22,71,248,22, +81,248,22,72,196,248,22,73,195,27,248,22,73,248,22,143,4,23,197,1,249, +22,136,4,80,158,39,36,250,22,82,2,23,249,22,2,32,0,89,162,8,44, +37,47,9,222,33,43,248,22,143,4,248,22,72,201,248,22,73,198,27,248,22, +73,248,22,143,4,196,27,248,22,143,4,248,22,72,195,249,22,136,4,80,158, +40,36,28,248,22,79,195,250,22,82,2,21,9,248,22,73,199,250,22,81,2, +4,248,22,81,248,22,72,199,250,22,82,2,10,248,22,73,201,248,22,73,202, +27,248,22,73,248,22,143,4,23,197,1,27,249,22,1,22,85,249,22,2,22, +143,4,248,22,143,4,248,22,72,199,249,22,136,4,80,158,40,36,251,22,81, +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,25,250,22,82,1,23,101,120,116,101,110,100,45,112,97,114,97, +109,101,116,101,114,105,122,97,116,105,111,110,21,95,1,27,99,111,110,116,105, +110,117,97,116,105,111,110,45,109,97,114,107,45,115,101,116,45,102,105,114,115, +116,11,2,25,201,250,22,82,2,21,9,248,22,73,203,27,248,22,73,248,22, +143,4,196,28,248,22,79,193,20,15,159,37,36,37,249,22,136,4,80,158,39, +36,27,248,22,143,4,248,22,72,197,28,249,22,177,8,62,61,62,248,22,137, +4,248,22,96,196,250,22,81,2,21,248,22,81,249,22,81,21,93,2,26,248, +22,72,199,250,22,82,2,5,249,22,81,2,26,249,22,81,248,22,105,203,2, +26,248,22,73,202,251,22,81,2,17,28,249,22,177,8,248,22,137,4,248,22, +72,200,64,101,108,115,101,10,248,22,72,197,250,22,82,2,21,9,248,22,73, +200,249,22,71,2,5,248,22,73,202,100,8,32,8,31,8,30,8,29,8,28, +16,4,11,11,2,19,3,1,8,101,110,118,49,50,55,55,53,16,4,11,11, +2,20,3,1,8,101,110,118,49,50,55,55,54,93,8,224,136,76,0,0,18, +16,2,158,94,10,64,118,111,105,100,8,48,95,9,8,224,136,76,0,0,2, +2,27,248,22,73,248,22,143,4,196,249,22,136,4,80,158,39,36,28,248,22, +56,248,22,137,4,248,22,72,197,250,22,81,2,27,248,22,81,248,22,72,199, +248,22,96,198,27,248,22,137,4,248,22,72,197,250,22,81,2,27,248,22,81, +248,22,72,197,250,22,82,2,24,248,22,73,199,248,22,73,202,159,36,20,105, +159,36,16,1,11,16,0,83,158,42,20,103,145,2,1,2,1,2,2,11,11, +11,10,36,80,158,36,36,20,105,159,36,16,0,16,0,16,1,2,3,37,16, +0,36,16,0,36,11,11,39,36,11,11,11,16,10,2,4,2,5,2,6,2, +7,2,8,2,9,2,10,2,11,2,12,2,13,16,10,11,11,11,11,11,11, +11,11,11,11,16,10,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2, +11,2,12,2,13,36,46,37,11,11,11,16,0,16,0,16,0,36,36,11,11, +11,11,16,0,16,0,16,0,36,36,16,11,16,5,2,3,20,15,159,36,36, +36,36,20,105,159,36,16,0,16,1,33,33,10,16,5,2,6,89,162,8,44, +37,53,9,223,0,33,34,36,20,105,159,36,16,1,2,3,16,0,11,16,5, +2,9,89,162,8,44,37,53,9,223,0,33,35,36,20,105,159,36,16,1,2, +3,16,0,11,16,5,2,11,89,162,8,44,37,53,9,223,0,33,36,36,20, +105,159,36,16,1,2,3,16,1,33,37,11,16,5,2,13,89,162,8,44,37, +56,9,223,0,33,38,36,20,105,159,36,16,1,2,3,16,1,33,39,11,16, +5,2,4,89,162,8,44,37,58,9,223,0,33,42,36,20,105,159,36,16,1, +2,3,16,0,11,16,5,2,12,89,162,8,44,37,53,9,223,0,33,44,36, +20,105,159,36,16,1,2,3,16,0,11,16,5,2,10,89,162,8,44,37,54, +9,223,0,33,45,36,20,105,159,36,16,1,2,3,16,0,11,16,5,2,7, +89,162,8,44,37,55,9,223,0,33,46,36,20,105,159,36,16,1,2,3,16, +0,11,16,5,2,5,89,162,8,44,37,58,9,223,0,33,47,36,20,105,159, +36,16,1,2,3,16,1,33,49,11,16,5,2,8,89,162,8,44,37,54,9, +223,0,33,50,36,20,105,159,36,16,1,2,3,16,0,11,16,0,94,2,15, +2,16,93,2,15,9,9,36,0}; + EVAL_ONE_SIZED_STR((char *)expr, 2024); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,50,46,53,46,56,64,0,0,0,1,0,0,13,0,18,0, -35,0,50,0,68,0,84,0,94,0,112,0,132,0,148,0,166,0,197,0,226, -0,248,0,6,1,12,1,26,1,31,1,41,1,49,1,77,1,109,1,115,1, -160,1,205,1,229,1,12,2,14,2,180,2,14,4,55,4,128,5,214,5,44, -6,143,6,227,6,240,6,105,7,207,7,219,7,69,9,83,9,228,9,213,10, -195,11,202,11,210,11,218,11,87,12,101,12,86,14,188,14,210,14,226,14,174, -16,21,17,35,17,117,18,54,20,63,20,72,20,98,20,209,20,0,0,202,23, -0,0,72,112,97,116,104,45,115,116,114,105,110,103,63,64,98,115,98,115,76, -110,111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,74,45,99,104,101, -99,107,45,114,101,108,112,97,116,104,77,45,99,104,101,99,107,45,99,111,108, -108,101,99,116,105,111,110,75,99,111,108,108,101,99,116,105,111,110,45,112,97, -116,104,69,45,102,105,110,100,45,99,111,108,77,99,104,101,99,107,45,115,117, -102,102,105,120,45,99,97,108,108,79,112,97,116,104,45,114,101,112,108,97,99, -101,45,115,117,102,102,105,120,75,112,97,116,104,45,97,100,100,45,115,117,102, -102,105,120,77,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100, -1,29,102,105,110,100,45,108,105,98,114,97,114,121,45,99,111,108,108,101,99, -116,105,111,110,45,112,97,116,104,115,1,27,112,97,116,104,45,108,105,115,116, -45,115,116,114,105,110,103,45,62,112,97,116,104,45,108,105,115,116,1,20,102, -105,110,100,45,101,120,101,99,117,116,97,98,108,101,45,112,97,116,104,73,101, -109,98,101,100,100,101,100,45,108,111,97,100,65,113,117,111,116,101,29,94,2, -16,68,35,37,112,97,114,97,109,122,11,64,108,111,111,112,69,101,120,101,99, -45,102,105,108,101,67,119,105,110,100,111,119,115,6,25,25,112,97,116,104,32, -111,114,32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105,110,103,6, -29,29,126,97,58,32,105,110,118,97,108,105,100,32,114,101,108,97,116,105,118, -101,32,112,97,116,104,58,32,126,115,65,99,108,111,111,112,6,42,42,126,97, -58,32,99,111,108,108,101,99,116,105,111,110,32,110,111,116,32,102,111,117,110, -100,58,32,126,115,32,105,110,32,97,110,121,32,111,102,58,32,126,115,6,42, -42,112,97,116,104,32,40,102,111,114,32,97,110,121,32,115,121,115,116,101,109, -41,32,111,114,32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105,110, -103,6,21,21,115,116,114,105,110,103,32,111,114,32,98,121,116,101,32,115,116, -114,105,110,103,6,36,36,99,97,110,110,111,116,32,97,100,100,32,97,32,115, -117,102,102,105,120,32,116,111,32,97,32,114,111,111,116,32,112,97,116,104,58, -32,5,0,27,20,14,159,80,159,37,51,38,250,80,159,40,52,38,249,22,27, -11,80,159,42,51,38,22,145,13,10,248,22,168,5,23,196,2,28,248,22,165, -6,23,194,2,12,87,94,248,22,182,8,23,194,1,27,20,14,159,80,159,38, -51,38,250,80,159,41,52,38,249,22,27,11,80,159,43,51,38,22,145,13,10, -248,22,168,5,23,197,2,28,248,22,165,6,23,194,2,12,87,94,248,22,182, -8,23,194,1,27,20,14,159,80,159,39,51,38,250,80,159,42,52,38,249,22, -27,11,80,159,44,51,38,22,145,13,10,248,22,168,5,23,198,2,28,248,22, -165,6,23,194,2,12,87,94,248,22,182,8,23,194,1,248,80,159,40,54,37, -197,28,248,22,79,23,195,2,9,27,248,22,72,23,196,2,27,28,248,22,129, -14,23,195,2,23,194,1,28,248,22,128,14,23,195,2,249,22,130,14,23,196, -1,250,80,158,43,49,248,22,145,14,2,19,11,10,250,80,158,41,49,248,22, -145,14,2,19,23,197,1,10,28,23,193,2,249,22,71,248,22,132,14,249,22, -130,14,23,198,1,247,22,146,14,27,248,22,73,23,200,1,28,248,22,79,23, -194,2,9,27,248,22,72,23,195,2,27,28,248,22,129,14,23,195,2,23,194, -1,28,248,22,128,14,23,195,2,249,22,130,14,23,196,1,250,80,158,48,49, -248,22,145,14,2,19,11,10,250,80,158,46,49,248,22,145,14,2,19,23,197, -1,10,28,23,193,2,249,22,71,248,22,132,14,249,22,130,14,23,198,1,247, -22,146,14,248,80,159,46,53,37,248,22,73,23,199,1,87,94,23,193,1,248, -80,159,44,53,37,248,22,73,23,197,1,87,94,23,193,1,27,248,22,73,23, -198,1,28,248,22,79,23,194,2,9,27,248,22,72,23,195,2,27,28,248,22, -129,14,23,195,2,23,194,1,28,248,22,128,14,23,195,2,249,22,130,14,23, -196,1,250,80,158,46,49,248,22,145,14,2,19,11,10,250,80,158,44,49,248, -22,145,14,2,19,23,197,1,10,28,23,193,2,249,22,71,248,22,132,14,249, -22,130,14,23,198,1,247,22,146,14,248,80,159,44,53,37,248,22,73,23,199, -1,248,80,159,42,53,37,248,22,73,196,27,248,22,169,13,23,195,2,28,23, -193,2,192,87,94,23,193,1,28,248,22,170,6,23,195,2,27,248,22,191,13, -195,28,192,192,248,22,128,14,195,11,87,94,28,28,248,22,170,13,23,195,2, -10,28,248,22,169,13,23,195,2,10,28,248,22,170,6,23,195,2,28,248,22, -191,13,23,195,2,10,248,22,128,14,23,195,2,11,12,250,22,146,9,76,110, -111,114,109,97,108,45,112,97,116,104,45,99,97,115,101,6,42,42,112,97,116, -104,32,40,102,111,114,32,97,110,121,32,115,121,115,116,101,109,41,32,111,114, -32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105,110,103,23,197,2, -28,28,248,22,170,13,23,195,2,249,22,176,8,248,22,171,13,23,197,2,2, -20,249,22,176,8,247,22,189,7,2,20,27,28,248,22,170,6,23,196,2,23, -195,2,248,22,179,7,248,22,174,13,23,197,2,28,249,22,158,14,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,170,6,195,248,22,177,13,195,194,27,248,22,145,7,23,195, -1,249,22,178,13,248,22,182,7,250,22,164,14,0,6,35,114,120,34,47,34, -28,249,22,158,14,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,164,14,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,20,28,248,22,170,6,194,248,22,177, -13,194,193,87,94,28,28,248,22,169,13,23,195,2,10,28,248,22,170,6,23, -195,2,28,248,22,191,13,23,195,2,10,248,22,128,14,23,195,2,11,12,250, -22,146,9,23,196,2,2,21,23,197,2,28,248,22,191,13,23,195,2,12,248, -22,185,11,249,22,191,10,248,22,135,7,250,22,154,7,2,22,23,200,1,23, -201,1,247,22,23,87,94,28,28,248,22,169,13,23,195,2,10,28,248,22,170, -6,23,195,2,28,248,22,191,13,23,195,2,10,248,22,128,14,23,195,2,11, -12,250,22,146,9,23,196,2,2,21,23,197,2,28,248,22,191,13,23,195,2, -12,248,22,185,11,249,22,191,10,248,22,135,7,250,22,154,7,2,22,23,200, -1,23,201,1,247,22,23,87,94,87,94,28,28,248,22,169,13,23,195,2,10, -28,248,22,170,6,23,195,2,28,248,22,191,13,23,195,2,10,248,22,128,14, -23,195,2,11,12,250,22,146,9,195,2,21,23,197,2,28,248,22,191,13,23, -195,2,12,248,22,185,11,249,22,191,10,248,22,135,7,250,22,154,7,2,22, -199,23,201,1,247,22,23,249,22,3,89,162,8,44,37,50,9,223,2,33,34, -196,87,94,28,28,248,22,169,13,23,194,2,10,28,248,22,170,6,23,194,2, -28,248,22,191,13,23,194,2,10,248,22,128,14,23,194,2,11,12,250,22,146, -9,2,6,2,21,23,196,2,28,248,22,191,13,23,194,2,12,248,22,185,11, -249,22,191,10,248,22,135,7,250,22,154,7,2,22,2,6,23,200,1,247,22, -23,32,37,89,162,8,44,40,55,2,23,222,33,38,28,248,22,79,23,197,2, -87,94,23,196,1,248,22,185,11,249,22,160,11,251,22,154,7,2,24,2,6, -28,248,22,79,23,203,2,87,94,23,202,1,23,201,1,250,22,1,22,187,13, -23,204,1,23,205,1,23,200,1,247,22,23,27,249,22,187,13,248,22,72,23, -200,2,23,197,2,28,248,22,182,13,23,194,2,27,250,22,1,22,187,13,23, -197,1,199,28,248,22,182,13,193,192,251,2,37,198,199,200,248,22,73,202,251, -2,37,197,198,199,248,22,73,201,87,94,87,94,87,94,28,28,248,22,169,13, -193,10,28,248,22,170,6,193,28,248,22,191,13,193,10,248,22,128,14,193,11, -12,250,22,146,9,2,6,2,21,195,28,248,22,191,13,193,12,248,22,185,11, -249,22,191,10,248,22,135,7,250,22,154,7,2,22,2,6,199,247,22,23,249, -22,3,32,0,89,162,8,44,37,49,9,222,33,36,195,27,247,22,147,14,251, -2,37,196,197,198,196,32,40,89,162,44,42,59,2,23,222,33,41,28,248,22, -79,23,199,2,87,94,23,198,1,248,23,196,1,251,22,154,7,2,24,23,199, -1,28,248,22,79,23,203,2,87,94,23,202,1,23,201,1,250,22,1,22,187, -13,23,204,1,23,205,1,23,198,1,27,249,22,187,13,248,22,72,23,202,2, -23,199,2,28,248,22,182,13,23,194,2,27,250,22,1,22,187,13,23,197,1, -23,202,2,28,248,22,182,13,23,194,2,192,87,94,23,193,1,27,248,22,73, -23,202,1,28,248,22,79,23,194,2,87,94,23,193,1,248,23,199,1,251,22, -154,7,2,24,23,202,1,28,248,22,79,23,206,2,87,94,23,205,1,23,204, -1,250,22,1,22,187,13,23,207,1,23,208,1,23,201,1,27,249,22,187,13, -248,22,72,23,197,2,23,202,2,28,248,22,182,13,23,194,2,27,250,22,1, -22,187,13,23,197,1,204,28,248,22,182,13,193,192,253,2,40,203,204,205,206, -23,15,248,22,73,201,253,2,40,202,203,204,205,206,248,22,73,200,87,94,23, -193,1,27,248,22,73,23,201,1,28,248,22,79,23,194,2,87,94,23,193,1, -248,23,198,1,251,22,154,7,2,24,23,201,1,28,248,22,79,23,205,2,87, -94,23,204,1,23,203,1,250,22,1,22,187,13,23,206,1,23,207,1,23,200, -1,27,249,22,187,13,248,22,72,23,197,2,23,201,2,28,248,22,182,13,23, -194,2,27,250,22,1,22,187,13,23,197,1,203,28,248,22,182,13,193,192,253, -2,40,202,203,204,205,206,248,22,73,201,253,2,40,201,202,203,204,205,248,22, -73,200,27,247,22,147,14,253,2,40,198,199,200,201,202,198,87,95,28,28,248, -22,170,13,23,194,2,10,28,248,22,169,13,23,194,2,10,28,248,22,170,6, -23,194,2,28,248,22,191,13,23,194,2,10,248,22,128,14,23,194,2,11,12, -252,22,146,9,23,200,2,2,25,36,23,198,2,23,199,2,28,28,248,22,170, -6,23,195,2,10,248,22,158,7,23,195,2,87,94,23,194,1,12,252,22,146, -9,23,200,2,2,26,37,23,198,2,23,199,1,91,159,39,11,90,161,39,36, -11,248,22,190,13,23,197,2,87,94,23,195,1,87,94,28,192,12,250,22,147, -9,23,201,1,2,27,23,199,1,249,22,7,194,195,91,159,38,11,90,161,38, -36,11,87,95,28,28,248,22,170,13,23,196,2,10,28,248,22,169,13,23,196, -2,10,28,248,22,170,6,23,196,2,28,248,22,191,13,23,196,2,10,248,22, -128,14,23,196,2,11,12,252,22,146,9,2,9,2,25,36,23,200,2,23,201, -2,28,28,248,22,170,6,23,197,2,10,248,22,158,7,23,197,2,12,252,22, -146,9,2,9,2,26,37,23,200,2,23,201,2,91,159,39,11,90,161,39,36, -11,248,22,190,13,23,199,2,87,94,23,195,1,87,94,28,192,12,250,22,147, -9,2,9,2,27,23,201,2,249,22,7,194,195,27,249,22,179,13,250,22,163, -14,0,20,35,114,120,35,34,40,63,58,91,46,93,91,94,46,93,42,124,41, -36,34,248,22,175,13,23,201,1,28,248,22,170,6,23,203,2,249,22,182,7, -23,204,1,8,63,23,202,1,28,248,22,170,13,23,199,2,248,22,171,13,23, -199,1,87,94,23,198,1,247,22,172,13,28,248,22,169,13,194,249,22,187,13, -195,194,192,91,159,38,11,90,161,38,36,11,87,95,28,28,248,22,170,13,23, -196,2,10,28,248,22,169,13,23,196,2,10,28,248,22,170,6,23,196,2,28, -248,22,191,13,23,196,2,10,248,22,128,14,23,196,2,11,12,252,22,146,9, -2,10,2,25,36,23,200,2,23,201,2,28,28,248,22,170,6,23,197,2,10, -248,22,158,7,23,197,2,12,252,22,146,9,2,10,2,26,37,23,200,2,23, -201,2,91,159,39,11,90,161,39,36,11,248,22,190,13,23,199,2,87,94,23, -195,1,87,94,28,192,12,250,22,147,9,2,10,2,27,23,201,2,249,22,7, -194,195,27,249,22,179,13,249,22,168,7,250,22,164,14,0,9,35,114,120,35, -34,91,46,93,34,248,22,175,13,23,203,1,6,1,1,95,28,248,22,170,6, -23,202,2,249,22,182,7,23,203,1,8,63,23,201,1,28,248,22,170,13,23, -199,2,248,22,171,13,23,199,1,87,94,23,198,1,247,22,172,13,28,248,22, -169,13,194,249,22,187,13,195,194,192,249,247,22,137,5,194,11,249,80,159,38, -47,37,9,9,249,80,159,38,47,37,195,9,27,247,22,149,14,249,80,158,39, -48,28,23,195,2,27,248,22,187,7,6,11,11,80,76,84,67,79,76,76,69, -67,84,83,28,192,192,6,0,0,6,0,0,27,28,23,196,1,250,22,187,13, -248,22,145,14,69,97,100,100,111,110,45,100,105,114,247,22,185,7,6,8,8, -99,111,108,108,101,99,116,115,11,27,248,80,159,42,53,37,250,22,85,23,203, -1,248,22,81,248,22,145,14,72,99,111,108,108,101,99,116,115,45,100,105,114, -23,204,1,28,193,249,22,71,195,194,192,32,50,89,162,8,44,39,8,31,2, -18,222,33,51,27,249,22,156,14,23,197,2,23,198,2,28,23,193,2,87,94, -23,196,1,27,248,22,96,23,195,2,27,27,248,22,105,23,197,1,27,249,22, -156,14,23,201,2,23,196,2,28,23,193,2,87,94,23,194,1,27,248,22,96, -23,195,2,27,27,248,22,105,23,197,1,27,249,22,156,14,23,205,2,23,196, -2,28,23,193,2,87,94,23,194,1,27,248,22,96,23,195,2,27,27,248,22, -105,23,197,1,27,249,22,156,14,23,209,2,23,196,2,28,23,193,2,87,94, -23,194,1,27,248,22,96,23,195,2,27,27,248,22,105,23,197,1,27,249,22, -156,14,23,213,2,23,196,2,28,23,193,2,87,94,23,194,1,27,248,22,96, -23,195,2,27,250,2,50,23,215,2,23,216,1,248,22,105,23,199,1,28,249, -22,164,7,23,196,2,2,28,249,22,85,23,214,2,194,249,22,71,248,22,178, -13,23,197,1,194,87,95,23,211,1,23,193,1,28,249,22,164,7,23,196,2, -2,28,249,22,85,23,212,2,9,249,22,71,248,22,178,13,23,197,1,9,28, -249,22,164,7,23,196,2,2,28,249,22,85,23,210,2,194,249,22,71,248,22, -178,13,23,197,1,194,87,94,23,193,1,28,249,22,164,7,23,196,2,2,28, -249,22,85,23,208,2,9,249,22,71,248,22,178,13,23,197,1,9,28,249,22, -164,7,23,196,2,2,28,249,22,85,23,206,2,194,249,22,71,248,22,178,13, -23,197,1,194,87,94,23,193,1,28,249,22,164,7,23,196,2,2,28,249,22, -85,23,204,2,9,249,22,71,248,22,178,13,23,197,1,9,28,249,22,164,7, -23,196,2,2,28,249,22,85,23,202,2,194,249,22,71,248,22,178,13,23,197, -1,194,87,94,23,193,1,28,249,22,164,7,23,196,2,2,28,249,22,85,23, -200,2,9,249,22,71,248,22,178,13,23,197,1,9,28,249,22,164,7,23,196, -2,2,28,249,22,85,197,194,87,94,23,196,1,249,22,71,248,22,178,13,23, -197,1,194,87,94,23,193,1,28,249,22,164,7,23,198,2,2,28,249,22,85, -195,9,87,94,23,194,1,249,22,71,248,22,178,13,23,199,1,9,87,95,28, -28,248,22,158,7,194,10,248,22,170,6,194,12,250,22,146,9,2,13,6,21, -21,98,121,116,101,32,115,116,114,105,110,103,32,111,114,32,115,116,114,105,110, -103,196,28,28,248,22,80,195,249,22,4,22,169,13,196,11,12,250,22,146,9, -2,13,6,13,13,108,105,115,116,32,111,102,32,112,97,116,104,115,197,250,2, -50,197,195,28,248,22,170,6,197,248,22,181,7,197,196,32,53,89,162,8,44, -39,53,70,102,111,117,110,100,45,101,120,101,99,222,33,56,32,54,89,162,8, -44,40,58,64,110,101,120,116,222,33,55,27,248,22,131,14,23,196,2,28,249, -22,178,8,23,195,2,23,197,1,11,28,248,22,191,13,23,194,2,27,249,22, -187,13,23,197,1,23,196,1,28,23,197,2,91,159,39,11,90,161,39,36,11, -248,22,190,13,23,197,2,87,95,23,195,1,23,194,1,27,28,23,202,2,27, -248,22,131,14,23,199,2,28,249,22,178,8,23,195,2,23,200,2,11,28,248, -22,191,13,23,194,2,250,2,53,23,205,2,23,206,2,249,22,187,13,23,200, -2,23,198,1,250,2,53,23,205,2,23,206,2,23,196,1,11,28,23,193,2, -192,87,94,23,193,1,27,28,248,22,169,13,23,196,2,27,249,22,187,13,23, -198,2,23,205,2,28,28,248,22,182,13,193,10,248,22,181,13,193,192,11,11, -28,23,193,2,192,87,94,23,193,1,28,23,203,2,11,27,248,22,131,14,23, -200,2,28,249,22,178,8,23,195,2,23,201,1,11,28,248,22,191,13,23,194, -2,250,2,53,23,206,1,23,207,1,249,22,187,13,23,201,1,23,198,1,250, -2,53,205,206,195,192,87,94,23,194,1,28,23,196,2,91,159,39,11,90,161, -39,36,11,248,22,190,13,23,197,2,87,95,23,195,1,23,194,1,27,28,23, -201,2,27,248,22,131,14,23,199,2,28,249,22,178,8,23,195,2,23,200,2, -11,28,248,22,191,13,23,194,2,250,2,53,23,204,2,23,205,2,249,22,187, -13,23,200,2,23,198,1,250,2,53,23,204,2,23,205,2,23,196,1,11,28, -23,193,2,192,87,94,23,193,1,27,28,248,22,169,13,23,196,2,27,249,22, -187,13,23,198,2,23,204,2,28,28,248,22,182,13,193,10,248,22,181,13,193, -192,11,11,28,23,193,2,192,87,94,23,193,1,28,23,202,2,11,27,248,22, -131,14,23,200,2,28,249,22,178,8,23,195,2,23,201,1,11,28,248,22,191, -13,23,194,2,250,2,53,23,205,1,23,206,1,249,22,187,13,23,201,1,23, -198,1,250,2,53,204,205,195,192,28,23,193,2,91,159,39,11,90,161,39,36, -11,248,22,190,13,23,199,2,87,95,23,195,1,23,194,1,27,28,23,198,2, -251,2,54,23,198,2,23,203,2,23,201,2,23,202,2,11,28,23,193,2,192, -87,94,23,193,1,27,28,248,22,169,13,195,27,249,22,187,13,197,200,28,28, -248,22,182,13,193,10,248,22,181,13,193,192,11,11,28,192,192,28,198,11,251, -2,54,198,203,201,202,194,32,57,89,162,8,44,40,8,31,2,18,222,33,58, -28,248,22,79,23,197,2,11,27,248,22,130,14,248,22,72,23,199,2,27,249, -22,187,13,23,196,1,23,197,2,28,248,22,181,13,23,194,2,250,2,53,198, -199,195,87,94,23,193,1,27,248,22,73,23,200,1,28,248,22,79,23,194,2, -11,27,248,22,130,14,248,22,72,23,196,2,27,249,22,187,13,23,196,1,23, -200,2,28,248,22,181,13,23,194,2,250,2,53,201,202,195,87,94,23,193,1, -27,248,22,73,23,197,1,28,248,22,79,23,194,2,11,27,248,22,130,14,248, -22,72,23,196,2,27,249,22,187,13,23,196,1,23,203,2,28,248,22,181,13, -23,194,2,250,2,53,204,205,195,87,94,23,193,1,27,248,22,73,23,197,1, -28,248,22,79,23,194,2,11,27,248,22,130,14,248,22,72,23,196,2,27,249, -22,187,13,23,196,1,23,206,2,28,248,22,181,13,23,194,2,250,2,53,23, -15,23,16,195,87,94,23,193,1,27,248,22,73,23,197,1,28,248,22,79,23, -194,2,11,27,248,22,130,14,248,22,72,23,196,2,27,249,22,187,13,23,196, -1,23,209,2,28,248,22,181,13,23,194,2,250,2,53,23,18,23,19,195,87, -94,23,193,1,27,248,22,73,23,197,1,28,248,22,79,23,194,2,11,27,248, -22,130,14,248,22,72,195,27,249,22,187,13,23,196,1,23,19,28,248,22,181, -13,193,250,2,53,23,21,23,22,195,251,2,57,23,21,23,22,23,23,248,22, -73,199,87,95,28,28,248,22,169,13,23,195,2,10,28,248,22,170,6,23,195, -2,28,248,22,191,13,23,195,2,10,248,22,128,14,23,195,2,11,12,250,22, -146,9,2,14,6,25,25,112,97,116,104,32,111,114,32,115,116,114,105,110,103, -32,40,115,97,110,115,32,110,117,108,41,23,197,2,28,28,23,195,2,28,28, -248,22,169,13,23,196,2,10,28,248,22,170,6,23,196,2,28,248,22,191,13, -23,196,2,10,248,22,128,14,23,196,2,11,248,22,191,13,23,196,2,11,10, -12,250,22,146,9,2,14,6,29,29,35,102,32,111,114,32,114,101,108,97,116, -105,118,101,32,112,97,116,104,32,111,114,32,115,116,114,105,110,103,23,198,2, -28,28,248,22,191,13,23,195,2,91,159,39,11,90,161,39,36,11,248,22,190, -13,23,198,2,249,22,176,8,194,68,114,101,108,97,116,105,118,101,11,27,248, -22,187,7,6,4,4,80,65,84,72,27,28,23,194,2,27,249,80,159,41,48, -38,23,197,1,9,28,249,22,176,8,247,22,189,7,2,20,249,22,71,248,22, -178,13,5,1,46,194,192,87,94,23,194,1,9,28,248,22,79,23,194,2,11, -27,248,22,130,14,248,22,72,23,196,2,27,249,22,187,13,23,196,1,23,200, -2,28,248,22,181,13,23,194,2,250,2,53,201,202,195,87,94,23,193,1,27, -248,22,73,23,197,1,28,248,22,79,23,194,2,11,27,248,22,130,14,248,22, -72,23,196,2,27,249,22,187,13,23,196,1,23,203,2,28,248,22,181,13,23, -194,2,250,2,53,204,205,195,87,94,23,193,1,27,248,22,73,23,197,1,28, -248,22,79,23,194,2,11,27,248,22,130,14,248,22,72,195,27,249,22,187,13, -23,196,1,205,28,248,22,181,13,193,250,2,53,23,15,23,16,195,251,2,57, -23,15,23,16,23,17,248,22,73,199,27,248,22,130,14,23,196,1,28,248,22, -181,13,193,250,2,53,198,199,195,11,250,80,159,39,49,37,196,197,11,250,80, -159,39,49,37,196,11,11,87,94,249,22,161,6,247,22,133,5,195,248,22,187, -5,249,22,180,3,36,249,22,164,3,197,198,27,28,23,197,2,87,95,23,196, -1,23,195,1,23,197,1,87,94,23,197,1,27,248,22,145,14,2,19,27,249, -80,159,41,49,37,23,196,1,11,27,27,248,22,183,3,23,200,1,28,192,192, -36,27,27,248,22,183,3,23,202,1,28,192,192,36,249,22,164,5,23,197,1, -83,158,40,20,100,95,89,162,8,44,36,48,9,224,3,2,33,62,23,195,1, -23,196,1,27,248,22,149,5,23,195,1,248,80,159,39,54,37,193,159,36,20, -105,159,36,16,1,11,16,0,83,158,42,20,103,144,67,35,37,117,116,105,108, -115,29,11,11,11,11,11,10,43,80,158,36,36,20,105,159,38,16,17,2,1, -2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2, -12,2,13,2,14,2,15,30,2,17,1,20,112,97,114,97,109,101,116,101,114, -105,122,97,116,105,111,110,45,107,101,121,4,30,2,17,1,23,101,120,116,101, -110,100,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,3,16, -0,16,0,36,16,0,36,16,4,2,5,2,4,2,2,2,8,40,11,11,39, -36,11,11,11,16,11,2,7,2,6,2,15,2,14,2,12,2,11,2,3,2, -10,2,13,2,9,2,1,16,11,11,11,11,11,11,11,11,11,11,11,11,16, -11,2,7,2,6,2,15,2,14,2,12,2,11,2,3,2,10,2,13,2,9, -2,1,47,47,37,11,11,11,16,0,16,0,16,0,36,36,11,11,11,11,16, -0,16,0,16,0,36,36,16,0,16,17,83,158,36,16,2,89,162,8,44,37, -51,2,18,223,0,33,29,80,159,36,54,37,83,158,36,16,2,89,162,8,44, -37,56,2,18,223,0,33,30,80,159,36,53,37,83,158,36,16,2,32,0,89, -162,44,37,45,2,1,222,33,31,80,159,36,36,37,83,158,36,16,2,249,22, -172,6,7,92,7,92,80,159,36,37,37,83,158,36,16,2,89,162,44,37,54, -2,3,223,0,33,32,80,159,36,38,37,83,158,36,16,2,32,0,89,162,8, -44,38,50,2,4,222,33,33,80,159,36,39,37,83,158,36,16,2,32,0,89, -162,8,44,39,51,2,5,222,33,35,80,159,36,40,37,83,158,36,16,2,32, -0,89,162,8,45,38,50,2,6,222,33,39,80,159,36,41,37,83,158,36,16, -2,32,0,89,162,44,40,52,2,7,222,33,42,80,159,36,42,37,83,158,36, -16,2,32,0,89,162,44,39,50,2,8,222,33,43,80,159,36,43,37,83,158, -36,16,2,32,0,89,162,44,38,53,2,9,222,33,44,80,159,36,44,37,83, -158,36,16,2,32,0,89,162,44,38,54,2,10,222,33,45,80,159,36,45,37, -83,158,36,16,2,32,0,89,162,44,37,44,2,11,222,33,46,80,159,36,46, -37,83,158,36,16,2,83,158,39,20,99,96,2,12,89,162,44,36,44,9,223, -0,33,47,89,162,44,37,45,9,223,0,33,48,89,162,44,38,55,9,223,0, -33,49,80,159,36,47,37,83,158,36,16,2,27,248,22,152,14,248,22,181,7, -27,28,249,22,176,8,247,22,189,7,2,20,6,1,1,59,6,1,1,58,250, -22,154,7,6,14,14,40,91,94,126,97,93,42,41,126,97,40,46,42,41,23, -196,2,23,196,1,89,162,8,44,38,48,2,13,223,0,33,52,80,159,36,48, -37,83,158,36,16,2,83,158,39,20,99,96,2,14,89,162,8,44,39,8,24, -9,223,0,33,59,89,162,44,38,47,9,223,0,33,60,89,162,44,37,46,9, -223,0,33,61,80,159,36,49,37,83,158,36,16,2,89,162,8,44,39,52,2, -15,223,0,33,63,80,159,36,50,37,94,29,94,2,16,68,35,37,107,101,114, -110,101,108,11,29,94,2,16,69,35,37,109,105,110,45,115,116,120,11,9,9, -9,36,0}; - EVAL_ONE_SIZED_STR((char *)expr, 6239); + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,50,46,53,46,57,65,0,0,0,1,0,0,8,0,21,0, +26,0,43,0,58,0,76,0,92,0,102,0,120,0,140,0,156,0,174,0,205, +0,234,0,0,1,14,1,20,1,34,1,39,1,49,1,57,1,85,1,117,1, +123,1,168,1,213,1,237,1,20,2,22,2,188,2,22,4,63,4,136,5,222, +5,52,6,151,6,235,6,248,6,113,7,215,7,227,7,77,9,91,9,236,9, +221,10,203,11,210,11,218,11,226,11,95,12,109,12,94,14,196,14,218,14,234, +14,182,16,29,17,43,17,125,18,62,20,71,20,80,20,106,20,217,20,0,0, +206,23,0,0,67,35,37,117,116,105,108,115,72,112,97,116,104,45,115,116,114, +105,110,103,63,64,98,115,98,115,76,110,111,114,109,97,108,45,99,97,115,101, +45,112,97,116,104,74,45,99,104,101,99,107,45,114,101,108,112,97,116,104,77, +45,99,104,101,99,107,45,99,111,108,108,101,99,116,105,111,110,75,99,111,108, +108,101,99,116,105,111,110,45,112,97,116,104,69,45,102,105,110,100,45,99,111, +108,77,99,104,101,99,107,45,115,117,102,102,105,120,45,99,97,108,108,79,112, +97,116,104,45,114,101,112,108,97,99,101,45,115,117,102,102,105,120,75,112,97, +116,104,45,97,100,100,45,115,117,102,102,105,120,77,108,111,97,100,47,117,115, +101,45,99,111,109,112,105,108,101,100,1,29,102,105,110,100,45,108,105,98,114, +97,114,121,45,99,111,108,108,101,99,116,105,111,110,45,112,97,116,104,115,1, +27,112,97,116,104,45,108,105,115,116,45,115,116,114,105,110,103,45,62,112,97, +116,104,45,108,105,115,116,1,20,102,105,110,100,45,101,120,101,99,117,116,97, +98,108,101,45,112,97,116,104,73,101,109,98,101,100,100,101,100,45,108,111,97, +100,65,113,117,111,116,101,29,94,2,17,68,35,37,112,97,114,97,109,122,11, +64,108,111,111,112,69,101,120,101,99,45,102,105,108,101,67,119,105,110,100,111, +119,115,6,25,25,112,97,116,104,32,111,114,32,118,97,108,105,100,45,112,97, +116,104,32,115,116,114,105,110,103,6,29,29,126,97,58,32,105,110,118,97,108, +105,100,32,114,101,108,97,116,105,118,101,32,112,97,116,104,58,32,126,115,65, +99,108,111,111,112,6,42,42,126,97,58,32,99,111,108,108,101,99,116,105,111, +110,32,110,111,116,32,102,111,117,110,100,58,32,126,115,32,105,110,32,97,110, +121,32,111,102,58,32,126,115,6,42,42,112,97,116,104,32,40,102,111,114,32, +97,110,121,32,115,121,115,116,101,109,41,32,111,114,32,118,97,108,105,100,45, +112,97,116,104,32,115,116,114,105,110,103,6,21,21,115,116,114,105,110,103,32, +111,114,32,98,121,116,101,32,115,116,114,105,110,103,6,36,36,99,97,110,110, +111,116,32,97,100,100,32,97,32,115,117,102,102,105,120,32,116,111,32,97,32, +114,111,111,116,32,112,97,116,104,58,32,5,0,27,20,14,159,80,159,37,51, +38,250,80,159,40,52,38,249,22,27,11,80,159,42,51,38,22,146,13,10,248, +22,169,5,23,196,2,28,248,22,166,6,23,194,2,12,87,94,248,22,183,8, +23,194,1,27,20,14,159,80,159,38,51,38,250,80,159,41,52,38,249,22,27, +11,80,159,43,51,38,22,146,13,10,248,22,169,5,23,197,2,28,248,22,166, +6,23,194,2,12,87,94,248,22,183,8,23,194,1,27,20,14,159,80,159,39, +51,38,250,80,159,42,52,38,249,22,27,11,80,159,44,51,38,22,146,13,10, +248,22,169,5,23,198,2,28,248,22,166,6,23,194,2,12,87,94,248,22,183, +8,23,194,1,248,80,159,40,54,37,197,28,248,22,79,23,195,2,9,27,248, +22,72,23,196,2,27,28,248,22,130,14,23,195,2,23,194,1,28,248,22,129, +14,23,195,2,249,22,131,14,23,196,1,250,80,158,43,49,248,22,146,14,2, +20,11,10,250,80,158,41,49,248,22,146,14,2,20,23,197,1,10,28,23,193, +2,249,22,71,248,22,133,14,249,22,131,14,23,198,1,247,22,147,14,27,248, +22,73,23,200,1,28,248,22,79,23,194,2,9,27,248,22,72,23,195,2,27, +28,248,22,130,14,23,195,2,23,194,1,28,248,22,129,14,23,195,2,249,22, +131,14,23,196,1,250,80,158,48,49,248,22,146,14,2,20,11,10,250,80,158, +46,49,248,22,146,14,2,20,23,197,1,10,28,23,193,2,249,22,71,248,22, +133,14,249,22,131,14,23,198,1,247,22,147,14,248,80,159,46,53,37,248,22, +73,23,199,1,87,94,23,193,1,248,80,159,44,53,37,248,22,73,23,197,1, +87,94,23,193,1,27,248,22,73,23,198,1,28,248,22,79,23,194,2,9,27, +248,22,72,23,195,2,27,28,248,22,130,14,23,195,2,23,194,1,28,248,22, +129,14,23,195,2,249,22,131,14,23,196,1,250,80,158,46,49,248,22,146,14, +2,20,11,10,250,80,158,44,49,248,22,146,14,2,20,23,197,1,10,28,23, +193,2,249,22,71,248,22,133,14,249,22,131,14,23,198,1,247,22,147,14,248, +80,159,44,53,37,248,22,73,23,199,1,248,80,159,42,53,37,248,22,73,196, +27,248,22,170,13,23,195,2,28,23,193,2,192,87,94,23,193,1,28,248,22, +171,6,23,195,2,27,248,22,128,14,195,28,192,192,248,22,129,14,195,11,87, +94,28,28,248,22,171,13,23,195,2,10,28,248,22,170,13,23,195,2,10,28, +248,22,171,6,23,195,2,28,248,22,128,14,23,195,2,10,248,22,129,14,23, +195,2,11,12,250,22,147,9,76,110,111,114,109,97,108,45,112,97,116,104,45, +99,97,115,101,6,42,42,112,97,116,104,32,40,102,111,114,32,97,110,121,32, +115,121,115,116,101,109,41,32,111,114,32,118,97,108,105,100,45,112,97,116,104, +32,115,116,114,105,110,103,23,197,2,28,28,248,22,171,13,23,195,2,249,22, +177,8,248,22,172,13,23,197,2,2,21,249,22,177,8,247,22,190,7,2,21, +27,28,248,22,171,6,23,196,2,23,195,2,248,22,180,7,248,22,175,13,23, +197,2,28,249,22,159,14,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,171,6,195,248,22,178, +13,195,194,27,248,22,146,7,23,195,1,249,22,179,13,248,22,183,7,250,22, +165,14,0,6,35,114,120,34,47,34,28,249,22,159,14,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,165,14,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, +21,28,248,22,171,6,194,248,22,178,13,194,193,87,94,28,28,248,22,170,13, +23,195,2,10,28,248,22,171,6,23,195,2,28,248,22,128,14,23,195,2,10, +248,22,129,14,23,195,2,11,12,250,22,147,9,23,196,2,2,22,23,197,2, +28,248,22,128,14,23,195,2,12,248,22,186,11,249,22,128,11,248,22,136,7, +250,22,155,7,2,23,23,200,1,23,201,1,247,22,23,87,94,28,28,248,22, +170,13,23,195,2,10,28,248,22,171,6,23,195,2,28,248,22,128,14,23,195, +2,10,248,22,129,14,23,195,2,11,12,250,22,147,9,23,196,2,2,22,23, +197,2,28,248,22,128,14,23,195,2,12,248,22,186,11,249,22,128,11,248,22, +136,7,250,22,155,7,2,23,23,200,1,23,201,1,247,22,23,87,94,87,94, +28,28,248,22,170,13,23,195,2,10,28,248,22,171,6,23,195,2,28,248,22, +128,14,23,195,2,10,248,22,129,14,23,195,2,11,12,250,22,147,9,195,2, +22,23,197,2,28,248,22,128,14,23,195,2,12,248,22,186,11,249,22,128,11, +248,22,136,7,250,22,155,7,2,23,199,23,201,1,247,22,23,249,22,3,89, +162,8,44,37,50,9,223,2,33,35,196,87,94,28,28,248,22,170,13,23,194, +2,10,28,248,22,171,6,23,194,2,28,248,22,128,14,23,194,2,10,248,22, +129,14,23,194,2,11,12,250,22,147,9,2,7,2,22,23,196,2,28,248,22, +128,14,23,194,2,12,248,22,186,11,249,22,128,11,248,22,136,7,250,22,155, +7,2,23,2,7,23,200,1,247,22,23,32,38,89,162,8,44,40,55,2,24, +222,33,39,28,248,22,79,23,197,2,87,94,23,196,1,248,22,186,11,249,22, +161,11,251,22,155,7,2,25,2,7,28,248,22,79,23,203,2,87,94,23,202, +1,23,201,1,250,22,1,22,188,13,23,204,1,23,205,1,23,200,1,247,22, +23,27,249,22,188,13,248,22,72,23,200,2,23,197,2,28,248,22,183,13,23, +194,2,27,250,22,1,22,188,13,23,197,1,199,28,248,22,183,13,193,192,251, +2,38,198,199,200,248,22,73,202,251,2,38,197,198,199,248,22,73,201,87,94, +87,94,87,94,28,28,248,22,170,13,193,10,28,248,22,171,6,193,28,248,22, +128,14,193,10,248,22,129,14,193,11,12,250,22,147,9,2,7,2,22,195,28, +248,22,128,14,193,12,248,22,186,11,249,22,128,11,248,22,136,7,250,22,155, +7,2,23,2,7,199,247,22,23,249,22,3,32,0,89,162,8,44,37,49,9, +222,33,37,195,27,247,22,148,14,251,2,38,196,197,198,196,32,41,89,162,44, +42,59,2,24,222,33,42,28,248,22,79,23,199,2,87,94,23,198,1,248,23, +196,1,251,22,155,7,2,25,23,199,1,28,248,22,79,23,203,2,87,94,23, +202,1,23,201,1,250,22,1,22,188,13,23,204,1,23,205,1,23,198,1,27, +249,22,188,13,248,22,72,23,202,2,23,199,2,28,248,22,183,13,23,194,2, +27,250,22,1,22,188,13,23,197,1,23,202,2,28,248,22,183,13,23,194,2, +192,87,94,23,193,1,27,248,22,73,23,202,1,28,248,22,79,23,194,2,87, +94,23,193,1,248,23,199,1,251,22,155,7,2,25,23,202,1,28,248,22,79, +23,206,2,87,94,23,205,1,23,204,1,250,22,1,22,188,13,23,207,1,23, +208,1,23,201,1,27,249,22,188,13,248,22,72,23,197,2,23,202,2,28,248, +22,183,13,23,194,2,27,250,22,1,22,188,13,23,197,1,204,28,248,22,183, +13,193,192,253,2,41,203,204,205,206,23,15,248,22,73,201,253,2,41,202,203, +204,205,206,248,22,73,200,87,94,23,193,1,27,248,22,73,23,201,1,28,248, +22,79,23,194,2,87,94,23,193,1,248,23,198,1,251,22,155,7,2,25,23, +201,1,28,248,22,79,23,205,2,87,94,23,204,1,23,203,1,250,22,1,22, +188,13,23,206,1,23,207,1,23,200,1,27,249,22,188,13,248,22,72,23,197, +2,23,201,2,28,248,22,183,13,23,194,2,27,250,22,1,22,188,13,23,197, +1,203,28,248,22,183,13,193,192,253,2,41,202,203,204,205,206,248,22,73,201, +253,2,41,201,202,203,204,205,248,22,73,200,27,247,22,148,14,253,2,41,198, +199,200,201,202,198,87,95,28,28,248,22,171,13,23,194,2,10,28,248,22,170, +13,23,194,2,10,28,248,22,171,6,23,194,2,28,248,22,128,14,23,194,2, +10,248,22,129,14,23,194,2,11,12,252,22,147,9,23,200,2,2,26,36,23, +198,2,23,199,2,28,28,248,22,171,6,23,195,2,10,248,22,159,7,23,195, +2,87,94,23,194,1,12,252,22,147,9,23,200,2,2,27,37,23,198,2,23, +199,1,91,159,39,11,90,161,39,36,11,248,22,191,13,23,197,2,87,94,23, +195,1,87,94,28,192,12,250,22,148,9,23,201,1,2,28,23,199,1,249,22, +7,194,195,91,159,38,11,90,161,38,36,11,87,95,28,28,248,22,171,13,23, +196,2,10,28,248,22,170,13,23,196,2,10,28,248,22,171,6,23,196,2,28, +248,22,128,14,23,196,2,10,248,22,129,14,23,196,2,11,12,252,22,147,9, +2,10,2,26,36,23,200,2,23,201,2,28,28,248,22,171,6,23,197,2,10, +248,22,159,7,23,197,2,12,252,22,147,9,2,10,2,27,37,23,200,2,23, +201,2,91,159,39,11,90,161,39,36,11,248,22,191,13,23,199,2,87,94,23, +195,1,87,94,28,192,12,250,22,148,9,2,10,2,28,23,201,2,249,22,7, +194,195,27,249,22,180,13,250,22,164,14,0,20,35,114,120,35,34,40,63,58, +91,46,93,91,94,46,93,42,124,41,36,34,248,22,176,13,23,201,1,28,248, +22,171,6,23,203,2,249,22,183,7,23,204,1,8,63,23,202,1,28,248,22, +171,13,23,199,2,248,22,172,13,23,199,1,87,94,23,198,1,247,22,173,13, +28,248,22,170,13,194,249,22,188,13,195,194,192,91,159,38,11,90,161,38,36, +11,87,95,28,28,248,22,171,13,23,196,2,10,28,248,22,170,13,23,196,2, +10,28,248,22,171,6,23,196,2,28,248,22,128,14,23,196,2,10,248,22,129, +14,23,196,2,11,12,252,22,147,9,2,11,2,26,36,23,200,2,23,201,2, +28,28,248,22,171,6,23,197,2,10,248,22,159,7,23,197,2,12,252,22,147, +9,2,11,2,27,37,23,200,2,23,201,2,91,159,39,11,90,161,39,36,11, +248,22,191,13,23,199,2,87,94,23,195,1,87,94,28,192,12,250,22,148,9, +2,11,2,28,23,201,2,249,22,7,194,195,27,249,22,180,13,249,22,169,7, +250,22,165,14,0,9,35,114,120,35,34,91,46,93,34,248,22,176,13,23,203, +1,6,1,1,95,28,248,22,171,6,23,202,2,249,22,183,7,23,203,1,8, +63,23,201,1,28,248,22,171,13,23,199,2,248,22,172,13,23,199,1,87,94, +23,198,1,247,22,173,13,28,248,22,170,13,194,249,22,188,13,195,194,192,249, +247,22,138,5,194,11,249,80,159,38,47,37,9,9,249,80,159,38,47,37,195, +9,27,247,22,150,14,249,80,158,39,48,28,23,195,2,27,248,22,188,7,6, +11,11,80,76,84,67,79,76,76,69,67,84,83,28,192,192,6,0,0,6,0, +0,27,28,23,196,1,250,22,188,13,248,22,146,14,69,97,100,100,111,110,45, +100,105,114,247,22,186,7,6,8,8,99,111,108,108,101,99,116,115,11,27,248, +80,159,42,53,37,250,22,85,23,203,1,248,22,81,248,22,146,14,72,99,111, +108,108,101,99,116,115,45,100,105,114,23,204,1,28,193,249,22,71,195,194,192, +32,51,89,162,8,44,39,8,31,2,19,222,33,52,27,249,22,157,14,23,197, +2,23,198,2,28,23,193,2,87,94,23,196,1,27,248,22,96,23,195,2,27, +27,248,22,105,23,197,1,27,249,22,157,14,23,201,2,23,196,2,28,23,193, +2,87,94,23,194,1,27,248,22,96,23,195,2,27,27,248,22,105,23,197,1, +27,249,22,157,14,23,205,2,23,196,2,28,23,193,2,87,94,23,194,1,27, +248,22,96,23,195,2,27,27,248,22,105,23,197,1,27,249,22,157,14,23,209, +2,23,196,2,28,23,193,2,87,94,23,194,1,27,248,22,96,23,195,2,27, +27,248,22,105,23,197,1,27,249,22,157,14,23,213,2,23,196,2,28,23,193, +2,87,94,23,194,1,27,248,22,96,23,195,2,27,250,2,51,23,215,2,23, +216,1,248,22,105,23,199,1,28,249,22,165,7,23,196,2,2,29,249,22,85, +23,214,2,194,249,22,71,248,22,179,13,23,197,1,194,87,95,23,211,1,23, +193,1,28,249,22,165,7,23,196,2,2,29,249,22,85,23,212,2,9,249,22, +71,248,22,179,13,23,197,1,9,28,249,22,165,7,23,196,2,2,29,249,22, +85,23,210,2,194,249,22,71,248,22,179,13,23,197,1,194,87,94,23,193,1, +28,249,22,165,7,23,196,2,2,29,249,22,85,23,208,2,9,249,22,71,248, +22,179,13,23,197,1,9,28,249,22,165,7,23,196,2,2,29,249,22,85,23, +206,2,194,249,22,71,248,22,179,13,23,197,1,194,87,94,23,193,1,28,249, +22,165,7,23,196,2,2,29,249,22,85,23,204,2,9,249,22,71,248,22,179, +13,23,197,1,9,28,249,22,165,7,23,196,2,2,29,249,22,85,23,202,2, +194,249,22,71,248,22,179,13,23,197,1,194,87,94,23,193,1,28,249,22,165, +7,23,196,2,2,29,249,22,85,23,200,2,9,249,22,71,248,22,179,13,23, +197,1,9,28,249,22,165,7,23,196,2,2,29,249,22,85,197,194,87,94,23, +196,1,249,22,71,248,22,179,13,23,197,1,194,87,94,23,193,1,28,249,22, +165,7,23,198,2,2,29,249,22,85,195,9,87,94,23,194,1,249,22,71,248, +22,179,13,23,199,1,9,87,95,28,28,248,22,159,7,194,10,248,22,171,6, +194,12,250,22,147,9,2,14,6,21,21,98,121,116,101,32,115,116,114,105,110, +103,32,111,114,32,115,116,114,105,110,103,196,28,28,248,22,80,195,249,22,4, +22,170,13,196,11,12,250,22,147,9,2,14,6,13,13,108,105,115,116,32,111, +102,32,112,97,116,104,115,197,250,2,51,197,195,28,248,22,171,6,197,248,22, +182,7,197,196,32,54,89,162,8,44,39,53,70,102,111,117,110,100,45,101,120, +101,99,222,33,57,32,55,89,162,8,44,40,58,64,110,101,120,116,222,33,56, +27,248,22,132,14,23,196,2,28,249,22,179,8,23,195,2,23,197,1,11,28, +248,22,128,14,23,194,2,27,249,22,188,13,23,197,1,23,196,1,28,23,197, +2,91,159,39,11,90,161,39,36,11,248,22,191,13,23,197,2,87,95,23,195, +1,23,194,1,27,28,23,202,2,27,248,22,132,14,23,199,2,28,249,22,179, +8,23,195,2,23,200,2,11,28,248,22,128,14,23,194,2,250,2,54,23,205, +2,23,206,2,249,22,188,13,23,200,2,23,198,1,250,2,54,23,205,2,23, +206,2,23,196,1,11,28,23,193,2,192,87,94,23,193,1,27,28,248,22,170, +13,23,196,2,27,249,22,188,13,23,198,2,23,205,2,28,28,248,22,183,13, +193,10,248,22,182,13,193,192,11,11,28,23,193,2,192,87,94,23,193,1,28, +23,203,2,11,27,248,22,132,14,23,200,2,28,249,22,179,8,23,195,2,23, +201,1,11,28,248,22,128,14,23,194,2,250,2,54,23,206,1,23,207,1,249, +22,188,13,23,201,1,23,198,1,250,2,54,205,206,195,192,87,94,23,194,1, +28,23,196,2,91,159,39,11,90,161,39,36,11,248,22,191,13,23,197,2,87, +95,23,195,1,23,194,1,27,28,23,201,2,27,248,22,132,14,23,199,2,28, +249,22,179,8,23,195,2,23,200,2,11,28,248,22,128,14,23,194,2,250,2, +54,23,204,2,23,205,2,249,22,188,13,23,200,2,23,198,1,250,2,54,23, +204,2,23,205,2,23,196,1,11,28,23,193,2,192,87,94,23,193,1,27,28, +248,22,170,13,23,196,2,27,249,22,188,13,23,198,2,23,204,2,28,28,248, +22,183,13,193,10,248,22,182,13,193,192,11,11,28,23,193,2,192,87,94,23, +193,1,28,23,202,2,11,27,248,22,132,14,23,200,2,28,249,22,179,8,23, +195,2,23,201,1,11,28,248,22,128,14,23,194,2,250,2,54,23,205,1,23, +206,1,249,22,188,13,23,201,1,23,198,1,250,2,54,204,205,195,192,28,23, +193,2,91,159,39,11,90,161,39,36,11,248,22,191,13,23,199,2,87,95,23, +195,1,23,194,1,27,28,23,198,2,251,2,55,23,198,2,23,203,2,23,201, +2,23,202,2,11,28,23,193,2,192,87,94,23,193,1,27,28,248,22,170,13, +195,27,249,22,188,13,197,200,28,28,248,22,183,13,193,10,248,22,182,13,193, +192,11,11,28,192,192,28,198,11,251,2,55,198,203,201,202,194,32,58,89,162, +8,44,40,8,31,2,19,222,33,59,28,248,22,79,23,197,2,11,27,248,22, +131,14,248,22,72,23,199,2,27,249,22,188,13,23,196,1,23,197,2,28,248, +22,182,13,23,194,2,250,2,54,198,199,195,87,94,23,193,1,27,248,22,73, +23,200,1,28,248,22,79,23,194,2,11,27,248,22,131,14,248,22,72,23,196, +2,27,249,22,188,13,23,196,1,23,200,2,28,248,22,182,13,23,194,2,250, +2,54,201,202,195,87,94,23,193,1,27,248,22,73,23,197,1,28,248,22,79, +23,194,2,11,27,248,22,131,14,248,22,72,23,196,2,27,249,22,188,13,23, +196,1,23,203,2,28,248,22,182,13,23,194,2,250,2,54,204,205,195,87,94, +23,193,1,27,248,22,73,23,197,1,28,248,22,79,23,194,2,11,27,248,22, +131,14,248,22,72,23,196,2,27,249,22,188,13,23,196,1,23,206,2,28,248, +22,182,13,23,194,2,250,2,54,23,15,23,16,195,87,94,23,193,1,27,248, +22,73,23,197,1,28,248,22,79,23,194,2,11,27,248,22,131,14,248,22,72, +23,196,2,27,249,22,188,13,23,196,1,23,209,2,28,248,22,182,13,23,194, +2,250,2,54,23,18,23,19,195,87,94,23,193,1,27,248,22,73,23,197,1, +28,248,22,79,23,194,2,11,27,248,22,131,14,248,22,72,195,27,249,22,188, +13,23,196,1,23,19,28,248,22,182,13,193,250,2,54,23,21,23,22,195,251, +2,58,23,21,23,22,23,23,248,22,73,199,87,95,28,28,248,22,170,13,23, +195,2,10,28,248,22,171,6,23,195,2,28,248,22,128,14,23,195,2,10,248, +22,129,14,23,195,2,11,12,250,22,147,9,2,15,6,25,25,112,97,116,104, +32,111,114,32,115,116,114,105,110,103,32,40,115,97,110,115,32,110,117,108,41, +23,197,2,28,28,23,195,2,28,28,248,22,170,13,23,196,2,10,28,248,22, +171,6,23,196,2,28,248,22,128,14,23,196,2,10,248,22,129,14,23,196,2, +11,248,22,128,14,23,196,2,11,10,12,250,22,147,9,2,15,6,29,29,35, +102,32,111,114,32,114,101,108,97,116,105,118,101,32,112,97,116,104,32,111,114, +32,115,116,114,105,110,103,23,198,2,28,28,248,22,128,14,23,195,2,91,159, +39,11,90,161,39,36,11,248,22,191,13,23,198,2,249,22,177,8,194,68,114, +101,108,97,116,105,118,101,11,27,248,22,188,7,6,4,4,80,65,84,72,27, +28,23,194,2,27,249,80,159,41,48,38,23,197,1,9,28,249,22,177,8,247, +22,190,7,2,21,249,22,71,248,22,179,13,5,1,46,194,192,87,94,23,194, +1,9,28,248,22,79,23,194,2,11,27,248,22,131,14,248,22,72,23,196,2, +27,249,22,188,13,23,196,1,23,200,2,28,248,22,182,13,23,194,2,250,2, +54,201,202,195,87,94,23,193,1,27,248,22,73,23,197,1,28,248,22,79,23, +194,2,11,27,248,22,131,14,248,22,72,23,196,2,27,249,22,188,13,23,196, +1,23,203,2,28,248,22,182,13,23,194,2,250,2,54,204,205,195,87,94,23, +193,1,27,248,22,73,23,197,1,28,248,22,79,23,194,2,11,27,248,22,131, +14,248,22,72,195,27,249,22,188,13,23,196,1,205,28,248,22,182,13,193,250, +2,54,23,15,23,16,195,251,2,58,23,15,23,16,23,17,248,22,73,199,27, +248,22,131,14,23,196,1,28,248,22,182,13,193,250,2,54,198,199,195,11,250, +80,159,39,49,37,196,197,11,250,80,159,39,49,37,196,11,11,87,94,249,22, +162,6,247,22,134,5,195,248,22,188,5,249,22,180,3,36,249,22,164,3,197, +198,27,28,23,197,2,87,95,23,196,1,23,195,1,23,197,1,87,94,23,197, +1,27,248,22,146,14,2,20,27,249,80,159,41,49,37,23,196,1,11,27,27, +248,22,183,3,23,200,1,28,192,192,36,27,27,248,22,183,3,23,202,1,28, +192,192,36,249,22,165,5,23,197,1,83,158,40,20,100,95,89,162,8,44,36, +48,9,224,3,2,33,63,23,195,1,23,196,1,27,248,22,150,5,23,195,1, +248,80,159,39,54,37,193,159,36,20,105,159,36,16,1,11,16,0,83,158,42, +20,103,145,2,1,2,1,29,11,11,11,11,11,10,43,80,158,36,36,20,105, +159,38,16,17,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2, +10,2,11,2,12,2,13,2,14,2,15,2,16,30,2,18,1,20,112,97,114, +97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,4,30,2,18, +1,23,101,120,116,101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97, +116,105,111,110,3,16,0,16,0,36,16,0,36,16,4,2,6,2,5,2,3, +2,9,40,11,11,39,36,11,11,11,16,11,2,8,2,7,2,16,2,15,2, +13,2,12,2,4,2,11,2,14,2,10,2,2,16,11,11,11,11,11,11,11, +11,11,11,11,11,16,11,2,8,2,7,2,16,2,15,2,13,2,12,2,4, +2,11,2,14,2,10,2,2,47,47,37,11,11,11,16,0,16,0,16,0,36, +36,11,11,11,11,16,0,16,0,16,0,36,36,16,0,16,17,83,158,36,16, +2,89,162,8,44,37,51,2,19,223,0,33,30,80,159,36,54,37,83,158,36, +16,2,89,162,8,44,37,56,2,19,223,0,33,31,80,159,36,53,37,83,158, +36,16,2,32,0,89,162,44,37,45,2,2,222,33,32,80,159,36,36,37,83, +158,36,16,2,249,22,173,6,7,92,7,92,80,159,36,37,37,83,158,36,16, +2,89,162,44,37,54,2,4,223,0,33,33,80,159,36,38,37,83,158,36,16, +2,32,0,89,162,8,44,38,50,2,5,222,33,34,80,159,36,39,37,83,158, +36,16,2,32,0,89,162,8,44,39,51,2,6,222,33,36,80,159,36,40,37, +83,158,36,16,2,32,0,89,162,8,45,38,50,2,7,222,33,40,80,159,36, +41,37,83,158,36,16,2,32,0,89,162,44,40,52,2,8,222,33,43,80,159, +36,42,37,83,158,36,16,2,32,0,89,162,44,39,50,2,9,222,33,44,80, +159,36,43,37,83,158,36,16,2,32,0,89,162,44,38,53,2,10,222,33,45, +80,159,36,44,37,83,158,36,16,2,32,0,89,162,44,38,54,2,11,222,33, +46,80,159,36,45,37,83,158,36,16,2,32,0,89,162,44,37,44,2,12,222, +33,47,80,159,36,46,37,83,158,36,16,2,83,158,39,20,99,96,2,13,89, +162,44,36,44,9,223,0,33,48,89,162,44,37,45,9,223,0,33,49,89,162, +44,38,55,9,223,0,33,50,80,159,36,47,37,83,158,36,16,2,27,248,22, +153,14,248,22,182,7,27,28,249,22,177,8,247,22,190,7,2,21,6,1,1, +59,6,1,1,58,250,22,155,7,6,14,14,40,91,94,126,97,93,42,41,126, +97,40,46,42,41,23,196,2,23,196,1,89,162,8,44,38,48,2,14,223,0, +33,53,80,159,36,48,37,83,158,36,16,2,83,158,39,20,99,96,2,15,89, +162,8,44,39,8,24,9,223,0,33,60,89,162,44,38,47,9,223,0,33,61, +89,162,44,37,46,9,223,0,33,62,80,159,36,49,37,83,158,36,16,2,89, +162,8,44,39,52,2,16,223,0,33,64,80,159,36,50,37,94,29,94,2,17, +68,35,37,107,101,114,110,101,108,11,29,94,2,17,69,35,37,109,105,110,45, +115,116,120,11,9,9,9,36,0}; + EVAL_ONE_SIZED_STR((char *)expr, 6245); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,50,46,53,46,56,8,0,0,0,1,0,0,6,0,19,0, -34,0,48,0,62,0,76,0,118,0,0,0,53,1,0,0,65,113,117,111,116, -101,29,94,2,1,67,35,37,117,116,105,108,115,11,29,94,2,1,69,35,37, -110,101,116,119,111,114,107,11,29,94,2,1,68,35,37,112,97,114,97,109,122, -11,29,94,2,1,68,35,37,101,120,112,111,98,115,11,29,94,2,1,68,35, -37,107,101,114,110,101,108,11,97,36,11,8,240,251,76,0,0,98,159,2,2, -36,36,159,2,3,36,36,159,2,4,36,36,159,2,5,36,36,159,2,6,36, -36,159,2,6,36,36,16,0,159,36,20,105,159,36,16,1,11,16,0,83,158, -42,20,103,144,69,35,37,98,117,105,108,116,105,110,29,11,11,11,11,11,18, -96,11,43,43,43,36,80,158,36,36,20,105,159,36,16,0,16,0,16,0,36, -16,0,36,16,0,36,11,11,39,36,11,11,11,16,0,16,0,16,0,36,36, -37,11,11,11,16,0,16,0,16,0,36,36,11,11,11,11,16,0,16,0,16, -0,36,36,16,0,16,0,102,2,6,2,5,29,94,2,1,69,35,37,102,111, -114,101,105,103,110,11,29,94,2,1,68,35,37,117,110,115,97,102,101,11,29, -94,2,1,69,35,37,102,108,102,120,110,117,109,11,2,4,2,3,2,2,29, -94,2,1,67,35,37,112,108,97,99,101,11,29,94,2,1,69,35,37,102,117, -116,117,114,101,115,11,9,9,9,36,0}; - EVAL_ONE_SIZED_STR((char *)expr, 346); + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,50,46,53,46,57,9,0,0,0,1,0,0,10,0,16,0, +29,0,44,0,58,0,72,0,86,0,128,0,0,0,57,1,0,0,69,35,37, +98,117,105,108,116,105,110,65,113,117,111,116,101,29,94,2,2,67,35,37,117, +116,105,108,115,11,29,94,2,2,69,35,37,110,101,116,119,111,114,107,11,29, +94,2,2,68,35,37,112,97,114,97,109,122,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,4,77,0,0,98,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,7,36,36,16,0,159, +36,20,105,159,36,16,1,11,16,0,83,158,42,20,103,145,2,1,2,1,29, +11,11,11,11,11,18,96,11,44,44,44,36,80,158,36,36,20,105,159,36,16, +0,16,0,16,0,36,16,0,36,16,0,36,11,11,39,36,11,11,11,16,0, +16,0,16,0,36,36,37,11,11,11,16,0,16,0,16,0,36,36,11,11,11, +11,16,0,16,0,16,0,36,36,16,0,16,0,102,2,7,2,6,29,94,2, +2,69,35,37,102,111,114,101,105,103,110,11,29,94,2,2,68,35,37,117,110, +115,97,102,101,11,29,94,2,2,69,35,37,102,108,102,120,110,117,109,11,2, +5,2,4,2,3,29,94,2,2,67,35,37,112,108,97,99,101,11,29,94,2, +2,69,35,37,102,117,116,117,114,101,115,11,9,9,9,36,0}; + EVAL_ONE_SIZED_STR((char *)expr, 352); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,50,46,53,46,56,73,0,0,0,1,0,0,11,0,38,0, -44,0,57,0,66,0,73,0,95,0,117,0,143,0,155,0,173,0,193,0,205, -0,221,0,244,0,0,1,31,1,38,1,43,1,48,1,53,1,58,1,63,1, -72,1,77,1,81,1,87,1,94,1,100,1,108,1,117,1,138,1,159,1,189, -1,219,1,20,2,77,2,125,2,173,2,225,6,244,6,1,7,159,7,171,7, -49,8,91,9,214,9,220,9,234,9,246,9,80,10,93,10,212,10,224,10,58, -11,71,11,190,11,217,11,230,11,242,11,76,12,89,12,208,12,221,12,84,13, -92,13,177,13,179,13,248,13,242,21,38,22,61,22,0,0,222,24,0,0,70, -100,108,108,45,115,117,102,102,105,120,1,25,100,101,102,97,117,108,116,45,108, -111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,65,113,117,111,116, -101,29,94,2,3,67,35,37,117,116,105,108,115,11,68,35,37,112,97,114,97, -109,122,29,94,2,3,2,5,11,1,20,112,97,114,97,109,101,116,101,114,105, -122,97,116,105,111,110,45,107,101,121,1,20,100,101,102,97,117,108,116,45,114, -101,97,100,101,114,45,103,117,97,114,100,1,24,45,109,111,100,117,108,101,45, -104,97,115,104,45,116,97,98,108,101,45,116,97,98,108,101,71,45,112,97,116, -104,45,99,97,99,104,101,77,45,108,111,97,100,105,110,103,45,102,105,108,101, -110,97,109,101,79,45,108,111,97,100,105,110,103,45,112,114,111,109,112,116,45, -116,97,103,71,45,112,114,101,118,45,114,101,108,116,111,75,45,112,114,101,118, -45,114,101,108,116,111,45,100,105,114,1,21,115,112,108,105,116,45,114,101,108, -97,116,105,118,101,45,115,116,114,105,110,103,71,111,114,105,103,45,112,97,114, -97,109,122,1,29,115,116,97,110,100,97,114,100,45,109,111,100,117,108,101,45, -110,97,109,101,45,114,101,115,111,108,118,101,114,29,94,2,3,2,5,11,64, -98,111,111,116,64,115,101,97,108,64,115,97,109,101,5,3,46,122,111,5,3, -46,122,111,6,6,6,110,97,116,105,118,101,64,108,111,111,112,63,108,105,98, -6,3,3,46,115,115,6,4,4,46,114,107,116,5,4,46,114,107,116,67,105, -103,110,111,114,101,100,249,22,14,195,80,159,38,46,38,250,22,187,13,23,197, -1,23,199,1,249,80,159,43,39,38,23,198,1,2,22,250,22,187,13,23,197, -1,23,199,1,249,80,159,43,39,38,23,198,1,2,23,252,22,187,13,23,199, -1,23,201,1,2,24,247,22,190,7,249,80,159,45,39,38,23,200,1,80,159, -45,36,38,252,22,187,13,23,199,1,23,201,1,2,24,247,22,190,7,249,80, -159,45,39,38,23,200,1,80,159,45,36,38,27,252,22,187,13,23,200,1,23, -202,1,2,24,247,22,190,7,249,80,159,46,39,38,23,201,1,80,159,46,36, -38,27,250,22,140,14,196,11,32,0,89,162,8,44,36,41,9,222,11,28,192, -249,22,71,195,194,11,27,252,22,187,13,23,200,1,23,202,1,2,24,247,22, -190,7,249,80,159,46,39,38,23,201,1,80,159,46,36,38,27,250,22,140,14, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,50,46,53,46,57,74,0,0,0,1,0,0,7,0,18,0, +45,0,51,0,64,0,73,0,80,0,102,0,124,0,150,0,162,0,180,0,200, +0,212,0,228,0,251,0,7,1,38,1,45,1,50,1,55,1,60,1,65,1, +70,1,79,1,84,1,88,1,94,1,101,1,107,1,115,1,124,1,145,1,166, +1,196,1,226,1,27,2,84,2,132,2,180,2,97,8,116,8,129,8,31,9, +43,9,177,9,219,10,86,11,92,11,106,11,118,11,208,11,221,11,84,12,96, +12,186,12,199,12,62,13,89,13,102,13,114,13,204,13,217,13,80,14,93,14, +212,14,220,14,49,15,51,15,120,15,114,23,166,23,189,23,0,0,91,26,0, +0,66,35,37,98,111,111,116,70,100,108,108,45,115,117,102,102,105,120,1,25, +100,101,102,97,117,108,116,45,108,111,97,100,47,117,115,101,45,99,111,109,112, +105,108,101,100,65,113,117,111,116,101,29,94,2,4,67,35,37,117,116,105,108, +115,11,68,35,37,112,97,114,97,109,122,29,94,2,4,2,6,11,1,20,112, +97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,1,20, +100,101,102,97,117,108,116,45,114,101,97,100,101,114,45,103,117,97,114,100,1, +24,45,109,111,100,117,108,101,45,104,97,115,104,45,116,97,98,108,101,45,116, +97,98,108,101,71,45,112,97,116,104,45,99,97,99,104,101,77,45,108,111,97, +100,105,110,103,45,102,105,108,101,110,97,109,101,79,45,108,111,97,100,105,110, +103,45,112,114,111,109,112,116,45,116,97,103,71,45,112,114,101,118,45,114,101, +108,116,111,75,45,112,114,101,118,45,114,101,108,116,111,45,100,105,114,1,21, +115,112,108,105,116,45,114,101,108,97,116,105,118,101,45,115,116,114,105,110,103, +71,111,114,105,103,45,112,97,114,97,109,122,1,29,115,116,97,110,100,97,114, +100,45,109,111,100,117,108,101,45,110,97,109,101,45,114,101,115,111,108,118,101, +114,29,94,2,4,2,6,11,64,98,111,111,116,64,115,101,97,108,64,115,97, +109,101,5,3,46,122,111,5,3,46,122,111,6,6,6,110,97,116,105,118,101, +64,108,111,111,112,63,108,105,98,6,3,3,46,115,115,6,4,4,46,114,107, +116,5,4,46,114,107,116,67,105,103,110,111,114,101,100,249,22,14,195,80,159, +38,46,38,250,22,188,13,23,197,1,23,199,1,249,80,159,43,39,38,23,198, +1,2,23,250,22,188,13,23,197,1,23,199,1,249,80,159,43,39,38,23,198, +1,2,24,252,22,188,13,23,199,1,23,201,1,2,25,247,22,191,7,249,80, +159,45,39,38,23,200,1,80,159,45,36,38,252,22,188,13,23,199,1,23,201, +1,2,25,247,22,191,7,249,80,159,45,39,38,23,200,1,80,159,45,36,38, +27,252,22,188,13,23,200,1,23,202,1,2,25,247,22,191,7,249,80,159,46, +39,38,23,201,1,80,159,46,36,38,27,250,22,141,14,196,11,32,0,89,162, +8,44,36,41,9,222,11,28,192,249,22,71,195,194,11,27,252,22,188,13,23, +200,1,23,202,1,2,25,247,22,191,7,249,80,159,46,39,38,23,201,1,80, +159,46,36,38,27,250,22,141,14,196,11,32,0,89,162,8,44,36,41,9,222, +11,28,192,249,22,71,195,194,11,27,250,22,188,13,23,198,1,23,200,1,249, +80,159,44,39,38,23,199,1,2,23,27,250,22,141,14,196,11,32,0,89,162, +8,44,36,41,9,222,11,28,192,249,22,71,195,194,11,27,250,22,188,13,23, +198,1,23,200,1,249,80,159,44,39,38,23,199,1,2,24,27,250,22,141,14, 196,11,32,0,89,162,8,44,36,41,9,222,11,28,192,249,22,71,195,194,11, -27,250,22,187,13,23,198,1,23,200,1,249,80,159,44,39,38,23,199,1,2, -22,27,250,22,140,14,196,11,32,0,89,162,8,44,36,41,9,222,11,28,192, -249,22,71,195,194,11,27,250,22,187,13,23,198,1,23,200,1,249,80,159,44, -39,38,23,199,1,2,23,27,250,22,140,14,196,11,32,0,89,162,8,44,36, -41,9,222,11,28,192,249,22,71,195,194,11,87,94,28,248,80,159,37,38,38, -23,195,2,12,250,22,146,9,77,108,111,97,100,47,117,115,101,45,99,111,109, -112,105,108,101,100,6,25,25,112,97,116,104,32,111,114,32,118,97,108,105,100, -45,112,97,116,104,32,115,116,114,105,110,103,23,197,2,91,159,46,11,90,161, -37,36,11,28,248,22,129,14,23,205,2,23,204,2,27,247,22,138,5,28,23, -193,2,249,22,130,14,23,207,2,23,195,1,23,205,2,90,161,39,37,11,248, -22,190,13,23,205,1,87,94,23,196,1,90,161,38,40,11,28,23,205,2,27, -248,22,174,13,23,197,2,27,248,22,161,7,23,195,2,28,28,249,22,176,3, -23,195,2,40,249,22,164,7,5,4,46,114,107,116,249,22,167,7,23,198,2, -249,22,164,3,23,199,2,40,11,249,22,7,23,199,2,248,22,178,13,249,22, -168,7,250,22,167,7,23,202,1,36,249,22,164,3,23,203,1,40,5,3,46, -115,115,249,22,7,23,199,2,11,249,22,7,23,197,2,11,90,161,37,42,11, -28,249,22,176,8,23,199,2,23,197,2,23,193,2,249,22,187,13,23,196,2, -23,199,2,90,161,37,43,11,28,23,198,2,28,249,22,176,8,23,200,2,23, -197,1,23,193,1,87,94,23,193,1,249,22,187,13,23,196,2,23,200,2,87, -94,23,195,1,11,90,161,37,44,11,28,249,22,176,8,23,196,2,68,114,101, -108,97,116,105,118,101,87,94,23,194,1,2,21,23,194,1,90,161,37,45,11, -247,22,148,14,27,27,250,22,140,14,23,204,2,11,32,0,89,162,8,44,36, -41,9,222,11,28,192,249,22,71,23,203,2,194,11,27,28,23,202,2,28,23, -194,2,11,27,250,22,140,14,23,206,2,11,32,0,89,162,8,44,36,41,9, -222,11,28,192,249,22,71,23,205,2,194,11,11,27,28,23,195,2,23,195,2, -23,194,2,27,89,162,44,37,50,62,122,111,225,14,12,8,33,32,27,89,162, -44,37,50,66,97,108,116,45,122,111,225,15,13,10,33,33,27,89,162,44,37, -52,9,225,16,14,10,33,34,27,89,162,44,37,52,9,225,17,15,12,33,35, -27,28,23,200,2,23,200,2,248,22,174,8,23,200,2,27,28,23,207,2,28, -23,200,2,87,94,23,201,1,23,200,2,248,22,174,8,23,202,1,11,27,27, -28,23,196,2,28,23,198,1,27,249,22,5,89,162,8,44,37,53,9,225,24, -22,18,33,36,23,216,2,27,28,23,203,2,11,193,28,192,192,28,193,28,23, -203,2,28,249,22,176,3,248,22,73,196,248,22,73,23,206,2,193,11,11,11, -11,87,94,23,198,1,11,28,23,193,2,192,87,94,23,193,1,28,23,195,2, -28,23,197,1,27,249,22,5,89,162,8,44,37,53,9,225,24,22,19,33,37, -23,216,2,27,28,203,11,193,28,192,192,28,193,28,203,28,249,22,176,3,248, -22,73,196,248,22,73,206,193,11,11,11,11,11,28,23,193,2,87,103,23,212, -1,23,210,1,23,209,1,23,208,1,23,207,1,23,200,1,23,199,1,23,198, -1,23,195,1,23,194,1,20,14,159,80,159,56,40,38,250,80,159,59,41,38, -249,22,27,11,80,159,8,25,40,38,22,138,5,28,248,22,169,13,23,215,2, -23,214,1,87,94,23,214,1,247,22,146,14,249,247,22,151,14,248,22,72,195, -23,24,87,94,23,193,1,27,27,28,23,197,2,28,23,201,1,27,249,22,5, -83,158,40,20,100,94,89,162,8,44,37,51,9,225,25,23,19,33,38,23,212, -1,23,217,2,27,28,23,204,2,11,193,28,192,192,28,193,28,23,204,2,28, -249,22,176,3,248,22,73,196,248,22,73,23,207,2,193,11,11,11,87,94,23, -209,1,11,87,94,23,201,1,11,28,23,193,2,192,87,94,23,193,1,28,23, -196,1,28,23,200,1,27,249,22,5,83,158,40,20,100,94,89,162,8,44,37, -51,9,225,25,23,20,33,39,23,213,1,23,217,1,27,28,203,11,193,28,192, -192,28,193,28,203,28,249,22,176,3,248,22,73,196,248,22,73,206,193,11,11, -11,11,11,28,23,193,2,87,96,23,211,1,23,210,1,23,196,1,20,14,159, -80,159,57,40,38,250,80,159,8,24,41,38,249,22,27,11,80,159,8,26,40, -38,22,138,5,28,248,22,169,13,23,216,2,23,215,1,87,94,23,215,1,247, -22,146,14,249,247,22,136,5,248,22,72,195,23,25,87,94,23,193,1,20,14, -159,80,159,57,40,38,250,80,159,8,24,41,38,249,22,27,11,80,159,8,26, -40,38,22,138,5,28,248,22,169,13,23,216,2,23,215,1,87,94,23,215,1, -247,22,146,14,249,247,22,136,5,28,197,23,19,23,20,23,25,0,17,35,114, -120,34,94,40,46,42,63,41,47,40,46,42,41,36,34,32,42,89,162,8,44, -37,59,2,25,222,33,43,27,249,22,156,14,2,41,23,196,2,28,23,193,2, -87,94,23,194,1,249,22,71,248,22,96,23,196,2,27,248,22,105,23,197,1, -27,249,22,156,14,2,41,23,196,2,28,23,193,2,87,94,23,194,1,249,22, -71,248,22,96,23,196,2,27,248,22,105,23,197,1,27,249,22,156,14,2,41, -23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,2, -27,248,22,105,23,197,1,27,249,22,156,14,2,41,23,196,2,28,23,193,2, -87,94,23,194,1,249,22,71,248,22,96,23,196,2,248,2,42,248,22,105,23, -197,1,248,22,81,194,248,22,81,194,248,22,81,194,248,22,81,194,32,44,89, -162,44,37,55,2,25,222,33,45,28,248,22,79,248,22,73,23,195,2,249,22, -7,9,248,22,72,195,91,159,38,11,90,161,38,36,11,27,248,22,73,196,28, -248,22,79,248,22,73,23,195,2,249,22,7,9,248,22,72,195,91,159,38,11, -90,161,38,36,11,27,248,22,73,196,28,248,22,79,248,22,73,23,195,2,249, -22,7,9,248,22,72,195,91,159,38,11,90,161,38,36,11,248,2,44,248,22, -73,196,249,22,7,249,22,71,248,22,72,199,196,195,249,22,7,249,22,71,248, -22,72,199,196,195,249,22,7,249,22,71,248,22,72,199,196,195,27,27,249,22, -156,14,2,41,23,197,2,28,23,193,2,87,94,23,195,1,249,22,71,248,22, -96,23,196,2,27,248,22,105,23,197,1,27,249,22,156,14,2,41,23,196,2, -28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,27,248,22, -105,23,197,1,27,249,22,156,14,2,41,23,196,2,28,23,193,2,87,94,23, -194,1,249,22,71,248,22,96,23,196,2,27,248,22,105,23,197,1,27,249,22, -156,14,2,41,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22, -96,23,196,2,248,2,42,248,22,105,23,197,1,248,22,81,194,248,22,81,194, -248,22,81,194,248,22,81,195,28,23,195,1,192,28,248,22,79,248,22,73,23, -195,2,249,22,7,9,248,22,72,195,91,159,38,11,90,161,38,36,11,27,248, -22,73,196,28,248,22,79,248,22,73,23,195,2,249,22,7,9,248,22,72,195, -91,159,38,11,90,161,38,36,11,27,248,22,73,196,28,248,22,79,248,22,73, -23,195,2,249,22,7,9,248,22,72,195,91,159,38,11,90,161,38,36,11,248, -2,44,248,22,73,196,249,22,7,249,22,71,248,22,72,199,196,195,249,22,7, -249,22,71,248,22,72,199,196,195,249,22,7,249,22,71,248,22,72,199,196,195, -87,95,28,248,22,180,4,195,12,250,22,146,9,2,17,6,20,20,114,101,115, -111,108,118,101,100,45,109,111,100,117,108,101,45,112,97,116,104,197,28,24,193, -2,248,24,194,1,195,87,94,23,193,1,12,27,27,250,22,146,2,80,159,42, -43,38,248,22,176,14,247,22,149,12,11,28,23,193,2,192,87,94,23,193,1, -27,247,22,130,2,87,94,250,22,144,2,80,159,43,43,38,248,22,176,14,247, -22,149,12,195,192,250,22,144,2,195,198,66,97,116,116,97,99,104,251,211,197, -198,199,10,28,192,250,22,145,9,11,196,195,248,22,143,9,194,32,50,89,162, -44,37,52,2,25,222,33,51,28,248,22,79,248,22,73,23,195,2,249,22,7, -9,248,22,72,195,91,159,38,11,90,161,38,36,11,27,248,22,73,196,28,248, -22,79,248,22,73,23,195,2,249,22,7,9,248,22,72,195,91,159,38,11,90, -161,38,36,11,248,2,50,248,22,73,196,249,22,7,249,22,71,248,22,72,199, -196,195,249,22,7,249,22,71,248,22,72,199,196,195,32,52,89,162,8,44,37, -55,2,25,222,33,53,27,249,22,156,14,2,41,23,196,2,28,23,193,2,87, -94,23,194,1,249,22,71,248,22,96,23,196,2,27,248,22,105,23,197,1,27, -249,22,156,14,2,41,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71, -248,22,96,23,196,2,27,248,22,105,23,197,1,27,249,22,156,14,2,41,23, -196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,248, -2,52,248,22,105,23,197,1,248,22,81,194,248,22,81,194,248,22,81,194,32, -54,89,162,44,37,52,2,25,222,33,55,28,248,22,79,248,22,73,23,195,2, +87,94,28,248,80,159,37,38,38,23,195,2,12,250,22,147,9,77,108,111,97, +100,47,117,115,101,45,99,111,109,112,105,108,101,100,6,25,25,112,97,116,104, +32,111,114,32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105,110,103, +23,197,2,91,159,46,11,90,161,37,36,11,28,248,22,130,14,23,205,2,23, +204,2,27,247,22,139,5,28,23,193,2,249,22,131,14,23,207,2,23,195,1, +23,205,2,90,161,39,37,11,248,22,191,13,23,205,1,87,94,23,196,1,90, +161,38,40,11,28,23,205,2,27,248,22,175,13,23,197,2,27,248,22,162,7, +23,195,2,28,28,249,22,176,3,23,195,2,40,249,22,165,7,5,4,46,114, +107,116,249,22,168,7,23,198,2,249,22,164,3,23,199,2,40,11,249,22,7, +23,199,2,248,22,179,13,249,22,169,7,250,22,168,7,23,202,1,36,249,22, +164,3,23,203,1,40,5,3,46,115,115,249,22,7,23,199,2,11,249,22,7, +23,197,2,11,90,161,37,42,11,28,249,22,177,8,23,199,2,23,197,2,23, +193,2,249,22,188,13,23,196,2,23,199,2,90,161,37,43,11,28,23,198,2, +28,249,22,177,8,23,200,2,23,197,1,23,193,1,87,94,23,193,1,249,22, +188,13,23,196,2,23,200,2,87,94,23,195,1,11,90,161,37,44,11,28,249, +22,177,8,23,196,2,68,114,101,108,97,116,105,118,101,87,94,23,194,1,2, +22,23,194,1,90,161,37,45,11,247,22,149,14,27,27,250,22,141,14,23,204, +2,11,32,0,89,162,8,44,36,41,9,222,11,28,192,249,22,71,23,203,2, +194,11,27,28,23,202,2,28,23,194,2,11,27,250,22,141,14,23,206,2,11, +32,0,89,162,8,44,36,41,9,222,11,28,192,249,22,71,23,205,2,194,11, +11,27,28,23,195,2,23,195,2,23,194,2,27,89,162,44,37,50,62,122,111, +225,14,12,8,33,33,27,89,162,44,37,50,66,97,108,116,45,122,111,225,15, +13,10,33,34,27,89,162,44,37,52,9,225,16,14,10,33,35,27,89,162,44, +37,52,9,225,17,15,12,33,36,27,28,23,200,2,23,200,2,248,22,175,8, +23,200,2,27,28,23,207,2,28,23,200,2,87,94,23,201,1,23,200,2,248, +22,175,8,23,202,1,11,27,28,23,195,2,28,23,197,1,27,249,22,5,89, +162,8,44,37,53,9,225,23,21,17,33,37,23,215,2,27,28,23,202,2,11, +193,28,192,192,28,193,28,23,202,2,28,249,22,176,3,248,22,73,196,248,22, +73,23,205,2,193,11,11,11,11,87,94,23,197,1,11,28,23,193,2,87,105, +23,212,1,23,210,1,23,209,1,23,208,1,23,207,1,23,201,1,23,200,1, +23,199,1,23,198,1,23,196,1,23,195,1,23,194,1,20,14,159,80,159,56, +40,38,250,80,159,59,41,38,249,22,27,11,80,159,8,25,40,38,22,163,4, +11,20,14,159,80,159,56,40,38,250,80,159,59,41,38,249,22,27,11,80,159, +8,25,40,38,22,139,5,28,248,22,170,13,23,215,2,23,214,1,87,94,23, +214,1,247,22,147,14,249,247,22,152,14,248,22,72,195,23,24,87,94,23,193, +1,27,28,23,195,2,28,23,197,1,27,249,22,5,89,162,8,44,37,53,9, +225,24,22,19,33,38,23,216,2,27,28,23,204,2,11,193,28,192,192,28,193, +28,203,28,249,22,176,3,248,22,73,196,248,22,73,206,193,11,11,11,11,87, +94,23,197,1,11,28,23,193,2,87,102,23,213,1,23,210,1,23,209,1,23, +208,1,23,201,1,23,200,1,23,199,1,23,196,1,23,195,1,20,14,159,80, +159,57,40,38,250,80,159,8,24,41,38,249,22,27,11,80,159,8,26,40,38, +22,163,4,23,214,1,20,14,159,80,159,57,40,38,250,80,159,8,24,41,38, +249,22,27,11,80,159,8,26,40,38,22,139,5,28,248,22,170,13,23,216,2, +23,215,1,87,94,23,215,1,247,22,147,14,249,247,22,152,14,248,22,72,195, +23,25,87,94,23,193,1,27,28,23,197,2,28,23,201,1,27,249,22,5,83, +158,40,20,100,94,89,162,8,44,37,51,9,225,25,23,19,33,39,23,212,1, +23,217,2,27,28,23,204,2,11,193,28,192,192,28,193,28,23,204,2,28,249, +22,176,3,248,22,73,196,248,22,73,23,207,2,193,11,11,11,87,94,23,209, +1,11,87,94,23,201,1,11,28,23,193,2,87,101,23,214,1,23,212,1,23, +211,1,23,210,1,23,202,1,23,200,1,23,197,1,23,196,1,20,14,159,80, +159,58,40,38,250,80,159,8,25,41,38,249,22,27,11,80,159,8,27,40,38, +22,163,4,11,20,14,159,80,159,58,40,38,250,80,159,8,25,41,38,249,22, +27,11,80,159,8,27,40,38,22,139,5,28,248,22,170,13,23,217,2,23,216, +1,87,94,23,216,1,247,22,147,14,249,247,22,137,5,248,22,72,195,23,26, +87,94,23,193,1,27,28,23,197,1,28,23,201,1,27,249,22,5,83,158,40, +20,100,94,89,162,8,44,37,51,9,225,26,24,21,33,40,23,214,1,23,218, +1,27,28,23,205,2,11,193,28,192,192,28,193,28,204,28,249,22,176,3,248, +22,73,196,248,22,73,23,15,193,11,11,11,87,95,23,215,1,23,211,1,11, +87,94,23,201,1,11,28,23,193,2,87,95,23,212,1,23,198,1,20,14,159, +80,159,59,40,38,250,80,159,8,26,41,38,249,22,27,11,80,159,8,28,40, +38,22,163,4,23,216,1,20,14,159,80,159,59,40,38,250,80,159,8,26,41, +38,249,22,27,11,80,159,8,28,40,38,22,139,5,28,248,22,170,13,23,218, +2,23,217,1,87,94,23,217,1,247,22,147,14,249,247,22,137,5,248,22,72, +195,23,27,87,94,23,193,1,27,28,23,199,2,87,94,23,214,1,23,213,1, +87,94,23,213,1,23,214,1,20,14,159,80,159,8,24,40,38,250,80,159,8, +27,41,38,249,22,27,11,80,159,8,29,40,38,22,163,4,28,23,29,28,23, +202,1,11,195,87,94,23,202,1,11,20,14,159,80,159,8,24,40,38,250,80, +159,8,27,41,38,249,22,27,11,80,159,8,29,40,38,22,139,5,28,248,22, +170,13,23,219,2,23,218,1,87,94,23,218,1,247,22,147,14,249,247,22,137, +5,194,23,28,0,17,35,114,120,34,94,40,46,42,63,41,47,40,46,42,41, +36,34,32,43,89,162,8,44,37,59,2,26,222,33,44,27,249,22,157,14,2, +42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196, +2,27,248,22,105,23,197,1,27,249,22,157,14,2,42,23,196,2,28,23,193, +2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,27,248,22,105,23,197, +1,27,249,22,157,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249, +22,71,248,22,96,23,196,2,27,248,22,105,23,197,1,27,249,22,157,14,2, +42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196, +2,248,2,43,248,22,105,23,197,1,248,22,81,194,248,22,81,194,248,22,81, +194,248,22,81,194,32,45,89,162,44,37,55,2,26,222,33,46,28,248,22,79, +248,22,73,23,195,2,249,22,7,9,248,22,72,195,91,159,38,11,90,161,38, +36,11,27,248,22,73,196,28,248,22,79,248,22,73,23,195,2,249,22,7,9, +248,22,72,195,91,159,38,11,90,161,38,36,11,27,248,22,73,196,28,248,22, +79,248,22,73,23,195,2,249,22,7,9,248,22,72,195,91,159,38,11,90,161, +38,36,11,248,2,45,248,22,73,196,249,22,7,249,22,71,248,22,72,199,196, +195,249,22,7,249,22,71,248,22,72,199,196,195,249,22,7,249,22,71,248,22, +72,199,196,195,27,27,249,22,157,14,2,42,23,197,2,28,23,193,2,87,94, +23,195,1,249,22,71,248,22,96,23,196,2,27,248,22,105,23,197,1,27,249, +22,157,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248, +22,96,23,196,2,27,248,22,105,23,197,1,27,249,22,157,14,2,42,23,196, +2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,27,248, +22,105,23,197,1,27,249,22,157,14,2,42,23,196,2,28,23,193,2,87,94, +23,194,1,249,22,71,248,22,96,23,196,2,248,2,43,248,22,105,23,197,1, +248,22,81,194,248,22,81,194,248,22,81,194,248,22,81,195,28,23,195,1,192, +28,248,22,79,248,22,73,23,195,2,249,22,7,9,248,22,72,195,91,159,38, +11,90,161,38,36,11,27,248,22,73,196,28,248,22,79,248,22,73,23,195,2, 249,22,7,9,248,22,72,195,91,159,38,11,90,161,38,36,11,27,248,22,73, 196,28,248,22,79,248,22,73,23,195,2,249,22,7,9,248,22,72,195,91,159, -38,11,90,161,38,36,11,248,2,54,248,22,73,196,249,22,7,249,22,71,248, -22,72,199,196,195,249,22,7,249,22,71,248,22,72,199,196,195,32,56,89,162, -8,44,37,55,2,25,222,33,57,27,249,22,156,14,2,41,23,196,2,28,23, -193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,27,248,22,105,23, -197,1,27,249,22,156,14,2,41,23,196,2,28,23,193,2,87,94,23,194,1, -249,22,71,248,22,96,23,196,2,27,248,22,105,23,197,1,27,249,22,156,14, -2,41,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23, -196,2,248,2,56,248,22,105,23,197,1,248,22,81,194,248,22,81,194,248,22, -81,194,28,249,22,176,6,194,6,1,1,46,2,21,28,249,22,176,6,194,6, -2,2,46,46,62,117,112,192,0,11,35,114,120,34,91,46,93,115,115,36,34, -32,60,89,162,44,37,52,2,25,222,33,61,28,248,22,79,248,22,73,23,195, -2,249,22,7,9,248,22,72,195,91,159,38,11,90,161,38,36,11,27,248,22, -73,196,28,248,22,79,248,22,73,23,195,2,249,22,7,9,248,22,72,195,91, -159,38,11,90,161,38,36,11,248,2,60,248,22,73,196,249,22,7,249,22,71, -248,22,72,199,196,195,249,22,7,249,22,71,248,22,72,199,196,195,32,62,89, -162,8,44,37,55,2,25,222,33,63,27,249,22,156,14,2,41,23,196,2,28, +38,11,90,161,38,36,11,248,2,45,248,22,73,196,249,22,7,249,22,71,248, +22,72,199,196,195,249,22,7,249,22,71,248,22,72,199,196,195,249,22,7,249, +22,71,248,22,72,199,196,195,87,95,28,248,22,181,4,195,12,250,22,147,9, +2,18,6,20,20,114,101,115,111,108,118,101,100,45,109,111,100,117,108,101,45, +112,97,116,104,197,28,24,193,2,248,24,194,1,195,87,94,23,193,1,12,27, +27,250,22,146,2,80,159,42,43,38,248,22,177,14,247,22,150,12,11,28,23, +193,2,192,87,94,23,193,1,27,247,22,130,2,87,94,250,22,144,2,80,159, +43,43,38,248,22,177,14,247,22,150,12,195,192,250,22,144,2,195,198,66,97, +116,116,97,99,104,251,211,197,198,199,10,28,192,250,22,146,9,11,196,195,248, +22,144,9,194,32,51,89,162,44,37,52,2,26,222,33,52,28,248,22,79,248, +22,73,23,195,2,249,22,7,9,248,22,72,195,91,159,38,11,90,161,38,36, +11,27,248,22,73,196,28,248,22,79,248,22,73,23,195,2,249,22,7,9,248, +22,72,195,91,159,38,11,90,161,38,36,11,248,2,51,248,22,73,196,249,22, +7,249,22,71,248,22,72,199,196,195,249,22,7,249,22,71,248,22,72,199,196, +195,32,53,89,162,8,44,37,55,2,26,222,33,54,27,249,22,157,14,2,42, +23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,2, +27,248,22,105,23,197,1,27,249,22,157,14,2,42,23,196,2,28,23,193,2, +87,94,23,194,1,249,22,71,248,22,96,23,196,2,27,248,22,105,23,197,1, +27,249,22,157,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22, +71,248,22,96,23,196,2,248,2,53,248,22,105,23,197,1,248,22,81,194,248, +22,81,194,248,22,81,194,32,55,89,162,44,37,52,2,26,222,33,56,28,248, +22,79,248,22,73,23,195,2,249,22,7,9,248,22,72,195,91,159,38,11,90, +161,38,36,11,27,248,22,73,196,28,248,22,79,248,22,73,23,195,2,249,22, +7,9,248,22,72,195,91,159,38,11,90,161,38,36,11,248,2,55,248,22,73, +196,249,22,7,249,22,71,248,22,72,199,196,195,249,22,7,249,22,71,248,22, +72,199,196,195,32,57,89,162,8,44,37,55,2,26,222,33,58,27,249,22,157, +14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96, +23,196,2,27,248,22,105,23,197,1,27,249,22,157,14,2,42,23,196,2,28, 23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,27,248,22,105, -23,197,1,27,249,22,156,14,2,41,23,196,2,28,23,193,2,87,94,23,194, -1,249,22,71,248,22,96,23,196,2,27,248,22,105,23,197,1,27,249,22,156, -14,2,41,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96, -23,196,2,248,2,62,248,22,105,23,197,1,248,22,81,194,248,22,81,194,248, -22,81,194,32,64,89,162,8,44,37,55,2,25,222,33,65,27,249,22,156,14, -2,41,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23, -196,2,27,248,22,105,23,197,1,27,249,22,156,14,2,41,23,196,2,28,23, -193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,27,248,22,105,23, -197,1,27,249,22,156,14,2,41,23,196,2,28,23,193,2,87,94,23,194,1, -249,22,71,248,22,96,23,196,2,248,2,64,248,22,105,23,197,1,248,22,81, -194,248,22,81,194,248,22,81,194,27,248,2,64,23,195,1,192,28,249,22,178, -8,248,22,73,23,200,2,23,197,1,28,249,22,176,8,248,22,72,23,200,2, -23,196,1,251,22,143,9,2,17,6,26,26,99,121,99,108,101,32,105,110,32, -108,111,97,100,105,110,103,32,97,116,32,126,101,58,32,126,101,23,200,1,249, -22,2,22,73,248,22,86,249,22,71,23,206,1,23,202,1,12,12,247,192,20, -14,159,80,159,40,45,38,249,22,71,248,22,176,14,247,22,149,12,23,197,1, -20,14,159,80,159,40,40,38,250,80,159,43,41,38,249,22,27,11,80,159,45, -40,38,22,162,4,23,196,1,249,247,22,137,5,23,198,1,248,22,59,248,22, -173,13,23,198,1,87,94,28,28,248,22,169,13,23,196,2,10,248,22,188,4, -23,196,2,12,28,23,197,2,250,22,145,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,146,9,2,17,6,19, -19,109,111,100,117,108,101,45,112,97,116,104,32,111,114,32,112,97,116,104,23, -198,2,28,28,248,22,69,23,196,2,249,22,176,8,248,22,72,23,198,2,2, -3,11,248,22,181,4,248,22,96,196,28,28,248,22,69,23,196,2,249,22,176, -8,248,22,72,23,198,2,66,112,108,97,110,101,116,11,87,94,28,207,12,20, -14,159,80,159,37,52,38,80,158,37,50,90,161,37,36,10,249,22,163,4,21, -94,2,26,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,252,212,199,200,201,202,80,158, -42,50,87,94,23,193,1,27,89,162,8,44,37,46,79,115,104,111,119,45,99, -111,108,108,101,99,116,105,111,110,45,101,114,114,223,5,33,49,27,28,248,22, -56,23,198,2,27,250,22,146,2,80,159,43,44,38,249,22,71,23,203,2,247, -22,147,14,11,28,23,193,2,192,87,94,23,193,1,91,159,38,11,90,161,38, -36,11,27,248,22,62,23,202,2,248,2,50,248,2,52,23,195,1,27,251,80, -159,47,54,38,2,17,23,202,1,28,248,22,79,23,199,2,23,199,2,248,22, -72,23,199,2,28,248,22,79,23,199,2,9,248,22,73,23,199,2,249,22,187, -13,23,195,1,28,248,22,79,23,197,1,87,94,23,197,1,6,8,8,109,97, -105,110,46,114,107,116,249,22,129,7,23,199,1,6,4,4,46,114,107,116,28, -248,22,170,6,23,198,2,87,94,23,194,1,27,27,28,23,200,2,28,249,22, -176,8,23,202,2,80,158,43,47,80,158,41,48,27,248,22,182,4,23,202,2, -28,248,22,169,13,23,194,2,91,159,39,11,90,161,39,36,11,248,22,190,13, -23,197,1,87,95,83,160,38,11,80,158,45,47,23,204,2,83,160,38,11,80, -158,45,48,192,192,11,11,28,23,193,2,192,87,94,23,193,1,27,247,22,138, -5,28,23,193,2,192,87,94,23,193,1,247,22,146,14,27,250,22,146,2,80, -159,44,44,38,249,22,71,23,204,2,23,199,2,11,28,23,193,2,192,87,94, -23,193,1,91,159,38,11,90,161,38,36,11,248,2,54,248,2,56,23,203,2, -250,22,1,22,187,13,23,199,1,249,22,85,249,22,2,32,0,89,162,8,44, -37,44,9,222,33,58,23,200,1,248,22,81,27,248,22,173,6,23,202,2,28, -249,22,176,3,194,39,28,249,22,176,6,2,27,249,22,128,7,204,249,22,164, -3,198,39,249,22,129,7,250,22,128,7,205,36,249,22,164,3,199,39,2,28, -200,200,28,248,22,169,13,23,198,2,87,94,23,194,1,28,248,22,128,14,23, -198,2,91,159,39,11,90,161,39,36,11,248,22,190,13,23,201,2,87,95,23, -195,1,23,193,1,28,249,22,156,14,2,59,248,22,174,13,23,197,1,249,80, -159,44,53,38,23,202,2,2,29,23,200,2,248,22,81,6,26,26,32,40,97, -32,112,97,116,104,32,109,117,115,116,32,98,101,32,97,98,115,111,108,117,116, -101,41,28,249,22,176,8,248,22,72,23,200,2,2,26,27,250,22,146,2,80, -159,43,44,38,249,22,71,23,203,2,247,22,147,14,11,28,23,193,2,192,87, -94,23,193,1,91,159,39,11,90,161,38,36,11,27,248,22,96,23,203,2,248, -2,60,248,2,62,23,195,1,90,161,37,38,11,28,248,22,79,248,22,98,23, -203,2,28,248,22,79,23,194,2,249,22,158,14,0,8,35,114,120,34,91,46, -93,34,23,196,2,11,10,27,27,28,23,197,2,249,22,85,28,248,22,79,248, -22,98,23,207,2,21,93,6,5,5,109,122,108,105,98,249,22,1,22,85,249, -22,2,32,0,89,162,8,44,37,44,9,222,33,66,248,22,98,23,210,2,23, -197,2,28,248,22,79,23,196,2,248,22,81,23,197,2,23,195,2,251,80,159, -49,54,38,2,17,23,204,1,248,22,72,23,198,2,248,22,73,23,198,1,249, -22,187,13,23,195,1,28,23,198,1,87,94,23,196,1,27,248,22,173,6,23, -199,2,28,249,22,176,3,194,39,28,249,22,176,6,2,27,249,22,128,7,201, -249,22,164,3,198,39,249,22,129,7,250,22,128,7,202,36,249,22,164,3,199, -39,2,28,197,197,28,248,22,79,23,197,1,87,94,23,197,1,6,8,8,109, -97,105,110,46,114,107,116,28,249,22,158,14,0,8,35,114,120,34,91,46,93, -34,23,199,2,27,248,22,173,6,23,199,2,28,249,22,176,3,194,39,28,249, -22,176,6,2,27,249,22,128,7,201,249,22,164,3,198,39,249,22,129,7,250, -22,128,7,202,36,249,22,164,3,199,39,2,28,197,197,249,22,129,7,23,199, -1,6,4,4,46,114,107,116,28,249,22,176,8,248,22,72,23,200,2,64,102, -105,108,101,27,249,22,130,14,248,22,134,14,248,22,96,23,202,2,27,28,23, -202,2,28,249,22,176,8,23,204,2,80,158,45,47,80,158,43,48,27,248,22, -182,4,23,204,2,28,248,22,169,13,23,194,2,91,159,39,11,90,161,39,36, -11,248,22,190,13,23,197,1,87,95,83,160,38,11,80,158,47,47,23,206,2, -83,160,38,11,80,158,47,48,192,192,11,11,28,23,193,2,192,87,94,23,193, -1,27,247,22,138,5,28,23,193,2,192,87,94,23,193,1,247,22,146,14,91, -159,39,11,90,161,39,36,11,248,22,190,13,23,197,2,87,95,23,195,1,23, -193,1,28,249,22,156,14,2,59,248,22,174,13,23,197,1,249,80,159,45,53, -38,23,198,1,2,29,195,12,87,94,28,28,248,22,169,13,23,194,2,10,248, -22,128,8,23,194,2,87,94,23,199,1,12,28,23,199,2,250,22,145,9,67, -114,101,113,117,105,114,101,249,22,154,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,72,23,199,2,6, -0,0,23,202,1,87,94,23,199,1,250,22,146,9,2,17,249,22,154,7,6, -13,13,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23,198,2,248,22, -72,23,199,2,6,0,0,23,200,2,27,28,248,22,128,8,23,195,2,249,22, -133,8,23,196,2,36,249,22,132,14,248,22,133,14,23,197,2,11,27,28,248, -22,128,8,23,196,2,249,22,133,8,23,197,2,37,248,80,159,42,55,38,23, -195,2,91,159,39,11,90,161,39,36,11,28,248,22,128,8,23,199,2,250,22, -7,2,30,249,22,133,8,23,203,2,38,2,30,248,22,190,13,23,198,2,87, -95,23,195,1,23,193,1,27,28,248,22,128,8,23,200,2,249,22,133,8,23, -201,2,39,249,80,159,47,53,38,23,197,2,5,0,27,28,248,22,128,8,23, -201,2,249,22,133,8,23,202,2,40,248,22,181,4,23,200,2,27,27,250,22, -146,2,80,159,51,43,38,248,22,176,14,247,22,149,12,11,28,23,193,2,192, -87,94,23,193,1,27,247,22,130,2,87,94,250,22,144,2,80,159,52,43,38, -248,22,176,14,247,22,149,12,195,192,87,95,28,23,208,1,27,250,22,146,2, -23,197,2,197,11,28,23,193,1,12,87,95,27,27,28,248,22,17,80,159,51, -46,38,80,159,50,46,38,247,22,19,250,22,25,248,22,23,23,197,2,80,159, -53,45,38,23,196,1,27,248,22,176,14,247,22,149,12,249,22,3,83,158,40, -20,100,94,89,162,8,44,37,55,9,226,12,11,2,3,33,67,23,195,1,23, -196,1,248,28,248,22,17,80,159,50,46,38,32,0,89,162,44,37,42,9,222, -33,68,80,159,49,59,37,89,162,44,36,51,9,227,13,9,8,4,3,33,69, -250,22,144,2,23,197,1,197,10,12,28,28,248,22,128,8,23,202,1,11,28, -248,22,170,6,23,206,2,10,28,248,22,56,23,206,2,10,28,248,22,69,23, -206,2,249,22,176,8,248,22,72,23,208,2,2,26,11,250,22,144,2,80,159, -50,44,38,28,248,22,170,6,23,209,2,249,22,71,23,210,1,27,28,23,212, -2,28,249,22,176,8,23,214,2,80,158,55,47,87,94,23,212,1,80,158,53, -48,27,248,22,182,4,23,214,2,28,248,22,169,13,23,194,2,91,159,39,11, -90,161,39,36,11,248,22,190,13,23,197,1,87,95,83,160,38,11,80,158,57, -47,23,23,83,160,38,11,80,158,57,48,192,192,11,11,28,23,193,2,192,87, -94,23,193,1,27,247,22,138,5,28,23,193,2,192,87,94,23,193,1,247,22, -146,14,249,22,71,23,210,1,247,22,147,14,252,22,130,8,23,208,1,23,207, -1,23,205,1,23,203,1,201,12,193,87,96,83,160,38,11,80,158,36,50,248, -80,159,37,58,38,249,22,27,11,80,159,39,52,38,248,22,161,4,80,159,37, -51,38,248,22,137,5,80,159,37,37,37,248,22,140,13,80,159,37,42,37,83, +23,197,1,27,249,22,157,14,2,42,23,196,2,28,23,193,2,87,94,23,194, +1,249,22,71,248,22,96,23,196,2,248,2,57,248,22,105,23,197,1,248,22, +81,194,248,22,81,194,248,22,81,194,28,249,22,177,6,194,6,1,1,46,2, +22,28,249,22,177,6,194,6,2,2,46,46,62,117,112,192,0,11,35,114,120, +34,91,46,93,115,115,36,34,32,61,89,162,44,37,52,2,26,222,33,62,28, +248,22,79,248,22,73,23,195,2,249,22,7,9,248,22,72,195,91,159,38,11, +90,161,38,36,11,27,248,22,73,196,28,248,22,79,248,22,73,23,195,2,249, +22,7,9,248,22,72,195,91,159,38,11,90,161,38,36,11,248,2,61,248,22, +73,196,249,22,7,249,22,71,248,22,72,199,196,195,249,22,7,249,22,71,248, +22,72,199,196,195,32,63,89,162,8,44,37,55,2,26,222,33,64,27,249,22, +157,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22, +96,23,196,2,27,248,22,105,23,197,1,27,249,22,157,14,2,42,23,196,2, +28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,27,248,22, +105,23,197,1,27,249,22,157,14,2,42,23,196,2,28,23,193,2,87,94,23, +194,1,249,22,71,248,22,96,23,196,2,248,2,63,248,22,105,23,197,1,248, +22,81,194,248,22,81,194,248,22,81,194,32,65,89,162,8,44,37,55,2,26, +222,33,66,27,249,22,157,14,2,42,23,196,2,28,23,193,2,87,94,23,194, +1,249,22,71,248,22,96,23,196,2,27,248,22,105,23,197,1,27,249,22,157, +14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96, +23,196,2,27,248,22,105,23,197,1,27,249,22,157,14,2,42,23,196,2,28, +23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,248,2,65,248, +22,105,23,197,1,248,22,81,194,248,22,81,194,248,22,81,194,27,248,2,65, +23,195,1,192,28,249,22,179,8,248,22,73,23,200,2,23,197,1,28,249,22, +177,8,248,22,72,23,200,2,23,196,1,251,22,144,9,2,18,6,26,26,99, +121,99,108,101,32,105,110,32,108,111,97,100,105,110,103,32,97,116,32,126,101, +58,32,126,101,23,200,1,249,22,2,22,73,248,22,86,249,22,71,23,206,1, +23,202,1,12,12,247,192,20,14,159,80,159,40,45,38,249,22,71,248,22,177, +14,247,22,150,12,23,197,1,20,14,159,80,159,40,40,38,250,80,159,43,41, +38,249,22,27,11,80,159,45,40,38,22,162,4,23,196,1,249,247,22,138,5, +23,198,1,248,22,59,248,22,174,13,23,198,1,87,94,28,28,248,22,170,13, +23,196,2,10,248,22,189,4,23,196,2,12,28,23,197,2,250,22,146,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,147,9,2,18,6,19,19,109,111,100,117,108,101,45,112,97,116,104,32, +111,114,32,112,97,116,104,23,198,2,28,28,248,22,69,23,196,2,249,22,177, +8,248,22,72,23,198,2,2,4,11,248,22,182,4,248,22,96,196,28,28,248, +22,69,23,196,2,249,22,177,8,248,22,72,23,198,2,66,112,108,97,110,101, +116,11,87,94,28,207,12,20,14,159,80,159,37,52,38,80,158,37,50,90,161, +37,36,10,249,22,164,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, +252,212,199,200,201,202,80,158,42,50,87,94,23,193,1,27,89,162,8,44,37, +46,79,115,104,111,119,45,99,111,108,108,101,99,116,105,111,110,45,101,114,114, +223,5,33,50,27,28,248,22,56,23,198,2,27,250,22,146,2,80,159,43,44, +38,249,22,71,23,203,2,247,22,148,14,11,28,23,193,2,192,87,94,23,193, +1,91,159,38,11,90,161,38,36,11,27,248,22,62,23,202,2,248,2,51,248, +2,53,23,195,1,27,251,80,159,47,54,38,2,18,23,202,1,28,248,22,79, +23,199,2,23,199,2,248,22,72,23,199,2,28,248,22,79,23,199,2,9,248, +22,73,23,199,2,249,22,188,13,23,195,1,28,248,22,79,23,197,1,87,94, +23,197,1,6,8,8,109,97,105,110,46,114,107,116,249,22,130,7,23,199,1, +6,4,4,46,114,107,116,28,248,22,171,6,23,198,2,87,94,23,194,1,27, +27,28,23,200,2,28,249,22,177,8,23,202,2,80,158,43,47,80,158,41,48, +27,248,22,183,4,23,202,2,28,248,22,170,13,23,194,2,91,159,39,11,90, +161,39,36,11,248,22,191,13,23,197,1,87,95,83,160,38,11,80,158,45,47, +23,204,2,83,160,38,11,80,158,45,48,192,192,11,11,28,23,193,2,192,87, +94,23,193,1,27,247,22,139,5,28,23,193,2,192,87,94,23,193,1,247,22, +147,14,27,250,22,146,2,80,159,44,44,38,249,22,71,23,204,2,23,199,2, +11,28,23,193,2,192,87,94,23,193,1,91,159,38,11,90,161,38,36,11,248, +2,55,248,2,57,23,203,2,250,22,1,22,188,13,23,199,1,249,22,85,249, +22,2,32,0,89,162,8,44,37,44,9,222,33,59,23,200,1,248,22,81,27, +248,22,174,6,23,202,2,28,249,22,176,3,194,39,28,249,22,177,6,2,28, +249,22,129,7,204,249,22,164,3,198,39,249,22,130,7,250,22,129,7,205,36, +249,22,164,3,199,39,2,29,200,200,28,248,22,170,13,23,198,2,87,94,23, +194,1,28,248,22,129,14,23,198,2,91,159,39,11,90,161,39,36,11,248,22, +191,13,23,201,2,87,95,23,195,1,23,193,1,28,249,22,157,14,2,60,248, +22,175,13,23,197,1,249,80,159,44,53,38,23,202,2,2,30,23,200,2,248, +22,81,6,26,26,32,40,97,32,112,97,116,104,32,109,117,115,116,32,98,101, +32,97,98,115,111,108,117,116,101,41,28,249,22,177,8,248,22,72,23,200,2, +2,27,27,250,22,146,2,80,159,43,44,38,249,22,71,23,203,2,247,22,148, +14,11,28,23,193,2,192,87,94,23,193,1,91,159,39,11,90,161,38,36,11, +27,248,22,96,23,203,2,248,2,61,248,2,63,23,195,1,90,161,37,38,11, +28,248,22,79,248,22,98,23,203,2,28,248,22,79,23,194,2,249,22,159,14, +0,8,35,114,120,34,91,46,93,34,23,196,2,11,10,27,27,28,23,197,2, +249,22,85,28,248,22,79,248,22,98,23,207,2,21,93,6,5,5,109,122,108, +105,98,249,22,1,22,85,249,22,2,32,0,89,162,8,44,37,44,9,222,33, +67,248,22,98,23,210,2,23,197,2,28,248,22,79,23,196,2,248,22,81,23, +197,2,23,195,2,251,80,159,49,54,38,2,18,23,204,1,248,22,72,23,198, +2,248,22,73,23,198,1,249,22,188,13,23,195,1,28,23,198,1,87,94,23, +196,1,27,248,22,174,6,23,199,2,28,249,22,176,3,194,39,28,249,22,177, +6,2,28,249,22,129,7,201,249,22,164,3,198,39,249,22,130,7,250,22,129, +7,202,36,249,22,164,3,199,39,2,29,197,197,28,248,22,79,23,197,1,87, +94,23,197,1,6,8,8,109,97,105,110,46,114,107,116,28,249,22,159,14,0, +8,35,114,120,34,91,46,93,34,23,199,2,27,248,22,174,6,23,199,2,28, +249,22,176,3,194,39,28,249,22,177,6,2,28,249,22,129,7,201,249,22,164, +3,198,39,249,22,130,7,250,22,129,7,202,36,249,22,164,3,199,39,2,29, +197,197,249,22,130,7,23,199,1,6,4,4,46,114,107,116,28,249,22,177,8, +248,22,72,23,200,2,64,102,105,108,101,27,249,22,131,14,248,22,135,14,248, +22,96,23,202,2,27,28,23,202,2,28,249,22,177,8,23,204,2,80,158,45, +47,80,158,43,48,27,248,22,183,4,23,204,2,28,248,22,170,13,23,194,2, +91,159,39,11,90,161,39,36,11,248,22,191,13,23,197,1,87,95,83,160,38, +11,80,158,47,47,23,206,2,83,160,38,11,80,158,47,48,192,192,11,11,28, +23,193,2,192,87,94,23,193,1,27,247,22,139,5,28,23,193,2,192,87,94, +23,193,1,247,22,147,14,91,159,39,11,90,161,39,36,11,248,22,191,13,23, +197,2,87,95,23,195,1,23,193,1,28,249,22,157,14,2,60,248,22,175,13, +23,197,1,249,80,159,45,53,38,23,198,1,2,30,195,12,87,94,28,28,248, +22,170,13,23,194,2,10,248,22,129,8,23,194,2,87,94,23,199,1,12,28, +23,199,2,250,22,146,9,67,114,101,113,117,105,114,101,249,22,155,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,72,23,199,2,6,0,0,23,202,1,87,94,23,199,1,250,22,147, +9,2,18,249,22,155,7,6,13,13,109,111,100,117,108,101,32,112,97,116,104, +126,97,28,23,198,2,248,22,72,23,199,2,6,0,0,23,200,2,27,28,248, +22,129,8,23,195,2,249,22,134,8,23,196,2,36,249,22,133,14,248,22,134, +14,23,197,2,11,27,28,248,22,129,8,23,196,2,249,22,134,8,23,197,2, +37,248,80,159,42,55,38,23,195,2,91,159,39,11,90,161,39,36,11,28,248, +22,129,8,23,199,2,250,22,7,2,31,249,22,134,8,23,203,2,38,2,31, +248,22,191,13,23,198,2,87,95,23,195,1,23,193,1,27,28,248,22,129,8, +23,200,2,249,22,134,8,23,201,2,39,249,80,159,47,53,38,23,197,2,5, +0,27,28,248,22,129,8,23,201,2,249,22,134,8,23,202,2,40,248,22,182, +4,23,200,2,27,27,250,22,146,2,80,159,51,43,38,248,22,177,14,247,22, +150,12,11,28,23,193,2,192,87,94,23,193,1,27,247,22,130,2,87,94,250, +22,144,2,80,159,52,43,38,248,22,177,14,247,22,150,12,195,192,87,95,28, +23,208,1,27,250,22,146,2,23,197,2,197,11,28,23,193,1,12,87,95,27, +27,28,248,22,17,80,159,51,46,38,80,159,50,46,38,247,22,19,250,22,25, +248,22,23,23,197,2,80,159,53,45,38,23,196,1,27,248,22,177,14,247,22, +150,12,249,22,3,83,158,40,20,100,94,89,162,8,44,37,55,9,226,12,11, +2,3,33,68,23,195,1,23,196,1,248,28,248,22,17,80,159,50,46,38,32, +0,89,162,44,37,42,9,222,33,69,80,159,49,59,37,89,162,44,36,51,9, +227,13,9,8,4,3,33,70,250,22,144,2,23,197,1,197,10,12,28,28,248, +22,129,8,23,202,1,11,28,248,22,171,6,23,206,2,10,28,248,22,56,23, +206,2,10,28,248,22,69,23,206,2,249,22,177,8,248,22,72,23,208,2,2, +27,11,250,22,144,2,80,159,50,44,38,28,248,22,171,6,23,209,2,249,22, +71,23,210,1,27,28,23,212,2,28,249,22,177,8,23,214,2,80,158,55,47, +87,94,23,212,1,80,158,53,48,27,248,22,183,4,23,214,2,28,248,22,170, +13,23,194,2,91,159,39,11,90,161,39,36,11,248,22,191,13,23,197,1,87, +95,83,160,38,11,80,158,57,47,23,23,83,160,38,11,80,158,57,48,192,192, +11,11,28,23,193,2,192,87,94,23,193,1,27,247,22,139,5,28,23,193,2, +192,87,94,23,193,1,247,22,147,14,249,22,71,23,210,1,247,22,148,14,252, +22,131,8,23,208,1,23,207,1,23,205,1,23,203,1,201,12,193,87,96,83, 160,38,11,80,158,36,50,248,80,159,37,58,38,249,22,27,11,80,159,39,52, -38,159,36,20,105,159,36,16,1,11,16,0,83,158,42,20,103,144,66,35,37, -98,111,111,116,29,11,11,11,11,11,10,38,80,158,36,36,20,105,159,37,16, -23,2,1,2,2,30,2,4,72,112,97,116,104,45,115,116,114,105,110,103,63, -10,30,2,4,75,112,97,116,104,45,97,100,100,45,115,117,102,102,105,120,7, -30,2,6,2,7,4,30,2,6,1,23,101,120,116,101,110,100,45,112,97,114, -97,109,101,116,101,114,105,122,97,116,105,111,110,3,2,8,2,9,2,10,2, -11,2,12,2,13,2,14,2,15,2,16,2,17,30,2,18,2,7,4,30,2, -4,79,112,97,116,104,45,114,101,112,108,97,99,101,45,115,117,102,102,105,120, -9,30,2,4,69,45,102,105,110,100,45,99,111,108,0,30,2,4,76,110,111, -114,109,97,108,45,99,97,115,101,45,112,97,116,104,6,2,19,2,20,30,2, -18,74,114,101,112,97,114,97,109,101,116,101,114,105,122,101,5,16,0,16,0, -36,16,0,36,16,12,2,11,2,12,2,9,2,10,2,13,2,14,2,2,2, -8,2,1,2,16,2,15,2,17,48,11,11,39,36,11,11,11,16,2,2,19, -2,20,16,2,11,11,16,2,2,19,2,20,38,38,37,11,11,11,16,0,16, -0,16,0,36,36,11,11,11,11,16,0,16,0,16,0,36,36,16,0,16,15, -83,158,36,16,2,89,162,44,37,45,9,223,0,33,31,80,159,36,59,37,83, -158,36,16,2,248,22,189,7,69,115,111,45,115,117,102,102,105,120,80,159,36, -36,37,83,158,36,16,2,89,162,44,38,8,35,2,2,223,0,33,40,80,159, -36,37,37,83,158,36,16,2,32,0,89,162,8,44,37,42,2,8,222,192,80, -159,36,42,37,83,158,36,16,2,247,22,133,2,80,159,36,43,37,83,158,36, -16,2,247,22,132,2,80,159,36,44,37,83,158,36,16,2,247,22,67,80,159, -36,45,37,83,158,36,16,2,248,22,18,74,109,111,100,117,108,101,45,108,111, -97,100,105,110,103,80,159,36,46,37,83,158,36,16,2,11,80,158,36,47,83, -158,36,16,2,11,80,158,36,48,83,158,36,16,2,32,0,89,162,44,38,8, -25,2,15,222,33,46,80,159,36,49,37,83,158,36,16,2,11,80,158,36,50, -83,158,36,16,2,91,159,38,10,90,161,37,36,10,11,90,161,37,37,10,83, -158,39,20,99,96,2,17,89,162,8,44,37,51,9,224,2,0,33,47,89,162, -44,39,49,9,223,1,33,48,89,162,44,40,8,32,9,224,2,0,33,70,208, -80,159,36,51,37,83,158,36,16,2,89,162,44,36,45,2,19,223,0,33,71, -80,159,36,56,37,83,158,36,16,2,89,162,8,44,36,45,2,20,223,0,33, -72,80,159,36,57,37,96,29,94,2,3,68,35,37,107,101,114,110,101,108,11, -29,94,2,3,69,35,37,109,105,110,45,115,116,120,11,2,4,2,18,9,9, -9,36,0}; - EVAL_ONE_SIZED_STR((char *)expr, 6533); +38,248,22,161,4,80,159,37,51,38,248,22,138,5,80,159,37,37,37,248,22, +141,13,80,159,37,42,37,83,160,38,11,80,158,36,50,248,80,159,37,58,38, +249,22,27,11,80,159,39,52,38,159,36,20,105,159,36,16,1,11,16,0,83, +158,42,20,103,145,2,1,2,1,29,11,11,11,11,11,10,38,80,158,36,36, +20,105,159,37,16,23,2,2,2,3,30,2,5,72,112,97,116,104,45,115,116, +114,105,110,103,63,10,30,2,5,75,112,97,116,104,45,97,100,100,45,115,117, +102,102,105,120,7,30,2,7,2,8,4,30,2,7,1,23,101,120,116,101,110, +100,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,3,2,9, +2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,2,18,30,2,19, +2,8,4,30,2,5,79,112,97,116,104,45,114,101,112,108,97,99,101,45,115, +117,102,102,105,120,9,30,2,5,69,45,102,105,110,100,45,99,111,108,0,30, +2,5,76,110,111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,6,2, +20,2,21,30,2,19,74,114,101,112,97,114,97,109,101,116,101,114,105,122,101, +5,16,0,16,0,36,16,0,36,16,12,2,12,2,13,2,10,2,11,2,14, +2,15,2,3,2,9,2,2,2,17,2,16,2,18,48,11,11,39,36,11,11, +11,16,2,2,20,2,21,16,2,11,11,16,2,2,20,2,21,38,38,37,11, +11,11,16,0,16,0,16,0,36,36,11,11,11,11,16,0,16,0,16,0,36, +36,16,0,16,15,83,158,36,16,2,89,162,44,37,45,9,223,0,33,32,80, +159,36,59,37,83,158,36,16,2,248,22,190,7,69,115,111,45,115,117,102,102, +105,120,80,159,36,36,37,83,158,36,16,2,89,162,44,38,8,37,2,3,223, +0,33,41,80,159,36,37,37,83,158,36,16,2,32,0,89,162,8,44,37,42, +2,9,222,192,80,159,36,42,37,83,158,36,16,2,247,22,133,2,80,159,36, +43,37,83,158,36,16,2,247,22,132,2,80,159,36,44,37,83,158,36,16,2, +247,22,67,80,159,36,45,37,83,158,36,16,2,248,22,18,74,109,111,100,117, +108,101,45,108,111,97,100,105,110,103,80,159,36,46,37,83,158,36,16,2,11, +80,158,36,47,83,158,36,16,2,11,80,158,36,48,83,158,36,16,2,32,0, +89,162,44,38,8,25,2,16,222,33,47,80,159,36,49,37,83,158,36,16,2, +11,80,158,36,50,83,158,36,16,2,91,159,38,10,90,161,37,36,10,11,90, +161,37,37,10,83,158,39,20,99,96,2,18,89,162,8,44,37,51,9,224,2, +0,33,48,89,162,44,39,49,9,223,1,33,49,89,162,44,40,8,32,9,224, +2,0,33,71,208,80,159,36,51,37,83,158,36,16,2,89,162,44,36,45,2, +20,223,0,33,72,80,159,36,56,37,83,158,36,16,2,89,162,8,44,36,45, +2,21,223,0,33,73,80,159,36,57,37,96,29,94,2,4,68,35,37,107,101, +114,110,101,108,11,29,94,2,4,69,35,37,109,105,110,45,115,116,120,11,2, +5,2,19,9,9,9,36,0}; + EVAL_ONE_SIZED_STR((char *)expr, 6916); } diff --git a/src/mzscheme/src/env.c b/src/mzscheme/src/env.c index d38fd4d65c..beff176cd2 100644 --- a/src/mzscheme/src/env.c +++ b/src/mzscheme/src/env.c @@ -90,6 +90,7 @@ static Scheme_Object *namespace_mapped_symbols(int, Scheme_Object *[]); static Scheme_Object *namespace_module_registry(int, Scheme_Object *[]); static Scheme_Object *variable_p(int, Scheme_Object *[]); static Scheme_Object *variable_module_path(int, Scheme_Object *[]); +static Scheme_Object *variable_module_source(int, Scheme_Object *[]); static Scheme_Object *variable_namespace(int, Scheme_Object *[]); static Scheme_Object *variable_top_level_namespace(int, Scheme_Object *[]); static Scheme_Object *variable_phase(int, Scheme_Object *[]); @@ -650,6 +651,7 @@ static void make_kernel_env(void) GLOBAL_PRIM_W_ARITY("variable-reference?", variable_p, 1, 1, env); GLOBAL_PRIM_W_ARITY("variable-reference->resolved-module-path", variable_module_path, 1, 1, env); + GLOBAL_PRIM_W_ARITY("variable-reference->module-source", variable_module_source, 1, 1, env); GLOBAL_PRIM_W_ARITY("variable-reference->empty-namespace", variable_namespace, 1, 1, env); GLOBAL_PRIM_W_ARITY("variable-reference->namespace", variable_top_level_namespace, 1, 1, env); GLOBAL_PRIM_W_ARITY("variable-reference->phase", variable_phase, 1, 1, env); @@ -4559,6 +4561,24 @@ static Scheme_Object *variable_module_path(int argc, Scheme_Object *argv[]) return scheme_false; } +static Scheme_Object *variable_module_source(int argc, Scheme_Object *argv[]) +{ + Scheme_Env *env; + + if (!SAME_TYPE(SCHEME_TYPE(argv[0]), scheme_global_ref_type)) + env = NULL; + else + env = ((Scheme_Bucket_With_Home *)SCHEME_PTR_VAL(argv[0]))->home; + + if (!env) + scheme_wrong_type("variable-reference->module-source", "variable-reference", 0, argc, argv); + + if (env->module) + return env->module->modsrc; + else + return scheme_false; +} + static Scheme_Object * now_transforming(int argc, Scheme_Object *argv[]) { diff --git a/src/mzscheme/src/error.c b/src/mzscheme/src/error.c index a8ba2bc264..42427dcc75 100644 --- a/src/mzscheme/src/error.c +++ b/src/mzscheme/src/error.c @@ -1942,7 +1942,7 @@ void scheme_unbound_global(Scheme_Bucket *b) name, errmsg, name, - ((Scheme_Bucket_With_Home *)b)->home->module->modname, + ((Scheme_Bucket_With_Home *)b)->home->module->modsrc, phase); } else { scheme_raise_exn(MZEXN_FAIL_CONTRACT_VARIABLE, diff --git a/src/mzscheme/src/eval.c b/src/mzscheme/src/eval.c index 85caf1f1e7..fea42d2fe2 100644 --- a/src/mzscheme/src/eval.c +++ b/src/mzscheme/src/eval.c @@ -1877,7 +1877,7 @@ static Scheme_Object *link_module_variable(Scheme_Object *modidx, env->phase, modname, mod_phase, - env->module ? env->module->modname : scheme_false); + env->module ? env->module->modsrc : scheme_false); return NULL; } @@ -1908,7 +1908,7 @@ static Scheme_Object *link_module_variable(Scheme_Object *modidx, env->phase, exprs ? SCHEME_CDR(modname) : modname, mod_phase, - env->module ? env->module->modname : scheme_false); + env->module ? env->module->modsrc : scheme_false); } if (!(((Scheme_Bucket_With_Flags *)bkt)->flags & (GLOB_IS_IMMUTATED | GLOB_IS_LINKED))) ((Scheme_Bucket_With_Flags *)bkt)->flags |= GLOB_IS_LINKED; @@ -2852,7 +2852,7 @@ char *scheme_optimize_context_to_string(Scheme_Object *context) } if (SAME_TYPE(SCHEME_TYPE(mod), scheme_module_type)) { - mctx = scheme_display_to_string(((Scheme_Module *)mod)->modname, NULL); + mctx = scheme_display_to_string(((Scheme_Module *)mod)->modsrc, NULL); mprefix = " in module: "; } else { mctx = ""; diff --git a/src/mzscheme/src/module.c b/src/mzscheme/src/module.c index 1ce196ddab..98600c0a37 100644 --- a/src/mzscheme/src/module.c +++ b/src/mzscheme/src/module.c @@ -43,6 +43,7 @@ SHARED_OK static mzrt_mutex *modpath_table_mutex; /* locals */ static Scheme_Object *current_module_name_resolver(int argc, Scheme_Object *argv[]); static Scheme_Object *current_module_name_prefix(int argc, Scheme_Object *argv[]); +static Scheme_Object *current_module_name_source(int argc, Scheme_Object *argv[]); static Scheme_Object *dynamic_require_for_syntax(int argc, Scheme_Object *argv[]); static Scheme_Object *namespace_require(int argc, Scheme_Object *argv[]); static Scheme_Object *namespace_require_copy(int argc, Scheme_Object *argv[]); @@ -375,6 +376,7 @@ void scheme_init_module(Scheme_Env *env) GLOBAL_PARAMETER("current-module-name-resolver", current_module_name_resolver, MZCONFIG_CURRENT_MODULE_RESOLVER, env); GLOBAL_PARAMETER("current-module-declare-name", current_module_name_prefix, MZCONFIG_CURRENT_MODULE_NAME, env); + GLOBAL_PARAMETER("current-module-declare-source", current_module_name_source, MZCONFIG_CURRENT_MODULE_SRC, env); GLOBAL_PRIM_W_ARITY("dynamic-require", scheme_dynamic_require, 2, 3, env); GLOBAL_PRIM_W_ARITY("dynamic-require-for-syntax", dynamic_require_for_syntax, 2, 3, env); @@ -449,6 +451,7 @@ void scheme_finish_kernel(Scheme_Env *env) } kernel->modname = kernel_modname; + kernel->modsrc = kernel_modname; kernel->requires = scheme_null; kernel->et_requires = scheme_null; kernel->tt_requires = scheme_null; @@ -853,6 +856,30 @@ current_module_name_prefix(int argc, Scheme_Object *argv[]) -1, prefix_p, "resolved-module-path or #f", 1); } +static Scheme_Object *source_p(int argc, Scheme_Object **argv) +{ + Scheme_Object *o = argv[0]; + + if (!SCHEME_FALSEP(o) + && !SCHEME_SYMBOLP(o) + && (!SCHEME_PATHP(o) + || !scheme_is_complete_path(SCHEME_PATH_VAL(o), + SCHEME_PATH_LEN(o), + SCHEME_PLATFORM_PATH_KIND))) + return NULL; + + return o; +} + +static Scheme_Object * +current_module_name_source(int argc, Scheme_Object *argv[]) +{ + return scheme_param_config("current-module-declared-name", + scheme_make_integer(MZCONFIG_CURRENT_MODULE_SRC), + argc, argv, + -1, source_p, "symbol, complete path, or #f", 1); +} + /**********************************************************************/ /* procedures */ /**********************************************************************/ @@ -991,7 +1018,7 @@ static Scheme_Object *_dynamic_require(int argc, Scheme_Object *argv[], scheme_raise_exn(MZEXN_FAIL_CONTRACT, "%s: name is provided as syntax: %V by module: %V", errname, - name, srcm->modname); + name, srcm->modsrc); } } return NULL; @@ -1050,7 +1077,7 @@ static Scheme_Object *_dynamic_require(int argc, Scheme_Object *argv[], scheme_raise_exn(MZEXN_FAIL_CONTRACT, "%s: name is not provided: %V by module: %V", errname, - name, srcm->modname); + name, srcm->modsrc); } return NULL; } @@ -1082,14 +1109,14 @@ static Scheme_Object *_dynamic_require(int argc, Scheme_Object *argv[], scheme_raise_exn(MZEXN_FAIL_CONTRACT, "%s: name is protected: %V from module: %V", errname, - name, srcm->modname); + name, srcm->modsrc); } if (!menv || !menv->toplevel) { scheme_raise_exn(MZEXN_FAIL_CONTRACT, "%s: module initialization failed: %V", errname, - srcm->modname); + srcm->modsrc); } b = scheme_bucket_from_table(menv->toplevel, (const char *)srcname); @@ -3437,7 +3464,7 @@ static void check_certified(Scheme_Object *stx, Scheme_Object *certs, "access from an uncertified context to %s %s from module: %D", prot ? "protected" : "unexported", var ? "variable" : "syntax", - env->module->modname); + env->module->modsrc); } } } @@ -3643,7 +3670,7 @@ Scheme_Object *scheme_check_accessible_in_module(Scheme_Env *env, Scheme_Object long srclen; if (from_env->module) - srcstr = scheme_display_to_string(from_env->module->modname, &srclen); + srcstr = scheme_display_to_string(from_env->module->modsrc, &srclen); else { srcstr = ""; srclen = 0; @@ -3653,7 +3680,7 @@ Scheme_Object *scheme_check_accessible_in_module(Scheme_Env *env, Scheme_Object "module mismatch, probably from old bytecode whose dependencies have changed: " "variable not provided (directly or indirectly%s) from module: %D%s%t at source phase level: %d", (position >= 0) ? " and at the expected position" : "", - env->module->modname, + env->module->modsrc, srclen ? " accessed from module: " : "", srcstr, srclen, env->mod_phase); @@ -4321,7 +4348,7 @@ static void start_module(Scheme_Module *m, Scheme_Env *env, int restart, if (SAME_OBJ(m->modname, SCHEME_CAR(l))) { scheme_raise_exn(MZEXN_FAIL_CONTRACT, "module: import cycle detected at: %D", - m->modname); + m->modsrc); } } @@ -4479,7 +4506,7 @@ static void *eval_module_body_k(void) static void eval_module_body(Scheme_Env *menv, Scheme_Env *env) { #ifdef MZ_USE_JIT - (void)scheme_module_run_start(menv, env, scheme_make_pair(menv->module->modname, scheme_true)); + (void)scheme_module_run_start(menv, env, scheme_make_pair(menv->module->modsrc, scheme_true)); #else (void)scheme_module_run_finish(menv, env); #endif @@ -4643,7 +4670,7 @@ Scheme_Env *scheme_primitive_module(Scheme_Object *name, Scheme_Env *for_env) { Scheme_Module *m; Scheme_Env *env; - Scheme_Object *prefix, *insp; + Scheme_Object *prefix, *insp, *src; Scheme_Config *config; m = MALLOC_ONE_TAGGED(Scheme_Module); @@ -4659,14 +4686,21 @@ Scheme_Env *scheme_primitive_module(Scheme_Object *name, Scheme_Env *for_env) name = prefix; else name = scheme_intern_resolved_module_path(name); + src = scheme_get_param(config, MZCONFIG_CURRENT_MODULE_SRC); + if (SCHEME_FALSEP(src)) + src = prefix; + else + src = scheme_intern_resolved_module_path(src); insp = scheme_get_param(config, MZCONFIG_CODE_INSPECTOR); } else { name = scheme_intern_resolved_module_path(name); + src = name; insp = scheme_get_current_inspector(); } m->modname = name; + m->modsrc = src; m->requires = scheme_null; m->et_requires = scheme_null; m->tt_requires = scheme_null; @@ -5070,12 +5104,15 @@ module_execute(Scheme_Object *data) Scheme_Module *m; Scheme_Env *env; Scheme_Env *old_menv; - Scheme_Object *prefix, *insp, **rt_insps, **et_insps; + Scheme_Config *config; + Scheme_Object *prefix, *src, *insp, **rt_insps, **et_insps; m = MALLOC_ONE_TAGGED(Scheme_Module); memcpy(m, data, sizeof(Scheme_Module)); - prefix = scheme_get_param(scheme_current_config(), MZCONFIG_CURRENT_MODULE_NAME); + config = scheme_current_config(); + + prefix = scheme_get_param(config, MZCONFIG_CURRENT_MODULE_NAME); if (SCHEME_MODNAMEP(prefix)) { m->modname = prefix; @@ -5097,6 +5134,13 @@ module_execute(Scheme_Object *data) } } + src = scheme_get_param(config, MZCONFIG_CURRENT_MODULE_SRC); + if (!SCHEME_FALSEP(src)) { + src = scheme_intern_resolved_module_path(src); + m->modsrc = src; + } else + m->modsrc = m->modname; + env = scheme_environment_from_dummy(m->dummy); if (SAME_OBJ(m->modname, kernel_modname)) @@ -5829,6 +5873,7 @@ static Scheme_Object *do_module(Scheme_Object *form, Scheme_Comp_Env *env, rmp = SCHEME_STX_VAL(nm); rmp = scheme_intern_resolved_module_path(rmp); m->modname = rmp; + m->modsrc = rmp; LOG_START_EXPAND(m); @@ -10015,6 +10060,7 @@ static Scheme_Object *write_module(Scheme_Object *obj) l = cons(scheme_false, l); l = cons(m->me->src_modidx, l); + l = cons(SCHEME_PTR_VAL(m->modsrc), l); l = cons(SCHEME_PTR_VAL(m->modname), l); return l; @@ -10059,6 +10105,11 @@ static Scheme_Object *read_module(Scheme_Object *obj) m->modname = e; obj = SCHEME_CDR(obj); + if (!SCHEME_PAIRP(obj)) return_NULL(); + e = scheme_intern_resolved_module_path(SCHEME_CAR(obj)); + m->modsrc = e; + obj = SCHEME_CDR(obj); + if (!SCHEME_PAIRP(obj)) return_NULL(); me->src_modidx = SCHEME_CAR(obj); obj = SCHEME_CDR(obj); diff --git a/src/mzscheme/src/mzmark.c b/src/mzscheme/src/mzmark.c index 30f8c0ab25..93a133926f 100644 --- a/src/mzscheme/src/mzmark.c +++ b/src/mzscheme/src/mzmark.c @@ -2376,6 +2376,7 @@ static int module_val_SIZE(void *p, struct NewGC *gc) { static int module_val_MARK(void *p, struct NewGC *gc) { Scheme_Module *m = (Scheme_Module *)p; gcMARK2(m->modname, gc); + gcMARK2(m->modsrc, gc); gcMARK2(m->et_requires, gc); gcMARK2(m->requires, gc); @@ -2422,6 +2423,7 @@ static int module_val_MARK(void *p, struct NewGC *gc) { static int module_val_FIXUP(void *p, struct NewGC *gc) { Scheme_Module *m = (Scheme_Module *)p; gcFIXUP2(m->modname, gc); + gcFIXUP2(m->modsrc, gc); gcFIXUP2(m->et_requires, gc); gcFIXUP2(m->requires, gc); diff --git a/src/mzscheme/src/mzmarksrc.c b/src/mzscheme/src/mzmarksrc.c index bb75c1301b..dc9721125d 100644 --- a/src/mzscheme/src/mzmarksrc.c +++ b/src/mzscheme/src/mzmarksrc.c @@ -943,6 +943,7 @@ module_val { mark: Scheme_Module *m = (Scheme_Module *)p; gcMARK2(m->modname, gc); + gcMARK2(m->modsrc, gc); gcMARK2(m->et_requires, gc); gcMARK2(m->requires, gc); diff --git a/src/mzscheme/src/mzrt.c b/src/mzscheme/src/mzrt.c index e107a033bc..8694a71806 100644 --- a/src/mzscheme/src/mzrt.c +++ b/src/mzscheme/src/mzrt.c @@ -332,35 +332,6 @@ struct mzrt_rwlock { int readers, writers, write_waiting; }; -static mzrt_rwlock *locks[2]; - -/* tests for rwlock implementation */ -#if 0 -static void *go(void *id) -{ - int i = *(int *)id, j, amt; - - for (j = 0; j < 3; j++) { - amt = (random() % 400) + 100; - usleep(amt - 100); - if (!(i % 3)) { - mzrt_rwlock_wrlock(locks[0]); - printf("writing %d\n", i); - usleep(amt); - mzrt_rwlock_unlock(locks[0]); - } else { - mzrt_rwlock_rdlock(locks[0]); - printf("reading %d\n", i); - usleep(amt); - mzrt_rwlock_unlock(locks[0]); - } - printf("done %d\n", i); - } - - return NULL; -} -#endif - int mzrt_rwlock_create(mzrt_rwlock **lock) { int err; diff --git a/src/mzscheme/src/schminc.h b/src/mzscheme/src/schminc.h index 5270588a38..0ccfef266b 100644 --- a/src/mzscheme/src/schminc.h +++ b/src/mzscheme/src/schminc.h @@ -13,7 +13,7 @@ #define USE_COMPILED_STARTUP 1 -#define EXPECTED_PRIM_COUNT 981 +#define EXPECTED_PRIM_COUNT 983 #define EXPECTED_UNSAFE_COUNT 65 #define EXPECTED_FLFXNUM_COUNT 53 diff --git a/src/mzscheme/src/schpriv.h b/src/mzscheme/src/schpriv.h index 959314d917..0331768ef2 100644 --- a/src/mzscheme/src/schpriv.h +++ b/src/mzscheme/src/schpriv.h @@ -2821,6 +2821,7 @@ typedef struct Scheme_Module Scheme_Object so; /* scheme_module_type */ Scheme_Object *modname; + Scheme_Object *modsrc; Scheme_Object *et_requires; /* list of symbol-or-module-path-index */ Scheme_Object *requires; /* list of symbol-or-module-path-index */ diff --git a/src/mzscheme/src/schvers.h b/src/mzscheme/src/schvers.h index c2e16f9abb..d09f60cb7d 100644 --- a/src/mzscheme/src/schvers.h +++ b/src/mzscheme/src/schvers.h @@ -13,12 +13,12 @@ consistently.) */ -#define MZSCHEME_VERSION "4.2.5.8" +#define MZSCHEME_VERSION "4.2.5.9" #define MZSCHEME_VERSION_X 4 #define MZSCHEME_VERSION_Y 2 #define MZSCHEME_VERSION_Z 5 -#define MZSCHEME_VERSION_W 8 +#define MZSCHEME_VERSION_W 9 #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/mzscheme/src/startup.inc b/src/mzscheme/src/startup.inc index 89407b40a9..267bdcd362 100644 --- a/src/mzscheme/src/startup.inc +++ b/src/mzscheme/src/startup.inc @@ -486,22 +486,32 @@ "(try-main?(or main-path-d(not alt-path-d)))" "(try-alt?(and alt-file(or alt-path-d(not main-path-d)))))" "(cond" -"((or(and try-main?" +"((and try-main?" "(date>=? modes so path-d))" -"(and try-alt?" -"(date>=? modes alt-so alt-path-d)))" " =>(lambda(so-d)" -"(with-dir(lambda()((current-load-extension)(car so-d) expect-module)))))" -"((or(and try-main?" +"(parameterize((current-module-declare-source #f))" +"(with-dir(lambda()((current-load-extension)(car so-d) expect-module))))))" +"((and try-alt?" +"(date>=? modes alt-so alt-path-d))" +" =>(lambda(so-d)" +"(parameterize((current-module-declare-source alt-path))" +"(with-dir(lambda()((current-load-extension)(car so-d) expect-module))))))" +"((and try-main?" "(date>=? modes zo path-d))" -"(and try-alt?" -"(date>=? modes alt-zo path-d)))" " =>(lambda(zo-d)" -"(with-dir(lambda()((current-load)(car zo-d) expect-module)))))" +"(parameterize((current-module-declare-source #f))" +"(with-dir(lambda()((current-load)(car zo-d) expect-module))))))" +"((and try-alt?" +"(date>=? modes alt-zo path-d))" +" =>(lambda(zo-d)" +"(parameterize((current-module-declare-source alt-path))" +"(with-dir(lambda()((current-load)(car zo-d) expect-module))))))" "(else" -"(with-dir(lambda()((current-load) " -"(if try-main? path alt-path)" -" expect-module))))))))))" +"(let((p(if try-main? path alt-path)))" +"(parameterize((current-module-declare-source(and expect-module " +"(not try-main?)" +" p)))" +"(with-dir(lambda()((current-load) p expect-module))))))))))))" "(define-values(default-reader-guard)" "(lambda(path) path))" "(define-values(-module-hash-table-table)(make-weak-hasheq)) " diff --git a/src/mzscheme/src/startup.ss b/src/mzscheme/src/startup.ss index 57f4b32cd1..42e8772fb0 100644 --- a/src/mzscheme/src/startup.ss +++ b/src/mzscheme/src/startup.ss @@ -567,22 +567,32 @@ [try-main? (or main-path-d (not alt-path-d))] [try-alt? (and alt-file (or alt-path-d (not main-path-d)))]) (cond - [(or (and try-main? - (date>=? modes so path-d)) - (and try-alt? - (date>=? modes alt-so alt-path-d))) + [(and try-main? + (date>=? modes so path-d)) => (lambda (so-d) - (with-dir (lambda () ((current-load-extension) (car so-d) expect-module))))] - [(or (and try-main? - (date>=? modes zo path-d)) - (and try-alt? - (date>=? modes alt-zo path-d))) + (parameterize ([current-module-declare-source #f]) + (with-dir (lambda () ((current-load-extension) (car so-d) expect-module)))))] + [(and try-alt? + (date>=? modes alt-so alt-path-d)) + => (lambda (so-d) + (parameterize ([current-module-declare-source alt-path]) + (with-dir (lambda () ((current-load-extension) (car so-d) expect-module)))))] + [(and try-main? + (date>=? modes zo path-d)) => (lambda (zo-d) - (with-dir (lambda () ((current-load) (car zo-d) expect-module))))] + (parameterize ([current-module-declare-source #f]) + (with-dir (lambda () ((current-load) (car zo-d) expect-module)))))] + [(and try-alt? + (date>=? modes alt-zo path-d)) + => (lambda (zo-d) + (parameterize ([current-module-declare-source alt-path]) + (with-dir (lambda () ((current-load) (car zo-d) expect-module)))))] [else - (with-dir (lambda () ((current-load) - (if try-main? path alt-path) - expect-module)))])))))) + (let ([p (if try-main? path alt-path)]) + (parameterize ([current-module-declare-source (and expect-module + (not try-main?) + p)]) + (with-dir (lambda () ((current-load) p expect-module)))))])))))) (define-values (default-reader-guard) (lambda (path) path)) diff --git a/src/mzscheme/src/syntax.c b/src/mzscheme/src/syntax.c index 0b7bc83c84..13d0bb0bee 100644 --- a/src/mzscheme/src/syntax.c +++ b/src/mzscheme/src/syntax.c @@ -666,7 +666,7 @@ void scheme_set_global_bucket(char *who, Scheme_Bucket *b, Scheme_Object *val, : "re-define a constant")) : "set variable before its definition"), (Scheme_Object *)b->key, - ((Scheme_Bucket_With_Home *)b)->home->module->modname); + ((Scheme_Bucket_With_Home *)b)->home->module->modsrc); } else { scheme_raise_exn(MZEXN_FAIL_CONTRACT_VARIABLE, b->key, "%s: cannot %s variable: %S",