diff --git a/collects/scribblings/raco/link.scrbl b/collects/scribblings/raco/link.scrbl
index e369f00af1..9027bbfb72 100644
--- a/collects/scribblings/raco/link.scrbl
+++ b/collects/scribblings/raco/link.scrbl
@@ -58,7 +58,15 @@ Full command-line options:
@DFlag{remove} flag is also used, only links with a collection
name matching @nonterm{name} are removed, and if no directory
arguments are provided, all links with a match to
- @nonterm{name} are removed.}
+ @nonterm{name} are removed. This flag is mutually exclusive with
+ @Flag{d} and @DFlag{root}.}
+
+ @item{@Flag{d} or @DFlag{root} --- Treats each directory as a
+ collection root that contains collection directories, instead of
+ a directory for a specific collection. When the @Flag{r} or
+ @DFlag{remove} flag is also used, only collection-root links
+ that match a directory are removed. This flag is mutually
+ exclusive with @Flag{n} and @DFlag{name}.}
@item{@Flag{x} @nonterm{regexp} or @DFlag{version-regexp}
@nonterm{regexp} --- Sets a version regexp that limits the link
@@ -106,6 +114,7 @@ Full command-line options:
[#:user? user? #t]
[#:file file (or/c path-string? #f) #f]
[#:name name (or/c string? #f) #f]
+ [#:root? root? any/c #f]
[#:version-regexp version-regexp (or/c regexp? #f) #f]
[#:error error-proc (symbol? string? any/c ... . -> . any) error]
[#:remove? remove? any/c #f]
@@ -122,8 +131,10 @@ reference-doc]{collection links file} if @racket[user?] is false.
The @racket[error-proc] argument is called to raise exceptions that
would be fatal to the @exec{raco link} command.
-If @racket[remove?] is false, the result is a list of top-level
-collection names (as strings) that are mapped by @racket[file] and
-that apply to the running version of Racket. If @racket[remove?] is
-true, the result is a list of entries that were removed from the file.}
-
+If @racket[remove?] is true, the result is a list of entries that were
+removed from the file. If @racket[remove?] is false but
+@racket[root?] is true, the result is a list of paths for collection
+roots. If @racket[remove?] and @racket[root?] are both false, the
+result is a list of top-level collection names (as strings) that are
+mapped by @racket[file] and that apply to the running version of
+Racket.}
diff --git a/collects/scribblings/reference/collects.scrbl b/collects/scribblings/reference/collects.scrbl
index d26e60ca84..80902790a3 100644
--- a/collects/scribblings/reference/collects.scrbl
+++ b/collects/scribblings/reference/collects.scrbl
@@ -185,21 +185,23 @@ the file is re-read if its timestamp changes.
Each @tech{collection links file} is @racket[read] with default reader
parameter settings to obtain a list. Every element of the list must be
-a link specification with either the form @racket[(_string _path)] or
-the form @racket[(_string _path _regexp)]. In both cases, the
-@racket[_string] names a top-level @tech{collection}, and
-@racket[_path] is a path that can be used as the collection's path
-(directly, as opposed to a subdirectory of @racket[_path] named by
-@racket[_string]). If @racket[_path] is a relative path, it is
-relative to the directory containing the @tech{collection links
-file}. If @racket[_regexp] is specified in a link, then the link is
-used only if @racket[(regexp-match? _regexp (version))] produces a
-true result.
+a link specification with one of the forms @racket[(list _string
+_path)], @racket[(list _string _path _regexp)], @racket[(list 'root
+_path)], or @racket[(list 'root _regexp)]. A @racket[_string] names a
+top-level @tech{collection}, in which case @racket[_path] is a path
+that can be used as the collection's path (directly, as opposed to a
+subdirectory of @racket[_path] named by @racket[_string]). A
+@racket['root] entry, in contrast, acts like an path in
+@racket[(current-library-collection-paths)]. If @racket[_path] is a
+relative path, it is relative to the directory containing the
+@tech{collection links file}. If @racket[_regexp] is specified in a
+link, then the link is used only if @racket[(regexp-match? _regexp
+(version))] produces a true result.
A single top-level collection can have multiple links in a
-@tech{collection links file}. The corresponding paths are effectively
-spliced together, since the paths are tried in order to locate a file
-or sub-collection.
+@tech{collection links file}, and any number of @racket['root] entries
+can appear. The corresponding paths are effectively spliced together,
+since the paths are tried in order to locate a file or sub-collection.
The @exec{raco link} command-link tool can display, install, and
remove links in the @tech{collection links file}. See @secref[#:doc
diff --git a/collects/setup/commands/link.rkt b/collects/setup/commands/link.rkt
index d912cc423b..819c0c3db6 100644
--- a/collects/setup/commands/link.rkt
+++ b/collects/setup/commands/link.rkt
@@ -5,6 +5,7 @@
(define link-file (make-parameter #f))
(define link-name (make-parameter #f))
+(define root-mode (make-parameter #f))
(define link-version (make-parameter #f))
(define remove-mode (make-parameter #f))
(define repair-mode (make-parameter #f))
@@ -20,8 +21,12 @@
#:once-each
[("-l" "--list") "Show the link table (after changes)"
(show-mode #t)]
+ #:once-any
[("-n" "--name") name "Collection name to add (single
) or remove"
(link-name name)]
+ [("-d" "--root") "Treat as a collection root"
+ (root-mode #t)]
+ #:once-each
[("-x" "--version-regexp") regexp "Set the version pregexp"
(with-handlers ([exn:fail:contract? (lambda (exn)
(raise-user-error link-symbol
@@ -62,6 +67,7 @@
(define (go user?)
(apply links
dirs
+ #:root? (root-mode)
#:user? user?
#:file (link-file)
#:name (link-name)
diff --git a/collects/setup/link.rkt b/collects/setup/link.rkt
index a266d0f291..ed11ba56c6 100644
--- a/collects/setup/link.rkt
+++ b/collects/setup/link.rkt
@@ -10,6 +10,7 @@
#:file [in-file #f]
#:name [name #f]
#:version-regexp [version-regexp #f]
+ #:root? [root? #f]
#:remove? [remove? #f]
#:show? [show? #f]
#:repair? [repair? #f]
@@ -56,8 +57,9 @@
(= 3 (length e))))
(content-error "entry is a not a 2- or 3-element list: " e))
#:when
- (or (string? (car e))
- (content-error "entry's first element is not a string: " e))
+ (or (or (string? (car e))
+ (eq? 'root (car e)))
+ (content-error "entry's first element is not a string or 'root: " e))
#:when
(or (path-string? (cadr e))
(content-error "entry's second element is not a path string: " e))
@@ -100,24 +102,29 @@
(find-relative-path file-dir
(simplify-path
(path->complete-path d))))]
- [a-name (and d
- (or name
- (let-values ([(base name dir?) (split-path dp)])
- (path-element->string name))))]
+ [a-name (if root?
+ 'root
+ (and d
+ (or name
+ (let-values ([(base name dir?) (split-path dp)])
+ (path-element->string name)))))]
[rx version-regexp]
- [d (and dp (path->string dp))])
+ [d (and dp (path->string dp))]
+ [sd (and d (simplify d))])
(unless remove?
- (unless (directory-exists? dp)
+ (unless (directory-exists? sd)
(error 'links
"no such directory for link: ~a"
- dp)))
+ sd)))
(if remove?
(filter (lambda (e)
(or (and d
(not (equal? (simplify (cadr e))
- (simplify d))))
+ sd)))
(and name
(not (equal? (car e) name)))
+ (and root?
+ (not (eq? (car e) 'root)))
(and version-regexp
(pair? (cddr e))
(not (equal? (caddr e) version-regexp)))))
@@ -159,7 +166,10 @@
(when show?
(for ([e (in-list new-table)])
- (printf " collection: ~s path: ~s~a\n"
+ (printf " ~a~s path: ~s~a\n"
+ (if (eq? (car e) 'root)
+ ""
+ "collection: ")
(car e)
(path->string (simplify (cadr e)))
(if (null? (cddr e))
@@ -170,10 +180,17 @@
(if remove?
;; return list of removed entries:
(filter (lambda (e) (not (member e new-table))) table)
- ;; Return list of collections mapped for this version:
- (let ([ht (make-hash)])
- (for ([e (in-list new-table)])
- (when (or (null? (cddr e))
- (regexp-match? (caddr e) (version)))
- (hash-set! ht (car e) #t)))
- (hash-map ht (lambda (k e) k)))))
+ (if root?
+ ;; Return root paths:
+ (for/list ([e (in-list new-table)]
+ #:when (eq? 'root (car e)))
+ (simplify (cadr e)))
+ ;; Return list of collections mapped for this version:
+ (let ([ht (make-hash)])
+ (for ([e (in-list new-table)])
+ (when (and (string? (car e))
+ (or (null? (cddr e))
+ (regexp-match? (caddr e) (version))))
+ (hash-set! ht (car e) #t)))
+ (hash-map ht (lambda (k e) k))))))
+
diff --git a/collects/setup/setup-unit.rkt b/collects/setup/setup-unit.rkt
index 6cc099bcf6..5c177033c1 100644
--- a/collects/setup/setup-unit.rkt
+++ b/collects/setup/setup-unit.rkt
@@ -283,31 +283,41 @@
(define all-collections
(let ([ht (make-hash)])
+ (define (maybe collection ->cc)
+ (hash-ref ht collection
+ (lambda ()
+ (let ([cc (->cc collection)])
+ (when cc (hash-set! ht collection cc))))))
(for ([cp (current-library-collection-paths)]
#:when (directory-exists? cp)
[collection (directory-list cp)]
#:when (directory-exists? (build-path cp collection)))
- (hash-ref ht collection
- (lambda ()
- (let ([cc (collection->cc (list collection))])
- (when cc (hash-set! ht collection cc))))))
+ (maybe (list collection) collection->cc))
(let ([main-collects (find-collects-dir)])
+ (define (->cc col)
+ (collection->cc col
+ #:info-root main-collects
+ #:info-path-mode 'abs-in-relative
+ #:omit-root 'dir))
(for ([c (in-list (links #:user? #f))])
- (let* ([c (string->path c)]
- [cc (collection->cc (list c)
- #:info-root main-collects
- #:info-path-mode 'abs-in-relative
- #:omit-root 'dir)])
- (when cc (hash-set! ht c cc)))))
+ (maybe (list (string->path c)) ->cc))
+ (for ([cp (in-list (links #:root? #t #:user? #f))]
+ #:when (directory-exists? cp)
+ [collection (directory-list cp)])
+ (maybe (list collection) ->cc)))
(when (make-user)
(let ([user-collects (find-user-collects-dir)])
+ (define (->cc col)
+ (collection->cc col
+ #:info-root user-collects
+ #:info-path-mode 'abs-in-relative
+ #:omit-root 'dir))
(for ([c (in-list (links))])
- (let* ([c (string->path c)]
- [cc (collection->cc (list c)
- #:info-root user-collects
- #:info-path-mode 'abs-in-relative
- #:omit-root 'dir)])
- (when cc (hash-set! ht c cc))))))
+ (maybe (list (string->path c)) ->cc))
+ (for ([cp (in-list (links #:root? #t))]
+ #:when (directory-exists? cp)
+ [collection (directory-list cp)])
+ (maybe (list collection) ->cc))))
(hash-map ht (lambda (k v) v))))
;; Close over sub-collections
diff --git a/src/racket/src/cstartup.inc b/src/racket/src/cstartup.inc
index 7650cfec55..5098cb9bd3 100644
--- a/src/racket/src/cstartup.inc
+++ b/src/racket/src/cstartup.inc
@@ -15,12 +15,12 @@
116,120,61,115,70,108,101,116,45,118,97,108,117,101,115,61,120,73,108,101,116,
114,101,99,45,118,97,108,117,101,115,66,108,97,109,98,100,97,1,20,112,97,
114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,61,118,73,
-100,101,102,105,110,101,45,118,97,108,117,101,115,97,36,11,8,240,112,76,0,
+100,101,102,105,110,101,45,118,97,108,117,101,115,97,36,11,8,240,122,76,0,
0,95,159,2,17,36,36,159,2,16,36,36,159,2,16,36,36,16,20,2,4,
2,2,2,6,2,2,2,8,2,2,2,7,2,2,2,9,2,2,2,10,2,
2,2,11,2,2,2,5,2,2,2,12,2,2,2,13,2,2,97,37,11,8,
-240,112,76,0,0,93,159,2,16,36,37,16,2,2,3,161,2,2,37,2,3,
-2,2,2,3,96,11,11,8,240,112,76,0,0,16,0,96,38,11,8,240,112,
+240,122,76,0,0,93,159,2,16,36,37,16,2,2,3,161,2,2,37,2,3,
+2,2,2,3,96,11,11,8,240,122,76,0,0,16,0,96,38,11,8,240,122,
76,0,0,16,0,18,98,64,104,101,114,101,13,16,5,36,2,14,2,2,11,
11,8,32,8,31,8,30,8,29,27,248,22,155,4,195,249,22,148,4,80,158,
39,36,251,22,83,2,18,248,22,98,199,12,249,22,73,2,19,248,22,100,201,
@@ -30,14 +30,14 @@
74,193,249,22,148,4,80,158,39,36,251,22,83,2,18,248,22,74,199,249,22,
73,2,11,248,22,75,201,11,18,100,10,13,16,5,36,2,14,2,2,11,11,
8,32,8,31,8,30,8,29,16,4,11,11,2,20,3,1,8,101,110,118,49,
-52,55,57,57,16,4,11,11,2,21,3,1,8,101,110,118,49,52,56,48,48,
+52,56,48,57,16,4,11,11,2,21,3,1,8,101,110,118,49,52,56,49,48,
27,248,22,75,248,22,155,4,196,28,248,22,81,193,20,14,159,37,36,37,28,
248,22,81,248,22,75,194,248,22,74,193,249,22,148,4,80,158,39,36,250,22,
83,2,22,248,22,83,249,22,83,248,22,83,2,23,248,22,74,201,251,22,83,
2,18,2,23,2,23,249,22,73,2,13,248,22,75,204,18,100,11,13,16,5,
36,2,14,2,2,11,11,8,32,8,31,8,30,8,29,16,4,11,11,2,20,
-3,1,8,101,110,118,49,52,56,48,50,16,4,11,11,2,21,3,1,8,101,
-110,118,49,52,56,48,51,248,22,155,4,193,27,248,22,155,4,194,249,22,73,
+3,1,8,101,110,118,49,52,56,49,50,16,4,11,11,2,21,3,1,8,101,
+110,118,49,52,56,49,51,248,22,155,4,193,27,248,22,155,4,194,249,22,73,
248,22,83,248,22,74,196,248,22,75,195,27,248,22,75,248,22,155,4,23,197,
1,249,22,148,4,80,158,39,36,28,248,22,58,248,22,149,4,248,22,74,23,
198,2,27,249,22,2,32,0,88,163,8,36,37,43,11,9,222,33,40,248,22,
@@ -67,8 +67,8 @@
140,9,248,22,149,4,248,22,74,200,64,101,108,115,101,10,248,22,74,197,250,
22,84,2,22,9,248,22,75,200,249,22,73,2,5,248,22,75,202,99,13,16,
5,36,2,14,2,2,11,11,8,32,8,31,8,30,8,29,16,4,11,11,2,
-20,3,1,8,101,110,118,49,52,56,50,53,16,4,11,11,2,21,3,1,8,
-101,110,118,49,52,56,50,54,18,158,94,10,64,118,111,105,100,8,48,27,248,
+20,3,1,8,101,110,118,49,52,56,51,53,16,4,11,11,2,21,3,1,8,
+101,110,118,49,52,56,51,54,18,158,94,10,64,118,111,105,100,8,48,27,248,
22,75,248,22,155,4,196,249,22,148,4,80,158,39,36,28,248,22,58,248,22,
149,4,248,22,74,197,250,22,83,2,28,248,22,83,248,22,74,199,248,22,98,
198,27,248,22,149,4,248,22,74,197,250,22,83,2,28,248,22,83,248,22,74,
@@ -99,492 +99,502 @@
}
{
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,51,46,53,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,107,0,0,0,1,0,0,8,0,21,0,26,
+0,0,0,0,0,0,0,0,0,109,0,0,0,1,0,0,8,0,21,0,26,
0,43,0,65,0,94,0,109,0,127,0,143,0,157,0,179,0,195,0,212,0,
234,0,245,0,251,0,4,1,11,1,18,1,30,1,46,1,70,1,102,1,120,
1,140,1,156,1,174,1,205,1,219,1,224,1,234,1,242,1,251,1,253,1,
-255,1,27,2,59,2,72,2,78,2,117,2,121,2,166,2,190,2,229,2,243,
-2,246,2,249,2,3,3,14,3,181,3,25,5,143,5,5,6,46,6,119,7,
-142,7,159,7,107,9,210,9,224,9,128,10,57,12,66,12,75,12,89,12,99,
-12,140,13,242,13,72,14,158,14,2,15,86,15,100,15,214,15,42,16,56,16,
-9,17,17,17,123,17,172,17,174,17,18,18,78,18,83,18,189,18,10,19,168,
-20,190,20,199,20,192,21,210,21,224,21,183,22,202,22,140,25,4,30,110,30,
-255,30,240,31,222,32,229,32,54,33,137,33,222,33,248,33,121,34,0,0,221,
-38,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,1,20,102,105,110,100,45,101,120,101,99,117,116,97,98,108,101,
-45,112,97,116,104,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,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,75,117,115,101,114,45,108,
-105,110,107,115,45,112,97,116,104,76,117,115,101,114,45,108,105,110,107,115,45,
-99,97,99,104,101,1,20,117,115,101,114,45,108,105,110,107,115,45,116,105,109,
-101,115,116,97,109,112,70,108,105,110,107,115,45,112,97,116,104,65,113,117,111,
-116,101,68,35,37,112,97,114,97,109,122,29,94,2,16,2,17,11,29,94,2,
-16,2,17,11,71,108,105,110,107,115,45,99,97,99,104,101,75,108,105,110,107,
-115,45,116,105,109,101,115,116,97,109,112,1,22,103,101,116,45,108,105,110,107,
-101,100,45,99,111,108,108,101,99,116,105,111,110,115,1,30,110,111,114,109,97,
-108,105,122,101,45,99,111,108,108,101,99,116,105,111,110,45,114,101,102,101,114,
-101,110,99,101,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,73,101,109,98,101,100,100,101,100,45,108,111,97,100,64,108,111,111,112,
-69,101,120,101,99,45,102,105,108,101,67,119,105,110,100,111,119,115,68,114,101,
-108,97,116,105,118,101,5,0,5,0,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,72,99,111,108,108,101,99,116,115,45,100,105,114,65,
-101,114,114,111,114,6,36,36,101,114,114,111,114,32,114,101,97,100,105,110,103,
-32,108,105,110,107,101,100,32,99,111,108,108,101,99,116,105,111,110,115,58,32,
-126,97,6,1,1,47,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,6,11,11,80,76,84,67,79,76,76,69,67,
-84,83,6,0,0,6,0,0,69,97,100,100,111,110,45,100,105,114,6,8,8,
-99,111,108,108,101,99,116,115,27,20,13,159,80,159,37,51,37,250,80,159,40,
-52,37,249,22,27,11,80,159,42,51,37,22,186,13,10,248,22,190,5,23,196,
+255,1,27,2,59,2,72,2,78,2,123,2,127,2,172,2,196,2,235,2,249,
+2,252,2,255,2,9,3,20,3,187,3,31,5,149,5,11,6,52,6,125,7,
+148,7,165,7,113,9,216,9,230,9,134,10,63,12,72,12,81,12,95,12,105,
+12,146,13,248,13,78,14,164,14,8,15,92,15,106,15,220,15,48,16,62,16,
+15,17,23,17,129,17,192,17,194,17,50,18,110,18,115,18,238,18,249,18,129,
+19,139,19,62,21,84,21,93,21,86,22,104,22,118,22,77,23,96,23,34,26,
+154,30,52,31,197,31,182,32,164,33,171,33,252,33,79,34,164,34,190,34,63,
+35,0,0,163,39,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,1,20,102,105,110,100,45,101,120,101,99,117,116,
+97,98,108,101,45,112,97,116,104,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,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,75,117,115,
+101,114,45,108,105,110,107,115,45,112,97,116,104,76,117,115,101,114,45,108,105,
+110,107,115,45,99,97,99,104,101,1,20,117,115,101,114,45,108,105,110,107,115,
+45,116,105,109,101,115,116,97,109,112,70,108,105,110,107,115,45,112,97,116,104,
+65,113,117,111,116,101,68,35,37,112,97,114,97,109,122,29,94,2,16,2,17,
+11,29,94,2,16,2,17,11,71,108,105,110,107,115,45,99,97,99,104,101,75,
+108,105,110,107,115,45,116,105,109,101,115,116,97,109,112,1,22,103,101,116,45,
+108,105,110,107,101,100,45,99,111,108,108,101,99,116,105,111,110,115,1,30,110,
+111,114,109,97,108,105,122,101,45,99,111,108,108,101,99,116,105,111,110,45,114,
+101,102,101,114,101,110,99,101,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,73,101,109,98,101,100,100,101,100,45,108,111,97,100,64,
+108,111,111,112,69,101,120,101,99,45,102,105,108,101,67,119,105,110,100,111,119,
+115,68,114,101,108,97,116,105,118,101,5,0,5,0,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,72,99,111,108,108,101,99,116,115,45,
+100,105,114,65,101,114,114,111,114,6,42,42,101,114,114,111,114,32,114,101,97,
+100,105,110,103,32,99,111,108,108,101,99,116,105,111,110,32,108,105,110,107,115,
+32,102,105,108,101,32,126,115,58,32,126,97,6,1,1,47,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,6,11,
+11,80,76,84,67,79,76,76,69,67,84,83,6,0,0,6,0,0,69,97,100,
+100,111,110,45,100,105,114,6,8,8,99,111,108,108,101,99,116,115,27,20,13,
+159,80,159,37,51,37,250,80,159,40,52,37,249,22,27,11,80,159,42,51,37,
+22,186,13,10,248,22,190,5,23,196,2,28,248,22,189,6,23,194,2,12,86,
+94,248,22,148,9,23,194,1,27,20,13,159,80,159,38,51,37,250,80,159,41,
+52,37,249,22,27,11,80,159,43,51,37,22,186,13,10,248,22,190,5,23,197,
2,28,248,22,189,6,23,194,2,12,86,94,248,22,148,9,23,194,1,27,20,
-13,159,80,159,38,51,37,250,80,159,41,52,37,249,22,27,11,80,159,43,51,
-37,22,186,13,10,248,22,190,5,23,197,2,28,248,22,189,6,23,194,2,12,
-86,94,248,22,148,9,23,194,1,27,20,13,159,80,159,39,51,37,250,80,159,
-42,52,37,249,22,27,11,80,159,44,51,37,22,186,13,10,248,22,190,5,23,
-198,2,28,248,22,189,6,23,194,2,12,86,94,248,22,148,9,23,194,1,248,
-80,159,40,8,31,39,197,28,248,22,81,23,195,2,9,27,248,22,74,23,196,
-2,27,28,248,22,172,14,23,195,2,23,194,1,28,248,22,171,14,23,195,2,
-249,22,173,14,23,196,1,250,80,159,43,39,39,248,22,188,14,2,31,11,10,
-250,80,159,41,39,39,248,22,188,14,2,31,23,197,1,10,28,23,193,2,249,
-22,73,248,22,175,14,249,22,173,14,23,198,1,247,22,189,14,27,248,22,75,
-23,200,1,28,248,22,81,23,194,2,9,27,248,22,74,23,195,2,27,28,248,
+13,159,80,159,39,51,37,250,80,159,42,52,37,249,22,27,11,80,159,44,51,
+37,22,186,13,10,248,22,190,5,23,198,2,28,248,22,189,6,23,194,2,12,
+86,94,248,22,148,9,23,194,1,248,80,159,40,8,31,39,197,28,248,22,81,
+23,195,2,9,27,248,22,74,23,196,2,27,28,248,22,172,14,23,195,2,23,
+194,1,28,248,22,171,14,23,195,2,249,22,173,14,23,196,1,250,80,159,43,
+39,39,248,22,188,14,2,31,11,10,250,80,159,41,39,39,248,22,188,14,2,
+31,23,197,1,10,28,23,193,2,249,22,73,248,22,175,14,249,22,173,14,23,
+198,1,247,22,189,14,27,248,22,75,23,200,1,28,248,22,81,23,194,2,9,
+27,248,22,74,23,195,2,27,28,248,22,172,14,23,195,2,23,194,1,28,248,
+22,171,14,23,195,2,249,22,173,14,23,196,1,250,80,159,48,39,39,248,22,
+188,14,2,31,11,10,250,80,159,46,39,39,248,22,188,14,2,31,23,197,1,
+10,28,23,193,2,249,22,73,248,22,175,14,249,22,173,14,23,198,1,247,22,
+189,14,248,80,159,46,8,30,39,248,22,75,23,199,1,86,94,23,193,1,248,
+80,159,44,8,30,39,248,22,75,23,197,1,86,94,23,193,1,27,248,22,75,
+23,198,1,28,248,22,81,23,194,2,9,27,248,22,74,23,195,2,27,28,248,
22,172,14,23,195,2,23,194,1,28,248,22,171,14,23,195,2,249,22,173,14,
-23,196,1,250,80,159,48,39,39,248,22,188,14,2,31,11,10,250,80,159,46,
+23,196,1,250,80,159,46,39,39,248,22,188,14,2,31,11,10,250,80,159,44,
39,39,248,22,188,14,2,31,23,197,1,10,28,23,193,2,249,22,73,248,22,
-175,14,249,22,173,14,23,198,1,247,22,189,14,248,80,159,46,8,30,39,248,
-22,75,23,199,1,86,94,23,193,1,248,80,159,44,8,30,39,248,22,75,23,
-197,1,86,94,23,193,1,27,248,22,75,23,198,1,28,248,22,81,23,194,2,
-9,27,248,22,74,23,195,2,27,28,248,22,172,14,23,195,2,23,194,1,28,
-248,22,171,14,23,195,2,249,22,173,14,23,196,1,250,80,159,46,39,39,248,
-22,188,14,2,31,11,10,250,80,159,44,39,39,248,22,188,14,2,31,23,197,
-1,10,28,23,193,2,249,22,73,248,22,175,14,249,22,173,14,23,198,1,247,
-22,189,14,248,80,159,44,8,30,39,248,22,75,23,199,1,248,80,159,42,8,
-30,39,248,22,75,196,28,248,22,81,23,195,2,9,27,248,22,74,23,196,2,
-27,28,248,22,172,14,23,195,2,23,194,1,28,248,22,171,14,23,195,2,249,
-22,173,14,23,196,1,250,80,159,43,39,39,248,22,188,14,2,31,11,10,250,
-80,159,41,39,39,248,22,188,14,2,31,23,197,1,10,28,23,193,2,249,22,
-73,248,22,175,14,249,22,173,14,23,198,1,247,22,189,14,248,80,159,41,8,
-29,39,248,22,75,23,200,1,248,80,159,39,8,29,39,248,22,75,197,28,248,
-22,81,23,195,2,9,27,248,22,74,23,196,2,27,28,248,22,172,14,23,195,
-2,23,194,1,28,248,22,171,14,23,195,2,249,22,173,14,23,196,1,250,80,
-159,43,39,39,248,22,188,14,2,31,11,10,250,80,159,41,39,39,248,22,188,
-14,2,31,23,197,1,10,28,23,193,2,249,22,73,248,22,175,14,249,22,173,
-14,23,198,1,247,22,189,14,248,80,159,41,8,28,39,248,22,75,23,200,1,
-248,80,159,39,8,28,39,248,22,75,197,27,248,22,148,14,23,195,2,28,23,
-193,2,192,86,94,23,193,1,28,248,22,130,7,23,195,2,27,248,22,170,14,
-195,28,192,192,248,22,171,14,195,11,86,94,28,28,248,22,149,14,23,195,2,
-10,28,248,22,148,14,23,195,2,10,28,248,22,130,7,23,195,2,28,248,22,
-170,14,23,195,2,10,248,22,171,14,23,195,2,11,12,250,22,176,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,149,14,23,195,2,249,22,140,9,248,22,150,14,23,197,2,2,
-32,249,22,140,9,247,22,152,8,2,32,27,28,248,22,130,7,23,196,2,23,
-195,2,248,22,142,8,248,22,153,14,23,197,2,28,249,22,139,15,0,21,35,
-114,120,34,94,91,92,92,93,91,92,92,93,91,63,93,91,92,92,93,34,23,
-195,2,28,248,22,130,7,195,248,22,156,14,195,194,27,248,22,169,7,23,195,
-1,249,22,157,14,248,22,145,8,250,22,147,15,0,6,35,114,120,34,47,34,
-28,249,22,139,15,0,22,35,114,120,34,91,47,92,92,93,91,46,32,93,43,
-91,47,92,92,93,42,36,34,23,201,2,23,199,1,250,22,147,15,0,19,35,
-114,120,34,91,32,46,93,43,40,91,47,92,92,93,42,41,36,34,23,202,1,
-6,2,2,92,49,80,159,44,37,38,2,32,28,248,22,130,7,194,248,22,156,
-14,194,193,32,56,88,163,8,36,39,53,11,70,102,111,117,110,100,45,101,120,
-101,99,222,33,59,32,57,88,163,8,36,40,58,11,64,110,101,120,116,222,33,
-58,27,248,22,174,14,23,196,2,28,249,22,142,9,23,195,2,23,197,1,11,
-28,248,22,170,14,23,194,2,27,249,22,166,14,23,197,1,23,196,1,28,23,
-197,2,90,159,39,11,89,161,39,36,11,248,22,169,14,23,197,2,86,95,23,
-195,1,23,194,1,27,28,23,202,2,27,248,22,174,14,23,199,2,28,249,22,
-142,9,23,195,2,23,200,2,11,28,248,22,170,14,23,194,2,250,2,56,23,
-205,2,23,206,2,249,22,166,14,23,200,2,23,198,1,250,2,56,23,205,2,
-23,206,2,23,196,1,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,
-148,14,23,196,2,27,249,22,166,14,23,198,2,23,205,2,28,28,248,22,161,
-14,193,10,248,22,160,14,193,192,11,11,28,23,193,2,192,86,94,23,193,1,
-28,23,203,2,11,27,248,22,174,14,23,200,2,28,249,22,142,9,23,195,2,
-23,201,1,11,28,248,22,170,14,23,194,2,250,2,56,23,206,1,23,207,1,
-249,22,166,14,23,201,1,23,198,1,250,2,56,205,206,195,192,86,94,23,194,
-1,28,23,196,2,90,159,39,11,89,161,39,36,11,248,22,169,14,23,197,2,
-86,95,23,195,1,23,194,1,27,28,23,201,2,27,248,22,174,14,23,199,2,
-28,249,22,142,9,23,195,2,23,200,2,11,28,248,22,170,14,23,194,2,250,
-2,56,23,204,2,23,205,2,249,22,166,14,23,200,2,23,198,1,250,2,56,
-23,204,2,23,205,2,23,196,1,11,28,23,193,2,192,86,94,23,193,1,27,
-28,248,22,148,14,23,196,2,27,249,22,166,14,23,198,2,23,204,2,28,28,
-248,22,161,14,193,10,248,22,160,14,193,192,11,11,28,23,193,2,192,86,94,
-23,193,1,28,23,202,2,11,27,248,22,174,14,23,200,2,28,249,22,142,9,
-23,195,2,23,201,1,11,28,248,22,170,14,23,194,2,250,2,56,23,205,1,
-23,206,1,249,22,166,14,23,201,1,23,198,1,250,2,56,204,205,195,192,28,
-23,193,2,90,159,39,11,89,161,39,36,11,248,22,169,14,23,199,2,86,95,
-23,195,1,23,194,1,27,28,23,198,2,251,2,57,23,198,2,23,203,2,23,
-201,2,23,202,2,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,148,
-14,195,27,249,22,166,14,197,200,28,28,248,22,161,14,193,10,248,22,160,14,
-193,192,11,11,28,192,192,28,198,11,251,2,57,198,203,201,202,194,32,60,88,
-163,8,36,40,58,11,2,30,222,33,61,28,248,22,81,23,197,2,11,27,248,
-22,173,14,248,22,74,23,199,2,27,249,22,166,14,23,196,1,23,197,2,28,
-248,22,160,14,23,194,2,250,2,56,198,199,195,86,94,23,193,1,27,248,22,
-75,23,200,1,28,248,22,81,23,194,2,11,27,248,22,173,14,248,22,74,23,
-196,2,27,249,22,166,14,23,196,1,23,200,2,28,248,22,160,14,23,194,2,
-250,2,56,201,202,195,86,94,23,193,1,27,248,22,75,23,197,1,28,248,22,
-81,23,194,2,11,27,248,22,173,14,248,22,74,195,27,249,22,166,14,23,196,
-1,202,28,248,22,160,14,193,250,2,56,204,205,195,251,2,60,204,205,206,248,
-22,75,199,86,95,28,28,248,22,148,14,23,195,2,10,28,248,22,130,7,23,
-195,2,28,248,22,170,14,23,195,2,10,248,22,171,14,23,195,2,11,12,250,
-22,176,9,2,5,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,148,14,23,196,2,10,28,248,22,130,7,23,196,2,28,248,22,170,
-14,23,196,2,10,248,22,171,14,23,196,2,11,248,22,170,14,23,196,2,11,
-10,12,250,22,176,9,2,5,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,170,14,23,195,2,90,159,39,11,89,161,39,36,11,248,22,
-169,14,23,198,2,249,22,140,9,194,2,33,11,27,248,22,150,8,6,4,4,
-80,65,84,72,27,28,23,194,2,27,249,80,158,41,40,23,197,1,9,28,249,
-22,140,9,247,22,152,8,2,32,249,22,73,248,22,157,14,5,1,46,194,192,
-86,94,23,194,1,9,28,248,22,81,23,194,2,11,27,248,22,173,14,248,22,
-74,23,196,2,27,249,22,166,14,23,196,1,23,200,2,28,248,22,160,14,23,
-194,2,250,2,56,201,202,195,86,94,23,193,1,27,248,22,75,23,197,1,28,
-248,22,81,23,194,2,11,27,248,22,173,14,248,22,74,23,196,2,27,249,22,
-166,14,23,196,1,23,203,2,28,248,22,160,14,23,194,2,250,2,56,204,205,
-195,86,94,23,193,1,27,248,22,75,23,197,1,28,248,22,81,23,194,2,11,
-27,248,22,173,14,248,22,74,195,27,249,22,166,14,23,196,1,205,28,248,22,
-160,14,193,250,2,56,23,15,23,16,195,251,2,60,23,15,23,16,23,17,248,
-22,75,199,27,248,22,173,14,23,196,1,28,248,22,160,14,193,250,2,56,198,
-199,195,11,250,80,159,39,39,39,196,197,11,250,80,159,39,39,39,196,11,11,
-32,65,88,163,8,36,39,57,11,2,30,222,33,67,0,8,35,114,120,35,34,
-92,34,34,27,249,22,135,15,23,197,2,23,198,2,28,23,193,2,86,94,23,
-196,1,27,248,22,98,23,195,2,27,27,248,22,107,23,197,1,27,249,22,135,
-15,23,201,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22,98,23,
-195,2,27,250,2,65,23,203,2,23,204,1,248,22,107,23,199,1,28,249,22,
-191,7,23,196,2,2,34,249,22,87,23,202,2,194,249,22,73,248,22,157,14,
-28,249,22,140,9,247,22,152,8,2,32,250,22,147,15,2,66,23,200,1,2,
-35,23,197,1,194,86,95,23,199,1,23,193,1,28,249,22,191,7,23,196,2,
-2,34,249,22,87,23,200,2,9,249,22,73,248,22,157,14,28,249,22,140,9,
-247,22,152,8,2,32,250,22,147,15,2,66,23,200,1,2,35,23,197,1,9,
-28,249,22,191,7,23,196,2,2,34,249,22,87,197,194,86,94,23,196,1,249,
-22,73,248,22,157,14,28,249,22,140,9,247,22,152,8,2,32,250,22,147,15,
-2,66,23,200,1,2,35,23,197,1,194,86,94,23,193,1,28,249,22,191,7,
-23,198,2,2,34,249,22,87,195,9,86,94,23,194,1,249,22,73,248,22,157,
-14,28,249,22,140,9,247,22,152,8,2,32,250,22,147,15,2,66,23,202,1,
-2,35,23,199,1,9,86,95,28,28,248,22,183,7,194,10,248,22,130,7,194,
-12,250,22,176,9,2,6,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,82,195,249,22,4,22,
-148,14,196,11,12,250,22,176,9,2,6,6,13,13,108,105,115,116,32,111,102,
-32,112,97,116,104,115,197,250,2,65,197,195,28,248,22,130,7,197,248,22,144,
-8,197,196,86,94,28,28,248,22,148,14,23,195,2,10,28,248,22,130,7,23,
-195,2,28,248,22,170,14,23,195,2,10,248,22,171,14,23,195,2,11,12,250,
-22,176,9,23,196,2,2,36,23,197,2,28,248,22,170,14,23,195,2,12,248,
-22,162,12,249,22,168,11,248,22,159,7,250,22,178,7,2,37,23,200,1,23,
-201,1,247,22,23,86,94,28,28,248,22,148,14,23,195,2,10,28,248,22,130,
-7,23,195,2,28,248,22,170,14,23,195,2,10,248,22,171,14,23,195,2,11,
-12,250,22,176,9,23,196,2,2,36,23,197,2,28,248,22,170,14,23,195,2,
-12,248,22,162,12,249,22,168,11,248,22,159,7,250,22,178,7,2,37,23,200,
-1,23,201,1,247,22,23,86,94,86,94,28,28,248,22,148,14,23,195,2,10,
-28,248,22,130,7,23,195,2,28,248,22,170,14,23,195,2,10,248,22,171,14,
-23,195,2,11,12,250,22,176,9,195,2,36,23,197,2,28,248,22,170,14,23,
-195,2,12,248,22,162,12,249,22,168,11,248,22,159,7,250,22,178,7,2,37,
-199,23,201,1,247,22,23,249,22,3,88,163,8,36,37,50,11,9,223,2,33,
-70,196,86,94,28,28,248,22,148,14,23,194,2,10,28,248,22,130,7,23,194,
-2,28,248,22,170,14,23,194,2,10,248,22,171,14,23,194,2,11,12,250,22,
-176,9,2,9,2,36,23,196,2,28,248,22,170,14,23,194,2,12,248,22,162,
-12,249,22,168,11,248,22,159,7,250,22,178,7,2,37,2,9,23,200,1,247,
-22,23,248,22,162,12,249,22,137,12,23,196,1,247,22,23,86,94,86,94,86,
-94,28,28,248,22,148,14,194,10,28,248,22,130,7,194,28,248,22,170,14,194,
-10,248,22,171,14,194,11,12,250,22,176,9,2,9,2,36,196,28,248,22,170,
-14,194,12,248,22,162,12,249,22,168,11,248,22,159,7,250,22,178,7,2,37,
-2,9,200,247,22,23,249,22,3,32,0,88,163,8,36,37,49,11,9,222,33,
-72,196,252,80,158,41,44,2,9,32,0,88,163,8,36,37,45,11,9,222,33,
-73,198,199,11,86,94,28,28,248,22,148,14,23,194,2,10,28,248,22,130,7,
-23,194,2,28,248,22,170,14,23,194,2,10,248,22,171,14,23,194,2,11,12,
-250,22,176,9,2,11,2,36,23,196,2,28,248,22,170,14,23,194,2,12,248,
-22,162,12,249,22,168,11,248,22,159,7,250,22,178,7,2,37,2,11,23,200,
-1,247,22,23,248,22,162,12,249,22,137,12,23,196,1,247,22,23,86,95,86,
-94,28,28,248,22,148,14,194,10,28,248,22,130,7,194,28,248,22,170,14,194,
-10,248,22,171,14,194,11,12,250,22,176,9,2,11,2,36,196,28,248,22,170,
-14,194,12,248,22,162,12,249,22,168,11,248,22,159,7,250,22,178,7,2,37,
-2,11,200,247,22,23,86,94,86,94,28,28,248,22,148,14,23,196,2,10,28,
-248,22,130,7,23,196,2,28,248,22,170,14,23,196,2,10,248,22,171,14,23,
-196,2,11,12,250,22,176,9,2,11,2,36,23,198,2,28,248,22,170,14,23,
-196,2,12,248,22,162,12,249,22,168,11,248,22,159,7,250,22,178,7,2,37,
-2,11,23,202,2,247,22,23,249,22,3,32,0,88,163,8,36,37,49,11,9,
-222,33,75,23,198,2,249,22,166,14,252,80,158,43,44,2,11,32,0,88,163,
-8,36,37,45,11,9,222,33,76,23,202,1,23,203,1,200,195,0,6,45,105,
-110,102,46,48,27,248,22,188,14,2,38,27,28,248,22,171,14,23,195,2,193,
-20,13,159,80,159,38,51,37,250,80,159,41,52,37,249,22,27,11,80,159,43,
-51,37,22,189,14,248,22,188,14,68,111,114,105,103,45,100,105,114,27,248,22,
-188,14,2,31,250,80,159,42,39,39,23,196,1,23,198,1,11,28,192,250,22,
-166,14,195,6,6,6,99,111,110,102,105,103,6,10,10,108,105,110,107,115,46,
-114,107,116,100,11,86,94,27,247,22,131,10,28,249,22,188,9,23,195,2,2,
-39,251,22,191,9,23,197,1,2,39,249,22,178,7,2,40,248,22,160,11,23,
-202,1,247,22,23,12,248,193,247,22,133,2,2,78,86,95,27,247,22,131,10,
-28,249,22,188,9,23,195,2,2,39,251,22,191,9,23,197,1,2,39,249,22,
-178,7,2,40,248,22,160,11,23,205,1,247,22,23,12,28,192,28,194,86,94,
-20,18,159,11,80,158,39,47,247,22,133,2,20,18,159,11,80,158,39,48,192,
-86,94,20,18,159,11,80,158,39,53,247,22,133,2,20,18,159,11,80,158,39,
-54,192,12,248,194,247,22,133,2,20,20,94,248,22,190,5,23,194,2,28,248,
-22,189,6,248,22,190,5,23,195,1,12,248,22,173,9,6,30,30,101,120,112,
-101,99,116,101,100,32,97,32,115,105,110,103,108,101,32,83,45,101,120,112,114,
-101,115,115,105,111,110,248,22,178,5,193,28,248,22,82,23,194,2,28,28,249,
-22,184,3,38,248,22,86,23,196,2,10,249,22,184,3,39,248,22,86,23,196,
-2,28,248,22,130,7,248,22,74,23,195,2,28,27,248,22,98,194,28,248,22,
-148,14,23,194,2,10,28,248,22,130,7,23,194,2,28,248,22,170,14,23,194,
-2,10,248,22,171,14,23,194,1,11,27,248,22,81,248,22,100,195,28,192,192,
-248,22,148,15,248,22,107,195,11,11,11,11,28,28,248,22,81,248,22,100,23,
-197,2,10,249,22,139,15,248,22,107,23,198,2,247,22,148,8,27,248,22,61,
-248,22,74,23,198,2,250,22,151,2,23,197,2,23,196,2,249,22,73,248,22,
-125,249,22,173,14,248,22,98,23,205,1,23,203,1,250,22,153,2,23,202,1,
-23,201,1,9,12,20,13,159,80,159,37,56,37,88,163,36,37,51,11,9,223,
-2,33,80,27,250,22,183,14,28,23,197,2,80,159,41,46,38,80,159,41,49,
-38,11,32,0,88,163,8,36,36,41,11,9,222,33,81,28,249,22,186,3,23,
-195,2,28,23,196,2,80,158,40,48,80,158,40,54,20,13,159,80,159,38,56,
-37,20,20,94,88,163,36,37,54,8,240,0,24,6,0,9,226,2,1,3,0,
-33,82,23,196,1,20,13,159,80,159,38,51,37,26,29,80,159,8,31,52,37,
-249,22,27,11,80,159,8,33,51,37,22,182,13,10,22,183,13,10,22,184,13,
-10,22,187,13,10,22,186,13,10,22,188,13,10,22,185,13,10,22,189,13,10,
-22,190,13,10,22,191,13,10,22,128,14,10,22,129,14,10,22,130,14,11,22,
-180,13,11,27,249,22,169,5,28,196,80,159,41,46,38,80,159,41,49,38,66,
-98,105,110,97,114,121,27,250,22,40,22,31,88,163,8,36,36,44,11,9,223,
-4,33,83,20,20,94,88,163,36,36,43,11,9,223,4,33,84,23,197,1,86,
-94,28,28,248,22,82,23,194,2,249,22,4,32,0,88,163,8,36,37,45,11,
-9,222,33,85,23,195,2,11,12,248,22,173,9,6,18,18,105,108,108,45,102,
-111,114,109,101,100,32,99,111,110,116,101,110,116,27,247,22,133,2,27,90,159,
-39,11,89,161,39,36,11,248,22,169,14,28,201,80,159,46,46,38,80,159,46,
-49,38,192,86,95,249,22,3,20,20,94,88,163,8,36,37,54,11,9,224,2,
-3,33,86,23,195,1,23,197,1,28,197,86,94,20,18,159,11,80,158,42,47,
-193,20,18,159,11,80,158,42,48,196,86,94,20,18,159,11,80,158,42,53,193,
-20,18,159,11,80,158,42,54,196,193,28,193,80,158,38,47,80,158,38,53,248,
-22,8,88,163,8,32,37,8,40,8,240,0,188,23,0,9,224,1,2,33,87,
-0,7,35,114,120,34,47,43,34,28,248,22,130,7,23,195,2,27,249,22,137,
-15,2,89,196,28,192,28,249,22,184,3,248,22,97,195,248,22,174,3,248,22,
-133,7,198,249,22,7,250,22,152,7,199,36,248,22,97,198,197,249,22,7,250,
-22,152,7,199,36,248,22,97,198,249,22,73,249,22,152,7,200,248,22,99,199,
-199,249,22,7,196,197,90,159,39,11,89,161,39,36,11,248,22,169,14,23,198,
-1,86,94,23,195,1,28,249,22,140,9,23,195,2,2,33,249,22,7,195,199,
-27,249,22,73,23,197,1,23,201,1,28,248,22,130,7,23,195,2,27,249,22,
-137,15,2,89,196,28,192,28,249,22,184,3,248,22,97,195,248,22,174,3,248,
-22,133,7,198,249,22,7,250,22,152,7,199,36,248,22,97,198,195,249,22,7,
-250,22,152,7,199,36,248,22,97,198,249,22,73,249,22,152,7,200,248,22,99,
-199,197,249,22,7,196,195,90,159,39,11,89,161,39,36,11,248,22,169,14,23,
-198,1,28,249,22,140,9,194,2,33,249,22,7,195,197,249,80,159,45,57,39,
-194,249,22,73,197,199,32,91,88,163,36,44,8,36,11,65,99,108,111,111,112,
-222,33,96,32,92,88,163,8,36,37,55,11,2,30,222,33,93,28,248,22,81,
-248,22,75,23,195,2,248,22,83,27,248,22,74,23,196,1,28,248,22,148,14,
-23,194,2,248,22,152,14,23,194,1,192,250,22,84,27,248,22,74,23,198,2,
-28,248,22,148,14,23,194,2,248,22,152,14,23,194,1,192,2,41,27,248,22,
-75,23,198,1,28,248,22,81,248,22,75,23,195,2,248,22,83,27,248,22,74,
-23,196,1,28,248,22,148,14,23,194,2,248,22,152,14,23,194,1,192,250,22,
-84,27,248,22,74,23,198,2,28,248,22,148,14,23,194,2,248,22,152,14,23,
-194,1,192,2,41,27,248,22,75,23,198,1,28,248,22,81,248,22,75,23,195,
-2,248,22,83,27,248,22,74,23,196,1,28,248,22,148,14,23,194,2,248,22,
-152,14,23,194,1,192,250,22,84,27,248,22,74,23,198,2,28,248,22,148,14,
-23,194,2,248,22,152,14,23,194,1,192,2,41,248,2,92,248,22,75,23,198,
-1,32,94,88,163,8,36,38,57,11,66,102,105,108,116,101,114,222,33,95,28,
-248,22,81,23,195,2,9,28,248,23,194,2,248,22,74,23,196,2,249,22,73,
-248,22,74,23,197,2,27,248,22,75,23,198,1,28,248,22,81,23,194,2,9,
-28,248,23,197,2,248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,27,
-248,22,75,23,197,1,28,248,22,81,23,194,2,9,28,248,23,200,2,248,22,
-74,23,195,2,249,22,73,248,22,74,23,196,2,27,248,22,75,23,197,1,28,
-248,22,81,23,194,2,9,28,248,23,203,2,248,22,74,23,195,2,249,22,73,
-248,22,74,23,196,2,249,2,94,23,206,1,248,22,75,23,198,1,249,2,94,
-23,204,1,248,22,75,23,196,1,27,248,22,75,23,195,1,28,248,22,81,23,
-194,2,9,28,248,23,201,2,248,22,74,23,195,2,249,22,73,248,22,74,23,
-196,2,249,2,94,23,204,1,248,22,75,23,198,1,249,2,94,23,202,1,248,
-22,75,23,196,1,27,248,22,75,23,195,1,28,248,22,81,23,194,2,9,28,
-248,23,198,2,248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,27,248,
-22,75,23,197,1,28,248,22,81,23,194,2,9,28,248,23,201,2,248,22,74,
-23,195,2,249,22,73,248,22,74,23,196,2,249,2,94,23,204,1,248,22,75,
-23,198,1,249,2,94,23,202,1,248,22,75,23,196,1,27,248,22,75,23,195,
-1,28,248,22,81,23,194,2,9,28,248,23,199,2,248,22,74,23,195,2,249,
-22,73,248,22,74,23,196,2,249,2,94,23,202,1,248,22,75,23,198,1,249,
-2,94,23,200,1,248,22,75,23,196,1,27,248,22,75,23,196,1,28,248,22,
-81,23,194,2,9,28,248,23,195,2,248,22,74,23,195,2,249,22,73,248,22,
-74,23,196,2,27,248,22,75,23,197,1,28,248,22,81,23,194,2,9,28,248,
-23,198,2,248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,27,248,22,
-75,23,197,1,28,248,22,81,23,194,2,9,28,248,23,201,2,248,22,74,23,
-195,2,249,22,73,248,22,74,23,196,2,249,2,94,23,204,1,248,22,75,23,
-198,1,249,2,94,23,202,1,248,22,75,23,196,1,27,248,22,75,23,195,1,
-28,248,22,81,23,194,2,9,28,248,23,199,2,248,22,74,23,195,2,249,22,
-73,248,22,74,23,196,2,249,2,94,23,202,1,248,22,75,23,198,1,249,2,
-94,23,200,1,248,22,75,23,196,1,27,248,22,75,23,195,1,28,248,22,81,
-23,194,2,9,28,248,23,196,2,248,22,74,23,195,2,249,22,73,248,22,74,
-23,196,2,27,248,22,75,23,197,1,28,248,22,81,23,194,2,9,28,248,23,
-199,2,248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,249,2,94,23,
-202,1,248,22,75,23,198,1,249,2,94,23,200,1,248,22,75,23,196,1,27,
-248,22,75,23,195,1,28,248,22,81,23,194,2,9,28,248,23,197,2,248,22,
-74,23,195,2,249,22,73,248,22,74,23,196,2,249,2,94,23,200,1,248,22,
-75,23,198,1,249,2,94,197,248,22,75,195,28,248,22,81,23,200,2,86,95,
-23,199,1,23,198,1,28,23,200,2,199,86,94,23,200,1,27,28,248,22,81,
-23,197,2,6,0,0,249,22,1,22,153,7,248,2,92,23,199,2,248,23,199,
-1,252,22,178,7,6,44,44,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,126,97,23,203,1,28,248,22,81,23,203,1,28,
-248,22,148,14,23,202,2,248,22,152,14,23,202,1,23,201,1,250,22,153,7,
-28,248,22,148,14,23,205,2,248,22,152,14,23,205,1,23,204,1,6,1,1,
-47,23,202,2,28,248,22,81,23,201,2,9,28,248,22,148,14,248,22,74,23,
-202,2,249,22,73,248,22,74,23,203,2,27,248,22,75,23,204,2,28,248,22,
-81,23,194,2,9,28,248,22,148,14,248,22,74,23,195,2,249,22,73,248,22,
-74,23,196,2,27,248,22,75,23,197,1,28,248,22,81,23,194,2,9,28,248,
-22,148,14,248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,249,2,94,
-22,148,14,248,22,75,23,198,1,249,2,94,22,148,14,248,22,75,23,196,1,
-27,248,22,75,23,195,1,28,248,22,81,23,194,2,9,28,248,22,148,14,248,
-22,74,23,195,2,249,22,73,248,22,74,23,196,2,249,2,94,22,148,14,248,
-22,75,23,198,1,249,2,94,22,148,14,248,22,75,23,196,1,27,248,22,75,
-23,202,2,28,248,22,81,23,194,2,9,28,248,22,148,14,248,22,74,23,195,
-2,249,22,73,248,22,74,23,196,2,27,248,22,75,23,197,1,28,248,22,81,
-23,194,2,9,28,248,22,148,14,248,22,74,23,195,2,249,22,73,248,22,74,
-23,196,2,249,2,94,22,148,14,248,22,75,23,198,1,249,2,94,22,148,14,
-248,22,75,23,196,1,27,248,22,75,23,195,1,28,248,22,81,23,194,2,9,
-28,248,22,148,14,248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,249,
-2,94,22,148,14,248,22,75,23,198,1,249,2,94,22,148,14,248,22,75,23,
-196,1,28,249,22,5,22,127,23,202,2,250,22,178,7,6,21,21,32,111,114,
-58,32,126,115,32,105,110,32,97,110,121,32,111,102,58,32,126,115,23,202,1,
-249,22,2,22,128,2,28,248,22,81,23,206,2,86,94,23,205,1,9,28,248,
-22,127,248,22,74,23,207,2,249,22,73,248,22,74,23,208,2,27,248,22,75,
-23,209,1,28,248,22,81,23,194,2,9,28,248,22,127,248,22,74,23,195,2,
-249,22,73,248,22,74,23,196,2,27,248,22,75,23,197,1,28,248,22,81,23,
-194,2,9,28,248,22,127,248,22,74,23,195,2,249,22,73,248,22,74,23,196,
-2,249,2,94,22,127,248,22,75,23,198,1,249,2,94,22,127,248,22,75,23,
-196,1,27,248,22,75,23,195,1,28,248,22,81,23,194,2,9,28,248,22,127,
-248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,249,2,94,22,127,248,
-22,75,23,198,1,249,2,94,22,127,248,22,75,23,196,1,27,248,22,75,23,
-207,1,28,248,22,81,23,194,2,9,28,248,22,127,248,22,74,23,195,2,249,
-22,73,248,22,74,23,196,2,27,248,22,75,23,197,1,28,248,22,81,23,194,
-2,9,28,248,22,127,248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,
-249,2,94,22,127,248,22,75,23,198,1,249,2,94,22,127,248,22,75,23,196,
-1,27,248,22,75,23,195,1,28,248,22,81,23,194,2,9,28,248,22,127,248,
-22,74,23,195,2,249,22,73,248,22,74,23,196,2,249,2,94,22,127,248,22,
-75,23,198,1,249,2,94,22,127,248,22,75,23,196,1,86,94,23,199,1,6,
-0,0,27,248,22,74,23,201,2,27,28,248,22,148,14,23,195,2,249,22,166,
-14,23,196,1,23,198,2,248,22,128,2,23,195,1,28,28,248,22,148,14,248,
-22,74,23,203,2,248,22,161,14,23,194,2,10,27,250,22,1,22,166,14,23,
-197,1,23,201,2,28,28,248,22,81,23,199,2,10,248,22,161,14,23,194,2,
-28,23,201,2,28,28,248,22,160,14,249,22,166,14,195,203,10,27,28,248,22,
-148,14,202,248,22,152,14,202,201,27,248,22,133,7,23,195,2,27,28,249,22,
-188,3,23,196,2,40,28,249,22,136,7,6,4,4,46,114,107,116,249,22,152,
-7,23,199,2,249,22,176,3,23,200,2,40,249,22,153,7,250,22,152,7,23,
-200,1,36,249,22,176,3,23,201,1,40,6,3,3,46,115,115,86,95,23,195,
-1,23,194,1,11,11,28,23,193,2,248,22,160,14,249,22,166,14,198,23,196,
-1,11,192,26,8,2,91,203,204,205,206,23,15,23,16,248,22,75,23,18,28,
-23,18,23,18,200,192,26,8,2,91,203,204,205,206,23,15,23,16,248,22,75,
-23,18,23,18,26,8,2,91,202,203,204,205,206,23,15,248,22,75,23,17,23,
-17,90,159,38,11,89,161,38,36,11,249,80,159,40,57,39,23,200,1,23,201,
-1,27,248,22,61,28,248,22,148,14,195,248,22,152,14,195,194,27,250,22,87,
-28,247,22,128,15,250,22,153,2,248,80,159,47,55,39,10,23,200,2,9,9,
-28,80,159,43,49,38,250,22,153,2,248,80,159,47,55,39,11,23,200,1,9,
-86,94,23,197,1,9,247,22,190,14,26,8,2,91,200,202,203,205,206,23,17,
-200,11,86,95,28,28,248,22,149,14,23,194,2,10,28,248,22,148,14,23,194,
-2,10,28,248,22,130,7,23,194,2,28,248,22,170,14,23,194,2,10,248,22,
-171,14,23,194,2,11,12,252,22,176,9,23,200,2,2,42,36,23,198,2,23,
-199,2,28,28,248,22,130,7,23,195,2,10,248,22,183,7,23,195,2,86,94,
-23,194,1,12,252,22,176,9,23,200,2,2,43,37,23,198,2,23,199,1,90,
-159,39,11,89,161,39,36,11,248,22,169,14,23,197,2,86,94,23,195,1,86,
-94,28,192,12,250,22,177,9,23,201,1,2,44,23,199,1,249,22,7,194,195,
-90,159,38,11,89,161,38,36,11,86,95,28,28,248,22,149,14,23,196,2,10,
-28,248,22,148,14,23,196,2,10,28,248,22,130,7,23,196,2,28,248,22,170,
-14,23,196,2,10,248,22,171,14,23,196,2,11,12,252,22,176,9,2,25,2,
-42,36,23,200,2,23,201,2,28,28,248,22,130,7,23,197,2,10,248,22,183,
-7,23,197,2,12,252,22,176,9,2,25,2,43,37,23,200,2,23,201,2,90,
-159,39,11,89,161,39,36,11,248,22,169,14,23,199,2,86,94,23,195,1,86,
-94,28,192,12,250,22,177,9,2,25,2,44,23,201,2,249,22,7,194,195,27,
-249,22,158,14,250,22,146,15,0,20,35,114,120,35,34,40,63,58,91,46,93,
-91,94,46,93,42,124,41,36,34,248,22,154,14,23,201,1,28,248,22,130,7,
-23,203,2,249,22,145,8,23,204,1,8,63,23,202,1,28,248,22,149,14,23,
-199,2,248,22,150,14,23,199,1,86,94,23,198,1,247,22,151,14,28,248,22,
-148,14,194,249,22,166,14,195,194,192,90,159,38,11,89,161,38,36,11,86,95,
-28,28,248,22,149,14,23,196,2,10,28,248,22,148,14,23,196,2,10,28,248,
+175,14,249,22,173,14,23,198,1,247,22,189,14,248,80,159,44,8,30,39,248,
+22,75,23,199,1,248,80,159,42,8,30,39,248,22,75,196,28,248,22,81,23,
+195,2,9,27,248,22,74,23,196,2,27,28,248,22,172,14,23,195,2,23,194,
+1,28,248,22,171,14,23,195,2,249,22,173,14,23,196,1,250,80,159,43,39,
+39,248,22,188,14,2,31,11,10,250,80,159,41,39,39,248,22,188,14,2,31,
+23,197,1,10,28,23,193,2,249,22,73,248,22,175,14,249,22,173,14,23,198,
+1,247,22,189,14,248,80,159,41,8,29,39,248,22,75,23,200,1,248,80,159,
+39,8,29,39,248,22,75,197,28,248,22,81,23,195,2,9,27,248,22,74,23,
+196,2,27,28,248,22,172,14,23,195,2,23,194,1,28,248,22,171,14,23,195,
+2,249,22,173,14,23,196,1,250,80,159,43,39,39,248,22,188,14,2,31,11,
+10,250,80,159,41,39,39,248,22,188,14,2,31,23,197,1,10,28,23,193,2,
+249,22,73,248,22,175,14,249,22,173,14,23,198,1,247,22,189,14,248,80,159,
+41,8,28,39,248,22,75,23,200,1,248,80,159,39,8,28,39,248,22,75,197,
+27,248,22,148,14,23,195,2,28,23,193,2,192,86,94,23,193,1,28,248,22,
+130,7,23,195,2,27,248,22,170,14,195,28,192,192,248,22,171,14,195,11,86,
+94,28,28,248,22,149,14,23,195,2,10,28,248,22,148,14,23,195,2,10,28,
+248,22,130,7,23,195,2,28,248,22,170,14,23,195,2,10,248,22,171,14,23,
+195,2,11,12,250,22,176,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,149,14,23,195,2,249,22,
+140,9,248,22,150,14,23,197,2,2,32,249,22,140,9,247,22,152,8,2,32,
+27,28,248,22,130,7,23,196,2,23,195,2,248,22,142,8,248,22,153,14,23,
+197,2,28,249,22,139,15,0,21,35,114,120,34,94,91,92,92,93,91,92,92,
+93,91,63,93,91,92,92,93,34,23,195,2,28,248,22,130,7,195,248,22,156,
+14,195,194,27,248,22,169,7,23,195,1,249,22,157,14,248,22,145,8,250,22,
+147,15,0,6,35,114,120,34,47,34,28,249,22,139,15,0,22,35,114,120,34,
+91,47,92,92,93,91,46,32,93,43,91,47,92,92,93,42,36,34,23,201,2,
+23,199,1,250,22,147,15,0,19,35,114,120,34,91,32,46,93,43,40,91,47,
+92,92,93,42,41,36,34,23,202,1,6,2,2,92,49,80,159,44,37,38,2,
+32,28,248,22,130,7,194,248,22,156,14,194,193,32,56,88,163,8,36,39,53,
+11,70,102,111,117,110,100,45,101,120,101,99,222,33,59,32,57,88,163,8,36,
+40,58,11,64,110,101,120,116,222,33,58,27,248,22,174,14,23,196,2,28,249,
+22,142,9,23,195,2,23,197,1,11,28,248,22,170,14,23,194,2,27,249,22,
+166,14,23,197,1,23,196,1,28,23,197,2,90,159,39,11,89,161,39,36,11,
+248,22,169,14,23,197,2,86,95,23,195,1,23,194,1,27,28,23,202,2,27,
+248,22,174,14,23,199,2,28,249,22,142,9,23,195,2,23,200,2,11,28,248,
+22,170,14,23,194,2,250,2,56,23,205,2,23,206,2,249,22,166,14,23,200,
+2,23,198,1,250,2,56,23,205,2,23,206,2,23,196,1,11,28,23,193,2,
+192,86,94,23,193,1,27,28,248,22,148,14,23,196,2,27,249,22,166,14,23,
+198,2,23,205,2,28,28,248,22,161,14,193,10,248,22,160,14,193,192,11,11,
+28,23,193,2,192,86,94,23,193,1,28,23,203,2,11,27,248,22,174,14,23,
+200,2,28,249,22,142,9,23,195,2,23,201,1,11,28,248,22,170,14,23,194,
+2,250,2,56,23,206,1,23,207,1,249,22,166,14,23,201,1,23,198,1,250,
+2,56,205,206,195,192,86,94,23,194,1,28,23,196,2,90,159,39,11,89,161,
+39,36,11,248,22,169,14,23,197,2,86,95,23,195,1,23,194,1,27,28,23,
+201,2,27,248,22,174,14,23,199,2,28,249,22,142,9,23,195,2,23,200,2,
+11,28,248,22,170,14,23,194,2,250,2,56,23,204,2,23,205,2,249,22,166,
+14,23,200,2,23,198,1,250,2,56,23,204,2,23,205,2,23,196,1,11,28,
+23,193,2,192,86,94,23,193,1,27,28,248,22,148,14,23,196,2,27,249,22,
+166,14,23,198,2,23,204,2,28,28,248,22,161,14,193,10,248,22,160,14,193,
+192,11,11,28,23,193,2,192,86,94,23,193,1,28,23,202,2,11,27,248,22,
+174,14,23,200,2,28,249,22,142,9,23,195,2,23,201,1,11,28,248,22,170,
+14,23,194,2,250,2,56,23,205,1,23,206,1,249,22,166,14,23,201,1,23,
+198,1,250,2,56,204,205,195,192,28,23,193,2,90,159,39,11,89,161,39,36,
+11,248,22,169,14,23,199,2,86,95,23,195,1,23,194,1,27,28,23,198,2,
+251,2,57,23,198,2,23,203,2,23,201,2,23,202,2,11,28,23,193,2,192,
+86,94,23,193,1,27,28,248,22,148,14,195,27,249,22,166,14,197,200,28,28,
+248,22,161,14,193,10,248,22,160,14,193,192,11,11,28,192,192,28,198,11,251,
+2,57,198,203,201,202,194,32,60,88,163,8,36,40,58,11,2,30,222,33,61,
+28,248,22,81,23,197,2,11,27,248,22,173,14,248,22,74,23,199,2,27,249,
+22,166,14,23,196,1,23,197,2,28,248,22,160,14,23,194,2,250,2,56,198,
+199,195,86,94,23,193,1,27,248,22,75,23,200,1,28,248,22,81,23,194,2,
+11,27,248,22,173,14,248,22,74,23,196,2,27,249,22,166,14,23,196,1,23,
+200,2,28,248,22,160,14,23,194,2,250,2,56,201,202,195,86,94,23,193,1,
+27,248,22,75,23,197,1,28,248,22,81,23,194,2,11,27,248,22,173,14,248,
+22,74,195,27,249,22,166,14,23,196,1,202,28,248,22,160,14,193,250,2,56,
+204,205,195,251,2,60,204,205,206,248,22,75,199,86,95,28,28,248,22,148,14,
+23,195,2,10,28,248,22,130,7,23,195,2,28,248,22,170,14,23,195,2,10,
+248,22,171,14,23,195,2,11,12,250,22,176,9,2,5,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,148,14,23,196,2,10,28,248,
22,130,7,23,196,2,28,248,22,170,14,23,196,2,10,248,22,171,14,23,196,
-2,11,12,252,22,176,9,2,26,2,42,36,23,200,2,23,201,2,28,28,248,
-22,130,7,23,197,2,10,248,22,183,7,23,197,2,12,252,22,176,9,2,26,
-2,43,37,23,200,2,23,201,2,90,159,39,11,89,161,39,36,11,248,22,169,
-14,23,199,2,86,94,23,195,1,86,94,28,192,12,250,22,177,9,2,26,2,
-44,23,201,2,249,22,7,194,195,27,249,22,158,14,249,22,131,8,250,22,147,
-15,0,9,35,114,120,35,34,91,46,93,34,248,22,154,14,23,203,1,6,1,
-1,95,28,248,22,130,7,23,202,2,249,22,145,8,23,203,1,8,63,23,201,
-1,28,248,22,149,14,23,199,2,248,22,150,14,23,199,1,86,94,23,198,1,
-247,22,151,14,28,248,22,148,14,194,249,22,166,14,195,194,192,249,247,22,158,
-5,194,11,27,247,22,128,15,249,80,159,39,40,38,28,23,195,2,27,248,22,
-150,8,2,45,28,192,192,2,46,2,47,27,28,23,196,1,250,22,166,14,248,
-22,188,14,2,48,247,22,148,8,2,49,11,27,248,80,159,42,8,28,39,250,
-22,87,9,248,22,83,248,22,188,14,2,38,9,28,193,249,22,73,195,194,192,
-27,247,22,128,15,249,80,159,39,40,38,28,23,195,2,27,248,22,150,8,2,
-45,28,192,192,2,46,2,47,27,28,23,196,1,250,22,166,14,248,22,188,14,
-2,48,247,22,148,8,2,49,11,27,248,80,159,42,8,29,39,250,22,87,23,
-203,1,248,22,83,248,22,188,14,2,38,9,28,193,249,22,73,195,194,192,27,
-247,22,128,15,249,80,159,39,40,38,28,23,195,2,27,248,22,150,8,2,45,
-28,192,192,2,46,2,47,27,28,23,196,1,250,22,166,14,248,22,188,14,2,
-48,247,22,148,8,2,49,11,27,248,80,159,42,8,30,39,250,22,87,23,203,
-1,248,22,83,248,22,188,14,2,38,23,204,1,28,193,249,22,73,195,194,192,
-86,94,249,22,183,6,247,22,154,5,195,248,22,145,6,249,22,128,4,36,249,
-22,176,3,197,198,27,28,23,197,2,86,95,23,196,1,23,195,1,23,197,1,
-86,94,23,197,1,27,248,22,188,14,2,31,27,250,80,159,42,39,39,23,197,
-1,11,11,27,248,22,131,4,23,199,1,27,28,23,194,2,23,194,1,86,94,
-23,194,1,36,27,248,22,131,4,23,202,1,27,28,23,194,2,23,194,1,86,
-94,23,194,1,36,249,22,185,5,23,199,1,20,20,95,88,163,8,36,36,48,
-11,9,224,4,2,33,105,23,195,1,23,197,1,27,248,22,170,5,23,195,1,
-248,80,159,39,8,31,39,193,159,36,20,112,159,36,16,1,11,16,0,20,26,
-142,2,1,2,1,29,11,11,11,11,11,10,43,80,158,36,36,20,112,159,40,
-16,28,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,
-11,2,12,2,13,2,14,2,15,30,2,18,76,102,105,110,100,45,108,105,110,
-107,115,45,112,97,116,104,33,4,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,6,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,2,20,2,21,2,22,30,2,18,1,21,101,120,99,101,112,116,105,111,110,
-45,104,97,110,100,108,101,114,45,107,101,121,2,2,23,2,24,2,25,2,26,
-2,27,2,28,2,29,16,0,16,0,36,16,0,36,16,12,2,8,2,7,2,
-3,2,24,2,22,2,20,2,15,2,21,2,23,2,13,2,12,2,14,48,11,
-11,39,36,11,11,16,12,2,11,2,9,2,29,2,10,2,5,2,28,2,27,
-2,4,2,26,2,6,2,25,2,2,16,12,11,11,11,11,11,11,11,11,11,
-11,11,11,16,12,2,11,2,9,2,29,2,10,2,5,2,28,2,27,2,4,
-2,26,2,6,2,25,2,2,48,48,37,11,11,16,0,16,0,16,0,36,36,
-11,11,11,16,0,16,0,16,0,36,36,16,0,16,28,20,15,16,2,88,163,
-8,36,37,51,16,2,8,240,0,128,0,0,8,240,1,128,0,0,2,30,223,
-0,33,50,80,159,36,8,31,39,20,15,16,2,88,163,8,36,37,56,16,2,
-44,8,240,0,64,0,0,2,30,223,0,33,51,80,159,36,8,30,39,20,15,
-16,2,88,163,8,36,37,51,16,2,44,8,128,128,2,30,223,0,33,52,80,
-159,36,8,29,39,20,15,16,2,88,163,8,36,37,51,16,2,44,8,128,64,
-2,30,223,0,33,53,80,159,36,8,28,39,20,15,16,2,32,0,88,163,36,
-37,45,11,2,2,222,33,54,80,159,36,36,37,20,15,16,2,249,22,132,7,
-7,92,7,92,80,159,36,37,37,20,15,16,2,88,163,36,37,54,38,2,4,
-223,0,33,55,80,159,36,38,37,20,15,16,2,20,25,96,2,5,88,163,8,
-36,39,8,24,52,9,223,0,33,62,88,163,36,38,47,44,9,223,0,33,63,
-88,163,36,37,46,44,9,223,0,33,64,80,159,36,39,37,20,15,16,2,27,
-248,22,131,15,248,22,144,8,27,28,249,22,140,9,247,22,152,8,2,32,6,
-1,1,59,6,1,1,58,250,22,178,7,6,14,14,40,91,94,126,97,93,42,
-41,126,97,40,46,42,41,23,196,2,23,196,1,88,163,8,36,38,48,11,2,
-6,223,0,33,68,80,159,36,40,37,20,15,16,2,32,0,88,163,8,36,38,
-50,11,2,7,222,33,69,80,159,36,41,37,20,15,16,2,32,0,88,163,8,
-36,39,51,11,2,8,222,33,71,80,159,36,42,37,20,15,16,2,88,163,45,
-38,51,8,128,4,2,9,223,0,33,74,80,159,36,43,37,20,15,16,2,88,
-163,45,39,52,8,128,4,2,11,223,0,33,77,80,159,36,45,37,20,15,16,
-2,248,22,188,14,70,108,105,110,107,115,45,102,105,108,101,80,159,36,46,37,
-20,15,16,2,247,22,133,2,80,158,36,47,20,15,16,2,2,78,80,158,36,
-48,20,15,16,2,248,80,159,37,50,37,88,163,36,36,49,8,240,8,128,1,
-0,9,223,1,33,79,80,159,36,49,37,20,15,16,2,247,22,133,2,80,158,
-36,53,20,15,16,2,2,78,80,158,36,54,20,15,16,2,88,163,36,37,44,
-8,240,0,188,23,0,2,22,223,0,33,88,80,159,36,55,37,20,15,16,2,
-88,163,36,38,56,8,240,0,0,32,0,2,23,223,0,33,90,80,159,36,57,
-37,20,15,16,2,88,163,36,41,59,8,240,0,32,40,0,2,10,223,0,33,
-97,80,159,36,44,37,20,15,16,2,32,0,88,163,36,39,50,11,2,24,222,
-33,98,80,159,36,58,37,20,15,16,2,32,0,88,163,36,38,53,11,2,25,
-222,33,99,80,159,36,59,37,20,15,16,2,32,0,88,163,36,38,54,11,2,
-26,222,33,100,80,159,36,8,24,37,20,15,16,2,32,0,88,163,36,37,44,
-11,2,27,222,33,101,80,159,36,8,25,37,20,15,16,2,20,25,96,2,28,
-88,163,36,36,53,16,2,52,8,128,64,9,223,0,33,102,88,163,36,37,54,
-16,2,52,8,128,128,9,223,0,33,103,88,163,36,38,55,16,2,52,8,240,
-0,64,0,0,9,223,0,33,104,80,159,36,8,26,37,20,15,16,2,88,163,
-8,36,39,54,16,2,44,8,240,0,128,0,0,2,29,223,0,33,106,80,159,
-36,8,27,37,95,29,94,2,16,68,35,37,107,101,114,110,101,108,11,29,94,
-2,16,69,35,37,109,105,110,45,115,116,120,11,2,18,9,9,9,36,0};
- EVAL_ONE_SIZED_STR((char *)expr, 10204);
+2,11,248,22,170,14,23,196,2,11,10,12,250,22,176,9,2,5,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,170,14,23,195,2,90,
+159,39,11,89,161,39,36,11,248,22,169,14,23,198,2,249,22,140,9,194,2,
+33,11,27,248,22,150,8,6,4,4,80,65,84,72,27,28,23,194,2,27,249,
+80,158,41,40,23,197,1,9,28,249,22,140,9,247,22,152,8,2,32,249,22,
+73,248,22,157,14,5,1,46,194,192,86,94,23,194,1,9,28,248,22,81,23,
+194,2,11,27,248,22,173,14,248,22,74,23,196,2,27,249,22,166,14,23,196,
+1,23,200,2,28,248,22,160,14,23,194,2,250,2,56,201,202,195,86,94,23,
+193,1,27,248,22,75,23,197,1,28,248,22,81,23,194,2,11,27,248,22,173,
+14,248,22,74,23,196,2,27,249,22,166,14,23,196,1,23,203,2,28,248,22,
+160,14,23,194,2,250,2,56,204,205,195,86,94,23,193,1,27,248,22,75,23,
+197,1,28,248,22,81,23,194,2,11,27,248,22,173,14,248,22,74,195,27,249,
+22,166,14,23,196,1,205,28,248,22,160,14,193,250,2,56,23,15,23,16,195,
+251,2,60,23,15,23,16,23,17,248,22,75,199,27,248,22,173,14,23,196,1,
+28,248,22,160,14,193,250,2,56,198,199,195,11,250,80,159,39,39,39,196,197,
+11,250,80,159,39,39,39,196,11,11,32,65,88,163,8,36,39,57,11,2,30,
+222,33,67,0,8,35,114,120,35,34,92,34,34,27,249,22,135,15,23,197,2,
+23,198,2,28,23,193,2,86,94,23,196,1,27,248,22,98,23,195,2,27,27,
+248,22,107,23,197,1,27,249,22,135,15,23,201,2,23,196,2,28,23,193,2,
+86,94,23,194,1,27,248,22,98,23,195,2,27,250,2,65,23,203,2,23,204,
+1,248,22,107,23,199,1,28,249,22,191,7,23,196,2,2,34,249,22,87,23,
+202,2,194,249,22,73,248,22,157,14,28,249,22,140,9,247,22,152,8,2,32,
+250,22,147,15,2,66,23,200,1,2,35,23,197,1,194,86,95,23,199,1,23,
+193,1,28,249,22,191,7,23,196,2,2,34,249,22,87,23,200,2,9,249,22,
+73,248,22,157,14,28,249,22,140,9,247,22,152,8,2,32,250,22,147,15,2,
+66,23,200,1,2,35,23,197,1,9,28,249,22,191,7,23,196,2,2,34,249,
+22,87,197,194,86,94,23,196,1,249,22,73,248,22,157,14,28,249,22,140,9,
+247,22,152,8,2,32,250,22,147,15,2,66,23,200,1,2,35,23,197,1,194,
+86,94,23,193,1,28,249,22,191,7,23,198,2,2,34,249,22,87,195,9,86,
+94,23,194,1,249,22,73,248,22,157,14,28,249,22,140,9,247,22,152,8,2,
+32,250,22,147,15,2,66,23,202,1,2,35,23,199,1,9,86,95,28,28,248,
+22,183,7,194,10,248,22,130,7,194,12,250,22,176,9,2,6,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,82,195,249,22,4,22,148,14,196,11,12,250,22,176,9,2,6,
+6,13,13,108,105,115,116,32,111,102,32,112,97,116,104,115,197,250,2,65,197,
+195,28,248,22,130,7,197,248,22,144,8,197,196,86,94,28,28,248,22,148,14,
+23,195,2,10,28,248,22,130,7,23,195,2,28,248,22,170,14,23,195,2,10,
+248,22,171,14,23,195,2,11,12,250,22,176,9,23,196,2,2,36,23,197,2,
+28,248,22,170,14,23,195,2,12,248,22,162,12,249,22,168,11,248,22,159,7,
+250,22,178,7,2,37,23,200,1,23,201,1,247,22,23,86,94,28,28,248,22,
+148,14,23,195,2,10,28,248,22,130,7,23,195,2,28,248,22,170,14,23,195,
+2,10,248,22,171,14,23,195,2,11,12,250,22,176,9,23,196,2,2,36,23,
+197,2,28,248,22,170,14,23,195,2,12,248,22,162,12,249,22,168,11,248,22,
+159,7,250,22,178,7,2,37,23,200,1,23,201,1,247,22,23,86,94,86,94,
+28,28,248,22,148,14,23,195,2,10,28,248,22,130,7,23,195,2,28,248,22,
+170,14,23,195,2,10,248,22,171,14,23,195,2,11,12,250,22,176,9,195,2,
+36,23,197,2,28,248,22,170,14,23,195,2,12,248,22,162,12,249,22,168,11,
+248,22,159,7,250,22,178,7,2,37,199,23,201,1,247,22,23,249,22,3,88,
+163,8,36,37,50,11,9,223,2,33,70,196,86,94,28,28,248,22,148,14,23,
+194,2,10,28,248,22,130,7,23,194,2,28,248,22,170,14,23,194,2,10,248,
+22,171,14,23,194,2,11,12,250,22,176,9,2,9,2,36,23,196,2,28,248,
+22,170,14,23,194,2,12,248,22,162,12,249,22,168,11,248,22,159,7,250,22,
+178,7,2,37,2,9,23,200,1,247,22,23,248,22,162,12,249,22,137,12,23,
+196,1,247,22,23,86,94,86,94,86,94,28,28,248,22,148,14,194,10,28,248,
+22,130,7,194,28,248,22,170,14,194,10,248,22,171,14,194,11,12,250,22,176,
+9,2,9,2,36,196,28,248,22,170,14,194,12,248,22,162,12,249,22,168,11,
+248,22,159,7,250,22,178,7,2,37,2,9,200,247,22,23,249,22,3,32,0,
+88,163,8,36,37,49,11,9,222,33,72,196,252,80,158,41,44,2,9,32,0,
+88,163,8,36,37,45,11,9,222,33,73,198,199,11,86,94,28,28,248,22,148,
+14,23,194,2,10,28,248,22,130,7,23,194,2,28,248,22,170,14,23,194,2,
+10,248,22,171,14,23,194,2,11,12,250,22,176,9,2,11,2,36,23,196,2,
+28,248,22,170,14,23,194,2,12,248,22,162,12,249,22,168,11,248,22,159,7,
+250,22,178,7,2,37,2,11,23,200,1,247,22,23,248,22,162,12,249,22,137,
+12,23,196,1,247,22,23,86,95,86,94,28,28,248,22,148,14,194,10,28,248,
+22,130,7,194,28,248,22,170,14,194,10,248,22,171,14,194,11,12,250,22,176,
+9,2,11,2,36,196,28,248,22,170,14,194,12,248,22,162,12,249,22,168,11,
+248,22,159,7,250,22,178,7,2,37,2,11,200,247,22,23,86,94,86,94,28,
+28,248,22,148,14,23,196,2,10,28,248,22,130,7,23,196,2,28,248,22,170,
+14,23,196,2,10,248,22,171,14,23,196,2,11,12,250,22,176,9,2,11,2,
+36,23,198,2,28,248,22,170,14,23,196,2,12,248,22,162,12,249,22,168,11,
+248,22,159,7,250,22,178,7,2,37,2,11,23,202,2,247,22,23,249,22,3,
+32,0,88,163,8,36,37,49,11,9,222,33,75,23,198,2,249,22,166,14,252,
+80,158,43,44,2,11,32,0,88,163,8,36,37,45,11,9,222,33,76,23,202,
+1,23,203,1,200,195,0,6,45,105,110,102,46,48,27,248,22,188,14,2,38,
+27,28,248,22,171,14,23,195,2,193,20,13,159,80,159,38,51,37,250,80,159,
+41,52,37,249,22,27,11,80,159,43,51,37,22,189,14,248,22,188,14,68,111,
+114,105,103,45,100,105,114,27,248,22,188,14,2,31,250,80,159,42,39,39,23,
+196,1,23,198,1,11,28,192,250,22,166,14,195,6,6,6,99,111,110,102,105,
+103,6,10,10,108,105,110,107,115,46,114,107,116,100,11,86,94,27,247,22,131,
+10,28,249,22,188,9,23,195,2,2,39,251,22,191,9,23,197,1,2,39,250,
+22,178,7,2,40,28,23,202,1,80,159,46,46,38,80,159,46,49,38,248,22,
+160,11,23,205,1,247,22,23,12,248,193,247,22,133,2,2,78,86,95,27,247,
+22,131,10,28,249,22,188,9,23,195,2,2,39,251,22,191,9,23,197,1,2,
+39,250,22,178,7,2,40,28,202,80,159,47,46,38,80,159,47,49,38,248,22,
+160,11,23,206,1,247,22,23,12,28,192,28,194,86,94,20,18,159,11,80,158,
+39,47,247,22,133,2,20,18,159,11,80,158,39,48,192,86,94,20,18,159,11,
+80,158,39,53,247,22,133,2,20,18,159,11,80,158,39,54,192,12,248,194,247,
+22,133,2,20,20,94,248,22,190,5,23,194,2,28,248,22,189,6,248,22,190,
+5,23,195,1,12,248,22,173,9,6,30,30,101,120,112,101,99,116,101,100,32,
+97,32,115,105,110,103,108,101,32,83,45,101,120,112,114,101,115,115,105,111,110,
+248,22,178,5,193,28,248,22,82,23,194,2,28,28,249,22,184,3,38,248,22,
+86,23,196,2,10,249,22,184,3,39,248,22,86,23,196,2,28,28,248,22,130,
+7,248,22,74,23,195,2,10,249,22,140,9,64,114,111,111,116,248,22,74,23,
+196,2,28,27,248,22,98,194,28,248,22,148,14,23,194,2,10,28,248,22,130,
+7,23,194,2,28,248,22,170,14,23,194,2,10,248,22,171,14,23,194,1,11,
+27,248,22,81,248,22,100,195,28,192,192,248,22,148,15,248,22,107,195,11,11,
+11,11,250,22,151,2,196,197,249,22,73,197,200,28,28,248,22,81,248,22,100,
+23,197,2,10,249,22,139,15,248,22,107,23,198,2,247,22,148,8,27,248,22,
+175,14,249,22,173,14,248,22,98,23,200,2,23,198,1,28,248,22,58,248,22,
+74,23,198,2,86,94,23,196,1,86,94,28,250,22,153,2,196,11,11,12,250,
+22,151,2,196,11,9,249,22,157,2,195,88,163,8,36,38,50,11,9,224,3,
+2,33,86,27,248,22,61,248,22,74,23,199,1,250,22,151,2,23,198,2,23,
+196,2,249,22,73,248,22,125,23,200,1,250,22,153,2,23,203,1,23,201,1,
+9,12,250,22,151,2,195,196,248,22,88,198,20,13,159,80,159,37,56,37,88,
+163,36,37,54,8,128,144,9,225,1,0,2,33,80,27,250,22,183,14,28,23,
+197,2,80,159,41,46,38,80,159,41,49,38,11,32,0,88,163,8,36,36,41,
+11,9,222,33,81,28,249,22,186,3,23,195,2,28,23,196,2,80,158,40,48,
+80,158,40,54,20,13,159,80,159,38,56,37,20,20,94,88,163,36,37,55,8,
+240,0,60,6,0,9,226,2,1,3,0,33,82,23,196,1,20,13,159,80,159,
+38,51,37,26,29,80,159,8,31,52,37,249,22,27,11,80,159,8,33,51,37,
+22,182,13,10,22,183,13,10,22,184,13,10,22,187,13,10,22,186,13,10,22,
+188,13,10,22,185,13,10,22,189,13,10,22,190,13,10,22,191,13,10,22,128,
+14,10,22,129,14,10,22,130,14,11,22,180,13,11,27,249,22,169,5,28,196,
+80,159,41,46,38,80,159,41,49,38,66,98,105,110,97,114,121,27,250,22,40,
+22,31,88,163,8,36,36,44,11,9,223,4,33,83,20,20,94,88,163,36,36,
+43,11,9,223,4,33,84,23,197,1,86,94,28,28,248,22,82,23,194,2,249,
+22,4,32,0,88,163,8,36,37,45,11,9,222,33,85,23,195,2,11,12,248,
+22,173,9,6,18,18,105,108,108,45,102,111,114,109,101,100,32,99,111,110,116,
+101,110,116,27,247,22,133,2,27,90,159,39,11,89,161,39,36,11,248,22,169,
+14,28,201,80,159,46,46,38,80,159,46,49,38,192,86,96,249,22,3,20,20,
+94,88,163,8,36,37,54,11,9,224,2,3,33,87,23,195,1,23,197,1,249,
+22,157,2,195,88,163,8,36,38,48,11,9,223,3,33,88,28,197,86,94,20,
+18,159,11,80,158,42,47,193,20,18,159,11,80,158,42,48,196,86,94,20,18,
+159,11,80,158,42,53,193,20,18,159,11,80,158,42,54,196,193,28,193,80,158,
+38,47,80,158,38,53,248,22,8,88,163,8,32,37,8,40,8,240,0,188,23,
+0,9,224,1,2,33,89,0,7,35,114,120,34,47,43,34,28,248,22,130,7,
+23,195,2,27,249,22,137,15,2,91,196,28,192,28,249,22,184,3,248,22,97,
+195,248,22,174,3,248,22,133,7,198,249,22,7,250,22,152,7,199,36,248,22,
+97,198,197,249,22,7,250,22,152,7,199,36,248,22,97,198,249,22,73,249,22,
+152,7,200,248,22,99,199,199,249,22,7,196,197,90,159,39,11,89,161,39,36,
+11,248,22,169,14,23,198,1,86,94,23,195,1,28,249,22,140,9,23,195,2,
+2,33,249,22,7,195,199,27,249,22,73,23,197,1,23,201,1,28,248,22,130,
+7,23,195,2,27,249,22,137,15,2,91,196,28,192,28,249,22,184,3,248,22,
+97,195,248,22,174,3,248,22,133,7,198,249,22,7,250,22,152,7,199,36,248,
+22,97,198,195,249,22,7,250,22,152,7,199,36,248,22,97,198,249,22,73,249,
+22,152,7,200,248,22,99,199,197,249,22,7,196,195,90,159,39,11,89,161,39,
+36,11,248,22,169,14,23,198,1,28,249,22,140,9,194,2,33,249,22,7,195,
+197,249,80,159,45,57,39,194,249,22,73,197,199,32,93,88,163,36,44,8,36,
+11,65,99,108,111,111,112,222,33,98,32,94,88,163,8,36,37,55,11,2,30,
+222,33,95,28,248,22,81,248,22,75,23,195,2,248,22,83,27,248,22,74,23,
+196,1,28,248,22,148,14,23,194,2,248,22,152,14,23,194,1,192,250,22,84,
+27,248,22,74,23,198,2,28,248,22,148,14,23,194,2,248,22,152,14,23,194,
+1,192,2,41,27,248,22,75,23,198,1,28,248,22,81,248,22,75,23,195,2,
+248,22,83,27,248,22,74,23,196,1,28,248,22,148,14,23,194,2,248,22,152,
+14,23,194,1,192,250,22,84,27,248,22,74,23,198,2,28,248,22,148,14,23,
+194,2,248,22,152,14,23,194,1,192,2,41,27,248,22,75,23,198,1,28,248,
+22,81,248,22,75,23,195,2,248,22,83,27,248,22,74,23,196,1,28,248,22,
+148,14,23,194,2,248,22,152,14,23,194,1,192,250,22,84,27,248,22,74,23,
+198,2,28,248,22,148,14,23,194,2,248,22,152,14,23,194,1,192,2,41,248,
+2,94,248,22,75,23,198,1,32,96,88,163,8,36,38,57,11,66,102,105,108,
+116,101,114,222,33,97,28,248,22,81,23,195,2,9,28,248,23,194,2,248,22,
+74,23,196,2,249,22,73,248,22,74,23,197,2,27,248,22,75,23,198,1,28,
+248,22,81,23,194,2,9,28,248,23,197,2,248,22,74,23,195,2,249,22,73,
+248,22,74,23,196,2,27,248,22,75,23,197,1,28,248,22,81,23,194,2,9,
+28,248,23,200,2,248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,27,
+248,22,75,23,197,1,28,248,22,81,23,194,2,9,28,248,23,203,2,248,22,
+74,23,195,2,249,22,73,248,22,74,23,196,2,249,2,96,23,206,1,248,22,
+75,23,198,1,249,2,96,23,204,1,248,22,75,23,196,1,27,248,22,75,23,
+195,1,28,248,22,81,23,194,2,9,28,248,23,201,2,248,22,74,23,195,2,
+249,22,73,248,22,74,23,196,2,249,2,96,23,204,1,248,22,75,23,198,1,
+249,2,96,23,202,1,248,22,75,23,196,1,27,248,22,75,23,195,1,28,248,
+22,81,23,194,2,9,28,248,23,198,2,248,22,74,23,195,2,249,22,73,248,
+22,74,23,196,2,27,248,22,75,23,197,1,28,248,22,81,23,194,2,9,28,
+248,23,201,2,248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,249,2,
+96,23,204,1,248,22,75,23,198,1,249,2,96,23,202,1,248,22,75,23,196,
+1,27,248,22,75,23,195,1,28,248,22,81,23,194,2,9,28,248,23,199,2,
+248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,249,2,96,23,202,1,
+248,22,75,23,198,1,249,2,96,23,200,1,248,22,75,23,196,1,27,248,22,
+75,23,196,1,28,248,22,81,23,194,2,9,28,248,23,195,2,248,22,74,23,
+195,2,249,22,73,248,22,74,23,196,2,27,248,22,75,23,197,1,28,248,22,
+81,23,194,2,9,28,248,23,198,2,248,22,74,23,195,2,249,22,73,248,22,
+74,23,196,2,27,248,22,75,23,197,1,28,248,22,81,23,194,2,9,28,248,
+23,201,2,248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,249,2,96,
+23,204,1,248,22,75,23,198,1,249,2,96,23,202,1,248,22,75,23,196,1,
+27,248,22,75,23,195,1,28,248,22,81,23,194,2,9,28,248,23,199,2,248,
+22,74,23,195,2,249,22,73,248,22,74,23,196,2,249,2,96,23,202,1,248,
+22,75,23,198,1,249,2,96,23,200,1,248,22,75,23,196,1,27,248,22,75,
+23,195,1,28,248,22,81,23,194,2,9,28,248,23,196,2,248,22,74,23,195,
+2,249,22,73,248,22,74,23,196,2,27,248,22,75,23,197,1,28,248,22,81,
+23,194,2,9,28,248,23,199,2,248,22,74,23,195,2,249,22,73,248,22,74,
+23,196,2,249,2,96,23,202,1,248,22,75,23,198,1,249,2,96,23,200,1,
+248,22,75,23,196,1,27,248,22,75,23,195,1,28,248,22,81,23,194,2,9,
+28,248,23,197,2,248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,249,
+2,96,23,200,1,248,22,75,23,198,1,249,2,96,197,248,22,75,195,28,248,
+22,81,23,200,2,86,95,23,199,1,23,198,1,28,23,200,2,199,86,94,23,
+200,1,27,28,248,22,81,23,197,2,6,0,0,249,22,1,22,153,7,248,2,
+94,23,199,2,248,23,199,1,252,22,178,7,6,44,44,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,126,97,23,203,1,28,
+248,22,81,23,203,1,28,248,22,148,14,23,202,2,248,22,152,14,23,202,1,
+23,201,1,250,22,153,7,28,248,22,148,14,23,205,2,248,22,152,14,23,205,
+1,23,204,1,6,1,1,47,23,202,2,28,248,22,81,23,201,2,9,28,248,
+22,148,14,248,22,74,23,202,2,249,22,73,248,22,74,23,203,2,27,248,22,
+75,23,204,2,28,248,22,81,23,194,2,9,28,248,22,148,14,248,22,74,23,
+195,2,249,22,73,248,22,74,23,196,2,27,248,22,75,23,197,1,28,248,22,
+81,23,194,2,9,28,248,22,148,14,248,22,74,23,195,2,249,22,73,248,22,
+74,23,196,2,249,2,96,22,148,14,248,22,75,23,198,1,249,2,96,22,148,
+14,248,22,75,23,196,1,27,248,22,75,23,195,1,28,248,22,81,23,194,2,
+9,28,248,22,148,14,248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,
+249,2,96,22,148,14,248,22,75,23,198,1,249,2,96,22,148,14,248,22,75,
+23,196,1,27,248,22,75,23,202,2,28,248,22,81,23,194,2,9,28,248,22,
+148,14,248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,27,248,22,75,
+23,197,1,28,248,22,81,23,194,2,9,28,248,22,148,14,248,22,74,23,195,
+2,249,22,73,248,22,74,23,196,2,249,2,96,22,148,14,248,22,75,23,198,
+1,249,2,96,22,148,14,248,22,75,23,196,1,27,248,22,75,23,195,1,28,
+248,22,81,23,194,2,9,28,248,22,148,14,248,22,74,23,195,2,249,22,73,
+248,22,74,23,196,2,249,2,96,22,148,14,248,22,75,23,198,1,249,2,96,
+22,148,14,248,22,75,23,196,1,28,249,22,5,22,127,23,202,2,250,22,178,
+7,6,21,21,32,111,114,58,32,126,115,32,105,110,32,97,110,121,32,111,102,
+58,32,126,115,23,202,1,249,22,2,22,128,2,28,248,22,81,23,206,2,86,
+94,23,205,1,9,28,248,22,127,248,22,74,23,207,2,249,22,73,248,22,74,
+23,208,2,27,248,22,75,23,209,1,28,248,22,81,23,194,2,9,28,248,22,
+127,248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,27,248,22,75,23,
+197,1,28,248,22,81,23,194,2,9,28,248,22,127,248,22,74,23,195,2,249,
+22,73,248,22,74,23,196,2,249,2,96,22,127,248,22,75,23,198,1,249,2,
+96,22,127,248,22,75,23,196,1,27,248,22,75,23,195,1,28,248,22,81,23,
+194,2,9,28,248,22,127,248,22,74,23,195,2,249,22,73,248,22,74,23,196,
+2,249,2,96,22,127,248,22,75,23,198,1,249,2,96,22,127,248,22,75,23,
+196,1,27,248,22,75,23,207,1,28,248,22,81,23,194,2,9,28,248,22,127,
+248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,27,248,22,75,23,197,
+1,28,248,22,81,23,194,2,9,28,248,22,127,248,22,74,23,195,2,249,22,
+73,248,22,74,23,196,2,249,2,96,22,127,248,22,75,23,198,1,249,2,96,
+22,127,248,22,75,23,196,1,27,248,22,75,23,195,1,28,248,22,81,23,194,
+2,9,28,248,22,127,248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,
+249,2,96,22,127,248,22,75,23,198,1,249,2,96,22,127,248,22,75,23,196,
+1,86,94,23,199,1,6,0,0,27,248,22,74,23,201,2,27,28,248,22,148,
+14,23,195,2,249,22,166,14,23,196,1,23,198,2,248,22,128,2,23,195,1,
+28,28,248,22,148,14,248,22,74,23,203,2,248,22,161,14,23,194,2,10,27,
+250,22,1,22,166,14,23,197,1,23,201,2,28,28,248,22,81,23,199,2,10,
+248,22,161,14,23,194,2,28,23,201,2,28,28,248,22,160,14,249,22,166,14,
+195,203,10,27,28,248,22,148,14,202,248,22,152,14,202,201,27,248,22,133,7,
+23,195,2,27,28,249,22,188,3,23,196,2,40,28,249,22,136,7,6,4,4,
+46,114,107,116,249,22,152,7,23,199,2,249,22,176,3,23,200,2,40,249,22,
+153,7,250,22,152,7,23,200,1,36,249,22,176,3,23,201,1,40,6,3,3,
+46,115,115,86,95,23,195,1,23,194,1,11,11,28,23,193,2,248,22,160,14,
+249,22,166,14,198,23,196,1,11,192,26,8,2,93,203,204,205,206,23,15,23,
+16,248,22,75,23,18,28,23,18,23,18,200,192,26,8,2,93,203,204,205,206,
+23,15,23,16,248,22,75,23,18,23,18,26,8,2,93,202,203,204,205,206,23,
+15,248,22,75,23,17,23,17,90,159,38,11,89,161,38,36,11,249,80,159,40,
+57,39,23,200,1,23,201,1,27,248,22,61,28,248,22,148,14,195,248,22,152,
+14,195,194,27,250,22,87,28,247,22,128,15,27,248,80,159,45,55,39,10,27,
+250,22,153,2,23,197,2,23,202,2,11,28,23,193,2,192,86,94,23,193,1,
+250,22,153,2,23,197,1,11,9,9,28,80,159,43,49,38,27,248,80,159,45,
+55,39,11,27,250,22,153,2,23,197,2,23,202,1,11,28,23,193,2,192,86,
+94,23,193,1,250,22,153,2,23,197,1,11,9,86,94,23,197,1,9,247,22,
+190,14,26,8,2,93,200,202,203,205,206,23,17,200,11,86,95,28,28,248,22,
+149,14,23,194,2,10,28,248,22,148,14,23,194,2,10,28,248,22,130,7,23,
+194,2,28,248,22,170,14,23,194,2,10,248,22,171,14,23,194,2,11,12,252,
+22,176,9,23,200,2,2,42,36,23,198,2,23,199,2,28,28,248,22,130,7,
+23,195,2,10,248,22,183,7,23,195,2,86,94,23,194,1,12,252,22,176,9,
+23,200,2,2,43,37,23,198,2,23,199,1,90,159,39,11,89,161,39,36,11,
+248,22,169,14,23,197,2,86,94,23,195,1,86,94,28,192,12,250,22,177,9,
+23,201,1,2,44,23,199,1,249,22,7,194,195,90,159,38,11,89,161,38,36,
+11,86,95,28,28,248,22,149,14,23,196,2,10,28,248,22,148,14,23,196,2,
+10,28,248,22,130,7,23,196,2,28,248,22,170,14,23,196,2,10,248,22,171,
+14,23,196,2,11,12,252,22,176,9,2,25,2,42,36,23,200,2,23,201,2,
+28,28,248,22,130,7,23,197,2,10,248,22,183,7,23,197,2,12,252,22,176,
+9,2,25,2,43,37,23,200,2,23,201,2,90,159,39,11,89,161,39,36,11,
+248,22,169,14,23,199,2,86,94,23,195,1,86,94,28,192,12,250,22,177,9,
+2,25,2,44,23,201,2,249,22,7,194,195,27,249,22,158,14,250,22,146,15,
+0,20,35,114,120,35,34,40,63,58,91,46,93,91,94,46,93,42,124,41,36,
+34,248,22,154,14,23,201,1,28,248,22,130,7,23,203,2,249,22,145,8,23,
+204,1,8,63,23,202,1,28,248,22,149,14,23,199,2,248,22,150,14,23,199,
+1,86,94,23,198,1,247,22,151,14,28,248,22,148,14,194,249,22,166,14,195,
+194,192,90,159,38,11,89,161,38,36,11,86,95,28,28,248,22,149,14,23,196,
+2,10,28,248,22,148,14,23,196,2,10,28,248,22,130,7,23,196,2,28,248,
+22,170,14,23,196,2,10,248,22,171,14,23,196,2,11,12,252,22,176,9,2,
+26,2,42,36,23,200,2,23,201,2,28,28,248,22,130,7,23,197,2,10,248,
+22,183,7,23,197,2,12,252,22,176,9,2,26,2,43,37,23,200,2,23,201,
+2,90,159,39,11,89,161,39,36,11,248,22,169,14,23,199,2,86,94,23,195,
+1,86,94,28,192,12,250,22,177,9,2,26,2,44,23,201,2,249,22,7,194,
+195,27,249,22,158,14,249,22,131,8,250,22,147,15,0,9,35,114,120,35,34,
+91,46,93,34,248,22,154,14,23,203,1,6,1,1,95,28,248,22,130,7,23,
+202,2,249,22,145,8,23,203,1,8,63,23,201,1,28,248,22,149,14,23,199,
+2,248,22,150,14,23,199,1,86,94,23,198,1,247,22,151,14,28,248,22,148,
+14,194,249,22,166,14,195,194,192,249,247,22,158,5,194,11,27,247,22,128,15,
+249,80,159,39,40,38,28,23,195,2,27,248,22,150,8,2,45,28,192,192,2,
+46,2,47,27,28,23,196,1,250,22,166,14,248,22,188,14,2,48,247,22,148,
+8,2,49,11,27,248,80,159,42,8,28,39,250,22,87,9,248,22,83,248,22,
+188,14,2,38,9,28,193,249,22,73,195,194,192,27,247,22,128,15,249,80,159,
+39,40,38,28,23,195,2,27,248,22,150,8,2,45,28,192,192,2,46,2,47,
+27,28,23,196,1,250,22,166,14,248,22,188,14,2,48,247,22,148,8,2,49,
+11,27,248,80,159,42,8,29,39,250,22,87,23,203,1,248,22,83,248,22,188,
+14,2,38,9,28,193,249,22,73,195,194,192,27,247,22,128,15,249,80,159,39,
+40,38,28,23,195,2,27,248,22,150,8,2,45,28,192,192,2,46,2,47,27,
+28,23,196,1,250,22,166,14,248,22,188,14,2,48,247,22,148,8,2,49,11,
+27,248,80,159,42,8,30,39,250,22,87,23,203,1,248,22,83,248,22,188,14,
+2,38,23,204,1,28,193,249,22,73,195,194,192,86,94,249,22,183,6,247,22,
+154,5,195,248,22,145,6,249,22,128,4,36,249,22,176,3,197,198,27,28,23,
+197,2,86,95,23,196,1,23,195,1,23,197,1,86,94,23,197,1,27,248,22,
+188,14,2,31,27,250,80,159,42,39,39,23,197,1,11,11,27,248,22,131,4,
+23,199,1,27,28,23,194,2,23,194,1,86,94,23,194,1,36,27,248,22,131,
+4,23,202,1,27,28,23,194,2,23,194,1,86,94,23,194,1,36,249,22,185,
+5,23,199,1,20,20,95,88,163,8,36,36,48,11,9,224,4,2,33,107,23,
+195,1,23,197,1,27,248,22,170,5,23,195,1,248,80,159,39,8,31,39,193,
+159,36,20,112,159,36,16,1,11,16,0,20,26,142,2,1,2,1,29,11,11,
+11,11,11,10,43,80,158,36,36,20,112,159,40,16,28,2,2,2,3,2,4,
+2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2,14,2,
+15,30,2,18,76,102,105,110,100,45,108,105,110,107,115,45,112,97,116,104,33,
+4,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,6,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,2,20,2,21,2,22,30,
+2,18,1,21,101,120,99,101,112,116,105,111,110,45,104,97,110,100,108,101,114,
+45,107,101,121,2,2,23,2,24,2,25,2,26,2,27,2,28,2,29,16,0,
+16,0,36,16,0,36,16,12,2,8,2,7,2,3,2,24,2,22,2,20,2,
+15,2,21,2,23,2,13,2,12,2,14,48,11,11,39,36,11,11,16,12,2,
+11,2,9,2,29,2,10,2,5,2,28,2,27,2,4,2,26,2,6,2,25,
+2,2,16,12,11,11,11,11,11,11,11,11,11,11,11,11,16,12,2,11,2,
+9,2,29,2,10,2,5,2,28,2,27,2,4,2,26,2,6,2,25,2,2,
+48,48,37,11,11,16,0,16,0,16,0,36,36,11,11,11,16,0,16,0,16,
+0,36,36,16,0,16,28,20,15,16,2,88,163,8,36,37,51,16,2,8,240,
+0,128,0,0,8,240,1,128,0,0,2,30,223,0,33,50,80,159,36,8,31,
+39,20,15,16,2,88,163,8,36,37,56,16,2,44,8,240,0,64,0,0,2,
+30,223,0,33,51,80,159,36,8,30,39,20,15,16,2,88,163,8,36,37,51,
+16,2,44,8,128,128,2,30,223,0,33,52,80,159,36,8,29,39,20,15,16,
+2,88,163,8,36,37,51,16,2,44,8,128,64,2,30,223,0,33,53,80,159,
+36,8,28,39,20,15,16,2,32,0,88,163,36,37,45,11,2,2,222,33,54,
+80,159,36,36,37,20,15,16,2,249,22,132,7,7,92,7,92,80,159,36,37,
+37,20,15,16,2,88,163,36,37,54,38,2,4,223,0,33,55,80,159,36,38,
+37,20,15,16,2,20,25,96,2,5,88,163,8,36,39,8,24,52,9,223,0,
+33,62,88,163,36,38,47,44,9,223,0,33,63,88,163,36,37,46,44,9,223,
+0,33,64,80,159,36,39,37,20,15,16,2,27,248,22,131,15,248,22,144,8,
+27,28,249,22,140,9,247,22,152,8,2,32,6,1,1,59,6,1,1,58,250,
+22,178,7,6,14,14,40,91,94,126,97,93,42,41,126,97,40,46,42,41,23,
+196,2,23,196,1,88,163,8,36,38,48,11,2,6,223,0,33,68,80,159,36,
+40,37,20,15,16,2,32,0,88,163,8,36,38,50,11,2,7,222,33,69,80,
+159,36,41,37,20,15,16,2,32,0,88,163,8,36,39,51,11,2,8,222,33,
+71,80,159,36,42,37,20,15,16,2,88,163,45,38,51,8,128,4,2,9,223,
+0,33,74,80,159,36,43,37,20,15,16,2,88,163,45,39,52,8,128,4,2,
+11,223,0,33,77,80,159,36,45,37,20,15,16,2,248,22,188,14,70,108,105,
+110,107,115,45,102,105,108,101,80,159,36,46,37,20,15,16,2,247,22,133,2,
+80,158,36,47,20,15,16,2,2,78,80,158,36,48,20,15,16,2,248,80,159,
+37,50,37,88,163,36,36,49,8,240,8,128,1,0,9,223,1,33,79,80,159,
+36,49,37,20,15,16,2,247,22,133,2,80,158,36,53,20,15,16,2,2,78,
+80,158,36,54,20,15,16,2,88,163,36,37,44,8,240,0,188,23,0,2,22,
+223,0,33,90,80,159,36,55,37,20,15,16,2,88,163,36,38,56,8,240,0,
+0,32,0,2,23,223,0,33,92,80,159,36,57,37,20,15,16,2,88,163,36,
+41,59,8,240,0,32,40,0,2,10,223,0,33,99,80,159,36,44,37,20,15,
+16,2,32,0,88,163,36,39,50,11,2,24,222,33,100,80,159,36,58,37,20,
+15,16,2,32,0,88,163,36,38,53,11,2,25,222,33,101,80,159,36,59,37,
+20,15,16,2,32,0,88,163,36,38,54,11,2,26,222,33,102,80,159,36,8,
+24,37,20,15,16,2,32,0,88,163,36,37,44,11,2,27,222,33,103,80,159,
+36,8,25,37,20,15,16,2,20,25,96,2,28,88,163,36,36,53,16,2,52,
+8,128,64,9,223,0,33,104,88,163,36,37,54,16,2,52,8,128,128,9,223,
+0,33,105,88,163,36,38,55,16,2,52,8,240,0,64,0,0,9,223,0,33,
+106,80,159,36,8,26,37,20,15,16,2,88,163,8,36,39,54,16,2,44,8,
+240,0,128,0,0,2,29,223,0,33,108,80,159,36,8,27,37,95,29,94,2,
+16,68,35,37,107,101,114,110,101,108,11,29,94,2,16,69,35,37,109,105,110,
+45,115,116,120,11,2,18,9,9,9,36,0};
+ EVAL_ONE_SIZED_STR((char *)expr, 10406);
}
{
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,51,46,53,0,0,0,0,0,0,0,0,0,0,0,
@@ -923,7 +933,7 @@
107,11,29,94,2,2,68,35,37,112,97,114,97,109,122,11,29,94,2,2,74,
35,37,112,108,97,99,101,45,115,116,114,117,99,116,11,29,94,2,2,66,35,
37,98,111,111,116,11,29,94,2,2,68,35,37,101,120,112,111,98,115,11,29,
-94,2,2,68,35,37,107,101,114,110,101,108,11,97,36,11,8,240,28,78,0,
+94,2,2,68,35,37,107,101,114,110,101,108,11,97,36,11,8,240,48,78,0,
0,100,159,2,3,36,36,159,2,4,36,36,159,2,5,36,36,159,2,6,36,
36,159,2,7,36,36,159,2,8,36,36,159,2,9,36,36,159,2,9,36,36,
16,0,159,36,20,112,159,36,16,1,11,16,0,20,26,142,2,1,2,1,29,
diff --git a/src/racket/src/startup.inc b/src/racket/src/startup.inc
index ef9b325a41..da5de8b0c3 100644
--- a/src/racket/src/startup.inc
+++ b/src/racket/src/startup.inc
@@ -311,7 +311,8 @@
"(when(log-level? l 'error)"
"(log-message l 'error "
"(format"
-" \"error reading linked collections: ~a\""
+" \"error reading collection links file ~s: ~a\""
+"(if user? user-links-path links-path)"
"(exn-message exn))"
"(current-continuation-marks))))"
"(when ts"
@@ -364,7 +365,8 @@
"(and(list? p)"
"(or(= 2(length p))"
"(= 3(length p)))"
-"(string?(car p))"
+"(or(string?(car p))"
+"(eq? 'root(car p)))"
"(path-string?(cadr p))"
"(or(null?(cddr p))"
"(regexp?(caddr p)))))"
@@ -379,10 +381,23 @@
"(lambda(p)"
"(when(or(null?(cddr p))"
"(regexp-match?(caddr p)(version)))"
+"(let((dir(simplify-path"
+"(path->complete-path(cadr p) dir))))"
+"(if(symbol?(car p))"
+"(begin"
+"(unless(hash-ref ht #f #f)"
+"(hash-set! ht #f null))"
+"(hash-for-each"
+" ht"
+"(lambda(k v)"
+"(hash-set! ht k(cons dir v)))))"
"(let((s(string->symbol(car p))))"
-"(hash-set! ht s(cons(box(path->complete-path(cadr p) dir))"
-"(hash-ref ht s null))))))"
+"(hash-set! ht s(cons(box dir)"
+"(hash-ref ht s null))))))))"
" v)"
+"(hash-for-each"
+" ht"
+"(lambda(k v)(hash-set! ht k(reverse v))))"
"(if user?"
"(begin"
"(set! user-links-cache ht)"
@@ -422,10 +437,14 @@
" collection))))"
"(append"
"(if(use-user-specific-search-paths)"
-"(hash-ref(get-linked-collections #t) sym null)"
+"(let((ht(get-linked-collections #t)))"
+"(or(hash-ref ht sym #f)"
+"(hash-ref ht #f null)))"
" null)"
"(if links-path"
-"(hash-ref(get-linked-collections #f) sym null)"
+"(let((ht(get-linked-collections #f)))"
+"(or(hash-ref ht sym #f)"
+"(hash-ref ht #f null)))"
" null)"
"(current-library-collection-paths)))))"
"(define-values(*build-path-rep)"
diff --git a/src/racket/src/startup.rktl b/src/racket/src/startup.rktl
index 60796ff4b3..71de2fdd70 100644
--- a/src/racket/src/startup.rktl
+++ b/src/racket/src/startup.rktl
@@ -379,7 +379,8 @@
(when (log-level? l 'error)
(log-message l 'error
(format
- "error reading linked collections: ~a"
+ "error reading collection links file ~s: ~a"
+ (if user? user-links-path links-path)
(exn-message exn))
(current-continuation-marks))))
(when ts
@@ -432,7 +433,8 @@
(and (list? p)
(or (= 2 (length p))
(= 3 (length p)))
- (string? (car p))
+ (or (string? (car p))
+ (eq? 'root (car p)))
(path-string? (cadr p))
(or (null? (cddr p))
(regexp? (caddr p)))))
@@ -447,10 +449,29 @@
(lambda (p)
(when (or (null? (cddr p))
(regexp-match? (caddr p) (version)))
- (let ([s (string->symbol (car p))])
- (hash-set! ht s (cons (box (path->complete-path (cadr p) dir))
- (hash-ref ht s null))))))
+ (let ([dir (simplify-path
+ (path->complete-path (cadr p) dir))])
+ (if (symbol? (car p))
+ ;; add to every table element (to keep
+ ;; the choices in order); need a better
+ ;; data structure
+ (begin
+ (unless (hash-ref ht #f #f)
+ (hash-set! ht #f null))
+ (hash-for-each
+ ht
+ (lambda (k v)
+ (hash-set! ht k (cons dir v)))))
+ ;; single collection:
+ (let ([s (string->symbol (car p))])
+ (hash-set! ht s (cons (box dir)
+ (hash-ref ht s null))))))))
v)
+ ;; reverse all lists:
+ (hash-for-each
+ ht
+ (lambda (k v) (hash-set! ht k (reverse v))))
+ ;; save table & timestamp:
(if user?
(begin
(set! user-links-cache ht)
@@ -492,13 +513,17 @@
(path->string collection)
collection))])
(append
- ;; list of (box path)s:
+ ;; list of paths and (box path)s:
(if (use-user-specific-search-paths)
- (hash-ref (get-linked-collections #t) sym null)
+ (let ([ht (get-linked-collections #t)])
+ (or (hash-ref ht sym #f)
+ (hash-ref ht #f null)))
null)
- ;; list of (box path)s:
+ ;; list of paths and (box path)s:
(if links-path
- (hash-ref (get-linked-collections #f) sym null)
+ (let ([ht (get-linked-collections #f)])
+ (or (hash-ref ht sym #f)
+ (hash-ref ht #f null)))
null)
;; list of paths:
(current-library-collection-paths)))])