diff --git a/collects/compiler/embed-unit.rkt b/collects/compiler/embed-unit.rkt index 167848e9a5..465ed275dd 100644 --- a/collects/compiler/embed-unit.rkt +++ b/collects/compiler/embed-unit.rkt @@ -133,8 +133,7 @@ (define (prepare-macosx-mred exec-name dest aux variant) (let* ([name (let-values ([(base name dir?) (split-path dest)]) (path-replace-suffix name #""))] - [src (build-path (collection-path "launcher") - "Starter.app")] + [src (collection-file-path "Starter.app" "launcher")] [creator (let ([c (assq 'creator aux)]) (or (and c (cdr c)) @@ -919,10 +918,11 @@ `(lib ,(car s) ,@(reverse (cdr s))))))) p)]) (ss<->rkt - (build-path (if (null? (cddr p)) - (collection-path "mzlib") - (apply collection-path (cddr p))) - (cadr p))))] + (apply collection-file-path + (cadr p) + (if (null? (cddr p)) + (list "mzlib") + (cddr p)))))] [else p])]) (and p (path->bytes diff --git a/collects/mzlib/file.rkt b/collects/mzlib/file.rkt index 2a6aa56293..944e1b017e 100644 --- a/collects/mzlib/file.rkt +++ b/collects/mzlib/file.rkt @@ -39,13 +39,7 @@ (apply build-path p args))) (define (find-library name . cp) - (let ([dir (with-handlers ([exn:fail:filesystem? (lambda (exn) #f)]) - (if (null? cp) - (collection-path "mzlib") - (apply collection-path cp)))]) - (and dir - (let ([file (build-path dir name)]) - (and (file-exists? file) file))))) + (apply collection-file-path name cp)) (define (-call-with-input-file* file thunk . flags) (let ([p (apply mz:open-input-file file flags)]) diff --git a/collects/mzlib/include.rkt b/collects/mzlib/include.rkt index 8050a00927..356f3260b1 100644 --- a/collects/mzlib/include.rkt +++ b/collects/mzlib/include.rkt @@ -38,10 +38,11 @@ "`lib' keyword is not followed by a sequence of string datums" stx fn)) - (build-path (if (null? (cdr l)) - (collection-path "mzlib") - (apply collection-path (cdr l))) - (car l)))] + (apply collection-file-path + (car l) + (if (null? (cdr l)) + (list "mzlib") + (cdr l))))] [else (raise-syntax-error #f diff --git a/collects/mzlib/runtime-path.rkt b/collects/mzlib/runtime-path.rkt index 82b87f419d..e1ec2f8a38 100644 --- a/collects/mzlib/runtime-path.rkt +++ b/collects/mzlib/runtime-path.rkt @@ -78,12 +78,13 @@ (let ([s (cadr p)]) (if (regexp-match? #rx"[./]" s) s - (string-append s "/main.rkt"))))] - [dir (if (and (null? (cddr p)) - (null? (cdr strs))) - (collection-path "mzlib") - (apply collection-path (append (cddr p) (drop-right strs 1))))]) - (build-path dir (last strs)))] + (string-append s "/main.rkt"))))]) + (apply collection-file-path + (last strs) + (if (and (null? (cddr p)) + (null? (cdr strs))) + (list "mzlib") + (append (cddr p) (drop-right strs 1)))))] [else (error 'runtime-path "unknown form: ~e" p)]))) paths))) diff --git a/collects/racket/file.rkt b/collects/racket/file.rkt index e6e6a0f86f..d439d8e915 100644 --- a/collects/racket/file.rkt +++ b/collects/racket/file.rkt @@ -164,8 +164,8 @@ ;; Last chance: check for a "defaults" collection: ;; (error here in case there's no "defaults" ;; bails out through above `with-handlers') - (build-path (collection-path "defaults") - "racket-prefs.rktd"))))))] + (collection-file-path "racket-prefs.rktd" + "defaults"))))))] [prefs (with-pref-params (lambda () (with-input-from-file pref-file read)))]) diff --git a/collects/racket/private/misc.rkt b/collects/racket/private/misc.rkt index f05391a412..2f65562266 100644 --- a/collects/racket/private/misc.rkt +++ b/collects/racket/private/misc.rkt @@ -3,7 +3,7 @@ ;; #%misc : file utilities, etc. - remaining functions (module misc '#%kernel - (#%require '#%utils ; built into mzscheme + (#%require '#%utils ; built into racket "more-scheme.rkt" "small-scheme.rkt" "define.rkt" (for-syntax '#%kernel "stx.rkt" "stxcase-scheme.rkt" "stxcase.rkt")) @@ -179,7 +179,7 @@ load/cd load-relative load-relative-extension path-list-string->path-list find-executable-path - collection-path load/use-compiled + collection-path collection-file-path load/use-compiled guard-evt channel-get channel-try-get channel-put port? displayln find-library-collection-paths)) diff --git a/collects/scribble/jfp.rkt b/collects/scribble/jfp.rkt index 7db49c74ce..e79f7713c2 100644 --- a/collects/scribble/jfp.rkt +++ b/collects/scribble/jfp.rkt @@ -14,7 +14,7 @@ (define jfp-extras (let ([abs (lambda (s) (path->main-collects-relative - (build-path (collection-path "scribble") "jfp" s)))]) + (collection-file-path s "scribble" "jfp")))]) (list (make-css-addition (abs "jfp.css")) (make-tex-addition (abs "jfp.tex"))))) diff --git a/collects/scribble/sigplan.rkt b/collects/scribble/sigplan.rkt index 41fcf9792a..8eab37c5bd 100644 --- a/collects/scribble/sigplan.rkt +++ b/collects/scribble/sigplan.rkt @@ -50,7 +50,7 @@ (define sigplan-extras (let ([abs (lambda (s) (path->main-collects-relative - (build-path (collection-path "scribble") "sigplan" s)))]) + (collection-file-path s "scribble" "sigplan")))]) (list (make-css-addition (abs "sigplan.css")) (make-tex-addition (abs "sigplan.tex"))))) diff --git a/collects/scribblings/reference/collects.scrbl b/collects/scribblings/reference/collects.scrbl index 8939252685..72519926c5 100644 --- a/collects/scribblings/reference/collects.scrbl +++ b/collects/scribblings/reference/collects.scrbl @@ -63,15 +63,13 @@ For the default @tech{module name resolver}, The search path for collections is determined by the @racket[current-library-collection-paths] parameter. The list of paths in @racket[current-library-collection-paths] is searched from first to -last to locate the first collection in a @racket[_rel-string]. To find -a sub-collection, the enclosing collection is first found; if the -sub-collection is not present in the found enclosing collection, then -the search continues by looking for another instance of the enclosing -collection, and so on. In other words, the directory tree for each -element in the search path is spliced together with the directory -trees of other path elements. (The ``splicing'' of tress applies only -to directories; a file within a collection is found only within the -first instance of the collection.) +last to locate the first that contains @racket[_rel-string]. In other +words, the filesystem tree for each element in the search path is +spliced together with the filesystem trees of other path +elements. Some Racket tools rely on unique resolution of module path +names, so an installation and +@racket[current-library-collection-paths] configuration should not +allow multiple files to match the same collection and file name. The value of the @racket[current-library-collection-paths] parameter is initialized in the Racket executable to the result of @@ -121,14 +119,29 @@ Produces a list of paths as follows: ]} -@defproc[(collection-path [collection string?] ...+) path?]{ +@defproc[(collection-file-path [file path-string?] [collection path-string?] ...+) path?]{ -Returns the path to a directory containing the libraries of the -collection indicated by @racket[collection]s, where the second -@racket[collection] (if any) names a sub-collection, and so on. If the +Returns the path to the file indicated by @racket[file] in the +collection specified by the @racket[collection]s, where the second +@racket[collection] (if any) names a sub-collection, and so on. If +@racket[file] is not found, but @racket[file] ends in @filepath{.rkt} +and a file with the suffix @filepath{.ss} exists, then the directory +of the @filepath{.ss} file is used. If @racket[file] is not found and +the @filepath{.rkt}/@filepath{.ss} conversion does not apply, but a +directory corresponding to the @racket[collection]s is found, then a +path using the first such directory is returned. Finally, if the collection is not found, the @exnraise[exn:fail:filesystem].} +@defproc[(collection-path [collection path-string?] ...+) path?]{ + +Like @racket[collection-path-path], but without a specified file name, +so that the first directory indicated by @racket[collection]s is +returned. The @racket[collection-file-path] function normally should +be used, instead, to support splicing of library-collection trees at +the file level.} + + @defparam[current-library-collection-paths paths (listof (and/c path? complete-path?))]{ Parameter that determines a list of complete directory paths for diff --git a/collects/scribblings/reference/syntax.scrbl b/collects/scribblings/reference/syntax.scrbl index 267d54e806..5f18c2985b 100644 --- a/collects/scribblings/reference/syntax.scrbl +++ b/collects/scribblings/reference/syntax.scrbl @@ -2039,7 +2039,14 @@ Like @racket[define], except that the binding is at @tech{phase level} expression for the binding is also at @tech{phase level} 1. (See @secref["id-model"] for information on @tech{phase levels}.) Evaluation of @racket[expr] side is @racket[parameterize]d to set -@racket[current-namespace] as in @racket[let-syntax].} +@racket[current-namespace] as in @racket[let-syntax]. + +Within a module, bindings introduced by @racket[define-for-syntax] +must appear before their uses or in the same +@racket[define-for-syntax] form (i.e., the @racket[define-for-syntax] +form must be expanded before the use is expanded). In particular, +mutually recursive functions bound by @racket[define-for-syntax] must +be defined by the same @racket[define-for-syntax] form. @defexamples[#:eval (syntax-eval) (define-for-syntax helper 2) @@ -2073,7 +2080,7 @@ bound (at @tech{phase level} 1).} (printf "foo1 is ~a foo2 is ~a\n" foo1 foo2) #'2) (bar) -] +]} @; ---------------------------------------------------------------------- diff --git a/collects/scriblib/autobib.rkt b/collects/scriblib/autobib.rkt index 24810e10f1..649ec6437f 100644 --- a/collects/scriblib/autobib.rkt +++ b/collects/scriblib/autobib.rkt @@ -16,7 +16,7 @@ (define autobib-style-extras (let ([abs (lambda (s) (path->main-collects-relative - (build-path (collection-path "scriblib") s)))]) + (collection-file-path s "scriblib")))]) (list (make-css-addition (abs "autobib.css")) (make-tex-addition (abs "autobib.tex"))))) diff --git a/collects/scriblib/figure.rkt b/collects/scriblib/figure.rkt index fa0247622f..80e8ca58c9 100644 --- a/collects/scriblib/figure.rkt +++ b/collects/scriblib/figure.rkt @@ -17,7 +17,8 @@ (define figure-style-extras (let ([abs (lambda (s) - (build-path (collection-path "scriblib") s))]) + (path->main-collects-relative + (collection-file-path s "scriblib")))]) (list (make-css-addition (abs "figure.css")) (make-tex-addition (abs "figure.tex"))))) diff --git a/collects/scriblib/footnote.rkt b/collects/scriblib/footnote.rkt index 0ed1403fda..cc3957b5de 100644 --- a/collects/scriblib/footnote.rkt +++ b/collects/scriblib/footnote.rkt @@ -5,6 +5,7 @@ scribble/html-properties scribble/latex-properties racket/promise + setup/main-collects "private/counter.ss") (provide note @@ -12,7 +13,8 @@ (define footnote-style-extras (let ([abs (lambda (s) - (build-path (collection-path "scriblib") s))]) + (path->main-collects-relative + (collection-file-path s "scriblib")))]) (list (make-css-addition (abs "footnote.css")) (make-tex-addition (abs "footnote.tex"))))) diff --git a/collects/setup/scribble.rkt b/collects/setup/scribble.rkt index 26ce058ffd..4e2da4beb1 100644 --- a/collects/setup/scribble.rkt +++ b/collects/setup/scribble.rkt @@ -354,8 +354,8 @@ (new (latex:render-mixin render%) [dest-dir latex-dest] ;; Use PLT manual style: - [prefix-file (build-path (collection-path "scribble") "manual-prefix.tex")] - [style-file (build-path (collection-path "scribble") "manual-style.tex")]) + [prefix-file (collection-file-path "manual-prefix.tex" "scribble")] + [style-file (collection-file-path "manual-style.tex" "scribble")]) (let* ([flags (doc-flags doc)] [multi? (memq 'multi-page flags)] [main? (doc-under-main? doc)] @@ -369,7 +369,7 @@ ddir)] [alt-paths (if main? (let ([std-path (lambda (s) - (cons (build-path (collection-path "scribble") s) + (cons (collection-file-path s "scribble") (format "../~a" s)))]) (list (std-path "scribble.css") (std-path "scribble-style.css") @@ -492,8 +492,7 @@ "latex-render.rkt" "html-render.rkt") ".zo"))] - [css-path (build-path (collection-path "scribble") - "scribble.css")] + [css-path (collection-file-path "scribble.css" "scribble")] [aux-time (max (file-or-directory-modify-seconds/stamp renderer-path stamp-time stamp-data 1 diff --git a/collects/setup/setup-unit.rkt b/collects/setup/setup-unit.rkt index a3deca9f30..5283366ad0 100644 --- a/collects/setup/setup-unit.rkt +++ b/collects/setup/setup-unit.rkt @@ -983,7 +983,7 @@ (when (make-docs) ;; Double-check that "setup/scribble" is present. - (when (file-exists? (build-path (collection-path "setup") "scribble.rkt")) + (when (file-exists? (collection-file-path "scribble.rkt" "setup")) (make-docs-step))) (when (doc-pdf-dest) (doc-pdf-dest-step)) diff --git a/doc/release-notes/racket/HISTORY.txt b/doc/release-notes/racket/HISTORY.txt index ee8ce71a63..db966fd633 100644 --- a/doc/release-notes/racket/HISTORY.txt +++ b/doc/release-notes/racket/HISTORY.txt @@ -1,3 +1,7 @@ +Version 5.0.1.2 +Added collection-file-path and collection splicing at the file +level + Version 5.0.1, July 2010 Continuation barriers now block only downward continuation jumps and allow escapes through full continuations diff --git a/src/racket/src/cstartup.inc b/src/racket/src/cstartup.inc index 23602ef738..6d45c7fde7 100644 --- a/src/racket/src/cstartup.inc +++ b/src/racket/src/cstartup.inc @@ -1,5 +1,5 @@ { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,48,46,56,51,0,0,0,1,0,0,10,0,13,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,49,46,50,51,0,0,0,1,0,0,10,0,13,0, 22,0,27,0,40,0,47,0,51,0,55,0,58,0,65,0,72,0,77,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, @@ -14,31 +14,31 @@ 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,218,81,0,0,95, +102,105,110,101,45,118,97,108,117,101,115,97,36,11,8,240,241,81,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,5,2,2,2,7,2,2,2,8,2,2,2,6,2,2,2,10,2,2,2, -9,2,2,2,11,2,2,2,12,2,2,2,13,2,2,97,37,11,8,240,218, +9,2,2,2,11,2,2,2,12,2,2,2,13,2,2,97,37,11,8,240,241, 81,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,218,81,0,0,16,0,96,38,11,8,240,218,81,0, +2,3,96,11,11,8,240,241,81,0,0,16,0,96,38,11,8,240,241,81,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,225,81,0,0,95,9,8, -224,225,81,0,0,2,2,27,248,22,147,4,195,249,22,140,4,80,158,39,36, +101,8,32,8,31,8,30,8,29,8,28,93,8,224,248,81,0,0,95,9,8, +224,248,81,0,0,2,2,27,248,22,147,4,195,249,22,140,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,147,4,195,249,22,140,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,147,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,140,4,80,158,39,36,251,22,81,2,17,248,22,72,199,249,22,71,2, 7,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,56,56,56,16,4,11,11, -2,20,3,1,8,101,110,118,49,50,56,56,57,93,8,224,226,81,0,0,95, -9,8,224,226,81,0,0,2,2,27,248,22,73,248,22,147,4,196,28,248,22, +16,4,11,11,2,19,3,1,8,101,110,118,49,50,57,48,54,16,4,11,11, +2,20,3,1,8,101,110,118,49,50,57,48,55,93,8,224,249,81,0,0,95, +9,8,224,249,81,0,0,2,2,27,248,22,73,248,22,147,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,140,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,9,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,56,57,49,16,4,11,11,2,20,3, -1,8,101,110,118,49,50,56,57,50,93,8,224,227,81,0,0,95,9,8,224, -227,81,0,0,2,2,248,22,147,4,193,27,248,22,147,4,194,249,22,71,248, +11,2,19,3,1,8,101,110,118,49,50,57,48,57,16,4,11,11,2,20,3, +1,8,101,110,118,49,50,57,49,48,93,8,224,250,81,0,0,95,9,8,224, +250,81,0,0,2,2,248,22,147,4,193,27,248,22,147,4,194,249,22,71,248, 22,81,248,22,72,196,248,22,73,195,27,248,22,73,248,22,147,4,23,197,1, 249,22,140,4,80,158,39,36,28,248,22,56,248,22,141,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,147,4, @@ -67,9 +67,9 @@ 26,248,22,73,202,251,22,81,2,17,28,249,22,185,8,248,22,141,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,4,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,57,49,52,16,4,11,11, -2,20,3,1,8,101,110,118,49,50,57,49,53,93,8,224,228,81,0,0,18, -16,2,158,94,10,64,118,111,105,100,8,48,95,9,8,224,228,81,0,0,2, +16,4,11,11,2,19,3,1,8,101,110,118,49,50,57,51,50,16,4,11,11, +2,20,3,1,8,101,110,118,49,50,57,51,51,93,8,224,251,81,0,0,18, +16,2,158,94,10,64,118,111,105,100,8,48,95,9,8,224,251,81,0,0,2, 2,27,248,22,73,248,22,147,4,196,249,22,140,4,80,158,39,36,28,248,22, 56,248,22,141,4,248,22,72,197,250,22,81,2,27,248,22,81,248,22,72,199, 248,22,96,198,27,248,22,141,4,248,22,72,197,250,22,81,2,27,248,22,81, @@ -99,314 +99,404 @@ EVAL_ONE_SIZED_STR((char *)expr, 2024); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,48,46,56,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,158,13,10,248, -22,176,5,23,196,2,28,248,22,173,6,23,194,2,12,87,94,248,22,191,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,158,13,10,248,22,176,5,23,197,2,28,248,22,173, -6,23,194,2,12,87,94,248,22,191,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,158,13,10, -248,22,176,5,23,198,2,28,248,22,173,6,23,194,2,12,87,94,248,22,191, -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,142,14,23,195,2,23,194,1,28,248,22,141, -14,23,195,2,249,22,143,14,23,196,1,250,80,158,43,49,248,22,158,14,2, -20,11,10,250,80,158,41,49,248,22,158,14,2,20,23,197,1,10,28,23,193, -2,249,22,71,248,22,145,14,249,22,143,14,23,198,1,247,22,159,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,142,14,23,195,2,23,194,1,28,248,22,141,14,23,195,2,249,22, -143,14,23,196,1,250,80,158,48,49,248,22,158,14,2,20,11,10,250,80,158, -46,49,248,22,158,14,2,20,23,197,1,10,28,23,193,2,249,22,71,248,22, -145,14,249,22,143,14,23,198,1,247,22,159,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,142,14,23,195,2,23,194,1,28,248,22, -141,14,23,195,2,249,22,143,14,23,196,1,250,80,158,46,49,248,22,158,14, -2,20,11,10,250,80,158,44,49,248,22,158,14,2,20,23,197,1,10,28,23, -193,2,249,22,71,248,22,145,14,249,22,143,14,23,198,1,247,22,159,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,182,13,23,195,2,28,23,193,2,192,87,94,23,193,1,28,248,22, -178,6,23,195,2,27,248,22,140,14,195,28,192,192,248,22,141,14,195,11,87, -94,28,28,248,22,183,13,23,195,2,10,28,248,22,182,13,23,195,2,10,28, -248,22,178,6,23,195,2,28,248,22,140,14,23,195,2,10,248,22,141,14,23, -195,2,11,12,250,22,155,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,183,13,23,195,2,249,22, -185,8,248,22,184,13,23,197,2,2,21,249,22,185,8,247,22,134,8,2,21, -27,28,248,22,178,6,23,196,2,23,195,2,248,22,188,7,248,22,187,13,23, -197,2,28,249,22,173,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,178,6,195,248,22,190, -13,195,194,27,248,22,153,7,23,195,1,249,22,191,13,248,22,191,7,250,22, -181,14,0,6,35,114,120,34,47,34,28,249,22,173,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,181,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,178,6,194,248,22,190,13,194,193,87,94,28,28,248,22,182,13, -23,195,2,10,28,248,22,178,6,23,195,2,28,248,22,140,14,23,195,2,10, -248,22,141,14,23,195,2,11,12,250,22,155,9,23,196,2,2,22,23,197,2, -28,248,22,140,14,23,195,2,12,248,22,134,12,249,22,140,11,248,22,143,7, -250,22,162,7,2,23,23,200,1,23,201,1,247,22,23,87,94,28,28,248,22, -182,13,23,195,2,10,28,248,22,178,6,23,195,2,28,248,22,140,14,23,195, -2,10,248,22,141,14,23,195,2,11,12,250,22,155,9,23,196,2,2,22,23, -197,2,28,248,22,140,14,23,195,2,12,248,22,134,12,249,22,140,11,248,22, -143,7,250,22,162,7,2,23,23,200,1,23,201,1,247,22,23,87,94,87,94, -28,28,248,22,182,13,23,195,2,10,28,248,22,178,6,23,195,2,28,248,22, -140,14,23,195,2,10,248,22,141,14,23,195,2,11,12,250,22,155,9,195,2, -22,23,197,2,28,248,22,140,14,23,195,2,12,248,22,134,12,249,22,140,11, -248,22,143,7,250,22,162,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,182,13,23,194, -2,10,28,248,22,178,6,23,194,2,28,248,22,140,14,23,194,2,10,248,22, -141,14,23,194,2,11,12,250,22,155,9,2,7,2,22,23,196,2,28,248,22, -140,14,23,194,2,12,248,22,134,12,249,22,140,11,248,22,143,7,250,22,162, -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,134,12,249,22, -173,11,251,22,162,7,2,25,2,7,28,248,22,79,23,203,2,87,94,23,202, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,49,46,50,72,0,0,0,1,0,0,8,0,21,0, +26,0,43,0,58,0,76,0,92,0,106,0,128,0,146,0,166,0,182,0,200, +0,231,0,4,1,26,1,40,1,46,1,60,1,65,1,75,1,83,1,111,1, +143,1,149,1,194,1,201,1,207,1,252,1,20,2,59,2,61,2,227,2,61, +4,102,4,175,5,5,6,91,6,190,6,18,7,31,7,180,8,27,9,111,9, +124,9,125,10,72,11,85,11,153,15,148,16,37,17,22,18,4,19,11,19,19, +19,27,19,152,19,166,19,151,21,253,21,19,22,35,22,239,23,86,24,100,24, +182,25,119,27,128,27,137,27,163,27,18,28,0,0,36,31,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,73,102,105,110,100,45,99,111,108,45,102,105,108,101,1,20, +99,111,108,108,101,99,116,105,111,110,45,102,105,108,101,45,112,97,116,104,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,18,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,4,4,46,114,107,116,6,3,3,46,115,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,52,38,250,80,159,40,53,38,249,22,27, +11,80,159,42,52,38,22,158,13,10,248,22,176,5,23,196,2,28,248,22,173, +6,23,194,2,12,87,94,248,22,191,8,23,194,1,27,20,14,159,80,159,38, +52,38,250,80,159,41,53,38,249,22,27,11,80,159,43,52,38,22,158,13,10, +248,22,176,5,23,197,2,28,248,22,173,6,23,194,2,12,87,94,248,22,191, +8,23,194,1,27,20,14,159,80,159,39,52,38,250,80,159,42,53,38,249,22, +27,11,80,159,44,52,38,22,158,13,10,248,22,176,5,23,198,2,28,248,22, +173,6,23,194,2,12,87,94,248,22,191,8,23,194,1,248,80,159,40,55,37, +197,28,248,22,79,23,195,2,9,27,248,22,72,23,196,2,27,28,248,22,142, +14,23,195,2,23,194,1,28,248,22,141,14,23,195,2,249,22,143,14,23,196, +1,250,80,158,43,50,248,22,158,14,2,21,11,10,250,80,158,41,50,248,22, +158,14,2,21,23,197,1,10,28,23,193,2,249,22,71,248,22,145,14,249,22, +143,14,23,198,1,247,22,159,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,142,14,23,195,2,23,194, +1,28,248,22,141,14,23,195,2,249,22,143,14,23,196,1,250,80,158,48,50, +248,22,158,14,2,21,11,10,250,80,158,46,50,248,22,158,14,2,21,23,197, +1,10,28,23,193,2,249,22,71,248,22,145,14,249,22,143,14,23,198,1,247, +22,159,14,248,80,159,46,54,37,248,22,73,23,199,1,87,94,23,193,1,248, +80,159,44,54,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, +142,14,23,195,2,23,194,1,28,248,22,141,14,23,195,2,249,22,143,14,23, +196,1,250,80,158,46,50,248,22,158,14,2,21,11,10,250,80,158,44,50,248, +22,158,14,2,21,23,197,1,10,28,23,193,2,249,22,71,248,22,145,14,249, +22,143,14,23,198,1,247,22,159,14,248,80,159,44,54,37,248,22,73,23,199, +1,248,80,159,42,54,37,248,22,73,196,27,248,22,182,13,23,195,2,28,23, +193,2,192,87,94,23,193,1,28,248,22,178,6,23,195,2,27,248,22,140,14, +195,28,192,192,248,22,141,14,195,11,87,94,28,28,248,22,183,13,23,195,2, +10,28,248,22,182,13,23,195,2,10,28,248,22,178,6,23,195,2,28,248,22, +140,14,23,195,2,10,248,22,141,14,23,195,2,11,12,250,22,155,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,183,13,23,195,2,249,22,185,8,248,22,184,13,23,197,2,2, +22,249,22,185,8,247,22,134,8,2,22,27,28,248,22,178,6,23,196,2,23, +195,2,248,22,188,7,248,22,187,13,23,197,2,28,249,22,173,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,178,6,195,248,22,190,13,195,194,27,248,22,153,7,23,195, +1,249,22,191,13,248,22,191,7,250,22,181,14,0,6,35,114,120,34,47,34, +28,249,22,173,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,181,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,22,28,248,22,178,6,194,248,22,190, +13,194,193,87,94,28,28,248,22,182,13,23,195,2,10,28,248,22,178,6,23, +195,2,28,248,22,140,14,23,195,2,10,248,22,141,14,23,195,2,11,12,250, +22,155,9,23,196,2,2,23,23,197,2,28,248,22,140,14,23,195,2,12,248, +22,134,12,249,22,140,11,248,22,143,7,250,22,162,7,2,24,23,200,1,23, +201,1,247,22,23,87,94,28,28,248,22,182,13,23,195,2,10,28,248,22,178, +6,23,195,2,28,248,22,140,14,23,195,2,10,248,22,141,14,23,195,2,11, +12,250,22,155,9,23,196,2,2,23,23,197,2,28,248,22,140,14,23,195,2, +12,248,22,134,12,249,22,140,11,248,22,143,7,250,22,162,7,2,24,23,200, +1,23,201,1,247,22,23,87,94,87,94,28,28,248,22,182,13,23,195,2,10, +28,248,22,178,6,23,195,2,28,248,22,140,14,23,195,2,10,248,22,141,14, +23,195,2,11,12,250,22,155,9,195,2,23,23,197,2,28,248,22,140,14,23, +195,2,12,248,22,134,12,249,22,140,11,248,22,143,7,250,22,162,7,2,24, +199,23,201,1,247,22,23,249,22,3,89,162,8,44,37,50,9,223,2,33,38, +196,87,94,28,28,248,22,182,13,23,194,2,10,28,248,22,178,6,23,194,2, +28,248,22,140,14,23,194,2,10,248,22,141,14,23,194,2,11,12,250,22,155, +9,2,7,2,23,23,196,2,28,248,22,140,14,23,194,2,12,248,22,134,12, +249,22,140,11,248,22,143,7,250,22,162,7,2,24,2,7,23,200,1,247,22, +23,32,41,89,162,8,44,41,59,2,25,222,33,42,28,248,22,79,23,197,2, +87,94,23,196,1,28,23,197,2,196,87,94,23,197,1,248,22,134,12,249,22, +173,11,251,22,162,7,2,26,2,7,28,248,22,79,23,203,2,87,94,23,202, 1,23,201,1,250,22,1,22,136,14,23,204,1,23,205,1,23,200,1,247,22, 23,27,249,22,136,14,248,22,72,23,200,2,23,197,2,28,248,22,131,14,23, -194,2,27,250,22,1,22,136,14,23,197,1,199,28,248,22,131,14,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,182,13,193,10,28,248,22,178,6,193,28,248,22, -140,14,193,10,248,22,141,14,193,11,12,250,22,155,9,2,7,2,22,195,28, -248,22,140,14,193,12,248,22,134,12,249,22,140,11,248,22,143,7,250,22,162, -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,160,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,162,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,136,14,23,204,1,23,205,1,23,198,1,27, -249,22,136,14,248,22,72,23,202,2,23,199,2,28,248,22,131,14,23,194,2, -27,250,22,1,22,136,14,23,197,1,23,202,2,28,248,22,131,14,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,162,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,136,14,23,207,1,23, -208,1,23,201,1,27,249,22,136,14,248,22,72,23,197,2,23,202,2,28,248, -22,131,14,23,194,2,27,250,22,1,22,136,14,23,197,1,204,28,248,22,131, -14,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,162,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, -136,14,23,206,1,23,207,1,23,200,1,27,249,22,136,14,248,22,72,23,197, -2,23,201,2,28,248,22,131,14,23,194,2,27,250,22,1,22,136,14,23,197, -1,203,28,248,22,131,14,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,160,14,253,2,41,198, -199,200,201,202,198,87,95,28,28,248,22,183,13,23,194,2,10,28,248,22,182, -13,23,194,2,10,28,248,22,178,6,23,194,2,28,248,22,140,14,23,194,2, -10,248,22,141,14,23,194,2,11,12,252,22,155,9,23,200,2,2,26,36,23, -198,2,23,199,2,28,28,248,22,178,6,23,195,2,10,248,22,167,7,23,195, -2,87,94,23,194,1,12,252,22,155,9,23,200,2,2,27,37,23,198,2,23, -199,1,91,159,39,11,90,161,39,36,11,248,22,139,14,23,197,2,87,94,23, -195,1,87,94,28,192,12,250,22,156,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,183,13,23, -196,2,10,28,248,22,182,13,23,196,2,10,28,248,22,178,6,23,196,2,28, -248,22,140,14,23,196,2,10,248,22,141,14,23,196,2,11,12,252,22,155,9, -2,10,2,26,36,23,200,2,23,201,2,28,28,248,22,178,6,23,197,2,10, -248,22,167,7,23,197,2,12,252,22,155,9,2,10,2,27,37,23,200,2,23, -201,2,91,159,39,11,90,161,39,36,11,248,22,139,14,23,199,2,87,94,23, -195,1,87,94,28,192,12,250,22,156,9,2,10,2,28,23,201,2,249,22,7, -194,195,27,249,22,128,14,250,22,180,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,188,13,23,201,1,28,248, -22,178,6,23,203,2,249,22,191,7,23,204,1,8,63,23,202,1,28,248,22, -183,13,23,199,2,248,22,184,13,23,199,1,87,94,23,198,1,247,22,185,13, -28,248,22,182,13,194,249,22,136,14,195,194,192,91,159,38,11,90,161,38,36, -11,87,95,28,28,248,22,183,13,23,196,2,10,28,248,22,182,13,23,196,2, -10,28,248,22,178,6,23,196,2,28,248,22,140,14,23,196,2,10,248,22,141, -14,23,196,2,11,12,252,22,155,9,2,11,2,26,36,23,200,2,23,201,2, -28,28,248,22,178,6,23,197,2,10,248,22,167,7,23,197,2,12,252,22,155, -9,2,11,2,27,37,23,200,2,23,201,2,91,159,39,11,90,161,39,36,11, -248,22,139,14,23,199,2,87,94,23,195,1,87,94,28,192,12,250,22,156,9, -2,11,2,28,23,201,2,249,22,7,194,195,27,249,22,128,14,249,22,177,7, -250,22,181,14,0,9,35,114,120,35,34,91,46,93,34,248,22,188,13,23,203, -1,6,1,1,95,28,248,22,178,6,23,202,2,249,22,191,7,23,203,1,8, -63,23,201,1,28,248,22,183,13,23,199,2,248,22,184,13,23,199,1,87,94, -23,198,1,247,22,185,13,28,248,22,182,13,194,249,22,136,14,195,194,192,249, -247,22,145,5,194,11,249,80,159,38,47,37,9,9,249,80,159,38,47,37,195, -9,27,247,22,162,14,249,80,158,39,48,28,23,195,2,27,248,22,132,8,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,136,14,248,22,158,14,69,97,100,100,111,110,45, -100,105,114,247,22,130,8,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,158,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,169,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,169,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,169,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,169,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,169,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,173,7,23,196,2,2,29,249,22,85, -23,214,2,194,249,22,71,248,22,191,13,23,197,1,194,87,95,23,211,1,23, -193,1,28,249,22,173,7,23,196,2,2,29,249,22,85,23,212,2,9,249,22, -71,248,22,191,13,23,197,1,9,28,249,22,173,7,23,196,2,2,29,249,22, -85,23,210,2,194,249,22,71,248,22,191,13,23,197,1,194,87,94,23,193,1, -28,249,22,173,7,23,196,2,2,29,249,22,85,23,208,2,9,249,22,71,248, -22,191,13,23,197,1,9,28,249,22,173,7,23,196,2,2,29,249,22,85,23, -206,2,194,249,22,71,248,22,191,13,23,197,1,194,87,94,23,193,1,28,249, -22,173,7,23,196,2,2,29,249,22,85,23,204,2,9,249,22,71,248,22,191, -13,23,197,1,9,28,249,22,173,7,23,196,2,2,29,249,22,85,23,202,2, -194,249,22,71,248,22,191,13,23,197,1,194,87,94,23,193,1,28,249,22,173, -7,23,196,2,2,29,249,22,85,23,200,2,9,249,22,71,248,22,191,13,23, -197,1,9,28,249,22,173,7,23,196,2,2,29,249,22,85,197,194,87,94,23, -196,1,249,22,71,248,22,191,13,23,197,1,194,87,94,23,193,1,28,249,22, -173,7,23,198,2,2,29,249,22,85,195,9,87,94,23,194,1,249,22,71,248, -22,191,13,23,199,1,9,87,95,28,28,248,22,167,7,194,10,248,22,178,6, -194,12,250,22,155,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,182,13,196,11,12,250,22,155,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,178,6,197,248,22, -190,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,144,14,23,196,2,28,249,22,187,8,23,195,2,23,197,1,11,28, -248,22,140,14,23,194,2,27,249,22,136,14,23,197,1,23,196,1,28,23,197, -2,91,159,39,11,90,161,39,36,11,248,22,139,14,23,197,2,87,95,23,195, -1,23,194,1,27,28,23,202,2,27,248,22,144,14,23,199,2,28,249,22,187, -8,23,195,2,23,200,2,11,28,248,22,140,14,23,194,2,250,2,54,23,205, -2,23,206,2,249,22,136,14,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,182, -13,23,196,2,27,249,22,136,14,23,198,2,23,205,2,28,28,248,22,131,14, -193,10,248,22,130,14,193,192,11,11,28,23,193,2,192,87,94,23,193,1,28, -23,203,2,11,27,248,22,144,14,23,200,2,28,249,22,187,8,23,195,2,23, -201,1,11,28,248,22,140,14,23,194,2,250,2,54,23,206,1,23,207,1,249, -22,136,14,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,139,14,23,197,2,87, -95,23,195,1,23,194,1,27,28,23,201,2,27,248,22,144,14,23,199,2,28, -249,22,187,8,23,195,2,23,200,2,11,28,248,22,140,14,23,194,2,250,2, -54,23,204,2,23,205,2,249,22,136,14,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,182,13,23,196,2,27,249,22,136,14,23,198,2,23,204,2,28,28,248, -22,131,14,193,10,248,22,130,14,193,192,11,11,28,23,193,2,192,87,94,23, -193,1,28,23,202,2,11,27,248,22,144,14,23,200,2,28,249,22,187,8,23, -195,2,23,201,1,11,28,248,22,140,14,23,194,2,250,2,54,23,205,1,23, -206,1,249,22,136,14,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,139,14,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,182,13, -195,27,249,22,136,14,197,200,28,28,248,22,131,14,193,10,248,22,130,14,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, -143,14,248,22,72,23,199,2,27,249,22,136,14,23,196,1,23,197,2,28,248, -22,130,14,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,143,14,248,22,72,23,196, -2,27,249,22,136,14,23,196,1,23,200,2,28,248,22,130,14,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, +194,2,27,250,22,1,22,136,14,23,197,1,23,200,2,28,248,22,131,14,23, +194,2,192,87,94,23,193,1,27,248,22,73,23,200,1,28,248,22,79,23,194, +2,87,94,23,193,1,28,23,200,2,199,87,94,23,200,1,248,22,134,12,249, +22,173,11,251,22,162,7,2,26,2,7,28,248,22,79,23,206,2,87,94,23, +205,1,23,204,1,250,22,1,22,136,14,23,207,1,23,208,1,23,203,1,247, +22,23,27,249,22,136,14,248,22,72,23,197,2,23,200,2,28,248,22,131,14, +23,194,2,27,250,22,1,22,136,14,23,197,1,202,28,248,22,131,14,193,192, +252,2,41,202,203,204,248,22,73,200,206,252,2,41,201,202,203,248,22,73,199, +205,87,94,23,193,1,27,248,22,73,23,199,1,28,248,22,79,23,194,2,87, +94,23,193,1,28,23,199,2,198,87,94,23,199,1,248,22,134,12,249,22,173, +11,251,22,162,7,2,26,2,7,28,248,22,79,23,205,2,87,94,23,204,1, +23,203,1,250,22,1,22,136,14,23,206,1,23,207,1,23,202,1,247,22,23, +27,249,22,136,14,248,22,72,23,197,2,23,199,2,28,248,22,131,14,23,194, +2,27,250,22,1,22,136,14,23,197,1,201,28,248,22,131,14,193,192,252,2, +41,201,202,203,248,22,73,200,205,252,2,41,200,201,202,248,22,73,199,204,87, +94,87,94,87,94,28,28,248,22,182,13,193,10,28,248,22,178,6,193,28,248, +22,140,14,193,10,248,22,141,14,193,11,12,250,22,155,9,2,7,2,23,195, +28,248,22,140,14,193,12,248,22,134,12,249,22,140,11,248,22,143,7,250,22, +162,7,2,24,2,7,199,247,22,23,249,22,3,32,0,89,162,8,44,37,49, +9,222,33,40,195,27,247,22,160,14,252,2,41,197,198,199,197,11,87,94,28, +28,248,22,182,13,23,194,2,10,28,248,22,178,6,23,194,2,28,248,22,140, +14,23,194,2,10,248,22,141,14,23,194,2,11,12,250,22,155,9,2,9,2, +23,23,196,2,28,248,22,140,14,23,194,2,12,248,22,134,12,249,22,140,11, +248,22,143,7,250,22,162,7,2,24,2,9,23,200,1,247,22,23,32,45,89, +162,8,44,42,59,2,25,222,33,46,28,248,22,79,23,198,2,87,95,23,197, +1,23,194,1,28,23,198,2,197,87,94,23,198,1,248,22,134,12,249,22,173, +11,251,22,162,7,2,26,2,9,28,248,22,79,23,204,2,87,94,23,203,1, +23,202,1,250,22,1,22,136,14,23,205,1,23,206,1,23,200,1,247,22,23, +27,249,22,136,14,248,22,72,23,201,2,23,198,2,28,248,22,131,14,23,194, +2,27,250,22,1,22,136,14,23,197,1,23,201,2,28,248,22,131,14,23,194, +2,28,23,196,2,28,28,248,22,130,14,249,22,136,14,195,198,10,27,27,28, +248,22,182,13,198,248,22,186,13,198,197,27,248,22,181,6,194,28,249,22,180, +3,194,40,28,249,22,184,6,2,27,249,22,136,7,197,249,22,168,3,198,40, +249,22,137,7,250,22,136,7,198,36,249,22,168,3,199,40,2,28,11,11,28, +23,193,2,248,22,130,14,249,22,136,14,196,23,196,1,11,192,253,2,45,200, +201,202,203,248,22,73,205,28,205,205,198,192,253,2,45,200,201,202,203,248,22, +73,205,205,253,2,45,199,200,201,202,248,22,73,204,204,87,95,87,94,28,28, +248,22,182,13,193,10,28,248,22,178,6,193,28,248,22,140,14,193,10,248,22, +141,14,193,11,12,250,22,155,9,2,9,2,23,195,28,248,22,140,14,193,12, +248,22,134,12,249,22,140,11,248,22,143,7,250,22,162,7,2,24,2,9,199, +247,22,23,87,94,87,94,28,28,248,22,182,13,23,195,2,10,28,248,22,178, +6,23,195,2,28,248,22,140,14,23,195,2,10,248,22,141,14,23,195,2,11, +12,250,22,155,9,2,9,2,23,23,197,2,28,248,22,140,14,23,195,2,12, +248,22,134,12,249,22,140,11,248,22,143,7,250,22,162,7,2,24,2,9,23, +201,2,247,22,23,249,22,3,32,0,89,162,8,44,37,49,9,222,33,44,23, +197,2,249,22,136,14,27,247,22,160,14,253,2,45,23,199,2,201,23,203,1, +23,204,1,23,199,1,11,194,32,48,89,162,44,44,8,29,2,25,222,33,49, +28,248,22,79,23,200,2,87,95,23,199,1,23,198,1,28,23,200,2,199,87, +94,23,200,1,248,23,196,1,251,22,162,7,2,26,23,199,1,28,248,22,79, +23,203,2,87,94,23,202,1,23,201,1,250,22,1,22,136,14,23,204,1,23, +205,1,23,198,1,27,249,22,136,14,248,22,72,23,203,2,23,199,2,28,248, +22,131,14,23,194,2,27,250,22,1,22,136,14,23,197,1,23,202,2,28,248, +22,131,14,23,194,2,28,23,200,2,28,28,248,22,130,14,249,22,136,14,23, +196,2,23,203,2,10,27,27,28,248,22,182,13,23,203,2,248,22,186,13,23, +203,2,23,202,2,27,248,22,181,6,194,28,249,22,180,3,194,40,28,249,22, +184,6,2,27,249,22,136,7,197,249,22,168,3,198,40,249,22,137,7,250,22, +136,7,198,36,249,22,168,3,199,40,2,28,11,11,28,23,193,2,248,22,130, +14,249,22,136,14,23,197,2,23,196,1,11,192,27,248,22,73,23,203,1,27, +28,23,204,2,87,94,23,195,1,23,204,1,87,94,23,204,1,23,195,1,28, +248,22,79,23,195,2,87,95,23,202,1,23,194,1,28,23,193,2,192,87,94, +23,193,1,248,23,200,1,251,22,162,7,2,26,23,203,1,28,248,22,79,23, +207,2,87,94,23,206,1,23,205,1,250,22,1,22,136,14,23,208,1,23,209, +1,23,202,1,27,249,22,136,14,248,22,72,23,198,2,23,203,2,28,248,22, +131,14,23,194,2,27,250,22,1,22,136,14,23,197,1,23,206,2,28,248,22, +131,14,23,194,2,28,23,204,2,28,28,248,22,130,14,249,22,136,14,195,206, +10,27,27,28,248,22,182,13,206,248,22,186,13,206,205,27,248,22,181,6,194, +28,249,22,180,3,194,40,28,249,22,184,6,2,27,249,22,136,7,197,249,22, +168,3,198,40,249,22,137,7,250,22,136,7,198,36,249,22,168,3,199,40,2, +28,11,11,28,23,193,2,248,22,130,14,249,22,136,14,196,23,196,1,11,192, +26,8,2,48,206,23,15,23,16,23,17,23,18,23,19,248,22,73,204,28,202, +202,200,192,26,8,2,48,206,23,15,23,16,23,17,23,18,23,19,248,22,73, +204,202,26,8,2,48,205,206,23,15,23,16,23,17,23,18,248,22,73,203,201, +192,27,248,22,73,23,203,1,28,248,22,79,23,194,2,87,95,23,201,1,23, +193,1,28,23,203,2,202,87,94,23,203,1,248,23,199,1,251,22,162,7,2, +26,23,202,1,28,248,22,79,23,206,2,87,94,23,205,1,23,204,1,250,22, +1,22,136,14,23,207,1,23,208,1,23,201,1,27,249,22,136,14,248,22,72, +23,197,2,23,202,2,28,248,22,131,14,23,194,2,27,250,22,1,22,136,14, +23,197,1,23,205,2,28,248,22,131,14,23,194,2,28,23,203,2,28,28,248, +22,130,14,249,22,136,14,195,205,10,27,27,28,248,22,182,13,205,248,22,186, +13,205,204,27,248,22,181,6,194,28,249,22,180,3,194,40,28,249,22,184,6, +2,27,249,22,136,7,197,249,22,168,3,198,40,249,22,137,7,250,22,136,7, +198,36,249,22,168,3,199,40,2,28,11,11,28,23,193,2,248,22,130,14,249, +22,136,14,196,23,196,1,11,192,26,8,2,48,205,206,23,15,23,16,23,17, +23,18,248,22,73,203,28,23,20,23,20,200,192,26,8,2,48,205,206,23,15, +23,16,23,17,23,18,248,22,73,203,23,20,26,8,2,48,204,205,206,23,15, +23,16,23,17,248,22,73,202,23,19,87,94,23,193,1,27,248,22,73,23,202, +1,28,248,22,79,23,194,2,87,95,23,200,1,23,193,1,28,23,202,2,201, +87,94,23,202,1,248,23,198,1,251,22,162,7,2,26,23,201,1,28,248,22, +79,23,205,2,87,94,23,204,1,23,203,1,250,22,1,22,136,14,23,206,1, +23,207,1,23,200,1,27,249,22,136,14,248,22,72,23,197,2,23,201,2,28, +248,22,131,14,23,194,2,27,250,22,1,22,136,14,23,197,1,23,204,2,28, +248,22,131,14,23,194,2,28,23,202,2,28,28,248,22,130,14,249,22,136,14, +195,204,10,27,27,28,248,22,182,13,204,248,22,186,13,204,203,27,248,22,181, +6,194,28,249,22,180,3,194,40,28,249,22,184,6,2,27,249,22,136,7,197, +249,22,168,3,198,40,249,22,137,7,250,22,136,7,198,36,249,22,168,3,199, +40,2,28,11,11,28,23,193,2,248,22,130,14,249,22,136,14,196,23,196,1, +11,192,26,8,2,48,204,205,206,23,15,23,16,23,17,248,22,73,203,28,23, +19,23,19,200,192,26,8,2,48,204,205,206,23,15,23,16,23,17,248,22,73, +203,23,19,26,8,2,48,203,204,205,206,23,15,23,16,248,22,73,202,23,18, +27,247,22,160,14,28,248,22,79,23,194,2,87,94,23,198,1,248,23,196,1, +251,22,162,7,2,26,23,199,1,28,248,22,79,23,203,2,87,94,23,202,1, +23,201,1,250,22,1,22,136,14,23,204,1,23,205,1,23,198,1,27,249,22, +136,14,248,22,72,23,197,2,23,199,2,28,248,22,131,14,23,194,2,27,250, +22,1,22,136,14,23,197,1,23,202,2,28,248,22,131,14,23,194,2,28,23, +200,2,28,28,248,22,130,14,249,22,136,14,195,202,10,27,27,28,248,22,182, +13,202,248,22,186,13,202,201,27,248,22,181,6,194,28,249,22,180,3,194,40, +28,249,22,184,6,2,27,249,22,136,7,197,249,22,168,3,198,40,249,22,137, +7,250,22,136,7,198,36,249,22,168,3,199,40,2,28,11,11,28,23,193,2, +248,22,130,14,249,22,136,14,196,23,196,1,11,192,26,8,2,48,202,203,204, +205,206,23,15,248,22,73,203,200,192,26,8,2,48,202,203,204,205,206,23,15, +248,22,73,203,11,26,8,2,48,201,202,203,204,205,206,248,22,73,202,11,87, +95,28,28,248,22,183,13,23,194,2,10,28,248,22,182,13,23,194,2,10,28, +248,22,178,6,23,194,2,28,248,22,140,14,23,194,2,10,248,22,141,14,23, +194,2,11,12,252,22,155,9,23,200,2,2,29,36,23,198,2,23,199,2,28, +28,248,22,178,6,23,195,2,10,248,22,167,7,23,195,2,87,94,23,194,1, +12,252,22,155,9,23,200,2,2,30,37,23,198,2,23,199,1,91,159,39,11, +90,161,39,36,11,248,22,139,14,23,197,2,87,94,23,195,1,87,94,28,192, +12,250,22,156,9,23,201,1,2,31,23,199,1,249,22,7,194,195,91,159,38, +11,90,161,38,36,11,87,95,28,28,248,22,183,13,23,196,2,10,28,248,22, +182,13,23,196,2,10,28,248,22,178,6,23,196,2,28,248,22,140,14,23,196, +2,10,248,22,141,14,23,196,2,11,12,252,22,155,9,2,11,2,29,36,23, +200,2,23,201,2,28,28,248,22,178,6,23,197,2,10,248,22,167,7,23,197, +2,12,252,22,155,9,2,11,2,30,37,23,200,2,23,201,2,91,159,39,11, +90,161,39,36,11,248,22,139,14,23,199,2,87,94,23,195,1,87,94,28,192, +12,250,22,156,9,2,11,2,31,23,201,2,249,22,7,194,195,27,249,22,128, +14,250,22,180,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,188,13,23,201,1,28,248,22,178,6,23,203,2, +249,22,191,7,23,204,1,8,63,23,202,1,28,248,22,183,13,23,199,2,248, +22,184,13,23,199,1,87,94,23,198,1,247,22,185,13,28,248,22,182,13,194, +249,22,136,14,195,194,192,91,159,38,11,90,161,38,36,11,87,95,28,28,248, +22,183,13,23,196,2,10,28,248,22,182,13,23,196,2,10,28,248,22,178,6, +23,196,2,28,248,22,140,14,23,196,2,10,248,22,141,14,23,196,2,11,12, +252,22,155,9,2,12,2,29,36,23,200,2,23,201,2,28,28,248,22,178,6, +23,197,2,10,248,22,167,7,23,197,2,12,252,22,155,9,2,12,2,30,37, +23,200,2,23,201,2,91,159,39,11,90,161,39,36,11,248,22,139,14,23,199, +2,87,94,23,195,1,87,94,28,192,12,250,22,156,9,2,12,2,31,23,201, +2,249,22,7,194,195,27,249,22,128,14,249,22,177,7,250,22,181,14,0,9, +35,114,120,35,34,91,46,93,34,248,22,188,13,23,203,1,6,1,1,95,28, +248,22,178,6,23,202,2,249,22,191,7,23,203,1,8,63,23,201,1,28,248, +22,183,13,23,199,2,248,22,184,13,23,199,1,87,94,23,198,1,247,22,185, +13,28,248,22,182,13,194,249,22,136,14,195,194,192,249,247,22,145,5,194,11, +249,80,159,38,48,37,9,9,249,80,159,38,48,37,195,9,27,247,22,162,14, +249,80,158,39,49,28,23,195,2,27,248,22,132,8,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,136,14,248,22,158,14,69,97,100,100,111,110,45,100,105,114,247,22,130, +8,6,8,8,99,111,108,108,101,99,116,115,11,27,248,80,159,42,54,37,250, +22,85,23,203,1,248,22,81,248,22,158,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,58,89,162,8,44, +39,8,31,2,20,222,33,59,27,249,22,169,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,169,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,169,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,169,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,169,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,58,23,215,2,23,216,1,248,22,105,23, +199,1,28,249,22,173,7,23,196,2,2,32,249,22,85,23,214,2,194,249,22, +71,248,22,191,13,23,197,1,194,87,95,23,211,1,23,193,1,28,249,22,173, +7,23,196,2,2,32,249,22,85,23,212,2,9,249,22,71,248,22,191,13,23, +197,1,9,28,249,22,173,7,23,196,2,2,32,249,22,85,23,210,2,194,249, +22,71,248,22,191,13,23,197,1,194,87,94,23,193,1,28,249,22,173,7,23, +196,2,2,32,249,22,85,23,208,2,9,249,22,71,248,22,191,13,23,197,1, +9,28,249,22,173,7,23,196,2,2,32,249,22,85,23,206,2,194,249,22,71, +248,22,191,13,23,197,1,194,87,94,23,193,1,28,249,22,173,7,23,196,2, +2,32,249,22,85,23,204,2,9,249,22,71,248,22,191,13,23,197,1,9,28, +249,22,173,7,23,196,2,2,32,249,22,85,23,202,2,194,249,22,71,248,22, +191,13,23,197,1,194,87,94,23,193,1,28,249,22,173,7,23,196,2,2,32, +249,22,85,23,200,2,9,249,22,71,248,22,191,13,23,197,1,9,28,249,22, +173,7,23,196,2,2,32,249,22,85,197,194,87,94,23,196,1,249,22,71,248, +22,191,13,23,197,1,194,87,94,23,193,1,28,249,22,173,7,23,198,2,2, +32,249,22,85,195,9,87,94,23,194,1,249,22,71,248,22,191,13,23,199,1, +9,87,95,28,28,248,22,167,7,194,10,248,22,178,6,194,12,250,22,155,9, +2,15,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,182,13,196,11,12, +250,22,155,9,2,15,6,13,13,108,105,115,116,32,111,102,32,112,97,116,104, +115,197,250,2,58,197,195,28,248,22,178,6,197,248,22,190,7,197,196,32,61, +89,162,8,44,39,53,70,102,111,117,110,100,45,101,120,101,99,222,33,64,32, +62,89,162,8,44,40,58,64,110,101,120,116,222,33,63,27,248,22,144,14,23, +196,2,28,249,22,187,8,23,195,2,23,197,1,11,28,248,22,140,14,23,194, +2,27,249,22,136,14,23,197,1,23,196,1,28,23,197,2,91,159,39,11,90, +161,39,36,11,248,22,139,14,23,197,2,87,95,23,195,1,23,194,1,27,28, +23,202,2,27,248,22,144,14,23,199,2,28,249,22,187,8,23,195,2,23,200, +2,11,28,248,22,140,14,23,194,2,250,2,61,23,205,2,23,206,2,249,22, +136,14,23,200,2,23,198,1,250,2,61,23,205,2,23,206,2,23,196,1,11, +28,23,193,2,192,87,94,23,193,1,27,28,248,22,182,13,23,196,2,27,249, +22,136,14,23,198,2,23,205,2,28,28,248,22,131,14,193,10,248,22,130,14, +193,192,11,11,28,23,193,2,192,87,94,23,193,1,28,23,203,2,11,27,248, +22,144,14,23,200,2,28,249,22,187,8,23,195,2,23,201,1,11,28,248,22, +140,14,23,194,2,250,2,61,23,206,1,23,207,1,249,22,136,14,23,201,1, +23,198,1,250,2,61,205,206,195,192,87,94,23,194,1,28,23,196,2,91,159, +39,11,90,161,39,36,11,248,22,139,14,23,197,2,87,95,23,195,1,23,194, +1,27,28,23,201,2,27,248,22,144,14,23,199,2,28,249,22,187,8,23,195, +2,23,200,2,11,28,248,22,140,14,23,194,2,250,2,61,23,204,2,23,205, +2,249,22,136,14,23,200,2,23,198,1,250,2,61,23,204,2,23,205,2,23, +196,1,11,28,23,193,2,192,87,94,23,193,1,27,28,248,22,182,13,23,196, +2,27,249,22,136,14,23,198,2,23,204,2,28,28,248,22,131,14,193,10,248, +22,130,14,193,192,11,11,28,23,193,2,192,87,94,23,193,1,28,23,202,2, +11,27,248,22,144,14,23,200,2,28,249,22,187,8,23,195,2,23,201,1,11, +28,248,22,140,14,23,194,2,250,2,61,23,205,1,23,206,1,249,22,136,14, +23,201,1,23,198,1,250,2,61,204,205,195,192,28,23,193,2,91,159,39,11, +90,161,39,36,11,248,22,139,14,23,199,2,87,95,23,195,1,23,194,1,27, +28,23,198,2,251,2,62,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,182,13,195,27,249,22,136,14, +197,200,28,28,248,22,131,14,193,10,248,22,130,14,193,192,11,11,28,192,192, +28,198,11,251,2,62,198,203,201,202,194,32,65,89,162,8,44,40,8,31,2, +20,222,33,66,28,248,22,79,23,197,2,11,27,248,22,143,14,248,22,72,23, +199,2,27,249,22,136,14,23,196,1,23,197,2,28,248,22,130,14,23,194,2, +250,2,61,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,143,14,248,22,72,23,196,2,27,249,22,136,14, +23,196,1,23,200,2,28,248,22,130,14,23,194,2,250,2,61,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,143,14,248,22,72,23,196,2,27,249,22,136,14,23,196,1,23,203,2,28, +248,22,130,14,23,194,2,250,2,61,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,143,14,248,22,72,23, +196,2,27,249,22,136,14,23,196,1,23,206,2,28,248,22,130,14,23,194,2, +250,2,61,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,143,14,248,22,72,23,196,2,27,249,22, +136,14,23,196,1,23,209,2,28,248,22,130,14,23,194,2,250,2,61,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,143,14,248,22,72,195,27,249,22,136,14,23,196,1,23,19, +28,248,22,130,14,193,250,2,61,23,21,23,22,195,251,2,65,23,21,23,22, +23,23,248,22,73,199,87,95,28,28,248,22,182,13,23,195,2,10,28,248,22, +178,6,23,195,2,28,248,22,140,14,23,195,2,10,248,22,141,14,23,195,2, +11,12,250,22,155,9,2,16,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,182,13,23,196,2,10,28,248,22,178,6,23,196,2,28, +248,22,140,14,23,196,2,10,248,22,141,14,23,196,2,11,248,22,140,14,23, +196,2,11,10,12,250,22,155,9,2,16,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,140,14,23,195,2,91,159,39,11,90,161,39,36, +11,248,22,139,14,23,198,2,249,22,185,8,194,68,114,101,108,97,116,105,118, +101,11,27,248,22,132,8,6,4,4,80,65,84,72,27,28,23,194,2,27,249, +80,159,41,49,38,23,197,1,9,28,249,22,185,8,247,22,134,8,2,22,249, +22,71,248,22,191,13,5,1,46,194,192,87,94,23,194,1,9,28,248,22,79, 23,194,2,11,27,248,22,143,14,248,22,72,23,196,2,27,249,22,136,14,23, -196,1,23,203,2,28,248,22,130,14,23,194,2,250,2,54,204,205,195,87,94, +196,1,23,200,2,28,248,22,130,14,23,194,2,250,2,61,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, -143,14,248,22,72,23,196,2,27,249,22,136,14,23,196,1,23,206,2,28,248, -22,130,14,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,143,14,248,22,72, -23,196,2,27,249,22,136,14,23,196,1,23,209,2,28,248,22,130,14,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,143,14,248,22,72,195,27,249,22,136, -14,23,196,1,23,19,28,248,22,130,14,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,182,13,23, -195,2,10,28,248,22,178,6,23,195,2,28,248,22,140,14,23,195,2,10,248, -22,141,14,23,195,2,11,12,250,22,155,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,182,13,23,196,2,10,28,248,22, -178,6,23,196,2,28,248,22,140,14,23,196,2,10,248,22,141,14,23,196,2, -11,248,22,140,14,23,196,2,11,10,12,250,22,155,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,140,14,23,195,2,91,159, -39,11,90,161,39,36,11,248,22,139,14,23,198,2,249,22,185,8,194,68,114, -101,108,97,116,105,118,101,11,27,248,22,132,8,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,185,8,247, -22,134,8,2,21,249,22,71,248,22,191,13,5,1,46,194,192,87,94,23,194, -1,9,28,248,22,79,23,194,2,11,27,248,22,143,14,248,22,72,23,196,2, -27,249,22,136,14,23,196,1,23,200,2,28,248,22,130,14,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,143,14,248,22,72,23,196,2,27,249,22,136,14,23,196, -1,23,203,2,28,248,22,130,14,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,143, -14,248,22,72,195,27,249,22,136,14,23,196,1,205,28,248,22,130,14,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,143,14,23,196,1,28,248,22,130,14,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, -169,6,247,22,141,5,195,248,22,131,6,249,22,184,3,36,249,22,168,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,158,14,2,20,27,249,80,159,41,49,37,23,196,1,11,27,27, -248,22,187,3,23,200,1,28,192,192,36,27,27,248,22,187,3,23,202,1,28, -192,192,36,249,22,172,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,157,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,180,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, -165,14,248,22,190,7,27,28,249,22,185,8,247,22,134,8,2,21,6,1,1, -59,6,1,1,58,250,22,162,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); +143,14,248,22,72,23,196,2,27,249,22,136,14,23,196,1,23,203,2,28,248, +22,130,14,23,194,2,250,2,61,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,143,14,248,22,72,195,27, +249,22,136,14,23,196,1,205,28,248,22,130,14,193,250,2,61,23,15,23,16, +195,251,2,65,23,15,23,16,23,17,248,22,73,199,27,248,22,143,14,23,196, +1,28,248,22,130,14,193,250,2,61,198,199,195,11,250,80,159,39,50,37,196, +197,11,250,80,159,39,50,37,196,11,11,87,94,249,22,169,6,247,22,141,5, +195,248,22,131,6,249,22,184,3,36,249,22,168,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,158,14, +2,21,27,249,80,159,41,50,37,23,196,1,11,27,27,248,22,187,3,23,200, +1,28,192,192,36,27,27,248,22,187,3,23,202,1,28,192,192,36,249,22,172, +5,23,197,1,83,158,40,20,100,95,89,162,8,44,36,48,9,224,3,2,33, +70,23,195,1,23,196,1,27,248,22,157,5,23,195,1,248,80,159,39,55,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,18,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,2,17,30,2,19,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,19,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,10,40,11, +11,39,36,11,11,11,16,12,2,9,2,7,2,17,2,8,2,16,2,14,2, +13,2,4,2,12,2,15,2,11,2,2,16,12,11,11,11,11,11,11,11,11, +11,11,11,11,16,12,2,9,2,7,2,17,2,8,2,16,2,14,2,13,2, +4,2,12,2,15,2,11,2,2,48,48,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,18,83,158,36, +16,2,89,162,8,44,37,51,2,20,223,0,33,33,80,159,36,55,37,83,158, +36,16,2,89,162,8,44,37,56,2,20,223,0,33,34,80,159,36,54,37,83, +158,36,16,2,32,0,89,162,44,37,45,2,2,222,33,35,80,159,36,36,37, +83,158,36,16,2,249,22,180,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,36,80,159,36,38,37,83,158,36, +16,2,32,0,89,162,8,44,38,50,2,5,222,33,37,80,159,36,39,37,83, +158,36,16,2,32,0,89,162,8,44,39,51,2,6,222,33,39,80,159,36,40, +37,83,158,36,16,2,32,0,89,162,8,45,38,50,2,7,222,33,43,80,159, +36,41,37,83,158,36,16,2,32,0,89,162,45,39,53,2,9,222,33,47,80, +159,36,43,37,83,158,36,16,2,32,0,89,162,44,41,59,2,8,222,33,50, +80,159,36,42,37,83,158,36,16,2,32,0,89,162,44,39,50,2,10,222,33, +51,80,159,36,44,37,83,158,36,16,2,32,0,89,162,44,38,53,2,11,222, +33,52,80,159,36,45,37,83,158,36,16,2,32,0,89,162,44,38,54,2,12, +222,33,53,80,159,36,46,37,83,158,36,16,2,32,0,89,162,44,37,44,2, +13,222,33,54,80,159,36,47,37,83,158,36,16,2,83,158,39,20,99,96,2, +14,89,162,44,36,44,9,223,0,33,55,89,162,44,37,45,9,223,0,33,56, +89,162,44,38,55,9,223,0,33,57,80,159,36,48,37,83,158,36,16,2,27, +248,22,165,14,248,22,190,7,27,28,249,22,185,8,247,22,134,8,2,22,6, +1,1,59,6,1,1,58,250,22,162,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,15, +223,0,33,60,80,159,36,49,37,83,158,36,16,2,83,158,39,20,99,96,2, +16,89,162,8,44,39,8,24,9,223,0,33,67,89,162,44,38,47,9,223,0, +33,68,89,162,44,37,46,9,223,0,33,69,80,159,36,50,37,83,158,36,16, +2,89,162,8,44,39,52,2,17,223,0,33,71,80,159,36,51,37,94,29,94, +2,18,68,35,37,107,101,114,110,101,108,11,29,94,2,18,69,35,37,109,105, +110,45,115,116,120,11,9,9,9,36,0}; + EVAL_ONE_SIZED_STR((char *)expr, 8137); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,48,46,56,9,0,0,0,1,0,0,10,0,16,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,49,46,50,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,96,82,0,0,98,159,2,3,36,36,159,2,4,36,36,159,2, +36,11,8,240,134,82,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, @@ -420,14 +510,14 @@ EVAL_ONE_SIZED_STR((char *)expr, 352); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,48,46,56,74,0,0,0,1,0,0,7,0,18,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,49,46,50,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,124,23,176,23,199,23,0,0,101,26,0, +212,14,220,14,49,15,51,15,120,15,164,23,216,23,239,23,0,0,145,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, @@ -632,123 +722,125 @@ 223,5,33,50,27,28,248,22,56,23,198,2,27,250,22,150,2,80,159,43,44, 38,249,22,71,23,203,2,247,22,160,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,136,14,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,137,7,23,199,1, -6,4,4,46,114,107,116,28,248,22,178,6,23,198,2,87,94,23,194,1,27, -27,28,23,200,2,28,249,22,185,8,23,202,2,80,158,43,47,80,158,41,48, -27,248,22,188,4,23,202,2,28,248,22,182,13,23,194,2,91,159,39,11,90, -161,39,36,11,248,22,139,14,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,146,5,28,23,193,2,192,87,94,23,193,1,247,22, -159,14,27,250,22,150,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,136,14,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,181,6,23,202,2,28,249,22,180,3,194,39,28,249,22,184,6,2,28, -249,22,136,7,204,249,22,168,3,198,39,249,22,137,7,250,22,136,7,205,36, -249,22,168,3,199,39,2,29,200,200,28,248,22,182,13,23,198,2,87,94,23, -194,1,28,248,22,141,14,23,198,2,27,248,22,145,14,23,199,2,91,159,39, -11,90,161,39,36,11,248,22,139,14,23,197,2,87,95,23,195,1,23,193,1, -28,249,22,169,14,2,60,248,22,187,13,23,197,1,249,80,159,45,53,38,23, -198,1,2,30,195,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,185,8, -248,22,72,23,200,2,2,27,27,250,22,150,2,80,159,43,44,38,249,22,71, -23,203,2,247,22,160,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,173,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,136,14,23,195,1,28, -23,198,1,87,94,23,196,1,27,248,22,181,6,23,199,2,28,249,22,180,3, -194,39,28,249,22,184,6,2,28,249,22,136,7,201,249,22,168,3,198,39,249, -22,137,7,250,22,136,7,202,36,249,22,168,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,173,14,0,8,35,114,120,34,91,46,93,34,23,199,2,27,248,22, -181,6,23,199,2,28,249,22,180,3,194,39,28,249,22,184,6,2,28,249,22, -136,7,201,249,22,168,3,198,39,249,22,137,7,250,22,136,7,202,36,249,22, -168,3,199,39,2,29,197,197,249,22,137,7,23,199,1,6,4,4,46,114,107, -116,28,249,22,185,8,248,22,72,23,200,2,64,102,105,108,101,27,248,22,145, -14,249,22,143,14,248,22,147,14,248,22,96,23,203,2,27,28,23,203,2,28, -249,22,185,8,23,205,2,80,158,46,47,80,158,44,48,27,248,22,188,4,23, -205,2,28,248,22,182,13,23,194,2,91,159,39,11,90,161,39,36,11,248,22, -139,14,23,197,1,87,95,83,160,38,11,80,158,48,47,23,207,2,83,160,38, -11,80,158,48,48,192,192,11,11,28,23,193,2,192,87,94,23,193,1,27,247, -22,146,5,28,23,193,2,192,87,94,23,193,1,247,22,159,14,91,159,39,11, -90,161,39,36,11,248,22,139,14,23,197,2,87,95,23,195,1,23,193,1,28, -249,22,169,14,2,60,248,22,187,13,23,197,1,249,80,159,45,53,38,23,198, -1,2,30,195,12,87,94,28,28,248,22,182,13,23,194,2,10,248,22,137,8, -23,194,2,87,94,23,199,1,12,28,23,199,2,250,22,154,9,67,114,101,113, -117,105,114,101,249,22,162,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,155,9,2,18,249,22,162,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,137,8,23,195,2,249,22,142,8,23, -196,2,36,249,22,145,14,248,22,146,14,23,197,2,11,27,28,248,22,137,8, -23,196,2,249,22,142,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,137,8,23,199,2,250,22,7,2,31, -249,22,142,8,23,203,2,38,2,31,248,22,139,14,23,198,2,87,95,23,195, -1,23,193,1,27,28,248,22,137,8,23,200,2,249,22,142,8,23,201,2,39, -249,80,159,47,53,38,23,197,2,5,0,27,28,248,22,137,8,23,201,2,249, -22,142,8,23,202,2,40,248,22,187,4,23,200,2,27,27,250,22,150,2,80, -159,51,43,38,248,22,130,15,247,22,162,12,11,28,23,193,2,192,87,94,23, -193,1,27,247,22,130,2,87,94,250,22,148,2,80,159,52,43,38,248,22,130, -15,247,22,162,12,195,192,87,95,28,23,208,1,27,250,22,150,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,130,15,247,22,162,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,148, -2,23,197,1,197,10,12,28,28,248,22,137,8,23,202,1,11,28,248,22,178, -6,23,206,2,10,28,248,22,56,23,206,2,10,28,248,22,69,23,206,2,249, -22,185,8,248,22,72,23,208,2,2,27,11,250,22,148,2,80,159,50,44,38, -28,248,22,178,6,23,209,2,249,22,71,23,210,1,27,28,23,212,2,28,249, -22,185,8,23,214,2,80,158,55,47,87,94,23,212,1,80,158,53,48,27,248, -22,188,4,23,214,2,28,248,22,182,13,23,194,2,91,159,39,11,90,161,39, -36,11,248,22,139,14,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,146,5,28,23,193,2,192,87,94,23,193,1,247,22,159,14,249, -22,71,23,210,1,247,22,160,14,252,22,139,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,166,4,80,159,37,51,38,248, -22,145,5,80,159,37,37,37,248,22,153,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, -134,8,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, 6926); +2,53,23,195,1,27,28,248,22,79,23,195,2,6,8,8,109,97,105,110,46, +114,107,116,249,22,137,7,23,197,2,6,4,4,46,114,107,116,27,252,80,159, +49,54,38,2,18,23,204,1,28,248,22,79,23,201,2,23,201,1,87,94,23, +201,1,248,22,72,23,201,2,28,248,22,79,23,201,2,87,94,23,200,1,9, +248,22,73,23,201,1,23,199,2,249,22,136,14,23,195,1,23,196,1,28,248, +22,178,6,23,198,2,87,94,23,194,1,27,27,28,23,200,2,28,249,22,185, +8,23,202,2,80,158,43,47,80,158,41,48,27,248,22,188,4,23,202,2,28, +248,22,182,13,23,194,2,91,159,39,11,90,161,39,36,11,248,22,139,14,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,146,5, +28,23,193,2,192,87,94,23,193,1,247,22,159,14,27,250,22,150,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,136,14,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,181,6,23,202,2,28,249, +22,180,3,194,39,28,249,22,184,6,2,28,249,22,136,7,204,249,22,168,3, +198,39,249,22,137,7,250,22,136,7,205,36,249,22,168,3,199,39,2,29,200, +200,28,248,22,182,13,23,198,2,87,94,23,194,1,28,248,22,141,14,23,198, +2,27,248,22,145,14,23,199,2,91,159,39,11,90,161,39,36,11,248,22,139, +14,23,197,2,87,95,23,195,1,23,193,1,28,249,22,169,14,2,60,248,22, +187,13,23,197,1,249,80,159,45,53,38,23,198,1,2,30,195,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,185,8,248,22,72,23,200,2,2,27,27, +250,22,150,2,80,159,43,44,38,249,22,71,23,203,2,247,22,160,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,173,14,0,8,35, +114,120,34,91,46,93,34,23,196,2,11,10,27,28,23,196,2,27,248,22,181, +6,23,197,2,28,249,22,180,3,194,39,28,249,22,184,6,2,28,249,22,136, +7,23,200,2,249,22,168,3,198,39,249,22,137,7,250,22,136,7,23,201,2, +36,249,22,168,3,199,39,2,29,23,196,2,23,196,2,28,248,22,79,23,195, +2,6,8,8,109,97,105,110,46,114,107,116,28,249,22,173,14,0,8,35,114, +120,34,91,46,93,34,23,197,2,27,248,22,181,6,23,197,2,28,249,22,180, +3,194,39,28,249,22,184,6,2,28,249,22,136,7,23,200,2,249,22,168,3, +198,39,249,22,137,7,250,22,136,7,23,201,2,36,249,22,168,3,199,39,2, +29,23,196,2,23,196,2,249,22,137,7,23,197,2,6,4,4,46,114,107,116, +27,27,28,23,198,1,87,94,23,197,1,249,22,85,28,248,22,79,248,22,98, +23,208,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,211,2,23,198,1, +28,248,22,79,23,197,2,87,94,23,196,1,248,22,81,23,198,1,87,94,23, +197,1,23,196,1,252,80,159,51,54,38,2,18,23,206,1,248,22,72,23,199, +2,248,22,73,23,199,1,23,200,2,249,22,136,14,23,195,1,23,196,1,28, +249,22,185,8,248,22,72,23,200,2,64,102,105,108,101,27,248,22,145,14,249, +22,143,14,248,22,147,14,248,22,96,23,203,2,27,28,23,203,2,28,249,22, +185,8,23,205,2,80,158,46,47,80,158,44,48,27,248,22,188,4,23,205,2, +28,248,22,182,13,23,194,2,91,159,39,11,90,161,39,36,11,248,22,139,14, +23,197,1,87,95,83,160,38,11,80,158,48,47,23,207,2,83,160,38,11,80, +158,48,48,192,192,11,11,28,23,193,2,192,87,94,23,193,1,27,247,22,146, +5,28,23,193,2,192,87,94,23,193,1,247,22,159,14,91,159,39,11,90,161, +39,36,11,248,22,139,14,23,197,2,87,95,23,195,1,23,193,1,28,249,22, +169,14,2,60,248,22,187,13,23,197,1,249,80,159,45,53,38,23,198,1,2, +30,195,12,87,94,28,28,248,22,182,13,23,194,2,10,248,22,137,8,23,194, +2,87,94,23,199,1,12,28,23,199,2,250,22,154,9,67,114,101,113,117,105, +114,101,249,22,162,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,155,9,2,18,249,22,162,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,137,8,23,195,2,249,22,142,8,23,196,2, +36,249,22,145,14,248,22,146,14,23,197,2,11,27,28,248,22,137,8,23,196, +2,249,22,142,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,137,8,23,199,2,250,22,7,2,31,249,22, +142,8,23,203,2,38,2,31,248,22,139,14,23,198,2,87,95,23,195,1,23, +193,1,27,28,248,22,137,8,23,200,2,249,22,142,8,23,201,2,39,249,80, +159,47,53,38,23,197,2,5,0,27,28,248,22,137,8,23,201,2,249,22,142, +8,23,202,2,40,248,22,187,4,23,200,2,27,27,250,22,150,2,80,159,51, +43,38,248,22,130,15,247,22,162,12,11,28,23,193,2,192,87,94,23,193,1, +27,247,22,130,2,87,94,250,22,148,2,80,159,52,43,38,248,22,130,15,247, +22,162,12,195,192,87,95,28,23,208,1,27,250,22,150,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,130,15,247,22,162,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,148,2,23, +197,1,197,10,12,28,28,248,22,137,8,23,202,1,11,28,248,22,178,6,23, +206,2,10,28,248,22,56,23,206,2,10,28,248,22,69,23,206,2,249,22,185, +8,248,22,72,23,208,2,2,27,11,250,22,148,2,80,159,50,44,38,28,248, +22,178,6,23,209,2,249,22,71,23,210,1,27,28,23,212,2,28,249,22,185, +8,23,214,2,80,158,55,47,87,94,23,212,1,80,158,53,48,27,248,22,188, +4,23,214,2,28,248,22,182,13,23,194,2,91,159,39,11,90,161,39,36,11, +248,22,139,14,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,146,5,28,23,193,2,192,87,94,23,193,1,247,22,159,14,249,22,71, +23,210,1,247,22,160,14,252,22,139,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,166,4,80,159,37,51,38,248,22,145, +5,80,159,37,37,37,248,22,153,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,11,30,2,5,75,112,97,116, +104,45,97,100,100,45,115,117,102,102,105,120,8,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,10,30,2,5,73,102,105,110, +100,45,99,111,108,45,102,105,108,101,3,30,2,5,76,110,111,114,109,97,108, +45,99,97,115,101,45,112,97,116,104,7,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,134,8,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, 6970); } diff --git a/src/racket/src/schvers.h b/src/racket/src/schvers.h index 66f69c6875..425a9d47ec 100644 --- a/src/racket/src/schvers.h +++ b/src/racket/src/schvers.h @@ -13,12 +13,12 @@ consistently.) */ -#define MZSCHEME_VERSION "5.0.1.1" +#define MZSCHEME_VERSION "5.0.1.2" #define MZSCHEME_VERSION_X 5 #define MZSCHEME_VERSION_Y 0 #define MZSCHEME_VERSION_Z 1 -#define MZSCHEME_VERSION_W 1 +#define MZSCHEME_VERSION_W 2 #define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y) #define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W) diff --git a/src/racket/src/startup.inc b/src/racket/src/startup.inc index 2de6b2c04e..e70f7a3301 100644 --- a/src/racket/src/startup.inc +++ b/src/racket/src/startup.inc @@ -137,8 +137,9 @@ " normal-case-path" " path-replace-suffix" " path-add-suffix" -" -find-col" +" find-col-file" " collection-path" +" collection-file-path" " find-library-collection-paths" " path-list-string->path-list" " find-executable-path" @@ -192,28 +193,56 @@ "(define-values(collection-path)" "(lambda(collection . collection-path) " "(-check-collection 'collection-path collection collection-path)" -"(-find-col 'collection-path(lambda(s)" +"(find-col-file 'collection-path(lambda(s)" "(raise" "(exn:fail:filesystem s(current-continuation-marks))))" -" collection collection-path)))" -"(define-values(-find-col)" -"(lambda(who fail collection collection-path)" +" collection collection-path" +" #f)))" +"(define-values(collection-file-path)" +"(lambda(file-name collection . collection-path) " +"(-check-relpath 'collection-file-path file-name)" +"(-check-collection 'collection-file-path collection collection-path)" +"(build-path" +"(find-col-file 'collection-file-path(lambda(s)" +"(raise" +"(exn:fail:filesystem s(current-continuation-marks))))" +" collection collection-path" +" file-name)" +" file-name)))" +"(define-values(find-col-file)" +"(lambda(who fail collection collection-path file-name)" "(let((all-paths(current-library-collection-paths)))" -"(let cloop((paths all-paths))" +"(let cloop((paths all-paths)(found-col #f))" "(if(null? paths)" +"(if found-col" +" found-col" "(fail" " (format \"~a: collection not found: ~s in any of: ~s\" " " who(if(null? collection-path)" " collection" "(apply build-path collection collection-path))" -" all-paths))" +" all-paths)))" "(let((dir(build-path(car paths) collection)))" "(if(directory-exists? dir)" "(let((cpath(apply build-path dir collection-path)))" "(if(directory-exists? cpath)" +"(if file-name" +"(if(or(file-exists?(build-path cpath file-name))" +"(let((alt-file-name" +"(let*((file-name(if(path? file-name)" +"(path->string file-name)" +" file-name))" +"(len(string-length file-name)))" +"(and(len . >= . 4)" +" (string=? \".rkt\" (substring file-name (- len 4)))" +" (string-append (substring file-name 0 (- len 4)) \".ss\")))))" +"(and alt-file-name" +"(file-exists?(build-path cpath alt-file-name)))))" " cpath" -"(cloop(cdr paths))))" -"(cloop(cdr paths)))))))))" +"(cloop(cdr paths)(or found-col cpath)))" +" cpath)" +"(cloop(cdr paths) found-col)))" +"(cloop(cdr paths) found-col))))))))" "(define-values(check-suffix-call)" "(lambda(s sfx who)" "(unless(or(path-for-some-system? s)" @@ -616,13 +645,15 @@ "(cons s(current-library-collection-paths))" " #f)" "(let-values(((cols file)(split-relative-string(symbol->string s) #f)))" -"(let((p(-find-col 'standard-module-name-resolver" +"(let*((f-file(if(null? cols)" +" \"main.rkt\"" +" (string-append file \".rkt\")))" +"(p(find-col-file 'standard-module-name-resolver" " show-collection-err" "(if(null? cols) file(car cols))" -"(if(null? cols) null(cdr cols)))))" -"(build-path p(if(null? cols)" -" \"main.rkt\"" -" (string-append file \".rkt\")))))))" +"(if(null? cols) null(cdr cols))" +" f-file)))" +"(build-path p f-file)))))" "((string? s)" "(let*((dir(get-dir)))" "(or(hash-ref -path-cache(cons s dir) #f)" @@ -650,7 +681,14 @@ "(and(null? cols)" " (regexp-match? #rx\"[.]\" file))" " #t)))" -"(let((p(let-values(((cols)" +"(let*((f-file(if old-style?" +"(ss->rkt file)" +"(if(null? cols)" +" \"main.rkt\"" +" (if (regexp-match? #rx\"[.]\" file)" +"(ss->rkt file)" +" (string-append file \".rkt\")))))" +"(p(let-values(((cols)" "(if old-style?" "(append(if(null?(cddr s))" " '(\"mzlib\")" @@ -662,17 +700,12 @@ "(if(null? cols)" "(list file)" " cols))))" -"(-find-col 'standard-module-name-resolver" +"(find-col-file 'standard-module-name-resolver" " show-collection-err" "(car cols)" -"(cdr cols)))))" -"(build-path p(if old-style?" -"(ss->rkt file)" -"(if(null? cols)" -" \"main.rkt\"" -" (if (regexp-match? #rx\"[.]\" file)" -"(ss->rkt file)" -" (string-append file \".rkt\")))))))))" +"(cdr cols)" +" f-file))))" +"(build-path p f-file)))))" "((eq?(car s) 'file)" "(path-ss->rkt " "(simplify-path(path->complete-path(expand-user-path(cadr s))(get-dir))))))))" diff --git a/src/racket/src/startup.rktl b/src/racket/src/startup.rktl index b9951f447c..8e42821f60 100644 --- a/src/racket/src/startup.rktl +++ b/src/racket/src/startup.rktl @@ -185,8 +185,9 @@ normal-case-path path-replace-suffix path-add-suffix - -find-col + find-col-file collection-path + collection-file-path find-library-collection-paths path-list-string->path-list find-executable-path @@ -249,31 +250,63 @@ (define-values (collection-path) (lambda (collection . collection-path) (-check-collection 'collection-path collection collection-path) - (-find-col 'collection-path (lambda (s) - (raise - (exn:fail:filesystem s (current-continuation-marks)))) - collection collection-path))) + (find-col-file 'collection-path (lambda (s) + (raise + (exn:fail:filesystem s (current-continuation-marks)))) + collection collection-path + #f))) - (define-values (-find-col) - (lambda (who fail collection collection-path) + (define-values (collection-file-path) + (lambda (file-name collection . collection-path) + (-check-relpath 'collection-file-path file-name) + (-check-collection 'collection-file-path collection collection-path) + (build-path + (find-col-file 'collection-file-path (lambda (s) + (raise + (exn:fail:filesystem s (current-continuation-marks)))) + collection collection-path + file-name) + file-name))) + + (define-values (find-col-file) + (lambda (who fail collection collection-path file-name) (let ([all-paths (current-library-collection-paths)]) - (let cloop ([paths all-paths]) + (let cloop ([paths all-paths][found-col #f]) (if (null? paths) - (fail - (format "~a: collection not found: ~s in any of: ~s" - who (if (null? collection-path) - collection - (apply build-path collection collection-path)) - all-paths)) + (if found-col + found-col + (fail + (format "~a: collection not found: ~s in any of: ~s" + who (if (null? collection-path) + collection + (apply build-path collection collection-path)) + all-paths))) (let ([dir (build-path (car paths) collection)]) (if (directory-exists? dir) (let ([cpath (apply build-path dir collection-path)]) (if (directory-exists? cpath) - cpath + (if file-name + (if (or (file-exists? (build-path cpath file-name)) + (let ([alt-file-name + (let* ([file-name (if (path? file-name) + (path->string file-name) + file-name)] + [len (string-length file-name)]) + (and (len . >= . 4) + (string=? ".rkt" (substring file-name (- len 4))) + (string-append (substring file-name 0 (- len 4)) ".ss")))]) + (and alt-file-name + (file-exists? (build-path cpath alt-file-name))))) + cpath + ;; Look further for specific file, but remember + ;; first found directory + (cloop (cdr paths) (or found-col cpath))) + ;; Just looking for dir; found it: + cpath) ;; sub-collection not here; try next instance ;; of the top-level collection - (cloop (cdr paths)))) - (cloop (cdr paths))))))))) + (cloop (cdr paths) found-col))) + (cloop (cdr paths) found-col)))))))) (define-values (check-suffix-call) (lambda (s sfx who) @@ -708,13 +741,15 @@ (cons s (current-library-collection-paths)) #f) (let-values ([(cols file) (split-relative-string (symbol->string s) #f)]) - (let ([p (-find-col 'standard-module-name-resolver - show-collection-err - (if (null? cols) file (car cols)) - (if (null? cols) null (cdr cols)))]) - (build-path p (if (null? cols) - "main.rkt" - (string-append file ".rkt"))))))] + (let* ([f-file (if (null? cols) + "main.rkt" + (string-append file ".rkt"))] + [p (find-col-file 'standard-module-name-resolver + show-collection-err + (if (null? cols) file (car cols)) + (if (null? cols) null (cdr cols)) + f-file)]) + (build-path p f-file))))] [(string? s) (let* ([dir (get-dir)]) (or (hash-ref -path-cache (cons s dir) #f) @@ -743,7 +778,14 @@ (and (null? cols) (regexp-match? #rx"[.]" file)) #t)]) - (let ([p (let-values ([(cols) + (let* ([f-file (if old-style? + (ss->rkt file) + (if (null? cols) + "main.rkt" + (if (regexp-match? #rx"[.]" file) + (ss->rkt file) + (string-append file ".rkt"))))] + [p (let-values ([(cols) (if old-style? (append (if (null? (cddr s)) '("mzlib") @@ -755,17 +797,12 @@ (if (null? cols) (list file) cols))]) - (-find-col 'standard-module-name-resolver - show-collection-err - (car cols) - (cdr cols)))]) - (build-path p (if old-style? - (ss->rkt file) - (if (null? cols) - "main.rkt" - (if (regexp-match? #rx"[.]" file) - (ss->rkt file) - (string-append file ".rkt"))))))))] + (find-col-file 'standard-module-name-resolver + show-collection-err + (car cols) + (cdr cols) + f-file))]) + (build-path p f-file))))] [(eq? (car s) 'file) ;; Use filesystem-sensitive `simplify-path' here: (path-ss->rkt