diff --git a/pkgs/base/info.rkt b/pkgs/base/info.rkt index fc4fd5d8fe..2381c8b357 100644 --- a/pkgs/base/info.rkt +++ b/pkgs/base/info.rkt @@ -12,7 +12,7 @@ (define collection 'multi) -(define version "6.9.0.1") +(define version "6.9.0.2") (define deps `("racket-lib" ["racket" #:version ,version])) diff --git a/pkgs/racket-doc/scribblings/reference/chaperones.scrbl b/pkgs/racket-doc/scribblings/reference/chaperones.scrbl index 59e4cf5bdd..c5281a364c 100644 --- a/pkgs/racket-doc/scribblings/reference/chaperones.scrbl +++ b/pkgs/racket-doc/scribblings/reference/chaperones.scrbl @@ -397,8 +397,8 @@ after @racket[redirect-proc] (in the case of a mutator). @defproc[(impersonate-vector [vec (and/c vector? (not/c immutable?))] - [ref-proc (vector? exact-nonnegative-integer? any/c . -> . any/c)] - [set-proc (vector? exact-nonnegative-integer? any/c . -> . any/c)] + [ref-proc (or/c (vector? exact-nonnegative-integer? any/c . -> . any/c) #f)] + [set-proc (or/c (vector? exact-nonnegative-integer? any/c . -> . any/c) #f)] [prop impersonator-property?] [prop-val any] ... ...) (and/c vector? impersonator?)]{ @@ -406,13 +406,17 @@ after @racket[redirect-proc] (in the case of a mutator). Returns an impersonator of @racket[vec], which redirects the @racket[vector-ref] and @racket[vector-set!] operations. -The @racket[ref-proc] must accept @racket[vec], an index passed to +The @racket[ref-proc] and @racket[set-proc] arguments must either both be procedures +or both be @racket[#f]. If they are @racket[#f] then @racket[impersonate-vector] does not interpose +on @racket[vec], but still allows attaching impersonator properties. + +If @racket[ref-proc] is a procedure it must accept @racket[vec], an index passed to @racket[vector-ref], and the value that @racket[vector-ref] on @racket[vec] produces for the given index; it must produce a replacement for the value, which is the result of @racket[vector-ref] on the impersonator. -The @racket[set-proc] must accept @racket[vec], an index passed to +If @racket[set-proc] is a procedure it must accept @racket[vec], an index passed to @racket[vector-set!], and the value passed to @racket[vector-set!]; it must produce a replacement for the value, which is used with @racket[vector-set!] on the original @racket[vec] to install the @@ -420,7 +424,26 @@ value. Pairs of @racket[prop] and @racket[prop-val] (the number of arguments to @racket[impersonate-vector] must be odd) add impersonator properties -or override impersonator-property values of @racket[vec].} +or override impersonator-property values of @racket[vec]. + +@history[#:changed "6.9.0.2"]{Added non-interposing vector impersonators.} +} + +@defproc[(impersonate-vector* [vec (and/c vector? (not/c immutable?))] + [ref-proc (or/c (vector? vector? exact-nonnegative-integer? any/c . -> . any/c) #f)] + [set-proc (or/c (vector? vector? exact-nonnegative-integer? any/c . -> . any/c) #f)] + [prop impersonator-property?] + [prop-val any] ... ...) + (and/c vector? impersonator?)]{ + Like @racket[impersonate-vector], except that @racket[ref-proc] and @racket[set-proc] each receive + an additional vector as argument before other arguments. The additional argument is the original + impersonated vector, access to which triggered interposition in the first place. + + The additional vector argument might be useful so that @racket[ref-proc] or @racket[set-proc] + can extract impersonator properties that are overridden by further impersonators, for example. + + @history[#:added "6.9.0.2"] +} @defproc[(impersonate-box [box (and/c box? (not/c immutable?))] [unbox-proc (box? any/c . -> . any/c)] @@ -792,8 +815,8 @@ or structure type. argument.}]} @defproc[(chaperone-vector [vec vector?] - [ref-proc (vector? exact-nonnegative-integer? any/c . -> . any/c)] - [set-proc (vector? exact-nonnegative-integer? any/c . -> . any/c)] + [ref-proc (or/c (vector? exact-nonnegative-integer? any/c . -> . any/c) #f)] + [set-proc (or/c (vector? exact-nonnegative-integer? any/c . -> . any/c) #f)] [prop impersonator-property?] [prop-val any] ... ...) (and/c vector? chaperone?)]{ @@ -804,6 +827,18 @@ of the original value, and @racket[set-proc] must produce the value that is given or a chaperone of the value. The @racket[set-proc] will not be used if @racket[vec] is immutable.} +@defproc[(chaperone-vector* [vec (and/c vector? (not/c immutable?))] + [ref-proc (or/c (vector? vector? exact-nonnegative-integer? any/c . -> . any/c) #f)] + [set-proc (or/c (vector? vector? exact-nonnegative-integer? any/c . -> . any/c) #f)] + [prop impersonator-property?] + [prop-val any] ... ...) + (and/c vector? chaperone?)]{ + Like @racket[chaperone-vector], but @racket[ref-proc] and @racket[set-proc] receive an extra argument + as with @racket[impersonate-vector*]. + + @history[#:added "6.9.0.2"] +} + @defproc[(chaperone-box [box box?] [unbox-proc (box? any/c . -> . any/c)] [set-proc (box? any/c . -> . any/c)] diff --git a/pkgs/racket-doc/scribblings/reference/unsafe.scrbl b/pkgs/racket-doc/scribblings/reference/unsafe.scrbl index 588d806846..d3a2cee4b5 100644 --- a/pkgs/racket-doc/scribblings/reference/unsafe.scrbl +++ b/pkgs/racket-doc/scribblings/reference/unsafe.scrbl @@ -626,6 +626,28 @@ fixnum).} @history[#:added "6.4.0.4"] } +@defproc[(unsafe-impersonate-vector [vec vector?] + [replacement-vec (and/c vector? (not/c impersonator?))] + [prop impersonator-property?] + [prop-val any/c] ... ...) + (and/c vector? impersonator?)]{ + Like @racket[impersonate-vector], but instead of going through interposition procedures, all + accesses to the impersonator are dispatched to @racket[replacement-vec]. + + The result of @racket[unsafe-impersonate-vector] is an impersonator of @racket[vec]. + + @history[#:added "6.9.0.2"] +} +@defproc[(unsafe-chaperone-vector [vec vector?] + [replacement-vec (and/c vector? (not/c impersonator?))] + [prop impersonator-property?] + [prop-val any/c] ... ...) + (and/c vector? chaperone?)]{ + Like @racket[unsafe-impersonate-vector], but the result of @racket[unsafe-chaperone-vector] is a + chaperone of @racket[vec]. + + @history[#:added "6.9.0.2"] +} @; ------------------------------------------------------------------------ @include-section["unsafe-undefined.scrbl"] diff --git a/pkgs/racket-test-core/tests/racket/chaperone.rktl b/pkgs/racket-test-core/tests/racket/chaperone.rktl index e8af0a4317..6014ec7e00 100644 --- a/pkgs/racket-test-core/tests/racket/chaperone.rktl +++ b/pkgs/racket-test-core/tests/racket/chaperone.rktl @@ -4,6 +4,8 @@ (Section 'chaperones) (require (only-in racket/unsafe/ops + unsafe-chaperone-vector + unsafe-impersonate-vector unsafe-impersonate-procedure unsafe-chaperone-procedure)) @@ -221,6 +223,566 @@ (define-values (a b c) (vector->values b2)) (test '(1 2 3) list a b c))) +;; check property-only chaperones +(as-chaperone-or-impersonator + ([chaperone-vector impersonate-vector chaperone-vector* impersonate-vector*] + [chaperone-of? impersonator-of? chaperone-of? impersonator-of?]) + (let () + (define v (vector 1 2 3)) + (test #t chaperone-of? (chaperone-vector v #f #f) v) + (test #t chaperone-of? v (chaperone-vector v #f #f)) + (define v2 (chaperone-vector v #f #f)) + (define v3 (chaperone-vector v2 #f #f)) + (test #t chaperone-of? v v2) + (test #t chaperone-of? v2 v) + (test #t chaperone-of? v v3) + (test #t chaperone-of? v3 v) + (test #t chaperone-of? v3 v2) + (test #t chaperone-of? v2 v3) + (define vc1 (chaperone-vector v (lambda args (last args)) (lambda args (last args)))) + (define vc2 (chaperone-vector vc1 #f #f)) + (define v2c1 (chaperone-vector v2 (lambda args (last args)) (lambda args (last args)))) + (define v2c2 (chaperone-vector v2c1 #f #f)) + (test #t chaperone-of? vc1 v) + (test #t chaperone-of? vc2 v) + (test #t chaperone-of? v2c1 v) + (test #t chaperone-of? v2c2 v) + (test #t chaperone-of? v2c2 v2c1) + (test #t chaperone-of? v2c1 v2c2) + (test #t chaperone-of? vc2 vc1) + (test #t chaperone-of? vc1 vc2) + (test #f chaperone-of? vc1 v2c1) + (test #f chaperone-of? v2c1 vc1) + (test #f chaperone-of? vc2 v2c2) + (test #f chaperone-of? v2c2 vc2) + + (test #t chaperone-of? vc1 v2) + (test #t chaperone-of? vc1 v3) + (test #f chaperone-of? v2 vc1) + (test #f chaperone-of? v3 vc1) + (test #t chaperone-of? vc2 v2) + (test #t chaperone-of? vc2 v3) + (test #f chaperone-of? v2 vc2) + (test #f chaperone-of? v3 vc2) + + (test #t chaperone-of? v2c1 v2) + (test #t chaperone-of? v2c1 v3) + (test #f chaperone-of? v2 v2c1) + (test #f chaperone-of? v3 v2c1) + (test #t chaperone-of? v2c2 v2) + (test #t chaperone-of? v2c2 v3) + (test #f chaperone-of? v2 v2c2) + (test #f chaperone-of? v3 v2c2) + + (err/rt-test (chaperone-vector v #f (lambda args (last args)))) + (err/rt-test (chaperone-vector v (lambda args (last args)) #f)))) + +;; unsafe-chaperone/impersonate-vector +(as-chaperone-or-impersonator + ([unsafe-chaperone-vector unsafe-impersonate-vector] + [chaperone-of? impersonator-of?]) + (let () + (define v1 (vector 0)) + (define v2 (vector 7)) + (define v (unsafe-chaperone-vector v1 v2)) + (test #t chaperone-of? v v1) + #;(void + (let* ([v1 (vector 0)] + [v (unsafe-chaperone-vector v1 (vector 7))]) + (equal? v v1))) + (test #t equal? v v1) + (test #t equal? v v2) + (test 7 vector-ref v 0) + )) + +;; unsafe-impersonate-vector +(let () + (define v1 (vector 0)) + (define v2 (vector 7)) + (define vc (unsafe-chaperone-vector v1 v2)) + (define vi (unsafe-impersonate-vector v1 v2)) + (test #t chaperone-of? vc v1) + (test #f chaperone-of? vc v2) + (test #t impersonator-of? vi v1) + (test #t impersonator-of? vi v2)) + +;; Properties on vector chaperones and chaperone* +(as-chaperone-or-impersonator + ([chaperone-vector impersonate-vector] + [chaperone-vector* impersonate-vector*] + [chaperone-of? impersonator-of?]) + (let () + (define b (box #f)) + + (define-values (p1 p1? get-p1) + (make-impersonator-property 'p1)) + (define-values (p2 p2? get-p2) + (make-impersonator-property 'p2)) + + (define v (vector 1 2 3)) + + (define v* (chaperone-vector* + v + (λ (c v i x) + (set-box! b (list 'ref (and (p1? c) (get-p1 c)))) + x) + (λ (c v i x) + (set-box! b (list 'set (and (p1? c) (get-p1 c)))) + x))) + + (define vc1 (chaperone-vector v* #f #f p1 'vc1)) + (define w (chaperone-vector* (vector 1) + (λ (c v i x) + (set-box! b (list 'ref (and (p1? c) (get-p1 c)))) + x) + (λ (c v i x) + (set-box! b (list 'set (and (p1? c) (get-p1 c)))) + x) + p1 'working)) + (test #t equal? (unbox b) #f) + (vector-ref w 0) + (test #t equal? (unbox b) '(ref working)) + (vector-ref vc1 0) + (test #t equal? (unbox b) '(ref vc1)) + (vector-set! vc1 0 2) + (test #t equal? (unbox b) '(set vc1)) + )) + +(define (tails lst) + (let loop ([lst lst] [tails null]) + (cond + [(null? lst) (reverse tails)] + [else (loop (cdr lst) (cons lst tails))]))) + +(as-chaperone-or-impersonator + ([chaperone-vector impersonate-vector] + [chaperone-vector* impersonate-vector*] + [chaperone-of? impersonator-of?]) + (let () + (define b-regular (box #f)) + (define b-star (box #f)) + (define b-top (box #f)) + (define (reset-and-test-boxes) + (for-each + (λ (b) (set-box! b #f)) + (list b-regular b-star b-top)) + (for-each + (λ (b) + (test #t equal? (unbox b) #f)) + (list b-regular b-star b-top))) + + (define-values (p1 p1? get-p1) + (make-impersonator-property 'p1)) + (define-values (p2 p2? get-p2) + (make-impersonator-property 'p2)) + + (define v (vector 1 2 3)) + (define prop-only (chaperone-vector v #f #f p1 'prop-only)) + (define regular + (chaperone-vector + prop-only + (λ (v i x) + (set-box! b-regular (list 'ref (and (p1? v) (get-p1 v)))) + x) + (λ (v i x) + (set-box! b-regular (list 'set (and (p1? v) (get-p1 v)))) + x))) + (define star + (chaperone-vector* + regular + (λ (c v i x) + (set-box! b-star (list 'ref (and (p2? c) (get-p2 c)))) + x) + (λ (c v i x) + (set-box! b-star (list 'set (and (p2? c) (get-p2 c)))) + x))) + (define top + (chaperone-vector + star + (λ (v i x) + (set-box! b-top (list 'ref (and (p1? v) (not (p2? v)) (get-p1 v)))) + x) + (λ (v i x) + (set-box! b-top (list 'set (and (p1? v) (not (p2? v)) (get-p1 v)))) + x) + p2 'top)) + (reset-and-test-boxes) + (vector-ref top 1) + (test #t equal? (unbox b-regular) '(ref prop-only)) + (test #t equal? (unbox b-star) '(ref top)) + (test #t equal? (unbox b-top) '(ref prop-only)) + (reset-and-test-boxes) + (vector-set! top 1 4) + (test #t equal? (unbox b-regular) '(set prop-only)) + (test #t equal? (unbox b-star) '(set top)) + (test #t equal? (unbox b-top) '(set prop-only)) + + (define chaps + (list top + star + regular + prop-only + v)) + (for ([chap (in-list chaps)] + [vecs (in-list (tails chaps))]) + (for ([vec (in-list vecs)]) + (test #t chaperone-of? chap vec))))) + +(as-chaperone-or-impersonator + ([chaperone-vector impersonate-vector] + [chaperone-vector* impersonate-vector*] + [chaperone-of? impersonator-of?]) + (define b-regular (box #f)) + (define b-star (box #f)) + (define b-top (box #f)) + (define (reset-and-test-boxes) + (for-each + (λ (b) (set-box! b #f)) + (list b-regular b-star b-top)) + (for-each + (λ (b) + (test #t equal? (unbox b) #f)) + (list b-regular b-star b-top))) + + (define-values (p1 p1? get-p1) + (make-impersonator-property 'p1)) + (define-values (p2 p2? get-p2) + (make-impersonator-property 'p2)) + + (define v (vector 1 2 3)) + (define prop-only (chaperone-vector v #f #f p1 'prop-only)) + (define regular + (chaperone-vector + prop-only + (λ (v i x) + (set-box! b-regular (list 'ref (and (p1? v) (get-p1 v)))) + x) + (λ (v i x) + (set-box! b-regular (list 'set (and (p1? v) (get-p1 v)))) + x))) + (define star + (chaperone-vector* + regular + (λ (c v i x) + (set-box! b-star (list 'ref (and (p2? c) (get-p2 c)))) + x) + (λ (c v i x) + (set-box! b-star (list 'set (and (p2? c) (get-p2 c)))) + x))) + (define prop-only2 + (chaperone-vector star #f #f p1 'prop-only2)) + (define top + (chaperone-vector + prop-only2 + (λ (v i x) + (set-box! b-top (list 'ref (and (p1? v) (not (p2? v)) (get-p1 v)))) + x) + (λ (v i x) + (set-box! b-top (list 'set (and (p1? v) (not (p2? v)) (get-p1 v)))) + x) + p2 'top)) + (reset-and-test-boxes) + (vector-ref top 1) + (test #t equal? (unbox b-regular) '(ref prop-only)) + (test #t equal? (unbox b-star) '(ref top)) + (test #t equal? (unbox b-top) '(ref prop-only2)) + (reset-and-test-boxes) + (vector-set! top 1 4) + (test #t equal? (unbox b-regular) '(set prop-only)) + (test #t equal? (unbox b-star) '(set top)) + (test #t equal? (unbox b-top) '(set prop-only2)) + + (define chaps + (list top + prop-only2 + star + regular + prop-only + v)) + (for ([chap (in-list chaps)] + [vecs (in-list (tails chaps))]) + (for ([vec (in-list vecs)]) + (test #t chaperone-of? chap vec)))) + +(as-chaperone-or-impersonator + ([chaperone-vector impersonate-vector] + [chaperone-vector* impersonate-vector*] + [chaperone-of? impersonator-of?]) + + (define b (box #f)) + (define (clear) (set-box! b #f)) + (define-values (p1 p1? get-p1) + (make-impersonator-property 'p1)) + (define-values (p2 p2? get-p2) + (make-impersonator-property 'p2)) + (define-values (p3 p3? get-p3) + (make-impersonator-property 'p3)) + + (define v (vector 1 2 3)) + (define c + (chaperone-vector* + v + (λ (c v i x) + (define props + (list 'ref + (and (p1? c) (get-p1 c)) + (and (p2? c) (get-p2 c)) + (and (p3? c) (get-p3 c)))) + (set-box! b props) + x) + (λ (c v i x) + (define props + (list 'set + (and (p1? c) (get-p1 c)) + (and (p2? c) (get-p2 c)) + (and (p3? c) (get-p3 c)))) + (set-box! b props) + x))) + + (define (add-chap v . props) + (apply chaperone-vector v #f #f props)) + + (clear) + (test #f unbox b) + + (define c1 (add-chap c p1 'p1)) + (vector-ref c1 0) + (test '(ref p1 #f #f) unbox b) + (clear) + (vector-set! c1 0 1) + (test '(set p1 #f #f) unbox b) + (clear) + (test #t p1? c1) + (test #f p2? c1) + (test #f p3? c1) + + (define c2 (add-chap c1 p2 'p2)) + (clear) + (vector-ref c2 0) + (test '(ref p1 p2 #f) unbox b) + (clear) + (vector-set! c2 0 1) + (test '(set p1 p2 #f) unbox b) + (clear) + (test #t p1? c2) + (test #t p2? c2) + (test #f p3? c2) + + (define c3 (add-chap c2 p3 'p3)) + (clear) + (vector-ref c3 0) + (test '(ref p1 p2 p3) unbox b) + (clear) + (vector-set! c3 0 1) + (test '(set p1 p2 p3) unbox b) + (clear) + (test #t p1? c3) + (test #t p2? c3) + (test #t p3? c3) + + (define c4 (add-chap c3 p3 'p3-new p1 'p1-new)) + (clear) + (vector-ref c4 0) + (test '(ref p1-new p2 p3-new) unbox b) + (clear) + (vector-set! c4 0 1) + (test '(set p1-new p2 p3-new) unbox b) + (clear) + (test #t p1? c4) + (test #t p2? c4) + (test #t p3? c4)) + +;; Properties on unsafe ... +(as-chaperone-or-impersonator + ([unsafe-chaperone-vector unsafe-impersonate-vector]) + (define-values (p1 p1? get-p1) + (make-impersonator-property 'p1)) + (define-values (p2 p2? get-p2) + (make-impersonator-property 'p2)) + (define v1 (vector 1 2 3)) + (define v2 (vector 2 4 6)) + (define uc (unsafe-chaperone-vector v1 v2 p1 'has-p1)) + (test #f p1? v1) + (test #f p1? v2) + (test #t p1? uc) + (test 'has-p1 get-p1 uc) + (define v3 (vector 3 6 9)) + (define uc2 (unsafe-chaperone-vector uc v3 p2 'has-p2)) + (test #t p1? uc2) + (test #t p2? uc2) + (test 'has-p1 get-p1 uc2) + (test 'has-p2 get-p2 uc2)) + +(as-chaperone-or-impersonator + ([unsafe-chaperone-vector unsafe-impersonate-vector]) + (define v (unsafe-chaperone-vector (vector 1) (vector 2 3))) + (test 2 vector-length v) + (test "'#(2 3)" (λ (v) (with-output-to-string (λ () (print v)))) v)) + +(as-chaperone-or-impersonator + ([chaperone-vector impersonate-vector] + [chaperone-vector* impersonate-vector*] + [chaperone-of? impersonator-of?]) + (define u (unsafe-chaperone-vector (vector 1) (vector 2 3))) + (test #t vector? u) + (test 2 vector-length u) + (define po (chaperone-vector (vector 1) #f #f)) + (test #t vector? po) + (test 1 vector-length po) + (define po2 (chaperone-vector* (vector 1) #f #f)) + (test #t vector? po2) + (test 1 vector-length po2) + (define c (chaperone-vector (vector 1) (λ (v i x) x) (λ (v i x) x))) + (test #t vector? c) + (test 1 vector-length c) + (define c* (chaperone-vector* (vector 1) (λ (c v i x) x) (λ (c v i x) x))) + (test #t vector? c*) + (test 1 vector-length c*)) + +(as-chaperone-or-impersonator + ([chaperone-vector impersonate-vector] + [chaperone-vector* impersonate-vector*] + [chaperone-of? impersonator-of?]) + (define v (vector 1 2 3)) + (define ov (vector 4 8 12)) + (define-values (p1 p1? get-p1) + (make-impersonator-property 'p1)) + (define-values (p2 p2? get-p2) + (make-impersonator-property 'p2)) + (define b (box #f)) + (define (clear) (set-box! b #f)) + (define uc (unsafe-chaperone-vector v ov)) + (define c* + (chaperone-vector* + uc + (λ (c v i x) + (define props + (list 'ref + (and (p1? c) (get-p1 c)) + (and (p2? c) (get-p2 c)))) + (set-box! b props) + x) + (λ (c v i x) + (define props + (list 'set + (and (p1? c) (get-p1 c)) + (and (p2? c) (get-p2 c)))) + (set-box! b props) + x))) + (define c1 (chaperone-vector c* #f #f p1 'p1-prop)) + (test 8 vector-ref c1 1) + (test '(ref p1-prop #f) unbox b) + (clear) + (vector-set! c1 1 11) + (test '(set p1-prop #f) unbox b) + (test 11 vector-ref c1 1) + (clear) + (test #f unbox b) + (define c2 (chaperone-vector c1 #f #f p2 'p2-prop)) + (test 11 vector-ref c2 1) + (test '(ref p1-prop p2-prop) unbox b) + (clear) + (vector-set! c2 1 17) + (test '(set p1-prop p2-prop) unbox b) + (test 17 vector-ref c2 1)) + +(define unsafe-chaperone-vector-name "unsafe-chaperone-vector") +(define unsafe-impersonate-vector-name "unsafe-impersonate-vector") + +(as-chaperone-or-impersonator + ([chaperone-vector impersonate-vector] + [chaperone-vector* impersonate-vector*] + [unsafe-chaperone-vector unsafe-impersonate-vector] + [chaperone-of? impersonator-of?] + [unsafe-chaperone-vector-name unsafe-impersonate-vector-name]) + (define v1 (vector 1 2 3)) + (define v2 (vector 7 11 13)) + (define-values (p1 p1? get-p1) + (make-impersonator-property 'p1)) + (define-values (p2 p2? get-p2) + (make-impersonator-property 'p2)) + (define-values (p3 p3? get-p3) + (make-impersonator-property 'p3)) + (define-values (p4 p4? get-p4) + (make-impersonator-property 'p4)) + (define b (box '())) + (define (clear) (set-box! b '())) + + (define (do-chap v tag . rst) + (apply + chaperone-vector* + v + (λ (c v i x) + (define props + (list 'ref tag + (and (p1? c) (get-p1 c)) + (and (p2? c) (get-p2 c)) + (and (p3? c) (get-p3 c)) + (and (p4? c) (get-p4 c)))) + (set-box! b (cons props (unbox b))) + x) + (λ (c v i x) + (define props + (list 'set tag + (and (p1? c) (get-p1 c)) + (and (p2? c) (get-p2 c)) + (and (p3? c) (get-p3 c)) + (and (p4? c) (get-p4 c)))) + (set-box! b (cons props (unbox b))) + x) + rst)) + (define c1 (do-chap v1 'c1 p1 'p1-c1)) + (define c2 (do-chap c1 'c2 p2 'p2-c2)) + (define t (vector-ref c2 1)) + (test #t equal? 2 t) + (test '((ref c2 p1-c1 p2-c2 #f #f) (ref c1 p1-c1 p2-c2 #f #f)) unbox b) + (clear) + (define (add-prop v #:redirect [redirect #f] . rst) + (define interposition (and redirect (λ (v i x) x))) + (apply chaperone-vector v interposition interposition rst)) + (define c*1 (do-chap v2 'c*1)) + (define pc*1 (add-prop c*1 p1 'p1-pc*1)) + (define pc*2 (add-prop pc*1 p2 'p2-pc*2)) + (define c*2 (do-chap pc*2 'c*2 p3 'p3-pc*2)) + (define pc*3 (add-prop c*2 p4 'p4-pc*3)) + (define r (vector-ref pc*3 1)) + (test #t equal? 11 r) + (test '((ref c*2 p1-pc*1 p2-pc*2 p3-pc*2 p4-pc*3) (ref c*1 p1-pc*1 p2-pc*2 p3-pc*2 p4-pc*3)) unbox b) + (clear) + (define np1 (add-prop pc*3 p1 'p1-np1)) + (define np3 (add-prop np1 p3 'p3-np3)) + (vector-set! np3 2 17) + (test '((set c*1 p1-np1 p2-pc*2 p3-np3 p4-pc*3) (set c*2 p1-np1 p2-pc*2 p3-np3 p4-pc*3)) + unbox + b) + (define a (vector-ref np3 2)) + (test #t equal? 17 a) + (clear) + (define v3 (vector 12 16 20)) + (define u3 (do-chap (vector -3 -5) 'u3)) + (err/rt-test (unsafe-chaperone-vector v3 u3) + (λ (exn) + (test #t + regexp-match? + (string-append + unsafe-chaperone-vector-name + ": contract violation") + (exn-message exn)) + (test #t + (regexp-match? + "(and/c vector? (not/c impersonator?))" + (exn-message exn))))) + (clear) + (define vc*1 (do-chap (vector 93 77 26) 'vc*1)) + (define cvc*1 (add-prop vc*1 p1 'p1-cvc*1 #:redirect #t)) + (define cvc*2 (add-prop cvc*1 p2 'p2-cvc*2 #:redirect #t)) + (define vc*2 (do-chap cvc*2 'vc*2 p3 'p3-vc*2)) + (define cvc*3 (add-prop vc*2 p4 'p4-cvc*3 #:redirect #t)) + (define cvc*3-ref (vector-ref cvc*3 1)) + (test #t equal? 77 cvc*3-ref) + (test '((ref vc*2 p1-cvc*1 p2-cvc*2 p3-vc*2 p4-cvc*3) (ref vc*1 p1-cvc*1 p2-cvc*2 p3-vc*2 p4-cvc*3)) unbox b) + ) + ;; ---------------------------------------- (test #t chaperone?/impersonator (chaperone-procedure (lambda (x) x) (lambda (y) y))) diff --git a/racket/src/racket/src/bool.c b/racket/src/racket/src/bool.c index d19f6dde36..cb137607f4 100644 --- a/racket/src/racket/src/bool.c +++ b/racket/src/racket/src/bool.c @@ -639,7 +639,8 @@ int is_equal (Scheme_Object *obj1, Scheme_Object *obj2, Equal_Info *eql) } if (!eql->for_chaperone) { if (SCHEME_CHAPERONEP(obj1)) { - obj1 = ((Scheme_Chaperone *)obj1)->val; + /* OPT only use prev for unsafe-chaperone-vector, use val otherwise */ + obj1 = ((Scheme_Chaperone *)obj1)->prev; goto top_after_next; } if (SCHEME_CHAPERONEP(obj2)) { diff --git a/racket/src/racket/src/cstartup.inc b/racket/src/racket/src/cstartup.inc index 94d3495aef..3e94fe436a 100644 --- a/racket/src/racket/src/cstartup.inc +++ b/racket/src/racket/src/cstartup.inc @@ -1,5 +1,5 @@ { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,55,46,48,46,51,84,0,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,57,46,48,46,50,84,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,54,0,0,0,1,0,0,8,0,18,0, 22,0,26,0,31,0,38,0,42,0,47,0,59,0,66,0,69,0,82,0,89, 0,94,0,103,0,109,0,123,0,137,0,140,0,146,0,157,0,159,0,173,0, @@ -29,50 +29,50 @@ 2,19,248,22,105,199,12,249,22,82,2,20,248,22,107,201,27,248,22,170,4, 195,249,22,163,4,80,143,42,39,251,22,92,2,19,248,22,105,199,249,22,82, 2,20,248,22,107,201,12,27,248,22,84,248,22,170,4,196,28,248,22,90,193, -20,14,144,40,39,40,28,248,22,90,248,22,84,194,248,22,182,20,193,249,22, -163,4,80,143,42,39,251,22,92,2,19,248,22,182,20,199,249,22,82,2,4, -248,22,183,20,201,11,18,143,10,2,28,27,248,22,84,248,22,170,4,196,28, -248,22,90,193,20,14,144,40,39,40,28,248,22,90,248,22,84,194,248,22,182, +20,14,144,40,39,40,28,248,22,90,248,22,84,194,248,22,184,20,193,249,22, +163,4,80,143,42,39,251,22,92,2,19,248,22,184,20,199,249,22,82,2,4, +248,22,185,20,201,11,18,143,10,2,28,27,248,22,84,248,22,170,4,196,28, +248,22,90,193,20,14,144,40,39,40,28,248,22,90,248,22,84,194,248,22,184, 20,193,249,22,163,4,80,143,42,39,250,22,92,2,21,248,22,92,249,22,92, -248,22,92,2,22,248,22,182,20,201,251,22,92,2,19,2,22,2,22,249,22, -82,2,11,248,22,183,20,204,18,143,11,2,28,248,22,170,4,193,27,248,22, -170,4,194,249,22,82,248,22,92,248,22,83,196,248,22,183,20,195,27,248,22, +248,22,92,2,22,248,22,184,20,201,251,22,92,2,19,2,22,2,22,249,22, +82,2,11,248,22,185,20,204,18,143,11,2,28,248,22,170,4,193,27,248,22, +170,4,194,249,22,82,248,22,92,248,22,83,196,248,22,185,20,195,27,248,22, 84,248,22,170,4,23,197,1,249,22,163,4,80,143,42,39,28,248,22,66,248, 22,164,4,248,22,83,23,198,2,27,249,22,2,32,0,88,148,8,36,40,46, 11,9,222,33,43,248,22,170,4,248,22,105,23,200,2,250,22,92,2,23,248, -22,92,249,22,92,248,22,92,248,22,182,20,23,204,2,250,22,93,2,24,249, -22,2,22,83,23,204,2,248,22,107,23,206,2,249,22,82,248,22,182,20,23, +22,92,249,22,92,248,22,92,248,22,184,20,23,204,2,250,22,93,2,24,249, +22,2,22,83,23,204,2,248,22,107,23,206,2,249,22,82,248,22,184,20,23, 202,1,249,22,2,22,105,23,200,1,250,22,93,2,21,249,22,2,32,0,88, -148,8,36,40,50,11,9,222,33,44,248,22,170,4,248,22,182,20,201,248,22, -183,20,198,27,248,22,170,4,194,249,22,82,248,22,92,248,22,83,196,248,22, -183,20,195,27,248,22,84,248,22,170,4,23,197,1,249,22,163,4,80,143,42, +148,8,36,40,50,11,9,222,33,44,248,22,170,4,248,22,184,20,201,248,22, +185,20,198,27,248,22,170,4,194,249,22,82,248,22,92,248,22,83,196,248,22, +185,20,195,27,248,22,84,248,22,170,4,23,197,1,249,22,163,4,80,143,42, 39,250,22,93,2,23,249,22,2,32,0,88,148,8,36,40,50,11,9,222,33, -46,248,22,170,4,248,22,83,201,248,22,183,20,198,27,248,22,84,248,22,170, +46,248,22,170,4,248,22,83,201,248,22,185,20,198,27,248,22,84,248,22,170, 4,196,27,248,22,170,4,248,22,83,195,249,22,163,4,80,143,43,39,28,248, -22,90,195,250,22,93,2,21,9,248,22,183,20,199,250,22,92,2,7,248,22, -92,248,22,83,199,250,22,93,2,8,248,22,183,20,201,248,22,183,20,202,27, +22,90,195,250,22,93,2,21,9,248,22,185,20,199,250,22,92,2,7,248,22, +92,248,22,83,199,250,22,93,2,8,248,22,185,20,201,248,22,185,20,202,27, 248,22,84,248,22,170,4,196,27,248,22,170,4,248,22,83,195,249,22,163,4, -80,143,43,39,28,248,22,90,195,250,22,93,2,21,9,248,22,183,20,199,250, -22,92,2,21,248,22,92,248,22,83,199,250,22,93,2,9,248,22,183,20,201, -248,22,183,20,202,27,248,22,84,248,22,170,4,23,197,1,27,249,22,1,22, +80,143,43,39,28,248,22,90,195,250,22,93,2,21,9,248,22,185,20,199,250, +22,92,2,21,248,22,92,248,22,83,199,250,22,93,2,9,248,22,185,20,201, +248,22,185,20,202,27,248,22,84,248,22,170,4,23,197,1,27,249,22,1,22, 97,249,22,2,22,170,4,248,22,170,4,248,22,83,199,248,22,128,5,249,22, 163,4,80,143,44,39,251,22,92,1,22,119,105,116,104,45,99,111,110,116,105, 110,117,97,116,105,111,110,45,109,97,114,107,2,25,250,22,93,1,23,101,120, 116,101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110, 21,95,1,27,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107, 45,115,101,116,45,102,105,114,115,116,11,2,25,202,250,22,93,2,21,9,248, -22,183,20,204,27,248,22,84,248,22,170,4,196,28,248,22,90,193,20,14,144, +22,185,20,204,27,248,22,84,248,22,170,4,196,28,248,22,90,193,20,14,144, 40,39,40,249,22,163,4,80,143,42,39,27,248,22,170,4,248,22,83,197,28, -249,22,179,9,64,61,62,248,22,164,4,248,22,105,196,250,22,92,2,21,248, -22,92,249,22,92,21,93,2,26,248,22,182,20,199,250,22,93,2,5,249,22, -92,2,26,249,22,92,248,22,114,203,2,26,248,22,183,20,202,251,22,92,2, -19,28,249,22,179,9,248,22,164,4,248,22,182,20,200,66,101,108,115,101,10, -248,22,182,20,197,250,22,93,2,21,9,248,22,183,20,200,249,22,82,2,5, -248,22,183,20,202,18,143,94,10,66,118,111,105,100,2,28,27,248,22,84,248, +249,22,181,9,64,61,62,248,22,164,4,248,22,105,196,250,22,92,2,21,248, +22,92,249,22,92,21,93,2,26,248,22,184,20,199,250,22,93,2,5,249,22, +92,2,26,249,22,92,248,22,114,203,2,26,248,22,185,20,202,251,22,92,2, +19,28,249,22,181,9,248,22,164,4,248,22,184,20,200,66,101,108,115,101,10, +248,22,184,20,197,250,22,93,2,21,9,248,22,185,20,200,249,22,82,2,5, +248,22,185,20,202,18,143,94,10,66,118,111,105,100,2,28,27,248,22,84,248, 22,170,4,196,249,22,163,4,80,143,42,39,28,248,22,66,248,22,164,4,248, -22,83,197,250,22,92,2,27,248,22,92,248,22,182,20,199,248,22,105,198,27, -248,22,164,4,248,22,182,20,197,250,22,92,2,27,248,22,92,248,22,83,197, -250,22,93,2,24,248,22,183,20,199,248,22,183,20,202,145,40,9,20,122,145, +22,83,197,250,22,92,2,27,248,22,92,248,22,184,20,199,248,22,105,198,27, +248,22,164,4,248,22,184,20,197,250,22,92,2,27,248,22,92,248,22,83,197, +250,22,93,2,24,248,22,185,20,199,248,22,185,20,202,145,40,9,20,122,145, 2,1,39,16,1,11,16,0,20,27,15,61,9,2,2,2,2,2,3,11,11, 11,11,9,9,11,11,11,10,40,80,143,39,39,20,122,145,2,1,39,16,0, 16,0,41,42,39,16,0,39,16,0,39,11,11,11,16,11,2,4,2,5,2, @@ -102,8 +102,8 @@ EVAL_ONE_SIZED_STR((char *)expr, 2090); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,55,46,48,46,51,84,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,184,0,0,0,1,0,0,8,0,16,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,57,46,48,46,50,84,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,183,0,0,0,1,0,0,8,0,16,0, 29,0,34,0,51,0,63,0,85,0,114,0,158,0,164,0,178,0,193,0,211, 0,223,0,239,0,253,0,19,1,39,1,73,1,90,1,107,1,130,1,145,1, 184,1,202,1,233,1,245,1,6,2,18,2,33,2,57,2,89,2,118,2,138, @@ -111,922 +111,907 @@ 132,3,139,3,149,3,164,3,173,3,178,3,180,3,213,3,237,3,2,4,15, 4,25,4,34,4,45,4,63,4,76,4,86,4,96,4,102,4,107,4,119,4, 122,4,126,4,131,4,134,4,158,4,201,4,214,4,236,4,247,4,19,5,42, -5,50,5,74,5,95,5,39,6,69,6,155,9,178,9,195,9,159,11,1,12, -15,12,204,12,245,14,254,14,7,15,21,15,31,15,51,16,154,16,23,17,96, -17,169,17,15,18,44,18,115,18,249,18,64,19,15,20,133,20,146,20,8,21, -21,21,128,21,195,21,208,21,219,21,100,22,218,22,1,23,112,23,207,25,231, -25,93,26,160,27,167,27,214,27,227,27,217,28,231,28,85,29,243,29,250,29, -146,31,218,31,229,31,240,31,145,32,165,32,225,32,232,32,88,33,142,33,161, -33,112,34,128,34,89,35,85,36,122,36,131,36,218,37,79,40,95,40,149,40, -170,40,190,40,210,40,11,41,240,43,252,43,244,44,4,45,140,45,198,45,231, -45,102,46,5,47,22,47,84,49,155,51,171,51,197,52,129,53,145,53,203,54, -135,55,144,55,151,55,227,56,47,58,165,58,246,61,120,62,252,62,217,64,167, -65,209,65,53,66,0,0,231,73,0,0,3,1,5,105,110,115,112,48,69,35, -37,117,116,105,108,115,74,112,97,116,104,45,115,116,114,105,110,103,63,66,98, -115,98,115,78,110,111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,73, -114,101,114,111,111,116,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,1, -42,99,97,108,108,45,119,105,116,104,45,100,101,102,97,117,108,116,45,114,101, -97,100,105,110,103,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111, -110,67,113,117,111,116,101,29,94,2,10,70,35,37,112,97,114,97,109,122,11, -76,45,99,104,101,99,107,45,114,101,108,112,97,116,104,79,45,99,104,101,99, -107,45,99,111,108,108,101,99,116,105,111,110,73,45,99,104,101,99,107,45,102, -97,105,108,77,99,111,108,108,101,99,116,105,111,110,45,112,97,116,104,75,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,1,18,102,105,110,100,45,109, -97,105,110,45,99,111,108,108,101,99,116,115,1,32,101,120,101,45,114,101,108, -97,116,105,118,101,45,112,97,116,104,45,62,99,111,109,112,108,101,116,101,45, -112,97,116,104,78,102,105,110,100,45,109,97,105,110,45,99,111,110,102,105,103, -78,103,101,116,45,99,111,110,102,105,103,45,116,97,98,108,101,1,21,103,101, -116,45,105,110,115,116,97,108,108,97,116,105,111,110,45,110,97,109,101,76,99, -111,101,114,99,101,45,116,111,45,112,97,116,104,1,37,99,111,108,108,101,99, -116,115,45,114,101,108,97,116,105,118,101,45,112,97,116,104,45,62,99,111,109, -112,108,101,116,101,45,112,97,116,104,79,97,100,100,45,99,111,110,102,105,103, -45,115,101,97,114,99,104,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,108,105,110,107,115,73,108,105,110, -107,115,45,99,97,99,104,101,78,115,116,97,109,112,45,112,114,111,109,112,116, -45,116,97,103,73,102,105,108,101,45,62,115,116,97,109,112,76,110,111,45,102, -105,108,101,45,115,116,97,109,112,63,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,1,27,102,105,108,101,45,101,120,105,115,116,115,63,47,109,97,121, -98,101,45,99,111,109,112,105,108,101,100,1,18,112,97,116,104,45,97,100,100, -45,101,120,116,101,110,115,105,111,110,1,20,99,104,101,99,107,45,101,120,116, -101,110,115,105,111,110,45,99,97,108,108,1,21,112,97,116,104,45,97,100,106, -117,115,116,45,101,120,116,101,110,115,105,111,110,1,22,112,97,116,104,45,114, -101,112,108,97,99,101,45,101,120,116,101,110,115,105,111,110,79,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,75,101,109,98,101,100,100,101,100,45,108,111,97,100,78,110,111,114,109, -97,108,45,112,97,116,104,45,99,97,115,101,6,41,41,40,111,114,47,99,32, -112,97,116,104,45,102,111,114,45,115,111,109,101,45,115,121,115,116,101,109,63, -32,112,97,116,104,45,115,116,114,105,110,103,63,41,69,119,105,110,100,111,119, -115,6,2,2,92,49,6,41,41,40,111,114,47,99,32,112,97,116,104,45,115, -116,114,105,110,103,63,32,112,97,116,104,45,102,111,114,45,115,111,109,101,45, -115,121,115,116,101,109,63,41,6,4,4,112,97,116,104,5,8,92,92,63,92, -82,69,76,92,6,12,12,112,97,116,104,45,115,116,114,105,110,103,63,70,114, -101,108,97,116,105,118,101,66,108,111,111,112,5,0,6,30,30,40,112,114,111, -99,101,100,117,114,101,45,97,114,105,116,121,45,105,110,99,108,117,100,101,115, -47,99,32,48,41,6,21,21,105,110,118,97,108,105,100,32,114,101,108,97,116, -105,118,101,32,112,97,116,104,6,18,18,40,97,110,121,47,99,32,46,32,45, -62,32,46,32,97,110,121,41,74,99,111,108,108,101,99,116,115,45,100,105,114, -71,101,120,101,99,45,102,105,108,101,70,111,114,105,103,45,100,105,114,72,99, -111,110,102,105,103,45,100,105,114,79,105,110,115,116,97,108,108,97,116,105,111, -110,45,110,97,109,101,6,10,10,108,105,110,107,115,46,114,107,116,100,71,97, -100,100,111,110,45,100,105,114,71,102,115,45,99,104,97,110,103,101,67,101,114, -114,111,114,66,114,111,111,116,73,115,116,97,116,105,99,45,114,111,111,116,6, -0,0,6,1,1,47,5,3,46,122,111,5,1,95,6,21,21,40,111,114,47, -99,32,115,116,114,105,110,103,63,32,98,121,116,101,115,63,41,6,40,40,99, -97,110,110,111,116,32,97,100,100,32,97,110,32,101,120,116,101,110,115,105,111, -110,32,116,111,32,97,32,114,111,111,116,32,112,97,116,104,58,32,5,11,80, -76,84,67,79,76,76,69,67,84,83,1,20,99,111,108,108,101,99,116,115,45, -115,101,97,114,99,104,45,100,105,114,115,6,8,8,99,111,108,108,101,99,116, -115,28,248,22,190,15,193,10,28,248,22,162,7,193,27,248,22,149,16,194,28, -192,192,248,22,150,16,194,11,0,21,35,114,120,34,94,91,92,92,93,91,92, -92,93,91,63,93,91,92,92,93,34,0,6,35,114,120,34,47,34,0,22,35, -114,120,34,91,47,92,92,93,91,46,32,93,43,91,47,92,92,93,42,36,34, -0,19,35,114,120,34,91,32,46,93,43,40,91,47,92,92,93,42,41,36,34, -86,94,28,28,248,22,191,15,23,195,2,10,28,248,22,190,15,23,195,2,10, -28,248,22,162,7,23,195,2,28,248,22,149,16,23,195,2,10,248,22,150,16, -23,195,2,11,11,250,22,130,12,2,41,2,42,23,197,2,28,28,248,22,191, -15,23,195,2,249,22,179,9,248,22,128,16,23,197,2,2,43,249,22,179,9, -247,22,189,8,2,43,27,28,248,22,162,7,23,196,2,23,195,2,248,22,174, -8,248,22,131,16,23,197,2,28,249,22,188,16,2,76,23,195,2,28,248,22, -162,7,195,248,22,134,16,195,194,27,248,22,137,8,23,195,1,249,22,135,16, -248,22,177,8,250,22,132,17,2,77,28,249,22,188,16,2,78,23,201,2,23, -199,1,250,22,132,17,2,79,23,202,1,2,44,80,144,47,40,41,2,43,28, -248,22,162,7,194,248,22,134,16,194,193,0,28,35,114,120,34,94,92,92,92, -92,92,92,92,92,91,63,93,92,92,92,92,85,78,67,92,92,92,92,34,86, -95,28,28,28,248,22,190,15,23,195,2,10,28,248,22,162,7,23,195,2,28, -248,22,149,16,23,195,2,10,248,22,150,16,23,195,2,11,10,248,22,191,15, -23,195,2,11,252,22,130,12,2,6,2,45,39,23,199,2,23,200,2,28,28, -28,248,22,190,15,23,196,2,10,28,248,22,162,7,23,196,2,28,248,22,149, -16,23,196,2,10,248,22,150,16,23,196,2,11,10,248,22,191,15,23,196,2, -11,252,22,130,12,2,6,2,45,40,23,199,2,23,200,2,27,28,248,22,191, -15,23,196,2,248,22,128,16,23,196,2,247,22,129,16,86,95,28,28,248,22, -151,16,23,196,2,10,249,22,179,9,247,22,129,16,23,195,2,11,253,22,132, -12,2,6,6,54,54,112,97,116,104,32,105,115,32,110,111,116,32,99,111,109, -112,108,101,116,101,32,97,110,100,32,110,111,116,32,116,104,101,32,112,108,97, -116,102,111,114,109,39,115,32,99,111,110,118,101,110,116,105,111,110,2,46,23, -201,2,6,24,24,112,108,97,116,102,111,114,109,32,99,111,110,118,101,110,116, -105,111,110,32,116,121,112,101,247,22,129,16,28,249,22,179,9,28,248,22,191, -15,23,199,2,248,22,128,16,23,199,2,247,22,129,16,23,195,2,11,253,22, -132,12,2,6,6,37,37,103,105,118,101,110,32,112,97,116,104,115,32,117,115, -101,32,100,105,102,102,101,114,101,110,116,32,99,111,110,118,101,110,116,105,111, -110,115,2,46,23,201,2,6,9,9,114,111,111,116,32,112,97,116,104,23,202, -2,27,27,248,22,155,16,28,248,22,151,16,23,199,2,23,198,1,248,22,152, -16,23,199,1,86,94,28,28,248,22,191,15,23,194,2,10,28,248,22,190,15, -23,194,2,10,28,248,22,162,7,23,194,2,28,248,22,149,16,23,194,2,10, -248,22,150,16,23,194,2,11,11,250,22,130,12,2,41,2,42,23,196,2,28, -28,248,22,191,15,23,194,2,249,22,179,9,248,22,128,16,23,196,2,2,43, -249,22,179,9,247,22,189,8,2,43,27,28,248,22,162,7,23,195,2,23,194, -2,248,22,174,8,248,22,131,16,23,196,2,28,249,22,188,16,2,76,23,195, -2,86,94,23,193,1,28,248,22,162,7,194,248,22,134,16,194,193,27,248,22, -137,8,23,195,1,249,22,135,16,248,22,177,8,250,22,132,17,2,77,28,249, -22,188,16,2,78,23,201,2,23,199,1,250,22,132,17,2,79,23,202,1,2, -44,80,144,50,40,41,2,43,28,248,22,162,7,193,248,22,134,16,193,192,27, -248,22,131,16,23,195,2,28,249,22,179,9,23,197,2,66,117,110,105,120,28, -249,22,159,8,194,5,1,47,28,248,22,191,15,198,197,248,22,134,16,198,249, -22,144,16,199,249,22,135,16,249,22,162,8,248,22,131,16,200,40,198,28,249, -22,179,9,23,197,2,2,43,249,22,144,16,23,200,1,249,22,135,16,28,249, -22,188,16,0,27,35,114,120,34,94,92,92,92,92,92,92,92,92,91,63,93, -92,92,92,92,91,97,45,122,93,58,34,23,199,2,251,22,163,8,2,47,250, -22,162,8,203,43,44,5,1,92,249,22,162,8,202,45,28,249,22,188,16,2, -81,23,199,2,249,22,163,8,2,47,249,22,162,8,200,43,28,249,22,188,16, -2,81,23,199,2,249,22,163,8,2,47,249,22,162,8,200,43,28,249,22,188, -16,0,14,35,114,120,34,94,92,92,92,92,92,92,92,92,34,23,199,2,249, -22,163,8,5,4,85,78,67,92,249,22,162,8,200,41,28,249,22,188,16,0, -12,35,114,120,34,94,91,97,45,122,93,58,34,198,249,22,163,8,250,22,162, -8,201,39,40,249,22,162,8,200,41,12,198,12,32,83,88,148,8,36,42,56, -11,72,102,111,117,110,100,45,101,120,101,99,222,33,86,32,84,88,148,8,36, -43,61,11,66,110,101,120,116,222,33,85,27,248,22,153,16,23,197,2,28,249, -22,181,9,23,195,2,23,198,1,11,28,248,22,149,16,23,194,2,27,249,22, -144,16,23,200,1,23,196,1,28,23,196,2,90,144,42,11,89,146,42,39,11, -248,22,147,16,23,197,2,86,95,23,195,1,23,194,1,27,28,23,199,2,27, -248,22,153,16,23,199,2,28,249,22,181,9,23,195,2,23,200,2,86,94,23, -193,1,11,28,248,22,149,16,23,194,2,250,2,83,23,203,2,23,204,2,249, -22,144,16,23,200,2,23,198,1,250,2,83,23,203,2,23,204,2,23,196,1, -11,28,23,193,2,86,97,23,200,1,23,199,1,23,197,1,23,194,1,192,27, -28,248,22,190,15,23,196,2,27,249,22,144,16,23,198,2,23,204,2,28,28, -248,22,139,16,193,10,248,22,138,16,193,192,11,11,28,23,193,2,86,97,23, +5,50,5,74,5,95,5,39,6,69,6,155,9,178,9,195,9,163,11,7,12, +21,12,210,12,251,14,4,15,13,15,27,15,37,15,57,16,160,16,29,17,102, +17,175,17,21,18,50,18,121,18,255,18,70,19,21,20,139,20,152,20,14,21, +27,21,134,21,201,21,214,21,225,21,106,22,224,22,7,23,118,23,213,25,237, +25,99,26,166,27,173,27,220,27,233,27,223,28,237,28,91,29,249,29,0,30, +152,31,224,31,235,31,246,31,151,32,171,32,231,32,238,32,94,33,148,33,167, +33,118,34,134,34,91,35,87,36,124,36,133,36,220,37,81,40,97,40,164,40, +185,40,205,40,225,40,26,41,6,44,228,44,244,44,119,45,177,45,210,45,81, +46,245,46,6,47,68,49,139,51,155,51,39,52,227,52,243,52,143,53,75,54, +84,54,91,54,167,55,243,56,105,57,186,60,60,61,192,61,157,63,107,64,139, +64,253,64,0,0,175,72,0,0,3,1,5,105,110,115,112,48,69,35,37,117, +116,105,108,115,74,112,97,116,104,45,115,116,114,105,110,103,63,66,98,115,98, +115,78,110,111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,73,114,101, +114,111,111,116,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,1,42,99, +97,108,108,45,119,105,116,104,45,100,101,102,97,117,108,116,45,114,101,97,100, +105,110,103,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,67, +113,117,111,116,101,29,94,2,10,70,35,37,112,97,114,97,109,122,11,76,45, +99,104,101,99,107,45,114,101,108,112,97,116,104,79,45,99,104,101,99,107,45, +99,111,108,108,101,99,116,105,111,110,73,45,99,104,101,99,107,45,102,97,105, +108,77,99,111,108,108,101,99,116,105,111,110,45,112,97,116,104,75,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,1,18,102,105,110,100,45,109,97,105, +110,45,99,111,108,108,101,99,116,115,1,32,101,120,101,45,114,101,108,97,116, +105,118,101,45,112,97,116,104,45,62,99,111,109,112,108,101,116,101,45,112,97, +116,104,78,102,105,110,100,45,109,97,105,110,45,99,111,110,102,105,103,78,103, +101,116,45,99,111,110,102,105,103,45,116,97,98,108,101,1,21,103,101,116,45, +105,110,115,116,97,108,108,97,116,105,111,110,45,110,97,109,101,76,99,111,101, +114,99,101,45,116,111,45,112,97,116,104,1,37,99,111,108,108,101,99,116,115, +45,114,101,108,97,116,105,118,101,45,112,97,116,104,45,62,99,111,109,112,108, +101,116,101,45,112,97,116,104,79,97,100,100,45,99,111,110,102,105,103,45,115, +101,97,114,99,104,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,108,105,110,107,115,73,108,105,110,107,115, +45,99,97,99,104,101,78,115,116,97,109,112,45,112,114,111,109,112,116,45,116, +97,103,73,102,105,108,101,45,62,115,116,97,109,112,76,110,111,45,102,105,108, +101,45,115,116,97,109,112,63,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,1,27,102,105,108,101,45,101,120,105,115,116,115,63,47,109,97,121,98,101, +45,99,111,109,112,105,108,101,100,1,18,112,97,116,104,45,97,100,100,45,101, +120,116,101,110,115,105,111,110,1,20,99,104,101,99,107,45,101,120,116,101,110, +115,105,111,110,45,99,97,108,108,1,21,112,97,116,104,45,97,100,106,117,115, +116,45,101,120,116,101,110,115,105,111,110,1,22,112,97,116,104,45,114,101,112, +108,97,99,101,45,101,120,116,101,110,115,105,111,110,79,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, +75,101,109,98,101,100,100,101,100,45,108,111,97,100,78,110,111,114,109,97,108, +45,112,97,116,104,45,99,97,115,101,6,41,41,40,111,114,47,99,32,112,97, +116,104,45,102,111,114,45,115,111,109,101,45,115,121,115,116,101,109,63,32,112, +97,116,104,45,115,116,114,105,110,103,63,41,69,119,105,110,100,111,119,115,6, +2,2,92,49,6,41,41,40,111,114,47,99,32,112,97,116,104,45,115,116,114, +105,110,103,63,32,112,97,116,104,45,102,111,114,45,115,111,109,101,45,115,121, +115,116,101,109,63,41,6,4,4,112,97,116,104,5,8,92,92,63,92,82,69, +76,92,6,12,12,112,97,116,104,45,115,116,114,105,110,103,63,70,114,101,108, +97,116,105,118,101,66,108,111,111,112,5,0,6,30,30,40,112,114,111,99,101, +100,117,114,101,45,97,114,105,116,121,45,105,110,99,108,117,100,101,115,47,99, +32,48,41,6,21,21,105,110,118,97,108,105,100,32,114,101,108,97,116,105,118, +101,32,112,97,116,104,6,18,18,40,97,110,121,47,99,32,46,32,45,62,32, +46,32,97,110,121,41,74,99,111,108,108,101,99,116,115,45,100,105,114,71,101, +120,101,99,45,102,105,108,101,70,111,114,105,103,45,100,105,114,72,99,111,110, +102,105,103,45,100,105,114,79,105,110,115,116,97,108,108,97,116,105,111,110,45, +110,97,109,101,6,10,10,108,105,110,107,115,46,114,107,116,100,71,97,100,100, +111,110,45,100,105,114,71,102,115,45,99,104,97,110,103,101,67,101,114,114,111, +114,66,114,111,111,116,73,115,116,97,116,105,99,45,114,111,111,116,6,0,0, +6,1,1,47,5,3,46,122,111,5,1,95,6,21,21,40,111,114,47,99,32, +115,116,114,105,110,103,63,32,98,121,116,101,115,63,41,6,40,40,99,97,110, +110,111,116,32,97,100,100,32,97,110,32,101,120,116,101,110,115,105,111,110,32, +116,111,32,97,32,114,111,111,116,32,112,97,116,104,58,32,5,11,80,76,84, +67,79,76,76,69,67,84,83,1,20,99,111,108,108,101,99,116,115,45,115,101, +97,114,99,104,45,100,105,114,115,6,8,8,99,111,108,108,101,99,116,115,28, +248,22,128,16,193,10,28,248,22,162,7,193,27,248,22,151,16,194,28,192,192, +248,22,152,16,194,11,0,21,35,114,120,34,94,91,92,92,93,91,92,92,93, +91,63,93,91,92,92,93,34,0,6,35,114,120,34,47,34,0,22,35,114,120, +34,91,47,92,92,93,91,46,32,93,43,91,47,92,92,93,42,36,34,0,19, +35,114,120,34,91,32,46,93,43,40,91,47,92,92,93,42,41,36,34,86,94, +28,248,22,129,16,23,195,2,11,28,248,22,128,16,23,195,2,11,28,28,248, +22,162,7,23,195,2,28,248,22,151,16,23,195,2,10,248,22,152,16,23,195, +2,11,11,250,22,132,12,2,41,2,42,23,197,2,28,28,248,22,129,16,23, +195,2,249,22,181,9,248,22,130,16,23,197,2,2,43,249,22,181,9,247,22, +189,8,2,43,27,28,248,22,162,7,23,196,2,23,195,2,248,22,174,8,248, +22,133,16,23,197,2,28,249,22,190,16,2,76,23,195,2,28,248,22,162,7, +195,248,22,136,16,195,194,27,248,22,137,8,23,195,1,249,22,137,16,248,22, +177,8,250,22,134,17,2,77,28,249,22,190,16,2,78,23,201,2,23,199,1, +250,22,134,17,2,79,23,202,1,2,44,80,144,47,40,41,2,43,28,248,22, +162,7,194,248,22,136,16,194,193,0,28,35,114,120,34,94,92,92,92,92,92, +92,92,92,91,63,93,92,92,92,92,85,78,67,92,92,92,92,34,86,95,28, +248,22,128,16,23,195,2,11,28,28,248,22,162,7,23,195,2,28,248,22,151, +16,23,195,2,10,248,22,152,16,23,195,2,11,11,28,248,22,129,16,23,195, +2,11,252,22,132,12,2,6,2,45,39,23,199,2,23,200,2,28,248,22,128, +16,23,196,2,11,28,28,248,22,162,7,23,196,2,28,248,22,151,16,23,196, +2,10,248,22,152,16,23,196,2,11,11,28,248,22,129,16,23,196,2,11,252, +22,132,12,2,6,2,45,40,23,199,2,23,200,2,27,28,248,22,129,16,23, +196,2,248,22,130,16,23,196,2,247,22,131,16,86,95,28,248,22,153,16,23, +196,2,11,28,249,22,181,9,247,22,131,16,23,195,2,11,253,22,134,12,2, +6,6,54,54,112,97,116,104,32,105,115,32,110,111,116,32,99,111,109,112,108, +101,116,101,32,97,110,100,32,110,111,116,32,116,104,101,32,112,108,97,116,102, +111,114,109,39,115,32,99,111,110,118,101,110,116,105,111,110,2,46,23,201,2, +6,24,24,112,108,97,116,102,111,114,109,32,99,111,110,118,101,110,116,105,111, +110,32,116,121,112,101,247,22,131,16,28,249,22,181,9,28,248,22,129,16,23, +199,2,248,22,130,16,23,199,2,247,22,131,16,23,195,2,11,253,22,134,12, +2,6,6,37,37,103,105,118,101,110,32,112,97,116,104,115,32,117,115,101,32, +100,105,102,102,101,114,101,110,116,32,99,111,110,118,101,110,116,105,111,110,115, +2,46,23,201,2,6,9,9,114,111,111,116,32,112,97,116,104,23,202,2,27, +27,248,22,157,16,28,248,22,153,16,23,199,2,23,198,1,248,22,154,16,23, +199,1,86,94,28,248,22,129,16,23,194,2,11,28,248,22,128,16,23,194,2, +11,28,28,248,22,162,7,23,194,2,28,248,22,151,16,23,194,2,10,248,22, +152,16,23,194,2,11,11,250,22,132,12,2,41,2,42,23,196,2,28,28,248, +22,129,16,23,194,2,249,22,181,9,248,22,130,16,23,196,2,2,43,249,22, +181,9,247,22,189,8,2,43,27,28,248,22,162,7,23,195,2,23,194,2,248, +22,174,8,248,22,133,16,23,196,2,28,249,22,190,16,2,76,23,195,2,86, +94,23,193,1,28,248,22,162,7,194,248,22,136,16,194,193,27,248,22,137,8, +23,195,1,249,22,137,16,248,22,177,8,250,22,134,17,2,77,28,249,22,190, +16,2,78,23,201,2,23,199,1,250,22,134,17,2,79,23,202,1,2,44,80, +144,50,40,41,2,43,28,248,22,162,7,193,248,22,136,16,193,192,27,248,22, +133,16,23,195,2,28,249,22,181,9,23,197,2,66,117,110,105,120,28,249,22, +159,8,194,5,1,47,28,248,22,129,16,198,197,248,22,136,16,198,249,22,146, +16,199,249,22,137,16,249,22,162,8,248,22,133,16,200,40,198,28,249,22,181, +9,23,197,2,2,43,249,22,146,16,23,200,1,249,22,137,16,28,249,22,190, +16,0,27,35,114,120,34,94,92,92,92,92,92,92,92,92,91,63,93,92,92, +92,92,91,97,45,122,93,58,34,23,199,2,251,22,163,8,2,47,250,22,162, +8,203,43,44,5,1,92,249,22,162,8,202,45,28,249,22,190,16,2,81,23, +199,2,249,22,163,8,2,47,249,22,162,8,200,43,28,249,22,190,16,2,81, +23,199,2,249,22,163,8,2,47,249,22,162,8,200,43,28,249,22,190,16,0, +14,35,114,120,34,94,92,92,92,92,92,92,92,92,34,23,199,2,249,22,163, +8,5,4,85,78,67,92,249,22,162,8,200,41,28,249,22,190,16,0,12,35, +114,120,34,94,91,97,45,122,93,58,34,198,249,22,163,8,250,22,162,8,201, +39,40,249,22,162,8,200,41,12,198,12,32,83,88,148,8,36,42,56,11,72, +102,111,117,110,100,45,101,120,101,99,222,33,86,32,84,88,148,8,36,43,61, +11,66,110,101,120,116,222,33,85,27,248,22,155,16,23,197,2,28,249,22,183, +9,23,195,2,23,198,1,11,28,248,22,151,16,23,194,2,27,249,22,146,16, +23,200,1,23,196,1,28,23,196,2,90,144,42,11,89,146,42,39,11,248,22, +149,16,23,197,2,86,95,23,195,1,23,194,1,27,28,23,199,2,27,248,22, +155,16,23,199,2,28,249,22,183,9,23,195,2,23,200,2,86,94,23,193,1, +11,28,248,22,151,16,23,194,2,250,2,83,23,203,2,23,204,2,249,22,146, +16,23,200,2,23,198,1,250,2,83,23,203,2,23,204,2,23,196,1,11,28, +23,193,2,86,97,23,200,1,23,199,1,23,197,1,23,194,1,192,27,28,248, +22,128,16,23,196,2,27,249,22,146,16,23,198,2,23,204,2,28,248,22,141, +16,23,194,2,192,28,248,22,140,16,193,192,11,11,28,23,193,2,86,97,23, 201,1,23,200,1,23,198,1,23,195,1,192,28,23,200,2,86,97,23,201,1, -23,200,1,23,198,1,23,195,1,11,27,248,22,153,16,23,200,2,28,249,22, -181,9,194,23,201,1,11,28,248,22,149,16,193,250,2,83,203,204,249,22,144, +23,200,1,23,198,1,23,195,1,11,27,248,22,155,16,23,200,2,28,249,22, +183,9,194,23,201,1,11,28,248,22,151,16,193,250,2,83,203,204,249,22,146, 16,200,197,250,2,83,203,204,195,86,95,23,196,1,23,195,1,192,86,94,23, -197,1,28,23,195,2,90,144,42,11,89,146,42,39,11,248,22,147,16,23,197, -2,86,95,23,195,1,23,194,1,27,28,23,198,2,27,248,22,153,16,23,199, -2,28,249,22,181,9,23,195,2,23,200,2,86,94,23,193,1,11,28,248,22, -149,16,23,194,2,250,2,83,23,202,2,23,203,2,249,22,144,16,23,200,2, +197,1,28,23,195,2,90,144,42,11,89,146,42,39,11,248,22,149,16,23,197, +2,86,95,23,195,1,23,194,1,27,28,23,198,2,27,248,22,155,16,23,199, +2,28,249,22,183,9,23,195,2,23,200,2,86,94,23,193,1,11,28,248,22, +151,16,23,194,2,250,2,83,23,202,2,23,203,2,249,22,146,16,23,200,2, 23,198,1,250,2,83,23,202,2,23,203,2,23,196,1,11,28,23,193,2,192, -27,28,248,22,190,15,23,196,2,27,249,22,144,16,23,198,2,23,203,2,28, -28,248,22,139,16,193,10,248,22,138,16,193,192,11,11,28,23,193,2,192,28, -23,199,2,11,27,248,22,153,16,23,200,2,28,249,22,181,9,194,23,201,1, -11,28,248,22,149,16,193,250,2,83,202,203,249,22,144,16,200,197,250,2,83, -202,203,195,192,28,23,194,2,90,144,42,11,89,146,42,39,11,248,22,147,16, -23,199,2,86,95,23,195,1,23,194,1,27,28,23,197,2,251,2,84,23,201, -2,23,202,2,23,203,2,23,198,2,11,28,23,193,2,192,27,28,248,22,190, -15,195,27,249,22,144,16,197,201,28,28,248,22,139,16,193,10,248,22,138,16, -193,192,11,11,28,192,192,28,197,11,251,2,84,201,202,203,198,194,32,87,88, -148,8,36,43,60,11,2,50,222,33,88,28,248,22,90,23,197,2,11,27,249, -22,144,16,248,22,152,16,248,22,83,23,201,2,23,198,2,28,248,22,138,16, -23,194,2,250,2,83,196,197,195,27,248,22,183,20,23,199,1,28,248,22,90, -23,194,2,11,27,249,22,144,16,248,22,152,16,248,22,83,23,198,2,23,200, -2,28,248,22,138,16,23,194,2,250,2,83,198,199,195,27,248,22,183,20,23, -196,1,28,248,22,90,23,194,2,11,27,249,22,144,16,248,22,152,16,248,22, -83,23,198,2,23,202,2,28,248,22,138,16,23,194,2,250,2,83,200,201,195, -27,248,22,183,20,23,196,1,28,248,22,90,23,194,2,11,27,249,22,144,16, -248,22,152,16,248,22,83,197,203,28,248,22,138,16,193,250,2,83,202,203,195, -251,2,87,203,204,205,248,22,183,20,198,86,95,28,28,248,22,190,15,23,195, -2,10,28,248,22,162,7,23,195,2,28,248,22,149,16,23,195,2,10,248,22, -150,16,23,195,2,11,11,250,22,130,12,2,7,2,48,23,197,2,28,28,23, -195,2,28,28,248,22,190,15,23,196,2,10,28,248,22,162,7,23,196,2,28, -248,22,149,16,23,196,2,10,248,22,150,16,23,196,2,11,248,22,149,16,23, -196,2,11,10,11,250,22,130,12,2,7,6,45,45,40,111,114,47,99,32,35, -102,32,40,97,110,100,47,99,32,112,97,116,104,45,115,116,114,105,110,103,63, -32,114,101,108,97,116,105,118,101,45,112,97,116,104,63,41,41,23,198,2,28, -28,248,22,149,16,23,195,2,90,144,42,11,89,146,42,39,11,248,22,147,16, -23,198,2,249,22,179,9,194,2,49,11,27,249,22,184,8,247,22,183,8,5, -4,80,65,84,72,27,28,23,194,2,249,80,143,43,44,249,22,174,8,23,198, -1,7,63,9,86,94,23,194,1,9,27,28,249,22,179,9,247,22,189,8,2, -43,249,22,82,248,22,135,16,5,1,46,23,196,1,23,194,1,28,248,22,90, -23,194,2,86,97,23,199,1,23,198,1,23,197,1,23,193,1,11,27,249,22, -144,16,248,22,152,16,248,22,83,23,198,2,23,200,2,28,248,22,138,16,23, -194,2,86,95,23,198,1,23,194,1,250,2,83,202,201,195,27,248,22,183,20, -23,196,1,28,248,22,90,23,194,2,86,97,23,201,1,23,200,1,23,199,1, -23,193,1,11,27,249,22,144,16,248,22,152,16,248,22,83,23,198,2,23,202, -2,28,248,22,138,16,23,194,2,86,95,23,200,1,23,194,1,250,2,83,204, -203,195,27,248,22,183,20,23,196,1,28,248,22,90,23,194,2,86,97,23,203, -1,23,202,1,23,201,1,23,193,1,11,27,249,22,144,16,248,22,152,16,248, -22,83,23,198,2,23,204,2,28,248,22,138,16,23,194,2,86,95,23,202,1, -23,194,1,250,2,83,206,205,195,27,248,22,183,20,23,196,1,28,248,22,90, -23,194,2,86,97,23,205,1,23,204,1,23,203,1,23,193,1,11,27,249,22, -144,16,248,22,152,16,248,22,83,197,205,28,248,22,138,16,193,250,2,83,23, -16,23,15,195,251,2,87,23,17,23,16,23,15,248,22,183,20,198,27,248,22, -152,16,23,196,1,28,248,22,138,16,193,250,2,83,199,198,195,11,250,80,144, -42,43,42,196,197,11,250,80,144,42,43,42,196,11,11,32,92,88,148,8,36, -42,58,11,2,50,222,33,94,0,8,35,114,120,35,34,92,34,34,27,249,22, -184,16,23,196,2,23,198,2,28,23,193,2,86,94,23,196,1,27,248,22,105, -23,195,2,27,27,248,22,114,23,197,1,27,249,22,184,16,23,200,2,23,196, -2,28,23,193,2,86,94,23,194,1,27,248,22,105,23,195,2,27,250,2,92, -23,203,1,203,248,22,114,23,199,1,27,28,249,22,179,9,247,22,189,8,2, -43,250,22,132,17,2,93,23,198,1,2,51,194,28,249,22,159,8,194,2,51, -249,22,97,203,195,249,22,82,248,22,135,16,195,195,86,95,23,198,1,23,193, -1,27,28,249,22,179,9,247,22,189,8,2,43,250,22,132,17,2,93,23,198, -1,2,51,194,28,249,22,159,8,194,2,51,249,22,97,201,9,249,22,82,248, -22,135,16,195,9,27,28,249,22,179,9,247,22,189,8,2,43,250,22,132,17, -2,93,23,198,1,2,51,194,28,249,22,159,8,194,2,51,249,22,97,199,195, -249,22,82,248,22,135,16,195,195,86,95,23,194,1,23,193,1,27,28,249,22, -179,9,247,22,189,8,2,43,250,22,132,17,2,93,23,200,1,2,51,196,28, -249,22,159,8,194,2,51,249,22,97,197,9,249,22,82,248,22,135,16,195,9, -86,95,28,28,248,22,151,8,194,10,248,22,162,7,194,11,250,22,130,12,2, -8,6,21,21,40,111,114,47,99,32,98,121,116,101,115,63,32,115,116,114,105, -110,103,63,41,196,28,28,248,22,91,195,249,22,4,22,190,15,196,11,11,250, -22,130,12,2,8,6,14,14,40,108,105,115,116,111,102,32,112,97,116,104,63, -41,197,250,2,92,195,197,28,248,22,162,7,197,248,22,176,8,197,196,28,28, -248,22,0,23,195,2,249,22,48,23,196,2,39,11,20,13,144,80,144,39,46, -40,26,35,80,144,8,35,47,40,249,22,31,11,80,144,8,37,46,40,22,157, -15,10,22,158,15,10,22,159,15,10,22,160,15,11,22,161,15,11,22,165,15, -10,22,164,15,11,22,166,15,10,22,163,15,10,22,167,15,10,22,162,15,11, -22,168,15,10,22,169,15,10,22,170,15,10,22,171,15,11,22,172,15,10,22, -155,15,11,247,23,194,1,250,22,130,12,2,9,2,52,23,197,1,86,94,28, -28,248,22,190,15,23,195,2,10,28,248,22,162,7,23,195,2,28,248,22,149, -16,23,195,2,10,248,22,150,16,23,195,2,11,11,250,22,130,12,23,196,2, -2,48,23,197,2,28,248,22,149,16,23,195,2,12,251,22,132,12,23,197,1, -2,53,2,46,23,198,1,86,94,28,28,248,22,190,15,23,195,2,10,28,248, -22,162,7,23,195,2,28,248,22,149,16,23,195,2,10,248,22,150,16,23,195, -2,11,11,250,22,130,12,23,196,2,2,48,23,197,2,28,248,22,149,16,23, -195,2,12,251,22,132,12,23,197,1,2,53,2,46,23,198,1,86,95,28,28, -248,22,190,15,23,195,2,10,28,248,22,162,7,23,195,2,28,248,22,149,16, -23,195,2,10,248,22,150,16,23,195,2,11,11,250,22,130,12,23,196,2,2, -48,23,197,2,28,248,22,149,16,23,195,2,86,94,23,194,1,11,251,22,132, -12,23,197,2,2,53,2,46,23,198,1,249,22,3,20,20,94,88,148,8,36, -40,50,11,9,223,2,33,98,23,195,1,23,197,1,28,28,248,22,0,23,195, -2,249,22,48,23,196,2,40,11,12,250,22,130,12,23,196,1,2,54,23,197, -1,86,94,28,28,248,22,190,15,23,194,2,10,28,248,22,162,7,23,194,2, -28,248,22,149,16,23,194,2,10,248,22,150,16,23,194,2,11,11,250,22,130, -12,2,15,2,48,23,196,2,28,248,22,149,16,23,194,2,12,251,22,132,12, -2,15,2,53,2,46,23,197,1,86,97,28,28,248,22,190,15,23,196,2,10, -28,248,22,162,7,23,196,2,28,248,22,149,16,23,196,2,10,248,22,150,16, -23,196,2,11,11,250,22,130,12,2,15,2,48,23,198,2,28,248,22,149,16, -23,196,2,11,251,22,132,12,2,15,2,53,2,46,23,199,2,249,22,3,32, -0,88,148,8,36,40,49,11,9,222,33,101,23,198,2,28,28,248,22,0,23, -195,2,249,22,48,23,196,2,40,11,11,250,22,130,12,2,15,2,54,23,197, -2,252,80,143,44,52,23,199,1,23,200,1,23,201,1,11,11,86,94,28,28, -248,22,190,15,23,194,2,10,28,248,22,162,7,23,194,2,28,248,22,149,16, -23,194,2,10,248,22,150,16,23,194,2,11,11,250,22,130,12,2,17,2,48, -23,196,2,28,248,22,149,16,23,194,2,12,251,22,132,12,2,17,2,53,2, -46,23,197,1,86,99,28,28,248,22,190,15,23,197,2,10,28,248,22,162,7, -23,197,2,28,248,22,149,16,23,197,2,10,248,22,150,16,23,197,2,11,11, -250,22,130,12,2,17,2,48,23,199,2,28,248,22,149,16,23,197,2,11,251, -22,132,12,2,17,2,53,2,46,23,200,2,28,28,248,22,190,15,23,198,2, -10,28,248,22,162,7,23,198,2,28,248,22,149,16,23,198,2,10,248,22,150, -16,23,198,2,11,11,250,22,130,12,2,17,2,48,23,200,2,28,248,22,149, -16,23,198,2,11,251,22,132,12,2,17,2,53,2,46,23,201,2,249,22,3, -32,0,88,148,8,36,40,49,11,9,222,33,103,23,200,2,28,28,248,22,0, -23,195,2,249,22,48,23,196,2,40,11,11,250,22,130,12,2,17,2,54,23, -197,2,252,80,143,44,52,23,199,1,23,202,1,23,203,1,23,201,1,23,200, -1,27,248,22,167,16,2,55,28,248,22,151,16,23,194,2,248,22,154,16,23, -194,1,28,248,22,150,16,23,194,2,90,144,42,11,89,146,42,39,11,248,22, -147,16,249,22,152,16,250,80,144,49,43,42,248,22,167,16,2,56,11,11,248, -22,167,16,2,57,86,95,23,195,1,23,194,1,248,22,154,16,249,22,152,16, -23,199,1,23,196,1,27,250,80,144,44,43,42,248,22,167,16,2,56,23,197, -1,10,28,23,193,2,248,22,154,16,23,194,1,11,249,80,144,41,55,40,39, -80,144,41,8,40,42,27,248,22,167,16,2,58,28,248,22,151,16,23,194,2, -248,22,154,16,23,194,1,28,248,22,150,16,23,194,2,90,144,42,11,89,146, -42,39,11,248,22,147,16,249,22,152,16,250,80,144,49,43,42,248,22,167,16, -2,56,11,11,248,22,167,16,2,57,86,95,23,195,1,23,194,1,248,22,154, -16,249,22,152,16,23,199,1,23,196,1,27,250,80,144,44,43,42,248,22,167, -16,2,56,23,197,1,10,28,23,193,2,248,22,154,16,23,194,1,11,249,80, -144,41,55,40,40,80,144,41,8,41,42,27,20,13,144,80,144,40,46,40,26, -35,80,144,8,36,47,40,249,22,31,11,80,144,8,38,46,40,22,157,15,10, -22,158,15,10,22,159,15,10,22,160,15,11,22,161,15,11,22,165,15,10,22, -164,15,11,22,166,15,10,22,163,15,10,22,167,15,10,22,162,15,11,22,168, -15,10,22,169,15,10,22,170,15,10,22,171,15,11,22,172,15,10,22,155,15, -11,247,22,157,6,28,248,22,152,2,193,192,11,27,28,23,195,2,249,22,144, -16,23,197,1,6,11,11,99,111,110,102,105,103,46,114,107,116,100,86,94,23, -195,1,11,27,28,23,194,2,28,248,22,138,16,23,195,2,249,22,149,6,23, -196,1,80,144,43,8,42,42,11,11,28,192,192,21,17,1,0,250,22,161,2, -23,196,1,2,59,247,22,180,8,250,22,161,2,195,2,59,247,22,180,8,28, -248,22,162,7,23,195,2,27,248,22,134,16,23,196,1,28,248,22,151,16,23, -194,2,192,249,22,152,16,23,195,1,27,247,80,144,43,54,42,28,23,193,2, -192,247,22,168,16,28,248,22,151,8,23,195,2,27,248,22,135,16,23,196,1, -28,248,22,151,16,23,194,2,192,249,22,152,16,23,195,1,27,247,80,144,43, -54,42,28,23,193,2,192,247,22,168,16,28,248,22,190,15,23,195,2,28,248, -22,151,16,23,195,2,193,249,22,152,16,23,196,1,27,247,80,144,42,54,42, -28,23,193,2,192,247,22,168,16,193,27,248,22,167,16,2,55,28,248,22,151, -16,23,194,2,248,22,154,16,23,194,1,28,248,22,150,16,23,194,2,90,144, -42,11,89,146,42,39,11,248,22,147,16,249,22,152,16,250,80,144,49,43,42, -248,22,167,16,2,56,11,11,248,22,167,16,2,57,86,95,23,195,1,23,194, -1,248,22,154,16,249,22,152,16,23,199,1,23,196,1,27,250,80,144,44,43, -42,248,22,167,16,2,56,23,197,1,10,28,23,193,2,248,22,154,16,23,194, -1,11,28,248,22,151,16,23,195,2,193,249,22,152,16,23,196,1,27,249,80, -144,44,55,40,39,80,144,44,8,43,42,28,23,193,2,192,247,22,168,16,28, -248,22,151,16,23,195,2,248,22,154,16,23,195,1,28,248,22,150,16,23,195, -2,90,144,42,11,89,146,42,39,11,248,22,147,16,249,22,152,16,250,80,144, -48,43,42,248,22,167,16,2,56,11,11,248,22,167,16,2,57,86,95,23,195, -1,23,194,1,248,22,154,16,249,22,152,16,23,200,1,23,196,1,27,250,80, -144,43,43,42,248,22,167,16,2,56,23,198,1,10,28,23,193,2,248,22,154, -16,23,194,1,11,28,248,22,90,23,196,2,9,28,248,22,83,23,196,2,249, -22,82,27,248,22,182,20,23,199,2,28,248,22,162,7,23,194,2,27,248,22, -134,16,23,195,1,28,248,22,151,16,23,194,2,192,249,22,152,16,23,195,1, -27,247,80,144,46,54,42,28,23,193,2,192,247,22,168,16,28,248,22,151,8, -23,194,2,27,248,22,135,16,23,195,1,28,248,22,151,16,23,194,2,192,249, -22,152,16,23,195,1,27,247,80,144,46,54,42,28,23,193,2,192,247,22,168, -16,28,248,22,190,15,23,194,2,28,248,22,151,16,23,194,2,192,249,22,152, -16,23,195,1,27,247,80,144,45,54,42,28,23,193,2,192,247,22,168,16,192, -27,248,22,183,20,23,199,1,28,248,22,90,23,194,2,86,95,23,197,1,23, -193,1,9,28,248,22,83,23,194,2,249,22,82,248,80,144,45,60,42,248,22, -182,20,23,197,2,27,248,22,183,20,23,197,1,28,248,22,90,23,194,2,86, -95,23,200,1,23,193,1,9,28,248,22,83,23,194,2,249,22,82,248,80,144, -48,60,42,248,22,182,20,23,197,2,249,80,144,49,8,44,42,23,204,1,248, -22,183,20,23,198,1,249,22,97,23,202,2,249,80,144,49,8,44,42,23,204, -1,248,22,183,20,23,198,1,249,22,97,23,199,2,27,248,22,183,20,23,197, -1,28,248,22,90,23,194,2,86,95,23,200,1,23,193,1,9,28,248,22,83, -23,194,2,249,22,82,248,80,144,48,60,42,248,22,182,20,23,197,2,249,80, -144,49,8,44,42,23,204,1,248,22,183,20,23,198,1,249,22,97,23,202,2, -249,80,144,49,8,44,42,23,204,1,248,22,183,20,23,198,1,249,22,97,23, -196,2,27,248,22,183,20,23,199,1,28,248,22,90,23,194,2,9,28,248,22, -83,23,194,2,249,22,82,248,80,144,45,60,42,248,22,182,20,23,197,2,27, -248,22,183,20,23,197,1,28,248,22,90,23,194,2,86,95,23,200,1,23,193, -1,9,28,248,22,83,23,194,2,249,22,82,248,80,144,48,60,42,248,22,182, -20,23,197,2,249,80,144,49,8,44,42,23,204,1,248,22,183,20,23,198,1, -249,22,97,23,202,2,249,80,144,49,8,44,42,23,204,1,248,22,183,20,23, -198,1,249,22,97,23,199,2,27,248,22,183,20,23,197,1,28,248,22,90,23, -194,2,9,28,248,22,83,23,194,2,249,22,82,248,80,144,48,60,42,248,22, -182,20,23,197,2,249,80,144,49,8,44,42,23,204,1,248,22,183,20,23,198, -1,249,22,97,23,202,2,249,80,144,49,8,44,42,23,204,1,248,22,183,20, -23,198,1,27,250,22,161,2,23,198,1,23,199,1,11,28,192,249,80,144,42, -8,44,42,198,194,196,27,248,22,167,16,2,58,28,248,22,151,16,23,194,2, -248,22,154,16,23,194,1,28,248,22,150,16,23,194,2,90,144,42,11,89,146, -42,39,11,248,22,147,16,249,22,152,16,250,80,144,49,43,42,248,22,167,16, -2,56,11,11,248,22,167,16,2,57,86,95,23,195,1,23,194,1,248,22,154, -16,249,22,152,16,23,199,1,23,196,1,27,250,80,144,44,43,42,248,22,167, -16,2,56,23,197,1,10,28,23,193,2,248,22,154,16,23,194,1,11,27,248, -80,144,41,58,42,249,80,144,43,55,40,40,80,144,43,8,45,42,27,27,250, -22,161,2,23,198,2,72,108,105,110,107,115,45,102,105,108,101,11,27,28,23, -194,2,23,194,1,86,94,23,194,1,249,22,144,16,27,250,22,161,2,23,202, -2,71,115,104,97,114,101,45,100,105,114,11,28,192,192,249,22,144,16,64,117, -112,6,5,5,115,104,97,114,101,2,60,28,248,22,162,7,23,194,2,27,248, -22,134,16,23,195,1,28,248,22,151,16,23,194,2,192,249,22,152,16,23,195, -1,27,247,80,144,47,54,42,28,23,193,2,192,247,22,168,16,28,248,22,151, -8,23,194,2,27,248,22,135,16,23,195,1,28,248,22,151,16,23,194,2,192, -249,22,152,16,23,195,1,27,247,80,144,47,54,42,28,23,193,2,192,247,22, -168,16,28,248,22,190,15,23,194,2,28,248,22,151,16,23,194,2,192,249,22, -152,16,23,195,1,27,247,80,144,46,54,42,28,23,193,2,192,247,22,168,16, -192,250,22,97,248,22,92,11,28,247,22,175,16,28,247,22,176,16,248,22,92, -250,22,144,16,248,22,167,16,2,61,250,22,161,2,23,204,2,2,59,247,22, -180,8,2,60,9,9,28,247,22,176,16,250,80,144,47,8,23,42,23,200,1, -1,18,108,105,110,107,115,45,115,101,97,114,99,104,45,102,105,108,101,115,248, -22,92,23,200,1,9,248,22,186,13,23,194,1,249,22,14,80,144,41,8,26, -41,28,248,22,142,13,23,197,2,32,0,88,148,8,36,39,44,11,9,222,11, -20,20,94,88,148,8,36,39,46,11,9,223,3,33,121,23,196,1,32,123,88, -148,39,40,59,11,2,50,222,33,124,90,144,42,11,89,146,42,39,11,248,22, -147,16,23,197,1,86,95,23,195,1,23,194,1,28,248,22,190,15,23,194,2, -28,248,22,139,16,23,194,2,249,22,154,6,23,195,1,32,0,88,148,8,36, -39,44,11,9,222,11,90,144,42,11,89,146,42,39,11,248,22,147,16,23,197, -1,86,95,23,195,1,23,194,1,28,248,22,190,15,23,194,2,28,248,22,139, +27,28,248,22,128,16,23,196,2,27,249,22,146,16,23,198,2,23,203,2,28, +248,22,141,16,23,194,2,192,28,248,22,140,16,193,192,11,11,28,23,193,2, +192,28,23,199,2,11,27,248,22,155,16,23,200,2,28,249,22,183,9,194,23, +201,1,11,28,248,22,151,16,193,250,2,83,202,203,249,22,146,16,200,197,250, +2,83,202,203,195,192,28,23,194,2,90,144,42,11,89,146,42,39,11,248,22, +149,16,23,199,2,86,95,23,195,1,23,194,1,27,28,23,197,2,251,2,84, +23,201,2,23,202,2,23,203,2,23,198,2,11,28,23,193,2,192,27,28,248, +22,128,16,195,27,249,22,146,16,197,201,28,248,22,141,16,23,194,2,192,28, +248,22,140,16,193,192,11,11,28,192,192,28,197,11,251,2,84,201,202,203,198, +194,32,87,88,148,8,36,43,60,11,2,50,222,33,88,28,248,22,90,23,197, +2,11,27,249,22,146,16,248,22,154,16,248,22,83,23,201,2,23,198,2,28, +248,22,140,16,23,194,2,250,2,83,196,197,195,27,248,22,185,20,23,199,1, +28,248,22,90,23,194,2,11,27,249,22,146,16,248,22,154,16,248,22,83,23, +198,2,23,200,2,28,248,22,140,16,23,194,2,250,2,83,198,199,195,27,248, +22,185,20,23,196,1,28,248,22,90,23,194,2,11,27,249,22,146,16,248,22, +154,16,248,22,83,23,198,2,23,202,2,28,248,22,140,16,23,194,2,250,2, +83,200,201,195,27,248,22,185,20,23,196,1,28,248,22,90,23,194,2,11,27, +249,22,146,16,248,22,154,16,248,22,83,197,203,28,248,22,140,16,193,250,2, +83,202,203,195,251,2,87,203,204,205,248,22,185,20,198,86,95,28,248,22,128, +16,23,195,2,11,28,28,248,22,162,7,23,195,2,28,248,22,151,16,23,195, +2,10,248,22,152,16,23,195,2,11,11,250,22,132,12,2,7,2,48,23,197, +2,28,23,195,2,28,28,28,248,22,128,16,23,196,2,10,28,248,22,162,7, +23,196,2,28,248,22,151,16,23,196,2,10,248,22,152,16,23,196,2,11,248, +22,151,16,23,196,2,11,11,250,22,132,12,2,7,6,45,45,40,111,114,47, +99,32,35,102,32,40,97,110,100,47,99,32,112,97,116,104,45,115,116,114,105, +110,103,63,32,114,101,108,97,116,105,118,101,45,112,97,116,104,63,41,41,23, +198,2,11,28,28,248,22,151,16,23,195,2,90,144,42,11,89,146,42,39,11, +248,22,149,16,23,198,2,249,22,181,9,194,2,49,11,27,249,22,184,8,247, +22,183,8,5,4,80,65,84,72,27,28,23,194,2,249,80,143,43,44,249,22, +174,8,23,198,1,7,63,9,86,94,23,194,1,9,27,28,249,22,181,9,247, +22,189,8,2,43,249,22,82,248,22,137,16,5,1,46,23,196,1,23,194,1, +28,248,22,90,23,194,2,86,97,23,199,1,23,198,1,23,197,1,23,193,1, +11,27,249,22,146,16,248,22,154,16,248,22,83,23,198,2,23,200,2,28,248, +22,140,16,23,194,2,86,95,23,198,1,23,194,1,250,2,83,202,201,195,27, +248,22,185,20,23,196,1,28,248,22,90,23,194,2,86,97,23,201,1,23,200, +1,23,199,1,23,193,1,11,27,249,22,146,16,248,22,154,16,248,22,83,23, +198,2,23,202,2,28,248,22,140,16,23,194,2,86,95,23,200,1,23,194,1, +250,2,83,204,203,195,27,248,22,185,20,23,196,1,28,248,22,90,23,194,2, +86,97,23,203,1,23,202,1,23,201,1,23,193,1,11,27,249,22,146,16,248, +22,154,16,248,22,83,23,198,2,23,204,2,28,248,22,140,16,23,194,2,86, +95,23,202,1,23,194,1,250,2,83,206,205,195,27,248,22,185,20,23,196,1, +28,248,22,90,23,194,2,86,97,23,205,1,23,204,1,23,203,1,23,193,1, +11,27,249,22,146,16,248,22,154,16,248,22,83,197,205,28,248,22,140,16,193, +250,2,83,23,16,23,15,195,251,2,87,23,17,23,16,23,15,248,22,185,20, +198,27,248,22,154,16,23,196,1,28,248,22,140,16,193,250,2,83,199,198,195, +11,250,80,144,42,43,42,196,197,11,250,80,144,42,43,42,196,11,11,32,92, +88,148,8,36,42,58,11,2,50,222,33,94,0,8,35,114,120,35,34,92,34, +34,27,249,22,186,16,23,196,2,23,198,2,28,23,193,2,86,94,23,196,1, +27,248,22,105,23,195,2,27,27,248,22,114,23,197,1,27,249,22,186,16,23, +200,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22,105,23,195,2, +27,250,2,92,23,203,1,203,248,22,114,23,199,1,27,28,249,22,181,9,247, +22,189,8,2,43,250,22,134,17,2,93,23,198,1,2,51,194,28,249,22,159, +8,194,2,51,249,22,97,203,195,249,22,82,248,22,137,16,195,195,86,95,23, +198,1,23,193,1,27,28,249,22,181,9,247,22,189,8,2,43,250,22,134,17, +2,93,23,198,1,2,51,194,28,249,22,159,8,194,2,51,249,22,97,201,9, +249,22,82,248,22,137,16,195,9,27,28,249,22,181,9,247,22,189,8,2,43, +250,22,134,17,2,93,23,198,1,2,51,194,28,249,22,159,8,194,2,51,249, +22,97,199,195,249,22,82,248,22,137,16,195,195,86,95,23,194,1,23,193,1, +27,28,249,22,181,9,247,22,189,8,2,43,250,22,134,17,2,93,23,200,1, +2,51,196,28,249,22,159,8,194,2,51,249,22,97,197,9,249,22,82,248,22, +137,16,195,9,86,95,28,248,22,151,8,194,11,28,248,22,162,7,194,11,250, +22,132,12,2,8,6,21,21,40,111,114,47,99,32,98,121,116,101,115,63,32, +115,116,114,105,110,103,63,41,196,28,28,248,22,91,195,249,22,4,22,128,16, +196,11,11,250,22,132,12,2,8,6,14,14,40,108,105,115,116,111,102,32,112, +97,116,104,63,41,197,250,2,92,195,197,28,248,22,162,7,197,248,22,176,8, +197,196,28,28,248,22,0,23,195,2,249,22,48,23,196,2,39,11,20,13,144, +80,144,39,46,40,26,35,80,144,8,35,47,40,249,22,31,11,80,144,8,37, +46,40,22,159,15,10,22,160,15,10,22,161,15,10,22,162,15,11,22,163,15, +11,22,167,15,10,22,166,15,11,22,168,15,10,22,165,15,10,22,169,15,10, +22,164,15,11,22,170,15,10,22,171,15,10,22,172,15,10,22,173,15,11,22, +174,15,10,22,157,15,11,247,23,194,1,250,22,132,12,2,9,2,52,23,197, +1,86,94,28,248,22,128,16,23,195,2,11,28,28,248,22,162,7,23,195,2, +28,248,22,151,16,23,195,2,10,248,22,152,16,23,195,2,11,11,250,22,132, +12,23,196,2,2,48,23,197,2,28,248,22,151,16,23,195,2,12,251,22,134, +12,23,197,1,2,53,2,46,23,198,1,86,94,28,248,22,128,16,23,195,2, +11,28,28,248,22,162,7,23,195,2,28,248,22,151,16,23,195,2,10,248,22, +152,16,23,195,2,11,11,250,22,132,12,23,196,2,2,48,23,197,2,28,248, +22,151,16,23,195,2,12,251,22,134,12,23,197,1,2,53,2,46,23,198,1, +86,95,28,248,22,128,16,23,195,2,11,28,28,248,22,162,7,23,195,2,28, +248,22,151,16,23,195,2,10,248,22,152,16,23,195,2,11,11,250,22,132,12, +23,196,2,2,48,23,197,2,28,248,22,151,16,23,195,2,86,94,23,194,1, +11,251,22,134,12,23,197,2,2,53,2,46,23,198,1,249,22,3,20,20,94, +88,148,8,36,40,50,11,9,223,2,33,98,23,195,1,23,197,1,28,28,248, +22,0,23,195,2,249,22,48,23,196,2,40,11,12,250,22,132,12,23,196,1, +2,54,23,197,1,86,94,28,248,22,128,16,23,194,2,11,28,28,248,22,162, +7,23,194,2,28,248,22,151,16,23,194,2,10,248,22,152,16,23,194,2,11, +11,250,22,132,12,2,15,2,48,23,196,2,28,248,22,151,16,23,194,2,12, +251,22,134,12,2,15,2,53,2,46,23,197,1,86,97,28,248,22,128,16,23, +196,2,11,28,28,248,22,162,7,23,196,2,28,248,22,151,16,23,196,2,10, +248,22,152,16,23,196,2,11,11,250,22,132,12,2,15,2,48,23,198,2,28, +248,22,151,16,23,196,2,11,251,22,134,12,2,15,2,53,2,46,23,199,2, +249,22,3,32,0,88,148,8,36,40,49,11,9,222,33,101,23,198,2,28,28, +248,22,0,23,195,2,249,22,48,23,196,2,40,11,11,250,22,132,12,2,15, +2,54,23,197,2,252,80,143,44,52,23,199,1,23,200,1,23,201,1,11,11, +86,94,28,248,22,128,16,23,194,2,11,28,28,248,22,162,7,23,194,2,28, +248,22,151,16,23,194,2,10,248,22,152,16,23,194,2,11,11,250,22,132,12, +2,17,2,48,23,196,2,28,248,22,151,16,23,194,2,12,251,22,134,12,2, +17,2,53,2,46,23,197,1,86,99,28,248,22,128,16,23,197,2,11,28,28, +248,22,162,7,23,197,2,28,248,22,151,16,23,197,2,10,248,22,152,16,23, +197,2,11,11,250,22,132,12,2,17,2,48,23,199,2,28,248,22,151,16,23, +197,2,11,251,22,134,12,2,17,2,53,2,46,23,200,2,28,248,22,128,16, +23,198,2,11,28,28,248,22,162,7,23,198,2,28,248,22,151,16,23,198,2, +10,248,22,152,16,23,198,2,11,11,250,22,132,12,2,17,2,48,23,200,2, +28,248,22,151,16,23,198,2,11,251,22,134,12,2,17,2,53,2,46,23,201, +2,249,22,3,32,0,88,148,8,36,40,49,11,9,222,33,103,23,200,2,28, +28,248,22,0,23,195,2,249,22,48,23,196,2,40,11,11,250,22,132,12,2, +17,2,54,23,197,2,252,80,143,44,52,23,199,1,23,202,1,23,203,1,23, +201,1,23,200,1,27,248,22,169,16,2,55,28,248,22,153,16,23,194,2,248, +22,156,16,23,194,1,28,248,22,152,16,23,194,2,90,144,42,11,89,146,42, +39,11,248,22,149,16,249,22,154,16,250,80,144,49,43,42,248,22,169,16,2, +56,11,11,248,22,169,16,2,57,86,95,23,195,1,23,194,1,248,22,156,16, +249,22,154,16,23,199,1,23,196,1,27,250,80,144,44,43,42,248,22,169,16, +2,56,23,197,1,10,28,23,193,2,248,22,156,16,23,194,1,11,249,80,144, +41,55,40,39,80,144,41,8,40,42,27,248,22,169,16,2,58,28,248,22,153, +16,23,194,2,248,22,156,16,23,194,1,28,248,22,152,16,23,194,2,90,144, +42,11,89,146,42,39,11,248,22,149,16,249,22,154,16,250,80,144,49,43,42, +248,22,169,16,2,56,11,11,248,22,169,16,2,57,86,95,23,195,1,23,194, +1,248,22,156,16,249,22,154,16,23,199,1,23,196,1,27,250,80,144,44,43, +42,248,22,169,16,2,56,23,197,1,10,28,23,193,2,248,22,156,16,23,194, +1,11,249,80,144,41,55,40,40,80,144,41,8,41,42,27,20,13,144,80,144, +40,46,40,26,35,80,144,8,36,47,40,249,22,31,11,80,144,8,38,46,40, +22,159,15,10,22,160,15,10,22,161,15,10,22,162,15,11,22,163,15,11,22, +167,15,10,22,166,15,11,22,168,15,10,22,165,15,10,22,169,15,10,22,164, +15,11,22,170,15,10,22,171,15,10,22,172,15,10,22,173,15,11,22,174,15, +10,22,157,15,11,247,22,157,6,28,248,22,152,2,193,192,11,27,28,23,195, +2,249,22,146,16,23,197,1,6,11,11,99,111,110,102,105,103,46,114,107,116, +100,86,94,23,195,1,11,27,28,23,194,2,28,248,22,140,16,23,195,2,249, +22,149,6,23,196,1,80,144,43,8,42,42,11,11,28,192,192,21,17,1,0, +250,22,161,2,23,196,1,2,59,247,22,180,8,250,22,161,2,195,2,59,247, +22,180,8,28,248,22,162,7,23,195,2,27,248,22,136,16,23,196,1,28,248, +22,153,16,23,194,2,192,249,22,154,16,23,195,1,27,247,80,144,43,54,42, +28,23,193,2,192,247,22,170,16,28,248,22,151,8,23,195,2,27,248,22,137, +16,23,196,1,28,248,22,153,16,23,194,2,192,249,22,154,16,23,195,1,27, +247,80,144,43,54,42,28,23,193,2,192,247,22,170,16,28,248,22,128,16,23, +195,2,28,248,22,153,16,23,195,2,193,249,22,154,16,23,196,1,27,247,80, +144,42,54,42,28,23,193,2,192,247,22,170,16,193,27,248,22,169,16,2,55, +28,248,22,153,16,23,194,2,248,22,156,16,23,194,1,28,248,22,152,16,23, +194,2,90,144,42,11,89,146,42,39,11,248,22,149,16,249,22,154,16,250,80, +144,49,43,42,248,22,169,16,2,56,11,11,248,22,169,16,2,57,86,95,23, +195,1,23,194,1,248,22,156,16,249,22,154,16,23,199,1,23,196,1,27,250, +80,144,44,43,42,248,22,169,16,2,56,23,197,1,10,28,23,193,2,248,22, +156,16,23,194,1,11,28,248,22,153,16,23,195,2,193,249,22,154,16,23,196, +1,27,249,80,144,44,55,40,39,80,144,44,8,43,42,28,23,193,2,192,247, +22,170,16,28,248,22,153,16,23,195,2,248,22,156,16,23,195,1,28,248,22, +152,16,23,195,2,90,144,42,11,89,146,42,39,11,248,22,149,16,249,22,154, +16,250,80,144,48,43,42,248,22,169,16,2,56,11,11,248,22,169,16,2,57, +86,95,23,195,1,23,194,1,248,22,156,16,249,22,154,16,23,200,1,23,196, +1,27,250,80,144,43,43,42,248,22,169,16,2,56,23,198,1,10,28,23,193, +2,248,22,156,16,23,194,1,11,28,248,22,90,23,196,2,9,28,248,22,83, +23,196,2,249,22,82,27,248,22,184,20,23,199,2,28,248,22,162,7,23,194, +2,27,248,22,136,16,23,195,1,28,248,22,153,16,23,194,2,192,249,22,154, +16,23,195,1,27,247,80,144,46,54,42,28,23,193,2,192,247,22,170,16,28, +248,22,151,8,23,194,2,27,248,22,137,16,23,195,1,28,248,22,153,16,23, +194,2,192,249,22,154,16,23,195,1,27,247,80,144,46,54,42,28,23,193,2, +192,247,22,170,16,28,248,22,128,16,23,194,2,28,248,22,153,16,23,194,2, +192,249,22,154,16,23,195,1,27,247,80,144,45,54,42,28,23,193,2,192,247, +22,170,16,192,27,248,22,185,20,23,199,1,28,248,22,90,23,194,2,86,95, +23,197,1,23,193,1,9,28,248,22,83,23,194,2,249,22,82,248,80,144,45, +60,42,248,22,184,20,23,197,2,27,248,22,185,20,23,197,1,28,248,22,90, +23,194,2,86,95,23,200,1,23,193,1,9,28,248,22,83,23,194,2,249,22, +82,248,80,144,48,60,42,248,22,184,20,23,197,2,249,80,144,49,8,44,42, +23,204,1,248,22,185,20,23,198,1,249,22,97,23,202,2,249,80,144,49,8, +44,42,23,204,1,248,22,185,20,23,198,1,249,22,97,23,199,2,27,248,22, +185,20,23,197,1,28,248,22,90,23,194,2,86,95,23,200,1,23,193,1,9, +28,248,22,83,23,194,2,249,22,82,248,80,144,48,60,42,248,22,184,20,23, +197,2,249,80,144,49,8,44,42,23,204,1,248,22,185,20,23,198,1,249,22, +97,23,202,2,249,80,144,49,8,44,42,23,204,1,248,22,185,20,23,198,1, +249,22,97,23,196,2,27,248,22,185,20,23,199,1,28,248,22,90,23,194,2, +9,28,248,22,83,23,194,2,249,22,82,248,80,144,45,60,42,248,22,184,20, +23,197,2,27,248,22,185,20,23,197,1,28,248,22,90,23,194,2,86,95,23, +200,1,23,193,1,9,28,248,22,83,23,194,2,249,22,82,248,80,144,48,60, +42,248,22,184,20,23,197,2,249,80,144,49,8,44,42,23,204,1,248,22,185, +20,23,198,1,249,22,97,23,202,2,249,80,144,49,8,44,42,23,204,1,248, +22,185,20,23,198,1,249,22,97,23,199,2,27,248,22,185,20,23,197,1,28, +248,22,90,23,194,2,9,28,248,22,83,23,194,2,249,22,82,248,80,144,48, +60,42,248,22,184,20,23,197,2,249,80,144,49,8,44,42,23,204,1,248,22, +185,20,23,198,1,249,22,97,23,202,2,249,80,144,49,8,44,42,23,204,1, +248,22,185,20,23,198,1,27,250,22,161,2,23,198,1,23,199,1,11,28,192, +249,80,144,42,8,44,42,198,194,196,27,248,22,169,16,2,58,28,248,22,153, +16,23,194,2,248,22,156,16,23,194,1,28,248,22,152,16,23,194,2,90,144, +42,11,89,146,42,39,11,248,22,149,16,249,22,154,16,250,80,144,49,43,42, +248,22,169,16,2,56,11,11,248,22,169,16,2,57,86,95,23,195,1,23,194, +1,248,22,156,16,249,22,154,16,23,199,1,23,196,1,27,250,80,144,44,43, +42,248,22,169,16,2,56,23,197,1,10,28,23,193,2,248,22,156,16,23,194, +1,11,27,248,80,144,41,58,42,249,80,144,43,55,40,40,80,144,43,8,45, +42,27,27,250,22,161,2,23,198,2,72,108,105,110,107,115,45,102,105,108,101, +11,27,28,23,194,2,23,194,1,86,94,23,194,1,249,22,146,16,27,250,22, +161,2,23,202,2,71,115,104,97,114,101,45,100,105,114,11,28,192,192,249,22, +146,16,64,117,112,6,5,5,115,104,97,114,101,2,60,28,248,22,162,7,23, +194,2,27,248,22,136,16,23,195,1,28,248,22,153,16,23,194,2,192,249,22, +154,16,23,195,1,27,247,80,144,47,54,42,28,23,193,2,192,247,22,170,16, +28,248,22,151,8,23,194,2,27,248,22,137,16,23,195,1,28,248,22,153,16, +23,194,2,192,249,22,154,16,23,195,1,27,247,80,144,47,54,42,28,23,193, +2,192,247,22,170,16,28,248,22,128,16,23,194,2,28,248,22,153,16,23,194, +2,192,249,22,154,16,23,195,1,27,247,80,144,46,54,42,28,23,193,2,192, +247,22,170,16,192,250,22,97,248,22,92,11,28,247,22,177,16,28,247,22,178, +16,248,22,92,250,22,146,16,248,22,169,16,2,61,250,22,161,2,23,204,2, +2,59,247,22,180,8,2,60,9,9,28,247,22,178,16,250,80,144,47,8,23, +42,23,200,1,1,18,108,105,110,107,115,45,115,101,97,114,99,104,45,102,105, +108,101,115,248,22,92,23,200,1,9,248,22,188,13,23,194,1,249,22,14,80, +144,41,8,26,41,28,248,22,144,13,23,197,2,32,0,88,148,8,36,39,44, +11,9,222,11,20,20,94,88,148,8,36,39,46,11,9,223,3,33,121,23,196, +1,32,123,88,148,39,40,59,11,2,50,222,33,124,90,144,42,11,89,146,42, +39,11,248,22,149,16,23,197,1,86,95,23,195,1,23,194,1,28,248,22,128, +16,23,194,2,28,248,22,141,16,23,194,2,249,22,154,6,23,195,1,32,0, +88,148,8,36,39,44,11,9,222,11,90,144,42,11,89,146,42,39,11,248,22, +149,16,23,197,1,86,95,23,195,1,23,194,1,28,248,22,128,16,23,194,2, +28,248,22,141,16,23,194,2,249,22,154,6,23,195,1,32,0,88,148,8,36, +39,44,11,9,222,11,90,144,42,11,89,146,42,39,11,248,22,149,16,23,197, +1,86,95,23,195,1,23,194,1,28,248,22,128,16,23,194,2,28,248,22,141, 16,23,194,2,249,22,154,6,23,195,1,32,0,88,148,8,36,39,44,11,9, -222,11,90,144,42,11,89,146,42,39,11,248,22,147,16,23,197,1,86,95,23, -195,1,23,194,1,28,248,22,190,15,23,194,2,28,248,22,139,16,23,194,2, -249,22,154,6,23,195,1,32,0,88,148,8,36,39,44,11,9,222,11,90,144, -42,11,89,146,42,39,11,248,22,147,16,23,197,1,86,95,23,195,1,23,194, -1,28,248,22,190,15,23,194,2,28,248,22,139,16,23,194,2,249,22,154,6, -23,195,1,32,0,88,148,8,36,39,44,11,9,222,11,248,2,123,23,194,1, -11,11,11,11,32,125,88,148,8,36,40,58,11,2,50,222,33,126,27,249,22, -172,6,8,128,128,23,196,2,28,248,22,157,7,23,194,2,9,249,22,82,23, -195,1,27,249,22,172,6,8,128,128,23,199,2,28,248,22,157,7,23,194,2, -9,249,22,82,23,195,1,27,249,22,172,6,8,128,128,23,202,2,28,248,22, -157,7,23,194,2,9,249,22,82,23,195,1,27,249,22,172,6,8,128,128,23, -205,2,28,248,22,157,7,23,194,2,9,249,22,82,23,195,1,248,2,125,23, -206,1,27,249,22,172,6,8,128,128,23,196,2,28,248,22,151,8,23,194,2, -28,249,22,171,20,248,22,162,21,23,196,2,8,128,128,249,22,1,22,163,8, -249,22,82,23,197,1,27,249,22,172,6,8,128,128,23,201,2,28,248,22,157, -7,23,194,2,9,249,22,82,23,195,1,27,249,22,172,6,8,128,128,23,204, +222,11,90,144,42,11,89,146,42,39,11,248,22,149,16,23,197,1,86,95,23, +195,1,23,194,1,28,248,22,128,16,23,194,2,28,248,22,141,16,23,194,2, +249,22,154,6,23,195,1,32,0,88,148,8,36,39,44,11,9,222,11,248,2, +123,23,194,1,11,11,11,11,32,125,88,148,8,36,40,58,11,2,50,222,33, +126,27,249,22,172,6,8,128,128,23,196,2,28,248,22,157,7,23,194,2,9, +249,22,82,23,195,1,27,249,22,172,6,8,128,128,23,199,2,28,248,22,157, +7,23,194,2,9,249,22,82,23,195,1,27,249,22,172,6,8,128,128,23,202, 2,28,248,22,157,7,23,194,2,9,249,22,82,23,195,1,27,249,22,172,6, -8,128,128,23,207,2,28,248,22,157,7,23,194,2,9,249,22,82,23,195,1, -27,249,22,172,6,8,128,128,23,210,2,28,248,22,157,7,23,194,2,9,249, -22,82,23,195,1,248,2,125,23,211,1,192,192,248,22,142,6,23,194,1,20, -13,144,80,144,40,8,28,40,80,144,40,8,46,42,27,28,249,22,134,9,248, -22,189,8,2,62,41,90,144,42,11,89,146,42,39,11,248,22,147,16,23,198, -2,86,95,23,195,1,23,194,1,28,248,22,190,15,23,194,2,28,248,22,139, +8,128,128,23,205,2,28,248,22,157,7,23,194,2,9,249,22,82,23,195,1, +248,2,125,23,206,1,27,249,22,172,6,8,128,128,23,196,2,28,248,22,151, +8,23,194,2,28,249,22,173,20,248,22,164,21,23,196,2,8,128,128,249,22, +1,22,163,8,249,22,82,23,197,1,27,249,22,172,6,8,128,128,23,201,2, +28,248,22,157,7,23,194,2,9,249,22,82,23,195,1,27,249,22,172,6,8, +128,128,23,204,2,28,248,22,157,7,23,194,2,9,249,22,82,23,195,1,27, +249,22,172,6,8,128,128,23,207,2,28,248,22,157,7,23,194,2,9,249,22, +82,23,195,1,27,249,22,172,6,8,128,128,23,210,2,28,248,22,157,7,23, +194,2,9,249,22,82,23,195,1,248,2,125,23,211,1,192,192,248,22,142,6, +23,194,1,20,13,144,80,144,40,8,28,40,80,144,40,8,46,42,27,28,249, +22,134,9,248,22,189,8,2,62,41,90,144,42,11,89,146,42,39,11,248,22, +149,16,23,198,2,86,95,23,195,1,23,194,1,28,248,22,128,16,23,194,2, +28,248,22,141,16,23,194,2,249,22,154,6,23,195,1,32,0,88,148,8,36, +39,44,11,9,222,11,90,144,42,11,89,146,42,39,11,248,22,149,16,23,197, +1,86,95,23,195,1,23,194,1,28,248,22,128,16,23,194,2,28,248,22,141, 16,23,194,2,249,22,154,6,23,195,1,32,0,88,148,8,36,39,44,11,9, -222,11,90,144,42,11,89,146,42,39,11,248,22,147,16,23,197,1,86,95,23, -195,1,23,194,1,28,248,22,190,15,23,194,2,28,248,22,139,16,23,194,2, +222,11,90,144,42,11,89,146,42,39,11,248,22,149,16,23,197,1,86,95,23, +195,1,23,194,1,28,248,22,128,16,23,194,2,28,248,22,141,16,23,194,2, 249,22,154,6,23,195,1,32,0,88,148,8,36,39,44,11,9,222,11,90,144, -42,11,89,146,42,39,11,248,22,147,16,23,197,1,86,95,23,195,1,23,194, -1,28,248,22,190,15,23,194,2,28,248,22,139,16,23,194,2,249,22,154,6, -23,195,1,32,0,88,148,8,36,39,44,11,9,222,11,90,144,42,11,89,146, -42,39,11,248,22,147,16,23,197,1,86,95,23,195,1,23,194,1,28,248,22, -190,15,23,194,2,28,248,22,139,16,23,194,2,249,22,154,6,23,195,1,32, -0,88,148,8,36,39,44,11,9,222,11,248,2,123,23,194,1,86,94,23,193, -1,11,86,94,23,193,1,11,86,94,23,193,1,11,86,94,23,193,1,11,11, -28,248,22,138,16,23,195,2,27,28,249,22,134,9,248,22,189,8,2,62,41, -249,22,154,6,23,197,2,32,0,88,148,8,36,39,44,11,9,222,11,11,86, -94,28,23,194,2,248,22,156,6,23,195,1,86,94,23,194,1,11,249,22,82, -27,248,22,133,6,23,199,1,250,22,44,22,35,88,148,39,39,8,24,11,9, -223,3,33,127,20,20,94,88,148,8,36,39,46,11,9,223,3,33,128,2,23, -196,1,194,249,22,82,11,194,28,28,23,195,2,28,248,22,84,23,196,2,248, -22,176,9,249,22,188,14,39,248,22,183,20,23,199,2,11,11,194,249,22,12, -20,20,94,88,148,8,32,39,61,16,4,39,8,128,80,8,240,0,64,0,0, -39,9,224,2,3,33,129,2,23,196,1,80,144,41,8,26,41,28,192,248,22, -176,9,248,22,83,194,10,28,192,248,22,176,9,248,22,83,194,10,86,95,28, -248,22,163,12,23,198,2,27,247,22,155,12,28,249,22,145,12,23,195,2,2, -63,251,22,151,12,23,197,1,2,63,250,22,146,8,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,23,201,2,248, -22,159,12,23,206,2,247,22,27,86,94,23,193,1,12,11,28,23,195,2,250, -22,159,2,80,144,45,8,25,41,23,196,1,249,22,82,23,200,1,21,17,0, -0,86,95,23,195,1,23,193,1,11,28,248,22,163,12,23,198,2,86,94,23, -197,1,248,23,195,1,247,22,141,2,196,88,148,39,40,58,8,240,0,0,0, -2,9,226,0,3,2,1,33,133,2,20,20,94,248,22,157,6,23,194,2,28, -248,22,157,7,248,22,157,6,23,195,1,11,248,22,190,11,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,142,6,23,194,1,28,248,22,91,193,28,28, -249,22,167,20,41,248,22,96,195,10,249,22,167,20,42,248,22,96,195,28,28, -248,22,162,7,248,22,83,194,10,28,249,22,179,9,2,64,248,22,83,195,10, -249,22,179,9,2,65,248,22,83,195,28,27,248,22,105,194,28,248,22,190,15, -193,10,28,248,22,162,7,193,28,248,22,149,16,193,10,248,22,150,16,193,11, -28,248,22,90,248,22,107,194,10,248,22,133,17,248,22,114,194,11,11,11,11, -28,248,22,139,16,249,22,144,16,23,197,2,23,198,2,27,248,22,70,248,22, -130,16,23,198,1,250,22,159,2,23,197,2,23,196,2,249,22,82,23,200,1, -250,22,161,2,23,202,1,23,201,1,9,12,250,22,159,2,23,196,1,23,198, -1,249,22,82,23,199,1,23,201,1,28,28,248,22,90,248,22,107,23,197,2, -10,249,22,188,16,248,22,114,23,198,2,247,22,180,8,27,248,22,154,16,249, -22,152,16,248,22,105,23,200,2,23,198,1,28,249,22,179,9,248,22,182,20, -23,199,2,2,65,86,94,23,196,1,249,22,3,20,20,94,88,148,8,36,40, -56,11,9,224,2,3,33,138,2,23,196,1,248,22,157,16,23,196,1,28,249, -22,179,9,248,22,182,20,23,199,2,2,64,86,94,23,196,1,86,94,28,250, -22,161,2,23,197,2,11,11,11,250,22,159,2,23,197,2,11,9,249,22,167, -2,23,196,2,20,20,95,88,148,8,36,41,53,11,9,224,2,3,33,139,2, -23,196,1,23,195,1,27,248,22,70,248,22,182,20,23,199,1,250,22,159,2, -23,198,2,23,196,2,249,22,82,248,22,132,2,23,200,1,250,22,161,2,23, -203,1,23,201,1,9,12,250,22,159,2,23,196,1,23,197,1,248,22,98,23, -199,1,27,28,28,23,195,2,248,22,176,9,248,22,83,23,197,2,10,9,27, -249,22,133,6,23,197,2,68,98,105,110,97,114,121,250,22,44,22,35,88,148, -8,36,39,47,11,9,223,3,33,135,2,20,20,94,88,148,8,36,39,46,11, -9,223,3,33,136,2,23,196,1,86,94,28,28,248,22,91,23,194,2,249,22, +42,11,89,146,42,39,11,248,22,149,16,23,197,1,86,95,23,195,1,23,194, +1,28,248,22,128,16,23,194,2,28,248,22,141,16,23,194,2,249,22,154,6, +23,195,1,32,0,88,148,8,36,39,44,11,9,222,11,248,2,123,23,194,1, +86,94,23,193,1,11,86,94,23,193,1,11,86,94,23,193,1,11,86,94,23, +193,1,11,11,28,248,22,140,16,23,195,2,27,28,249,22,134,9,248,22,189, +8,2,62,41,249,22,154,6,23,197,2,32,0,88,148,8,36,39,44,11,9, +222,11,11,86,94,28,23,194,2,248,22,156,6,23,195,1,86,94,23,194,1, +11,249,22,82,27,248,22,133,6,23,199,1,250,22,44,22,35,88,148,39,39, +8,24,11,9,223,3,33,127,20,20,94,88,148,8,36,39,46,11,9,223,3, +33,128,2,23,196,1,194,249,22,82,11,194,28,28,23,195,2,28,248,22,84, +23,196,2,248,22,178,9,249,22,190,14,39,248,22,185,20,23,199,2,11,11, +194,249,22,12,20,20,94,88,148,8,32,39,61,16,4,39,8,128,80,8,240, +0,64,0,0,39,9,224,2,3,33,129,2,23,196,1,80,144,41,8,26,41, +28,192,248,22,178,9,248,22,83,194,10,28,192,248,22,178,9,248,22,83,194, +10,86,95,28,248,22,165,12,23,198,2,27,247,22,157,12,28,249,22,147,12, +23,195,2,2,63,251,22,153,12,23,197,1,2,63,250,22,146,8,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, +23,201,2,248,22,161,12,23,206,2,247,22,27,86,94,23,193,1,11,11,28, +23,195,2,250,22,159,2,80,144,45,8,25,41,23,196,1,249,22,82,23,200, +1,21,17,0,0,86,95,23,195,1,23,193,1,11,28,248,22,165,12,23,198, +2,86,94,23,197,1,248,23,195,1,247,22,141,2,196,88,148,39,40,58,8, +240,0,0,0,2,9,226,0,3,2,1,33,133,2,20,20,94,248,22,157,6, +23,194,2,28,248,22,157,7,248,22,157,6,23,195,1,11,248,22,128,12,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,142,6,23,194,1,28,248,22, +91,193,28,28,249,22,169,20,41,248,22,96,195,10,249,22,169,20,42,248,22, +96,195,28,28,248,22,162,7,248,22,83,194,10,28,249,22,181,9,2,64,248, +22,83,195,10,249,22,181,9,2,65,248,22,83,195,28,27,248,22,105,194,28, +248,22,128,16,193,10,28,248,22,162,7,193,28,248,22,151,16,193,10,248,22, +152,16,193,11,28,248,22,90,248,22,107,194,10,248,22,135,17,248,22,114,194, +11,11,11,11,28,248,22,141,16,249,22,146,16,23,197,2,23,198,2,27,248, +22,70,248,22,132,16,23,198,1,250,22,159,2,23,197,2,23,196,2,249,22, +82,23,200,1,250,22,161,2,23,202,1,23,201,1,9,12,250,22,159,2,23, +196,1,23,198,1,249,22,82,23,199,1,23,201,1,28,28,248,22,90,248,22, +107,23,197,2,10,249,22,190,16,248,22,114,23,198,2,247,22,180,8,27,248, +22,156,16,249,22,154,16,248,22,105,23,200,2,23,198,1,28,249,22,181,9, +248,22,184,20,23,199,2,2,65,86,94,23,196,1,249,22,3,20,20,94,88, +148,8,36,40,56,11,9,224,2,3,33,138,2,23,196,1,248,22,159,16,23, +196,1,28,249,22,181,9,248,22,184,20,23,199,2,2,64,86,94,23,196,1, +86,94,28,250,22,161,2,23,197,2,11,11,11,250,22,159,2,23,197,2,11, +9,249,22,167,2,23,196,2,20,20,95,88,148,8,36,41,53,11,9,224,2, +3,33,139,2,23,196,1,23,195,1,27,248,22,70,248,22,184,20,23,199,1, +250,22,159,2,23,198,2,23,196,2,249,22,82,248,22,132,2,23,200,1,250, +22,161,2,23,203,1,23,201,1,9,12,250,22,159,2,23,196,1,23,197,1, +248,22,98,23,199,1,27,28,23,195,2,28,248,22,83,23,196,2,27,249,22, +133,6,23,197,2,68,98,105,110,97,114,121,250,22,44,22,35,88,148,8,36, +39,47,11,9,223,3,33,135,2,20,20,94,88,148,8,36,39,46,11,9,223, +3,33,136,2,23,196,1,9,9,86,94,28,28,248,22,91,23,194,2,249,22, 4,32,0,88,148,8,36,40,48,11,9,222,33,137,2,23,195,2,11,11,248, -22,190,11,6,18,18,105,108,108,45,102,111,114,109,101,100,32,99,111,110,116, -101,110,116,27,247,22,141,2,27,90,144,42,11,89,146,42,39,11,248,22,147, +22,128,12,6,18,18,105,108,108,45,102,111,114,109,101,100,32,99,111,110,116, +101,110,116,27,247,22,141,2,27,90,144,42,11,89,146,42,39,11,248,22,149, 16,23,200,2,192,86,96,249,22,3,20,20,94,88,148,8,36,40,57,11,9, 224,2,3,33,140,2,23,195,1,23,197,1,249,22,167,2,195,88,148,8,36, 41,51,11,9,223,3,33,141,2,250,22,159,2,80,144,47,8,25,41,23,199, 1,249,22,82,23,202,1,198,193,20,13,144,80,144,40,8,28,40,250,80,144, 43,8,47,42,23,196,2,23,198,2,11,27,250,22,161,2,80,144,44,8,25, 41,23,197,2,21,143,11,17,0,0,27,248,22,83,23,195,2,27,249,80,144, -45,8,27,42,23,198,2,23,196,2,28,249,22,181,9,23,195,2,23,196,1, -248,22,183,20,195,20,13,144,80,144,43,8,28,40,250,80,144,46,8,47,42, +45,8,27,42,23,198,2,23,196,2,28,249,22,183,9,23,195,2,23,196,1, +248,22,185,20,195,20,13,144,80,144,43,8,28,40,250,80,144,46,8,47,42, 23,199,2,23,201,1,23,196,2,27,20,20,95,88,148,8,36,39,55,8,240, 0,0,0,2,9,225,5,1,4,33,142,2,23,197,1,23,194,1,28,249,22, 48,23,195,2,39,20,13,144,80,144,44,46,40,26,35,80,144,8,40,47,40, -249,22,31,11,80,144,8,42,46,40,22,157,15,10,22,158,15,10,22,159,15, -10,22,160,15,11,22,161,15,11,22,165,15,10,22,164,15,11,22,166,15,10, -22,163,15,10,22,167,15,10,22,162,15,11,22,168,15,10,22,169,15,10,22, -170,15,10,22,171,15,11,22,172,15,10,22,155,15,11,247,23,193,1,250,22, -130,12,2,9,2,52,23,196,1,248,22,8,20,20,94,88,148,39,40,8,49, +249,22,31,11,80,144,8,42,46,40,22,159,15,10,22,160,15,10,22,161,15, +10,22,162,15,11,22,163,15,11,22,167,15,10,22,166,15,11,22,168,15,10, +22,165,15,10,22,169,15,10,22,164,15,11,22,170,15,10,22,171,15,10,22, +172,15,10,22,173,15,11,22,174,15,10,22,157,15,11,247,23,193,1,250,22, +132,12,2,9,2,52,23,196,1,248,22,8,20,20,94,88,148,39,40,8,49, 16,4,8,128,6,8,128,104,8,240,0,128,0,0,39,9,224,1,2,33,143, 2,23,195,1,0,7,35,114,120,34,47,43,34,28,248,22,162,7,23,195,2, -27,249,22,186,16,2,145,2,23,197,2,28,23,193,2,28,249,22,134,4,248, -22,104,23,196,2,248,22,188,3,248,22,159,21,23,199,2,249,22,7,250,22, +27,249,22,188,16,2,145,2,23,197,2,28,23,193,2,28,249,22,134,4,248, +22,104,23,196,2,248,22,188,3,248,22,161,21,23,199,2,249,22,7,250,22, 184,7,23,200,1,39,248,22,104,23,199,1,23,198,1,249,22,7,250,22,184, 7,23,200,2,39,248,22,104,23,199,2,249,22,82,249,22,184,7,23,201,1, 248,22,106,23,200,1,23,200,1,86,94,23,193,1,249,22,7,23,197,1,23, -198,1,90,144,42,11,89,146,42,39,11,248,22,147,16,23,198,1,86,94,23, -195,1,28,249,22,179,9,23,195,2,2,49,86,94,23,193,1,249,22,7,23, +198,1,90,144,42,11,89,146,42,39,11,248,22,149,16,23,198,1,86,94,23, +195,1,28,249,22,181,9,23,195,2,2,49,86,94,23,193,1,249,22,7,23, 196,1,23,200,1,27,249,22,82,23,197,1,23,201,1,28,248,22,162,7,23, -195,2,27,249,22,186,16,2,145,2,23,197,2,28,23,193,2,28,249,22,134, -4,248,22,104,23,196,2,248,22,188,3,248,22,159,21,23,199,2,249,22,7, +195,2,27,249,22,188,16,2,145,2,23,197,2,28,23,193,2,28,249,22,134, +4,248,22,104,23,196,2,248,22,188,3,248,22,161,21,23,199,2,249,22,7, 250,22,184,7,23,200,1,39,248,22,104,23,199,1,23,196,1,249,22,7,250, 22,184,7,23,200,2,39,248,22,104,23,199,2,249,22,82,249,22,184,7,23, 201,1,248,22,106,23,200,1,23,198,1,86,94,23,193,1,249,22,7,23,197, -1,23,196,1,90,144,42,11,89,146,42,39,11,248,22,147,16,23,198,1,86, -94,23,195,1,28,249,22,179,9,23,195,2,2,49,86,94,23,193,1,249,22, +1,23,196,1,90,144,42,11,89,146,42,39,11,248,22,149,16,23,198,1,86, +94,23,195,1,28,249,22,181,9,23,195,2,2,49,86,94,23,193,1,249,22, 7,23,196,1,23,198,1,249,80,144,48,8,31,42,194,249,22,82,197,199,28, 248,22,90,23,196,2,9,28,248,22,83,23,196,2,28,248,22,152,2,248,22, -182,20,23,197,2,250,22,97,249,22,2,22,132,2,250,22,161,2,248,22,182, -20,23,204,2,23,202,2,9,250,22,161,2,248,22,182,20,23,202,2,11,9, -27,248,22,183,20,23,200,1,28,248,22,90,23,194,2,86,95,23,198,1,23, -193,1,9,28,248,22,83,23,194,2,28,248,22,152,2,248,22,182,20,23,195, -2,250,22,97,249,22,2,22,132,2,250,22,161,2,248,22,182,20,23,202,2, -23,206,2,9,250,22,161,2,248,22,182,20,23,200,2,11,9,249,80,144,48, -8,48,42,23,203,1,248,22,183,20,23,199,1,27,248,80,144,45,8,30,42, -248,22,182,20,23,196,2,250,22,97,250,22,161,2,23,199,2,23,205,2,9, +184,20,23,197,2,250,22,97,249,22,2,22,132,2,250,22,161,2,248,22,184, +20,23,204,2,23,202,2,9,250,22,161,2,248,22,184,20,23,202,2,11,9, +27,248,22,185,20,23,200,1,28,248,22,90,23,194,2,86,95,23,198,1,23, +193,1,9,28,248,22,83,23,194,2,28,248,22,152,2,248,22,184,20,23,195, +2,250,22,97,249,22,2,22,132,2,250,22,161,2,248,22,184,20,23,202,2, +23,206,2,9,250,22,161,2,248,22,184,20,23,200,2,11,9,249,80,144,48, +8,48,42,23,203,1,248,22,185,20,23,199,1,27,248,80,144,45,8,30,42, +248,22,184,20,23,196,2,250,22,97,250,22,161,2,23,199,2,23,205,2,9, 250,22,161,2,23,199,1,11,9,249,80,144,49,8,48,42,23,204,1,248,22, -183,20,23,200,1,249,22,97,247,22,171,16,249,80,144,47,8,48,42,23,202, -1,248,22,183,20,23,198,1,27,248,80,144,41,8,30,42,248,22,182,20,23, +185,20,23,200,1,249,22,97,247,22,173,16,249,80,144,47,8,48,42,23,202, +1,248,22,185,20,23,198,1,27,248,80,144,41,8,30,42,248,22,184,20,23, 198,2,250,22,97,250,22,161,2,23,199,2,23,201,2,9,250,22,161,2,23, -199,1,11,9,27,248,22,183,20,23,201,1,28,248,22,90,23,194,2,86,95, +199,1,11,9,27,248,22,185,20,23,201,1,28,248,22,90,23,194,2,86,95, 23,199,1,23,193,1,9,28,248,22,83,23,194,2,28,248,22,152,2,248,22, -182,20,23,195,2,250,22,97,249,22,2,22,132,2,250,22,161,2,248,22,182, -20,23,202,2,23,207,2,9,250,22,161,2,248,22,182,20,23,200,2,11,9, -249,80,144,49,8,48,42,23,204,1,248,22,183,20,23,199,1,27,248,80,144, -46,8,30,42,248,22,182,20,23,196,2,250,22,97,250,22,161,2,23,199,2, +184,20,23,195,2,250,22,97,249,22,2,22,132,2,250,22,161,2,248,22,184, +20,23,202,2,23,207,2,9,250,22,161,2,248,22,184,20,23,200,2,11,9, +249,80,144,49,8,48,42,23,204,1,248,22,185,20,23,199,1,27,248,80,144, +46,8,30,42,248,22,184,20,23,196,2,250,22,97,250,22,161,2,23,199,2, 23,206,2,9,250,22,161,2,23,199,1,11,9,249,80,144,50,8,48,42,23, -205,1,248,22,183,20,23,200,1,249,22,97,247,22,171,16,249,80,144,48,8, -48,42,23,203,1,248,22,183,20,23,198,1,249,22,97,247,22,171,16,27,248, -22,183,20,23,199,1,28,248,22,90,23,194,2,9,28,248,22,83,23,194,2, -28,248,22,152,2,248,22,182,20,23,195,2,250,22,97,249,22,2,22,132,2, -250,22,161,2,248,22,182,20,23,202,2,23,205,2,9,250,22,161,2,248,22, -182,20,23,200,2,11,9,249,80,144,47,8,48,42,23,202,1,248,22,183,20, -23,199,1,27,248,80,144,44,8,30,42,248,22,182,20,23,196,2,250,22,97, +205,1,248,22,185,20,23,200,1,249,22,97,247,22,173,16,249,80,144,48,8, +48,42,23,203,1,248,22,185,20,23,198,1,249,22,97,247,22,173,16,27,248, +22,185,20,23,199,1,28,248,22,90,23,194,2,9,28,248,22,83,23,194,2, +28,248,22,152,2,248,22,184,20,23,195,2,250,22,97,249,22,2,22,132,2, +250,22,161,2,248,22,184,20,23,202,2,23,205,2,9,250,22,161,2,248,22, +184,20,23,200,2,11,9,249,80,144,47,8,48,42,23,202,1,248,22,185,20, +23,199,1,27,248,80,144,44,8,30,42,248,22,184,20,23,196,2,250,22,97, 250,22,161,2,23,199,2,23,204,2,9,250,22,161,2,23,199,1,11,9,249, -80,144,48,8,48,42,23,203,1,248,22,183,20,23,200,1,249,22,97,247,22, -171,16,249,80,144,46,8,48,42,23,201,1,248,22,183,20,23,198,1,32,148, -2,88,148,8,36,41,52,11,2,50,222,33,149,2,28,248,22,90,248,22,84, -23,196,2,248,22,92,248,23,195,1,248,22,182,20,23,197,1,250,22,93,248, -23,197,2,248,22,182,20,23,199,2,2,67,249,2,148,2,23,198,1,248,22, -183,20,23,200,1,250,22,146,8,6,7,7,10,32,126,97,32,126,97,6,1, -1,32,23,196,1,249,22,146,8,6,6,6,10,32,32,32,126,97,248,22,135, -2,23,196,1,32,152,2,88,148,39,41,51,11,68,102,105,108,116,101,114,222, -33,153,2,28,248,22,90,23,195,2,9,28,248,23,194,2,248,22,83,23,196, -2,249,22,82,248,22,182,20,23,197,2,249,2,152,2,23,197,1,248,22,183, -20,23,199,1,249,2,152,2,23,195,1,248,22,183,20,23,197,1,28,248,22, -90,23,202,2,86,95,23,201,1,23,194,1,28,23,202,2,86,98,23,200,1, -23,199,1,23,198,1,23,197,1,23,196,1,28,194,249,22,144,16,203,196,201, -27,28,248,22,90,23,199,2,2,66,249,22,1,22,185,7,249,2,148,2,23, -205,2,23,202,2,248,23,198,1,251,22,146,8,6,70,70,99,111,108,108,101, -99,116,105,111,110,32,110,111,116,32,102,111,117,110,100,10,32,32,99,111,108, -108,101,99,116,105,111,110,58,32,126,115,10,32,32,105,110,32,99,111,108,108, -101,99,116,105,111,110,32,100,105,114,101,99,116,111,114,105,101,115,58,126,97, -126,97,28,248,22,90,23,204,1,248,23,207,1,23,205,1,250,22,185,7,248, -23,210,1,23,208,1,2,67,23,201,2,249,22,1,22,185,7,249,22,2,32, -0,88,148,8,36,40,48,11,9,222,33,150,2,19,248,22,96,23,211,2,19, -248,22,96,247,22,171,16,28,249,22,135,4,249,22,190,3,23,198,4,23,197, -4,44,23,211,2,249,22,97,247,22,171,16,248,22,92,249,22,146,8,6,50, -50,46,46,46,32,91,126,97,32,97,100,100,105,116,105,111,110,97,108,32,108, -105,110,107,101,100,32,97,110,100,32,112,97,99,107,97,103,101,32,100,105,114, -101,99,116,111,114,105,101,115,93,249,22,190,3,23,201,4,23,200,4,2,2, -28,249,22,5,22,134,2,23,207,2,250,22,146,8,6,49,49,10,32,32,32, -115,117,98,45,99,111,108,108,101,99,116,105,111,110,58,32,126,115,10,32,32, -105,110,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115, -58,126,97,23,201,1,249,22,1,22,185,7,249,22,2,32,0,88,148,8,36, -40,48,11,9,222,33,151,2,249,2,152,2,22,134,2,23,214,1,86,95,23, -205,1,23,198,1,2,66,27,248,22,83,23,203,2,27,28,248,22,190,15,23, -195,2,249,22,144,16,23,196,1,23,202,2,248,22,135,2,23,195,1,28,28, -248,22,190,15,248,22,182,20,23,205,2,248,22,139,16,23,194,2,10,27,250, -22,1,22,144,16,23,197,1,23,203,2,28,28,248,22,90,23,201,2,10,248, -22,139,16,23,194,2,28,23,198,2,28,28,250,80,144,45,8,32,42,195,200, -199,10,27,28,248,22,190,15,199,248,22,130,16,199,198,19,248,22,165,7,23, -195,2,27,28,249,22,171,20,23,196,4,43,28,249,22,168,7,6,4,4,46, -114,107,116,249,22,184,7,23,199,2,249,22,190,3,23,200,4,43,249,22,185, -7,250,22,184,7,23,200,1,39,249,22,190,3,23,201,4,43,6,3,3,46, -115,115,86,94,23,195,1,11,86,94,23,195,1,11,28,23,193,2,250,80,144, -48,8,32,42,198,23,196,1,202,11,2,28,197,249,22,144,16,194,199,192,26, -9,80,144,51,8,49,42,205,206,23,15,23,16,23,17,23,18,23,19,248,22, -183,20,23,21,28,23,21,23,21,201,192,26,9,80,144,51,8,49,42,205,206, -23,15,23,16,23,17,23,18,23,19,248,22,183,20,23,21,23,21,26,9,80, -144,50,8,49,42,204,205,206,23,15,23,16,23,17,23,18,248,22,183,20,23, -20,23,20,28,248,22,190,15,193,248,22,130,16,193,192,90,144,41,11,89,146, -41,39,11,249,80,144,43,8,31,42,23,199,1,23,200,1,27,248,22,70,28, -248,22,190,15,195,248,22,130,16,195,194,27,27,247,22,172,16,28,248,22,90, -23,194,2,9,28,248,22,83,23,194,2,28,248,22,152,2,248,22,182,20,23, -195,2,250,22,97,249,22,2,22,132,2,250,22,161,2,248,22,182,20,23,202, -2,23,203,2,9,250,22,161,2,248,22,182,20,23,200,2,11,9,249,80,144, -49,8,48,42,23,200,1,248,22,183,20,23,199,1,27,248,80,144,46,8,30, -42,248,22,182,20,23,196,2,250,22,97,250,22,161,2,23,199,2,23,202,2, -9,250,22,161,2,23,199,1,11,9,249,80,144,50,8,48,42,23,201,1,248, -22,183,20,23,200,1,249,22,97,247,22,171,16,249,80,144,48,8,48,42,23, -199,1,248,22,183,20,23,198,1,27,32,0,88,148,8,36,40,46,11,71,116, -111,45,115,116,114,105,110,103,222,33,155,2,26,9,80,144,53,8,49,42,23, -19,23,18,23,15,205,204,202,201,202,11,32,157,2,88,148,8,36,42,57,11, -2,50,222,33,158,2,28,248,22,139,4,195,19,248,22,156,8,195,249,22,136, -16,251,22,163,8,250,22,162,8,203,39,23,202,4,2,51,249,22,162,8,202, -248,22,162,21,203,2,68,28,248,22,191,15,196,248,22,128,16,196,247,22,129, -16,2,27,248,22,188,3,196,28,28,248,22,139,4,193,11,249,22,179,9,8, -46,249,22,157,8,198,196,249,22,136,16,251,22,163,8,250,22,162,8,203,39, -201,2,69,249,22,162,8,202,248,22,187,3,201,2,68,28,248,22,191,15,196, -248,22,128,16,196,247,22,129,16,250,2,157,2,196,197,195,248,22,138,16,27, -250,22,144,16,23,198,1,23,202,1,23,199,1,28,249,22,179,9,23,199,2, -66,115,97,109,101,192,28,248,22,149,16,23,198,2,249,22,144,16,194,198,249, -80,144,46,42,42,23,195,1,23,199,1,249,22,5,20,20,96,88,148,39,40, -54,47,9,226,5,6,3,2,33,159,2,23,195,1,23,196,1,23,199,1,23, -197,1,27,248,22,138,16,249,22,144,16,23,198,2,23,199,2,28,23,193,2, -192,28,23,197,1,27,90,144,41,11,89,146,41,39,11,250,80,144,46,8,34, -42,23,202,2,2,68,2,34,27,248,22,132,16,23,196,1,27,250,2,157,2, -23,204,1,23,197,2,248,22,156,8,23,198,1,28,248,22,191,15,195,249,22, -144,16,196,194,192,27,247,22,173,16,249,22,5,20,20,96,88,148,39,40,51, -47,9,226,5,2,3,6,33,160,2,23,199,1,23,196,1,23,195,1,247,22, -174,16,11,86,95,28,28,248,22,191,15,23,194,2,10,28,248,22,190,15,23, -194,2,10,28,248,22,162,7,23,194,2,28,248,22,149,16,23,194,2,10,248, -22,150,16,23,194,2,11,11,252,22,130,12,23,200,2,2,42,39,23,198,2, -23,199,2,28,28,248,22,162,7,23,195,2,10,248,22,151,8,23,195,2,86, -94,23,194,1,11,252,22,130,12,23,200,2,2,70,40,23,198,2,23,199,1, -90,144,42,11,89,146,42,39,11,248,22,147,16,23,197,2,86,94,23,195,1, -86,94,28,23,193,2,86,95,23,198,1,23,196,1,11,250,22,133,12,23,201, -1,2,71,23,199,1,249,22,7,23,195,1,23,196,1,32,163,2,88,148,8, -36,45,8,23,11,2,50,222,33,164,2,28,248,22,139,4,23,199,2,86,95, -23,198,1,23,196,1,19,248,22,156,8,23,199,2,249,22,136,16,251,22,163, -8,250,22,162,8,23,207,2,39,23,202,4,2,51,249,23,204,1,23,206,2, -248,22,162,21,23,207,1,28,248,22,162,7,200,249,22,177,8,201,8,63,199, -28,248,22,191,15,197,248,22,128,16,197,247,22,129,16,2,27,248,22,188,3, -23,200,1,28,28,248,22,139,4,23,194,2,11,249,22,179,9,8,46,249,22, -157,8,23,202,2,23,197,2,249,22,136,16,251,22,163,8,250,22,162,8,23, -207,2,39,23,202,2,23,203,1,249,23,204,1,23,206,1,248,22,187,3,23, -202,1,28,248,22,162,7,200,249,22,177,8,201,8,63,199,28,248,22,191,15, -197,248,22,128,16,197,247,22,129,16,28,248,22,139,4,23,194,2,86,95,23, -197,1,23,193,1,19,248,22,156,8,23,200,2,249,22,136,16,251,22,163,8, -250,22,162,8,23,208,2,39,23,202,4,2,51,249,23,205,1,23,207,2,248, -22,162,21,23,208,1,28,248,22,162,7,201,249,22,177,8,202,8,63,200,28, -248,22,191,15,198,248,22,128,16,198,247,22,129,16,2,27,248,22,188,3,23, -195,1,28,28,248,22,139,4,23,194,2,11,249,22,179,9,8,46,249,22,157, -8,23,203,2,23,197,2,249,22,136,16,251,22,163,8,250,22,162,8,23,208, -2,39,23,202,2,23,204,1,249,23,205,1,23,207,1,248,22,187,3,23,202, -1,28,248,22,162,7,201,249,22,177,8,202,8,63,200,28,248,22,191,15,198, -248,22,128,16,198,247,22,129,16,28,248,22,139,4,23,194,2,86,95,23,198, -1,23,193,1,19,248,22,156,8,23,201,2,249,22,136,16,251,22,163,8,250, -22,162,8,23,209,2,39,23,202,4,2,51,249,23,206,1,23,208,2,248,22, -162,21,23,209,1,28,248,22,162,7,202,249,22,177,8,203,8,63,201,28,248, -22,191,15,199,248,22,128,16,199,247,22,129,16,2,27,248,22,188,3,23,195, -1,28,28,248,22,139,4,23,194,2,11,249,22,179,9,8,46,249,22,157,8, -23,204,2,23,197,2,249,22,136,16,251,22,163,8,250,22,162,8,23,209,2, -39,23,202,2,23,205,1,249,23,206,1,23,208,1,248,22,187,3,23,202,1, -28,248,22,162,7,202,249,22,177,8,203,8,63,201,28,248,22,191,15,199,248, -22,128,16,199,247,22,129,16,253,2,163,2,201,202,203,204,205,198,90,144,41, -11,89,146,41,39,11,86,95,28,28,248,22,191,15,23,199,2,10,28,248,22, -190,15,23,199,2,10,28,248,22,162,7,23,199,2,28,248,22,149,16,23,199, -2,10,248,22,150,16,23,199,2,11,11,252,22,130,12,23,200,2,2,42,39, -23,203,2,23,204,2,28,28,248,22,162,7,23,200,2,10,248,22,151,8,23, -200,2,11,252,22,130,12,23,200,2,2,70,40,23,203,2,23,204,2,90,144, -42,11,89,146,42,39,11,248,22,147,16,23,202,2,86,94,23,195,1,86,94, -28,192,86,94,23,198,1,11,250,22,133,12,23,201,1,2,71,23,204,2,249, -22,7,194,195,27,248,22,132,16,23,196,1,27,19,248,22,156,8,23,196,2, -28,249,22,167,20,23,195,4,39,86,94,23,199,1,249,22,136,16,251,22,163, -8,250,22,162,8,23,204,2,39,248,22,162,21,23,205,2,2,51,249,23,208, -1,23,203,2,248,22,162,21,23,204,1,28,248,22,162,7,23,16,249,22,177, -8,23,17,8,63,23,15,28,248,22,191,15,203,248,22,128,16,203,247,22,129, -16,27,248,22,188,3,23,195,4,28,28,248,22,139,4,23,194,2,11,249,22, -179,9,8,46,249,22,157,8,23,200,2,23,197,2,249,22,136,16,251,22,163, -8,250,22,162,8,23,205,2,39,23,202,2,23,206,1,249,23,209,1,23,204, -1,248,22,187,3,23,202,1,28,248,22,162,7,23,17,249,22,177,8,23,18, -8,63,23,16,28,248,22,191,15,204,248,22,128,16,204,247,22,129,16,28,248, -22,139,4,23,194,2,86,95,23,200,1,23,193,1,249,22,136,16,251,22,163, -8,250,22,162,8,23,205,2,39,248,22,162,21,23,206,2,2,51,249,23,209, -1,23,204,2,248,22,162,21,23,205,1,28,248,22,162,7,23,17,249,22,177, -8,23,18,8,63,23,16,28,248,22,191,15,204,248,22,128,16,204,247,22,129, -16,27,248,22,188,3,23,195,1,28,28,248,22,139,4,23,194,2,11,249,22, -179,9,8,46,249,22,157,8,23,201,2,23,197,2,249,22,136,16,251,22,163, -8,250,22,162,8,23,206,2,39,23,202,2,23,207,1,249,23,210,1,23,205, -1,248,22,187,3,23,202,1,28,248,22,162,7,23,18,249,22,177,8,23,19, -8,63,23,17,28,248,22,191,15,205,248,22,128,16,205,247,22,129,16,253,2, -163,2,23,210,1,23,209,1,23,208,1,23,207,1,23,203,1,23,199,1,2, -28,248,22,191,15,195,249,22,144,16,196,194,192,32,166,2,88,148,8,36,43, -59,11,2,50,222,33,167,2,28,248,22,139,4,196,19,248,22,156,8,196,249, -22,136,16,251,22,163,8,250,22,162,8,204,39,23,202,4,2,51,2,51,28, -248,22,162,7,200,249,22,177,8,201,8,63,199,28,248,22,191,15,197,248,22, -128,16,197,247,22,129,16,2,27,248,22,188,3,197,28,28,248,22,139,4,193, -11,249,22,179,9,8,46,249,22,157,8,199,196,249,22,136,16,251,22,163,8, -250,22,162,8,204,39,201,2,51,2,51,28,248,22,162,7,200,249,22,177,8, -201,8,63,199,28,248,22,191,15,197,248,22,128,16,197,247,22,129,16,28,248, -22,139,4,193,19,248,22,156,8,197,249,22,136,16,251,22,163,8,250,22,162, -8,205,39,23,202,4,2,51,2,51,28,248,22,162,7,201,249,22,177,8,202, -8,63,200,28,248,22,191,15,198,248,22,128,16,198,247,22,129,16,2,27,248, -22,188,3,194,28,28,248,22,139,4,193,11,249,22,179,9,8,46,249,22,157, -8,200,196,249,22,136,16,251,22,163,8,250,22,162,8,205,39,201,2,51,2, -51,28,248,22,162,7,201,249,22,177,8,202,8,63,200,28,248,22,191,15,198, -248,22,128,16,198,247,22,129,16,251,2,166,2,198,199,200,196,90,144,41,11, -89,146,41,39,11,86,95,28,28,248,22,191,15,23,196,2,10,28,248,22,190, -15,23,196,2,10,28,248,22,162,7,23,196,2,28,248,22,149,16,23,196,2, -10,248,22,150,16,23,196,2,11,11,252,22,130,12,2,37,2,42,39,23,200, -2,23,201,2,28,28,248,22,162,7,23,197,2,10,248,22,151,8,23,197,2, -11,252,22,130,12,2,37,2,70,40,23,200,2,23,201,2,90,144,42,11,89, -146,42,39,11,248,22,147,16,23,199,2,86,94,23,195,1,86,94,28,192,11, -250,22,133,12,2,37,2,71,23,201,2,249,22,7,194,195,27,248,22,132,16, -23,196,1,27,251,2,166,2,23,202,1,23,201,1,23,198,2,248,22,156,8, -23,199,1,28,248,22,191,15,195,249,22,144,16,196,194,192,32,169,2,88,148, -8,36,43,59,11,2,50,222,33,170,2,28,248,22,139,4,196,19,248,22,156, -8,196,249,22,136,16,251,22,163,8,250,22,162,8,204,39,23,202,4,2,51, -249,22,162,8,203,248,22,162,21,204,28,248,22,162,7,200,249,22,177,8,201, -8,63,199,28,248,22,191,15,197,248,22,128,16,197,247,22,129,16,2,27,248, -22,188,3,197,28,28,248,22,139,4,193,11,249,22,179,9,8,46,249,22,157, -8,199,196,249,22,136,16,251,22,163,8,250,22,162,8,204,39,201,2,69,249, -22,162,8,203,248,22,187,3,201,28,248,22,162,7,200,249,22,177,8,201,8, -63,199,28,248,22,191,15,197,248,22,128,16,197,247,22,129,16,28,248,22,139, -4,193,19,248,22,156,8,197,249,22,136,16,251,22,163,8,250,22,162,8,205, -39,23,202,4,2,51,249,22,162,8,204,248,22,162,21,205,28,248,22,162,7, -201,249,22,177,8,202,8,63,200,28,248,22,191,15,198,248,22,128,16,198,247, -22,129,16,2,27,248,22,188,3,194,28,28,248,22,139,4,193,11,249,22,179, -9,8,46,249,22,157,8,200,196,249,22,136,16,251,22,163,8,250,22,162,8, -205,39,201,2,69,249,22,162,8,204,248,22,187,3,201,28,248,22,162,7,201, -249,22,177,8,202,8,63,200,28,248,22,191,15,198,248,22,128,16,198,247,22, -129,16,251,2,169,2,198,199,200,196,90,144,41,11,89,146,41,39,11,86,95, -28,28,248,22,191,15,23,196,2,10,28,248,22,190,15,23,196,2,10,28,248, -22,162,7,23,196,2,28,248,22,149,16,23,196,2,10,248,22,150,16,23,196, -2,11,11,252,22,130,12,2,34,2,42,39,23,200,2,23,201,2,28,28,248, -22,162,7,23,197,2,10,248,22,151,8,23,197,2,11,252,22,130,12,2,34, -2,70,40,23,200,2,23,201,2,90,144,42,11,89,146,42,39,11,248,22,147, -16,23,199,2,86,94,23,195,1,86,94,28,192,11,250,22,133,12,2,34,2, -71,23,201,2,249,22,7,194,195,27,248,22,132,16,23,196,1,27,251,2,169, -2,23,202,1,23,201,1,23,198,2,248,22,156,8,23,199,1,28,248,22,191, -15,195,249,22,144,16,196,194,192,249,247,22,185,5,23,195,1,11,249,247,22, -185,5,194,11,28,248,22,90,23,195,2,9,27,27,248,22,83,23,197,2,28, -248,22,151,16,23,194,2,248,22,154,16,23,194,1,28,248,22,150,16,23,194, -2,90,144,42,11,89,146,42,39,11,248,22,147,16,249,22,152,16,250,80,144, -50,43,42,248,22,167,16,2,56,11,11,248,22,167,16,2,57,86,95,23,195, -1,23,194,1,248,22,154,16,249,22,152,16,23,199,1,23,196,1,27,250,80, -144,45,43,42,248,22,167,16,2,56,23,197,1,10,28,23,193,2,248,22,154, -16,23,194,1,86,94,23,193,1,11,28,23,193,2,249,22,82,248,22,154,16, -249,22,152,16,23,198,1,247,22,168,16,27,248,22,183,20,23,199,1,28,248, -22,90,23,194,2,86,94,23,193,1,9,27,248,80,144,45,56,42,248,22,83, -23,196,2,28,23,193,2,249,22,82,248,22,154,16,249,22,152,16,23,198,1, -247,22,168,16,248,80,144,47,8,50,42,248,22,183,20,23,198,1,86,94,23, -193,1,248,80,144,45,8,50,42,248,22,183,20,23,196,1,86,94,23,193,1, -27,248,22,183,20,23,197,1,28,248,22,90,23,194,2,9,27,248,80,144,43, -56,42,248,22,83,23,196,2,28,23,193,2,249,22,82,248,22,154,16,249,22, -152,16,23,198,1,247,22,168,16,248,80,144,45,8,50,42,248,22,183,20,23, -198,1,86,94,23,193,1,248,80,144,43,8,50,42,248,22,183,20,23,196,1, -28,248,22,90,23,195,2,9,27,27,248,22,83,23,197,2,28,248,22,151,16, -23,194,2,248,22,154,16,23,194,1,28,248,22,150,16,23,194,2,90,144,42, -11,89,146,42,39,11,248,22,147,16,249,22,152,16,250,80,144,50,43,42,248, -22,167,16,2,56,11,11,248,22,167,16,2,57,86,95,23,195,1,23,194,1, -248,22,154,16,249,22,152,16,23,199,1,23,196,1,27,250,80,144,45,43,42, -248,22,167,16,2,56,23,197,1,10,28,23,193,2,248,22,154,16,23,194,1, -86,94,23,193,1,11,28,23,193,2,249,22,82,248,22,154,16,249,22,152,16, -23,198,1,247,22,168,16,27,248,22,183,20,23,199,1,28,248,22,90,23,194, -2,86,94,23,193,1,9,27,248,80,144,45,56,42,248,22,83,23,196,2,28, -23,193,2,249,22,82,248,22,154,16,249,22,152,16,23,198,1,247,22,168,16, -248,80,144,47,8,51,42,248,22,183,20,23,198,1,86,94,23,193,1,248,80, -144,45,8,51,42,248,22,183,20,23,196,1,86,94,23,193,1,27,248,22,183, -20,23,197,1,28,248,22,90,23,194,2,9,27,248,80,144,43,56,42,248,22, -83,23,196,2,28,23,193,2,249,22,82,248,22,154,16,249,22,152,16,23,198, -1,247,22,168,16,248,80,144,45,8,51,42,248,22,183,20,23,198,1,86,94, -23,193,1,248,80,144,43,8,51,42,248,22,183,20,23,196,1,27,248,22,167, -16,2,58,28,248,22,151,16,23,194,2,248,22,154,16,23,194,1,28,248,22, -150,16,23,194,2,90,144,42,11,89,146,42,39,11,248,22,147,16,249,22,152, -16,250,80,144,49,43,42,248,22,167,16,2,56,11,11,248,22,167,16,2,57, -86,95,23,195,1,23,194,1,248,22,154,16,249,22,152,16,23,199,1,23,196, -1,27,250,80,144,44,43,42,248,22,167,16,2,56,23,197,1,10,28,23,193, -2,248,22,154,16,23,194,1,11,28,248,22,90,23,195,2,9,27,27,248,22, -83,23,197,2,28,248,22,151,16,23,194,2,248,22,154,16,23,194,1,28,248, -22,150,16,23,194,2,90,144,42,11,89,146,42,39,11,248,22,147,16,249,22, -152,16,250,80,144,50,43,42,248,22,167,16,2,56,11,11,248,22,167,16,2, -57,86,95,23,195,1,23,194,1,248,22,154,16,249,22,152,16,23,199,1,23, -196,1,27,250,80,144,45,43,42,248,22,167,16,2,56,23,197,1,10,28,23, -193,2,248,22,154,16,23,194,1,86,94,23,193,1,11,28,23,193,2,249,22, -82,248,22,154,16,249,22,152,16,23,198,1,247,22,168,16,27,248,22,183,20, -23,199,1,28,248,22,90,23,194,2,86,94,23,193,1,9,27,27,248,22,83, -23,196,2,28,248,22,151,16,23,194,2,248,22,154,16,23,194,1,28,248,22, -150,16,23,194,2,90,144,42,11,89,146,42,39,11,248,22,147,16,249,22,152, -16,250,80,144,54,43,42,248,22,167,16,2,56,11,11,248,22,167,16,2,57, -86,95,23,195,1,23,194,1,248,22,154,16,249,22,152,16,23,199,1,23,196, -1,27,250,80,144,49,43,42,248,22,167,16,2,56,23,197,1,10,28,23,193, -2,248,22,154,16,23,194,1,86,94,23,193,1,11,28,23,193,2,249,22,82, -248,22,154,16,249,22,152,16,23,198,1,247,22,168,16,27,248,22,183,20,23, -198,1,28,248,22,90,23,194,2,86,94,23,193,1,9,27,248,80,144,49,56, -42,248,22,83,23,196,2,28,23,193,2,249,22,82,248,22,154,16,249,22,152, -16,23,198,1,247,22,168,16,248,80,144,51,8,53,42,248,22,183,20,23,198, -1,86,94,23,193,1,248,80,144,49,8,53,42,248,22,183,20,23,196,1,86, -94,23,193,1,27,248,22,183,20,23,196,1,28,248,22,90,23,194,2,86,94, -23,193,1,9,27,248,80,144,47,56,42,248,22,83,23,196,2,28,23,193,2, -249,22,82,248,22,154,16,249,22,152,16,23,198,1,247,22,168,16,248,80,144, -49,8,53,42,248,22,183,20,23,198,1,86,94,23,193,1,248,80,144,47,8, -53,42,248,22,183,20,23,196,1,86,94,23,193,1,27,248,22,183,20,23,197, -1,28,248,22,90,23,194,2,9,27,27,248,22,83,23,196,2,28,248,22,151, -16,23,194,2,248,22,154,16,23,194,1,28,248,22,150,16,23,194,2,90,144, -42,11,89,146,42,39,11,248,22,147,16,249,22,152,16,250,80,144,52,43,42, -248,22,167,16,2,56,11,11,248,22,167,16,2,57,86,95,23,195,1,23,194, -1,248,22,154,16,249,22,152,16,23,199,1,23,196,1,27,250,80,144,47,43, -42,248,22,167,16,2,56,23,197,1,10,28,23,193,2,248,22,154,16,23,194, -1,86,94,23,193,1,11,28,23,193,2,249,22,82,248,22,154,16,249,22,152, -16,23,198,1,247,22,168,16,27,248,22,183,20,23,198,1,28,248,22,90,23, -194,2,86,94,23,193,1,9,27,248,80,144,47,56,42,248,22,83,23,196,2, -28,23,193,2,249,22,82,248,22,154,16,249,22,152,16,23,198,1,247,22,168, -16,248,80,144,49,8,53,42,248,22,183,20,23,198,1,86,94,23,193,1,248, -80,144,47,8,53,42,248,22,183,20,23,196,1,86,94,23,193,1,27,248,22, -183,20,23,196,1,28,248,22,90,23,194,2,9,27,248,80,144,45,56,42,248, -22,83,23,196,2,28,23,193,2,249,22,82,248,22,154,16,249,22,152,16,23, -198,1,247,22,168,16,248,80,144,47,8,53,42,248,22,183,20,23,198,1,86, -94,23,193,1,248,80,144,45,8,53,42,248,22,183,20,23,196,1,27,247,22, -175,16,27,248,80,144,42,58,42,247,80,144,42,57,42,249,80,144,43,44,41, -28,23,196,2,27,249,22,184,8,247,22,183,8,2,72,28,192,249,22,174,8, -194,7,63,2,66,2,66,250,80,144,46,8,23,42,23,198,2,2,73,27,28, -23,200,1,250,22,144,16,248,22,167,16,2,61,250,22,161,2,23,205,1,2, -59,247,22,180,8,2,74,86,94,23,199,1,11,27,248,80,144,49,8,50,42, -250,22,97,9,248,22,92,248,22,167,16,2,55,9,28,193,249,22,82,195,194, -192,27,247,22,175,16,27,248,80,144,42,58,42,247,80,144,42,57,42,249,80, -144,43,44,41,28,23,196,2,27,249,22,184,8,247,22,183,8,2,72,28,192, -249,22,174,8,194,7,63,2,66,2,66,250,80,144,46,8,23,42,23,198,2, -2,73,27,28,23,200,1,250,22,144,16,248,22,167,16,2,61,250,22,161,2, -23,205,1,2,59,247,22,180,8,2,74,86,94,23,199,1,11,27,248,80,144, -49,8,51,42,250,22,97,23,207,1,248,22,92,248,22,167,16,2,55,9,28, -193,249,22,82,195,194,192,27,247,22,175,16,27,248,80,144,42,58,42,249,80, -144,44,55,40,40,80,144,44,8,52,42,249,80,144,43,44,41,28,23,196,2, -27,249,22,184,8,247,22,183,8,2,72,28,192,249,22,174,8,194,7,63,2, -66,2,66,250,80,144,46,8,23,42,23,198,2,2,73,27,28,23,200,1,250, -22,144,16,248,22,167,16,2,61,250,22,161,2,23,205,1,2,59,247,22,180, -8,2,74,86,94,23,199,1,11,27,27,250,22,97,23,207,1,248,22,92,248, -22,167,16,2,55,23,208,1,28,248,22,90,23,194,2,86,94,23,193,1,9, -27,27,248,22,83,23,196,2,28,248,22,151,16,23,194,2,248,22,154,16,23, -194,1,28,248,22,150,16,23,194,2,90,144,42,11,89,146,42,39,11,248,22, -147,16,249,22,152,16,250,80,144,60,43,42,248,22,167,16,2,56,11,11,248, -22,167,16,2,57,86,95,23,195,1,23,194,1,248,22,154,16,249,22,152,16, -23,199,1,23,196,1,27,250,80,144,55,43,42,248,22,167,16,2,56,23,197, -1,10,28,23,193,2,248,22,154,16,23,194,1,86,94,23,193,1,11,28,23, -193,2,249,22,82,248,22,154,16,249,22,152,16,23,198,1,247,22,168,16,27, -248,22,183,20,23,198,1,28,248,22,90,23,194,2,86,94,23,193,1,9,27, -248,80,144,55,56,42,248,22,83,23,196,2,28,23,193,2,249,22,82,248,22, -154,16,249,22,152,16,23,198,1,247,22,168,16,248,80,144,57,8,53,42,248, -22,183,20,23,198,1,86,94,23,193,1,248,80,144,55,8,53,42,248,22,183, -20,23,196,1,86,94,23,193,1,27,248,22,183,20,23,196,1,28,248,22,90, -23,194,2,86,94,23,193,1,9,27,248,80,144,53,56,42,248,22,83,23,196, -2,28,23,193,2,249,22,82,248,22,154,16,249,22,152,16,23,198,1,247,22, -168,16,248,80,144,55,8,53,42,248,22,183,20,23,198,1,86,94,23,193,1, -248,80,144,53,8,53,42,248,22,183,20,23,196,1,28,193,249,22,82,195,194, -192,27,20,13,144,80,144,40,46,40,26,9,80,144,49,47,40,249,22,31,11, -80,144,51,46,40,22,164,15,10,22,171,15,10,22,172,15,10,22,173,15,10, -248,22,157,6,23,196,2,28,248,22,157,7,23,194,2,12,86,94,248,22,188, -9,23,194,1,27,20,13,144,80,144,41,46,40,26,9,80,144,50,47,40,249, -22,31,11,80,144,52,46,40,22,164,15,10,22,171,15,10,22,172,15,10,22, -173,15,10,248,22,157,6,23,197,2,28,248,22,157,7,23,194,2,12,86,94, -248,22,188,9,23,194,1,27,20,13,144,80,144,42,46,40,26,9,80,144,51, -47,40,249,22,31,11,80,144,53,46,40,22,164,15,10,22,171,15,10,22,172, -15,10,22,173,15,10,248,22,157,6,23,198,2,28,248,22,157,7,23,194,2, -12,86,94,248,22,188,9,23,194,1,248,80,144,43,8,54,42,197,86,94,249, -22,148,7,247,22,181,5,23,195,2,248,22,172,6,249,22,142,4,39,249,22, -190,3,28,23,199,2,23,199,1,86,94,23,199,1,39,23,198,1,27,248,22, -134,6,28,23,198,2,23,198,1,86,94,23,198,1,27,250,80,144,45,43,42, -248,22,167,16,2,56,11,11,27,248,22,145,4,23,199,1,27,28,23,194,2, -23,194,1,86,94,23,194,1,39,27,248,22,145,4,23,202,1,249,22,149,6, -23,198,1,20,20,95,88,148,8,36,39,51,11,9,224,2,3,33,182,2,23, -196,1,23,195,1,248,80,144,41,8,54,42,193,145,40,9,20,122,145,2,1, -39,16,1,11,16,0,20,27,15,56,9,2,2,2,2,29,11,11,11,11,11, -11,11,9,9,11,11,11,10,47,80,143,39,39,20,122,145,2,1,54,16,40, -2,3,2,4,2,5,2,6,2,7,2,8,2,9,30,2,11,1,20,112,97, -114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,11,6,30, -2,11,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,11,4,2,12,2,13,2,14,2,15,2,16,2,17,2, -18,30,2,11,1,19,99,97,99,104,101,45,99,111,110,102,105,103,117,114,97, -116,105,111,110,11,1,2,19,2,20,2,21,2,22,2,23,2,24,2,25,2, -26,2,27,2,28,2,29,30,2,11,1,21,101,120,99,101,112,116,105,111,110, -45,104,97,110,100,108,101,114,45,107,101,121,11,3,2,30,2,31,2,32,2, -33,2,34,2,35,2,36,2,37,2,38,2,39,2,40,16,0,40,42,39,16, -0,39,16,19,2,13,2,14,2,12,2,25,2,4,2,35,2,23,2,24,2, -19,2,29,2,33,2,21,2,22,2,31,2,27,2,30,2,32,2,36,2,28, -58,11,11,11,16,17,2,9,2,17,2,15,2,40,2,16,2,7,2,26,2, -39,2,18,2,20,2,38,2,5,2,34,2,8,2,37,2,3,2,6,16,17, -11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,16,17,2,9, -2,17,2,15,2,40,2,16,2,7,2,26,2,39,2,18,2,20,2,38,2, -5,2,34,2,8,2,37,2,3,2,6,56,56,40,12,11,11,16,0,16,0, -16,0,39,39,11,12,11,11,16,0,16,0,16,0,39,39,16,51,20,15,16, -2,32,0,88,148,8,36,40,47,11,2,3,222,33,75,80,144,39,39,40,20, -15,16,2,249,22,164,7,7,92,7,92,80,144,39,40,40,20,15,16,2,88, -148,8,36,40,57,41,2,5,223,0,33,80,80,144,39,41,40,20,15,16,2, -88,148,8,36,41,61,41,2,6,223,0,33,82,80,144,39,42,40,20,15,16, -2,20,26,96,2,7,88,148,8,36,42,8,24,8,32,9,223,0,33,89,88, -148,8,36,41,50,55,9,223,0,33,90,88,148,8,36,40,49,55,9,223,0, -33,91,80,144,39,43,40,20,15,16,2,27,248,22,180,16,248,22,176,8,27, -28,249,22,179,9,247,22,189,8,2,43,6,1,1,59,6,1,1,58,250,22, -146,8,6,14,14,40,91,94,126,97,93,42,41,126,97,40,46,42,41,23,196, -2,23,196,1,88,148,8,36,41,51,11,2,8,223,0,33,95,80,144,39,44, -40,20,15,16,2,88,148,39,40,8,44,8,128,6,2,9,223,0,33,96,80, -144,39,45,40,20,15,16,2,32,0,88,148,8,36,41,50,11,2,12,222,33, -97,80,144,39,48,40,20,15,16,2,32,0,88,148,8,36,42,51,11,2,13, -222,33,99,80,144,39,49,40,20,15,16,2,32,0,88,148,8,36,41,49,11, -2,14,222,33,100,80,144,39,50,40,20,15,16,2,88,148,39,42,53,8,128, -128,2,15,223,0,33,102,80,144,39,51,40,20,15,16,2,88,148,39,44,55, -8,128,128,2,17,223,0,33,104,80,144,39,53,40,20,15,16,2,88,148,39, -39,56,55,9,223,0,33,105,80,144,39,8,40,42,20,15,16,2,88,148,39, -39,47,16,4,39,40,8,128,4,39,2,18,223,0,33,106,80,144,39,54,40, -20,15,16,2,88,148,39,39,56,55,9,223,0,33,107,80,144,39,8,41,42, -20,15,16,2,88,148,39,39,47,16,4,39,40,8,128,8,39,2,20,223,0, -33,108,80,144,39,57,40,20,15,16,2,88,148,8,36,39,8,44,8,128,6, -9,223,0,33,109,80,144,39,8,42,42,20,15,16,2,88,148,8,36,40,50, -16,4,39,39,8,128,16,39,2,21,223,0,33,110,80,144,39,58,40,20,15, -16,2,20,28,143,32,0,88,148,39,40,48,11,2,22,222,33,111,32,0,88, -148,39,40,48,11,2,22,222,33,112,80,144,39,59,40,20,15,16,2,88,148, -8,36,40,50,8,240,0,128,0,0,2,23,223,0,33,113,80,144,39,60,40, -20,15,16,2,88,148,39,39,56,55,9,223,0,33,114,80,144,39,8,43,42, -20,15,16,2,88,148,8,36,40,51,16,4,39,40,8,128,32,39,2,24,223, -0,33,115,80,144,39,61,40,20,15,16,2,88,148,39,40,56,55,2,19,223, -0,33,116,80,144,39,56,40,20,15,16,2,88,148,8,36,41,58,16,4,8, -240,0,128,0,0,8,32,8,128,64,39,2,50,223,0,33,117,80,144,39,8, -44,42,20,15,16,2,88,148,8,36,42,52,16,4,39,39,8,128,64,39,2, -25,223,0,33,118,80,144,39,8,23,40,20,15,16,2,88,148,39,39,56,55, -9,223,0,33,119,80,144,39,8,45,42,20,15,16,2,88,148,8,36,39,57, -16,4,8,240,0,128,0,0,8,137,2,8,128,128,39,2,26,223,0,33,120, -80,144,39,8,24,40,20,15,16,2,247,22,143,2,80,144,39,8,25,40,20, -15,16,2,248,22,16,67,115,116,97,109,112,80,144,39,8,26,40,20,15,16, -2,88,148,39,40,49,8,240,0,0,0,4,9,223,0,33,122,80,144,39,8, -46,42,20,15,16,2,88,148,39,41,51,16,4,39,8,128,80,8,240,0,64, -0,0,39,2,29,223,0,33,130,2,80,144,39,8,27,40,20,15,16,2,20, -28,143,32,0,88,148,8,36,40,47,11,2,30,222,33,131,2,32,0,88,148, -8,36,40,47,11,2,30,222,33,132,2,80,144,39,8,29,40,20,15,16,2, -88,148,8,36,42,48,8,240,0,0,0,2,74,109,97,107,101,45,104,97,110, -100,108,101,114,223,0,33,134,2,80,144,39,8,47,42,20,15,16,2,88,148, -39,40,47,16,4,8,128,6,8,128,104,8,240,0,128,0,0,39,2,31,223, -0,33,144,2,80,144,39,8,30,40,20,15,16,2,88,148,39,41,59,16,2, -39,8,240,0,128,0,0,2,32,223,0,33,146,2,80,144,39,8,31,40,20, -15,16,2,88,148,8,36,41,61,16,4,39,8,240,0,64,0,0,39,40,2, -50,223,0,33,147,2,80,144,39,8,48,42,20,15,16,2,88,148,39,48,8, -34,16,4,39,39,40,41,67,99,108,111,111,112,223,0,33,154,2,80,144,39, -8,49,42,20,15,16,2,88,148,39,44,8,25,16,4,39,8,240,0,192,0, -0,39,42,2,16,223,0,33,156,2,80,144,39,52,40,20,15,16,2,88,148, -39,42,58,16,4,47,39,43,39,2,33,223,0,33,161,2,80,144,39,8,32, -40,20,15,16,2,32,0,88,148,39,42,53,11,2,35,222,33,162,2,80,144, -39,8,34,40,20,15,16,2,32,0,88,148,8,36,44,8,26,11,2,36,222, -33,165,2,80,144,39,8,35,40,20,15,16,2,32,0,88,148,8,36,41,55, -11,2,37,222,33,168,2,80,144,39,8,36,40,20,15,16,2,32,0,88,148, -8,36,41,55,11,2,34,222,33,171,2,80,144,39,8,33,40,20,15,16,2, -20,28,143,32,0,88,148,39,40,47,11,2,38,222,33,172,2,32,0,88,148, -39,40,47,11,2,38,222,33,173,2,80,144,39,8,37,40,20,15,16,2,88, -148,8,36,40,58,16,4,55,41,39,43,2,50,223,0,33,174,2,80,144,39, -8,50,42,20,15,16,2,88,148,8,36,40,58,16,4,55,41,39,47,2,50, -223,0,33,175,2,80,144,39,8,51,42,20,15,16,2,88,148,39,39,56,55, -9,223,0,33,176,2,80,144,39,8,52,42,20,15,16,2,88,148,8,36,40, -8,23,16,4,55,41,39,8,32,2,50,223,0,33,177,2,80,144,39,8,53, -42,20,15,16,2,20,26,96,2,39,88,148,39,39,60,16,4,8,32,8,140, -2,39,43,9,223,0,33,178,2,88,148,39,40,61,16,4,8,32,8,140,2, -39,47,9,223,0,33,179,2,88,148,39,41,8,30,16,4,8,48,8,139,2, -39,8,48,9,223,0,33,180,2,80,144,39,8,38,40,20,15,16,2,88,148, -8,36,40,60,16,4,8,128,6,39,39,8,64,2,50,223,0,33,181,2,80, -144,39,8,54,42,20,15,16,2,88,148,8,36,42,56,16,4,55,39,39,8, -64,2,40,223,0,33,183,2,80,144,39,8,39,40,95,29,94,2,10,70,35, -37,107,101,114,110,101,108,11,29,94,2,10,71,35,37,109,105,110,45,115,116, -120,11,2,11,9,9,9,39,9,0}; - EVAL_ONE_SIZED_STR((char *)expr, 19329); +80,144,48,8,48,42,23,203,1,248,22,185,20,23,200,1,249,22,97,247,22, +173,16,249,80,144,46,8,48,42,23,201,1,248,22,185,20,23,198,1,32,148, +2,88,148,8,36,40,50,11,2,50,222,33,149,2,28,248,22,90,248,22,84, +23,195,2,248,22,92,27,248,22,184,20,195,28,248,22,128,16,193,248,22,132, +16,193,192,250,22,93,27,248,22,184,20,23,198,2,28,248,22,128,16,193,248, +22,132,16,193,192,2,67,248,2,148,2,248,22,185,20,23,198,1,250,22,146, +8,6,7,7,10,32,126,97,32,126,97,6,1,1,32,23,196,1,249,22,146, +8,6,6,6,10,32,32,32,126,97,248,22,135,2,23,196,1,32,152,2,88, +148,39,41,51,11,68,102,105,108,116,101,114,222,33,153,2,28,248,22,90,23, +195,2,9,28,248,23,194,2,248,22,83,23,196,2,249,22,82,248,22,184,20, +23,197,2,249,2,152,2,23,197,1,248,22,185,20,23,199,1,249,2,152,2, +23,195,1,248,22,185,20,23,197,1,28,248,22,90,23,201,2,86,95,23,200, +1,23,194,1,28,23,201,2,86,97,23,199,1,23,198,1,23,197,1,23,196, +1,28,194,249,22,146,16,202,196,200,27,28,248,22,90,23,199,2,2,66,249, +22,1,22,185,7,248,2,148,2,23,201,2,248,23,198,1,251,22,146,8,6, +70,70,99,111,108,108,101,99,116,105,111,110,32,110,111,116,32,102,111,117,110, +100,10,32,32,99,111,108,108,101,99,116,105,111,110,58,32,126,115,10,32,32, +105,110,32,99,111,108,108,101,99,116,105,111,110,32,100,105,114,101,99,116,111, +114,105,101,115,58,126,97,126,97,28,248,22,90,23,204,1,28,248,22,128,16, +23,205,2,248,22,132,16,23,205,1,23,204,1,250,22,185,7,28,248,22,128, +16,23,208,2,248,22,132,16,23,208,1,23,207,1,2,67,23,201,2,249,22, +1,22,185,7,249,22,2,32,0,88,148,8,36,40,48,11,9,222,33,150,2, +19,248,22,96,23,211,2,19,248,22,96,247,22,173,16,28,249,22,135,4,249, +22,190,3,23,198,4,23,197,4,44,23,211,2,249,22,97,247,22,173,16,248, +22,92,249,22,146,8,6,50,50,46,46,46,32,91,126,97,32,97,100,100,105, +116,105,111,110,97,108,32,108,105,110,107,101,100,32,97,110,100,32,112,97,99, +107,97,103,101,32,100,105,114,101,99,116,111,114,105,101,115,93,249,22,190,3, +23,201,4,23,200,4,2,2,28,249,22,5,22,134,2,23,207,2,250,22,146, +8,6,49,49,10,32,32,32,115,117,98,45,99,111,108,108,101,99,116,105,111, +110,58,32,126,115,10,32,32,105,110,32,112,97,114,101,110,116,32,100,105,114, +101,99,116,111,114,105,101,115,58,126,97,23,201,1,249,22,1,22,185,7,249, +22,2,32,0,88,148,8,36,40,48,11,9,222,33,151,2,249,2,152,2,22, +134,2,23,214,1,86,95,23,205,1,23,198,1,2,66,27,248,22,83,23,202, +2,27,28,248,22,128,16,23,195,2,249,22,146,16,23,196,1,23,202,2,248, +22,135,2,23,195,1,28,28,248,22,128,16,248,22,184,20,23,204,2,248,22, +141,16,23,194,2,10,27,250,22,1,22,146,16,23,197,1,23,203,2,28,28, +248,22,90,23,201,2,10,248,22,141,16,23,194,2,28,23,198,2,28,28,250, +80,144,45,8,32,42,195,200,199,10,27,28,248,22,128,16,199,248,22,132,16, +199,198,19,248,22,165,7,23,195,2,27,28,249,22,173,20,23,196,4,43,28, +249,22,168,7,6,4,4,46,114,107,116,249,22,184,7,23,199,2,249,22,190, +3,23,200,4,43,249,22,185,7,250,22,184,7,23,200,1,39,249,22,190,3, +23,201,4,43,6,3,3,46,115,115,86,94,23,195,1,11,86,94,23,195,1, +11,28,23,193,2,250,80,144,48,8,32,42,198,23,196,1,202,11,2,28,197, +249,22,146,16,194,199,192,26,8,80,144,50,8,49,42,204,205,206,23,15,23, +16,23,17,248,22,185,20,23,19,28,23,19,23,19,200,192,26,8,80,144,50, +8,49,42,204,205,206,23,15,23,16,23,17,248,22,185,20,23,19,23,19,26, +8,80,144,49,8,49,42,203,204,205,206,23,15,23,16,248,22,185,20,23,18, +23,18,90,144,41,11,89,146,41,39,11,249,80,144,43,8,31,42,23,199,1, +23,200,1,27,248,22,70,28,248,22,128,16,195,248,22,132,16,195,194,27,27, +247,22,174,16,28,248,22,90,23,194,2,9,28,248,22,83,23,194,2,28,248, +22,152,2,248,22,184,20,23,195,2,250,22,97,249,22,2,22,132,2,250,22, +161,2,248,22,184,20,23,202,2,23,203,2,9,250,22,161,2,248,22,184,20, +23,200,2,11,9,249,80,144,49,8,48,42,23,200,1,248,22,185,20,23,199, +1,27,248,80,144,46,8,30,42,248,22,184,20,23,196,2,250,22,97,250,22, +161,2,23,199,2,23,202,2,9,250,22,161,2,23,199,1,11,9,249,80,144, +50,8,48,42,23,201,1,248,22,185,20,23,200,1,249,22,97,247,22,173,16, +249,80,144,48,8,48,42,23,199,1,248,22,185,20,23,198,1,26,8,80,144, +51,8,49,42,23,17,23,16,205,203,202,200,200,11,32,156,2,88,148,8,36, +42,57,11,2,50,222,33,157,2,28,248,22,139,4,195,249,22,138,16,251,22, +163,8,250,22,162,8,202,39,248,22,156,8,203,2,51,249,22,162,8,201,248, +22,164,21,202,2,68,28,248,22,129,16,195,248,22,130,16,195,247,22,131,16, +27,248,22,188,3,196,28,28,248,22,139,4,193,11,249,22,181,9,8,46,249, +22,157,8,198,196,249,22,138,16,251,22,163,8,250,22,162,8,203,39,201,2, +69,249,22,162,8,202,248,22,187,3,201,2,68,28,248,22,129,16,196,248,22, +130,16,196,247,22,131,16,250,2,156,2,196,197,195,248,22,140,16,27,250,22, +146,16,23,198,1,23,202,1,23,199,1,28,249,22,181,9,23,199,2,66,115, +97,109,101,192,28,248,22,151,16,23,198,2,249,22,146,16,194,198,249,80,144, +46,42,42,23,195,1,23,199,1,249,22,5,20,20,96,88,148,39,40,54,47, +9,226,5,6,3,2,33,158,2,23,195,1,23,196,1,23,199,1,23,197,1, +27,248,22,140,16,249,22,146,16,23,198,2,23,199,2,28,23,193,2,192,28, +23,197,1,27,90,144,41,11,89,146,41,39,11,250,80,144,46,8,34,42,23, +202,2,2,68,2,34,27,248,22,134,16,23,196,1,27,250,2,156,2,23,204, +1,23,197,2,248,22,156,8,23,198,1,28,248,22,129,16,195,249,22,146,16, +196,194,192,27,247,22,175,16,249,22,5,20,20,96,88,148,39,40,51,47,9, +226,5,2,3,6,33,159,2,23,199,1,23,196,1,23,195,1,247,22,176,16, +11,86,95,28,248,22,129,16,23,194,2,11,28,248,22,128,16,23,194,2,11, +28,28,248,22,162,7,23,194,2,28,248,22,151,16,23,194,2,10,248,22,152, +16,23,194,2,11,11,252,22,132,12,23,200,2,2,42,39,23,198,2,23,199, +2,28,248,22,162,7,23,195,2,86,94,23,194,1,11,28,248,22,151,8,23, +195,2,86,94,23,194,1,11,252,22,132,12,23,200,2,2,70,40,23,198,2, +23,199,1,90,144,42,11,89,146,42,39,11,248,22,149,16,23,197,2,86,94, +23,195,1,86,94,28,23,193,2,86,95,23,198,1,23,196,1,11,250,22,135, +12,23,201,1,2,71,23,199,1,249,22,7,23,195,1,23,196,1,32,162,2, +88,148,8,36,45,8,23,11,2,50,222,33,163,2,28,248,22,139,4,23,199, +2,86,95,23,198,1,23,196,1,19,248,22,156,8,23,199,2,249,22,138,16, +251,22,163,8,250,22,162,8,23,207,2,39,23,202,4,2,51,249,23,204,1, +23,206,2,248,22,164,21,23,207,1,28,248,22,162,7,200,249,22,177,8,201, +8,63,199,28,248,22,129,16,197,248,22,130,16,197,247,22,131,16,2,27,248, +22,188,3,23,200,1,28,28,248,22,139,4,23,194,2,11,249,22,181,9,8, +46,249,22,157,8,23,202,2,23,197,2,249,22,138,16,251,22,163,8,250,22, +162,8,23,207,2,39,23,202,2,23,203,1,249,23,204,1,23,206,1,248,22, +187,3,23,202,1,28,248,22,162,7,200,249,22,177,8,201,8,63,199,28,248, +22,129,16,197,248,22,130,16,197,247,22,131,16,28,248,22,139,4,23,194,2, +86,95,23,197,1,23,193,1,19,248,22,156,8,23,200,2,249,22,138,16,251, +22,163,8,250,22,162,8,23,208,2,39,23,202,4,2,51,249,23,205,1,23, +207,2,248,22,164,21,23,208,1,28,248,22,162,7,201,249,22,177,8,202,8, +63,200,28,248,22,129,16,198,248,22,130,16,198,247,22,131,16,2,27,248,22, +188,3,23,195,1,28,28,248,22,139,4,23,194,2,11,249,22,181,9,8,46, +249,22,157,8,23,203,2,23,197,2,249,22,138,16,251,22,163,8,250,22,162, +8,23,208,2,39,23,202,2,23,204,1,249,23,205,1,23,207,1,248,22,187, +3,23,202,1,28,248,22,162,7,201,249,22,177,8,202,8,63,200,28,248,22, +129,16,198,248,22,130,16,198,247,22,131,16,28,248,22,139,4,23,194,2,86, +95,23,198,1,23,193,1,19,248,22,156,8,23,201,2,249,22,138,16,251,22, +163,8,250,22,162,8,23,209,2,39,23,202,4,2,51,249,23,206,1,23,208, +2,248,22,164,21,23,209,1,28,248,22,162,7,202,249,22,177,8,203,8,63, +201,28,248,22,129,16,199,248,22,130,16,199,247,22,131,16,2,27,248,22,188, +3,23,195,1,28,28,248,22,139,4,23,194,2,11,249,22,181,9,8,46,249, +22,157,8,23,204,2,23,197,2,249,22,138,16,251,22,163,8,250,22,162,8, +23,209,2,39,23,202,2,23,205,1,249,23,206,1,23,208,1,248,22,187,3, +23,202,1,28,248,22,162,7,202,249,22,177,8,203,8,63,201,28,248,22,129, +16,199,248,22,130,16,199,247,22,131,16,253,2,162,2,201,202,203,204,205,198, +90,144,41,11,89,146,41,39,11,86,95,28,248,22,129,16,23,199,2,11,28, +248,22,128,16,23,199,2,11,28,28,248,22,162,7,23,199,2,28,248,22,151, +16,23,199,2,10,248,22,152,16,23,199,2,11,11,252,22,132,12,23,200,2, +2,42,39,23,203,2,23,204,2,28,248,22,162,7,23,200,2,11,28,248,22, +151,8,23,200,2,11,252,22,132,12,23,200,2,2,70,40,23,203,2,23,204, +2,90,144,42,11,89,146,42,39,11,248,22,149,16,23,202,2,86,94,23,195, +1,86,94,28,192,86,94,23,198,1,11,250,22,135,12,23,201,1,2,71,23, +204,2,249,22,7,194,195,27,248,22,134,16,23,196,1,27,19,248,22,156,8, +23,196,2,28,249,22,169,20,23,195,4,39,86,94,23,199,1,249,22,138,16, +251,22,163,8,250,22,162,8,23,204,2,39,248,22,164,21,23,205,2,2,51, +249,23,208,1,23,203,2,248,22,164,21,23,204,1,28,248,22,162,7,23,16, +249,22,177,8,23,17,8,63,23,15,28,248,22,129,16,203,248,22,130,16,203, +247,22,131,16,27,248,22,188,3,23,195,4,28,28,248,22,139,4,23,194,2, +11,249,22,181,9,8,46,249,22,157,8,23,200,2,23,197,2,249,22,138,16, +251,22,163,8,250,22,162,8,23,205,2,39,23,202,2,23,206,1,249,23,209, +1,23,204,1,248,22,187,3,23,202,1,28,248,22,162,7,23,17,249,22,177, +8,23,18,8,63,23,16,28,248,22,129,16,204,248,22,130,16,204,247,22,131, +16,28,248,22,139,4,23,194,2,86,95,23,200,1,23,193,1,249,22,138,16, +251,22,163,8,250,22,162,8,23,205,2,39,248,22,164,21,23,206,2,2,51, +249,23,209,1,23,204,2,248,22,164,21,23,205,1,28,248,22,162,7,23,17, +249,22,177,8,23,18,8,63,23,16,28,248,22,129,16,204,248,22,130,16,204, +247,22,131,16,27,248,22,188,3,23,195,1,28,28,248,22,139,4,23,194,2, +11,249,22,181,9,8,46,249,22,157,8,23,201,2,23,197,2,249,22,138,16, +251,22,163,8,250,22,162,8,23,206,2,39,23,202,2,23,207,1,249,23,210, +1,23,205,1,248,22,187,3,23,202,1,28,248,22,162,7,23,18,249,22,177, +8,23,19,8,63,23,17,28,248,22,129,16,205,248,22,130,16,205,247,22,131, +16,253,2,162,2,23,210,1,23,209,1,23,208,1,23,207,1,23,203,1,23, +199,1,2,28,248,22,129,16,195,249,22,146,16,196,194,192,32,165,2,88,148, +8,36,43,58,11,2,50,222,33,166,2,28,248,22,139,4,196,249,22,138,16, +251,22,163,8,250,22,162,8,203,39,248,22,156,8,204,2,51,2,51,28,248, +22,162,7,199,249,22,177,8,200,8,63,198,28,248,22,129,16,196,248,22,130, +16,196,247,22,131,16,27,248,22,188,3,197,28,28,248,22,139,4,193,11,249, +22,181,9,8,46,249,22,157,8,199,196,249,22,138,16,251,22,163,8,250,22, +162,8,204,39,201,2,51,2,51,28,248,22,162,7,200,249,22,177,8,201,8, +63,199,28,248,22,129,16,197,248,22,130,16,197,247,22,131,16,251,2,165,2, +197,198,199,196,90,144,41,11,89,146,41,39,11,86,95,28,248,22,129,16,23, +196,2,11,28,248,22,128,16,23,196,2,11,28,28,248,22,162,7,23,196,2, +28,248,22,151,16,23,196,2,10,248,22,152,16,23,196,2,11,11,252,22,132, +12,2,37,2,42,39,23,200,2,23,201,2,28,248,22,162,7,23,197,2,11, +28,248,22,151,8,23,197,2,11,252,22,132,12,2,37,2,70,40,23,200,2, +23,201,2,90,144,42,11,89,146,42,39,11,248,22,149,16,23,199,2,86,94, +23,195,1,86,94,28,192,11,250,22,135,12,2,37,2,71,23,201,2,249,22, +7,194,195,27,248,22,134,16,23,196,1,27,251,2,165,2,23,202,1,23,201, +1,23,198,2,248,22,156,8,23,199,1,28,248,22,129,16,195,249,22,146,16, +196,194,192,32,168,2,88,148,8,36,43,58,11,2,50,222,33,169,2,28,248, +22,139,4,196,249,22,138,16,251,22,163,8,250,22,162,8,203,39,248,22,156, +8,204,2,51,249,22,162,8,202,248,22,164,21,203,28,248,22,162,7,199,249, +22,177,8,200,8,63,198,28,248,22,129,16,196,248,22,130,16,196,247,22,131, +16,27,248,22,188,3,197,28,28,248,22,139,4,193,11,249,22,181,9,8,46, +249,22,157,8,199,196,249,22,138,16,251,22,163,8,250,22,162,8,204,39,201, +2,69,249,22,162,8,203,248,22,187,3,201,28,248,22,162,7,200,249,22,177, +8,201,8,63,199,28,248,22,129,16,197,248,22,130,16,197,247,22,131,16,251, +2,168,2,197,198,199,196,90,144,41,11,89,146,41,39,11,86,95,28,248,22, +129,16,23,196,2,11,28,248,22,128,16,23,196,2,11,28,28,248,22,162,7, +23,196,2,28,248,22,151,16,23,196,2,10,248,22,152,16,23,196,2,11,11, +252,22,132,12,2,34,2,42,39,23,200,2,23,201,2,28,248,22,162,7,23, +197,2,11,28,248,22,151,8,23,197,2,11,252,22,132,12,2,34,2,70,40, +23,200,2,23,201,2,90,144,42,11,89,146,42,39,11,248,22,149,16,23,199, +2,86,94,23,195,1,86,94,28,192,11,250,22,135,12,2,34,2,71,23,201, +2,249,22,7,194,195,27,248,22,134,16,23,196,1,27,251,2,168,2,23,202, +1,23,201,1,23,198,2,248,22,156,8,23,199,1,28,248,22,129,16,195,249, +22,146,16,196,194,192,249,247,22,185,5,23,195,1,11,249,247,22,185,5,194, +11,28,248,22,90,23,195,2,9,27,27,248,22,83,23,197,2,28,248,22,153, +16,23,194,2,248,22,156,16,23,194,1,28,248,22,152,16,23,194,2,90,144, +42,11,89,146,42,39,11,248,22,149,16,249,22,154,16,250,80,144,50,43,42, +248,22,169,16,2,56,11,11,248,22,169,16,2,57,86,95,23,195,1,23,194, +1,248,22,156,16,249,22,154,16,23,199,1,23,196,1,27,250,80,144,45,43, +42,248,22,169,16,2,56,23,197,1,10,28,23,193,2,248,22,156,16,23,194, +1,86,94,23,193,1,11,28,23,193,2,249,22,82,248,22,156,16,249,22,154, +16,23,198,1,247,22,170,16,27,248,22,185,20,23,199,1,28,248,22,90,23, +194,2,86,94,23,193,1,9,27,248,80,144,45,56,42,248,22,83,23,196,2, +28,23,193,2,249,22,82,248,22,156,16,249,22,154,16,23,198,1,247,22,170, +16,248,80,144,47,8,50,42,248,22,185,20,23,198,1,86,94,23,193,1,248, +80,144,45,8,50,42,248,22,185,20,23,196,1,86,94,23,193,1,27,248,22, +185,20,23,197,1,28,248,22,90,23,194,2,9,27,248,80,144,43,56,42,248, +22,83,23,196,2,28,23,193,2,249,22,82,248,22,156,16,249,22,154,16,23, +198,1,247,22,170,16,248,80,144,45,8,50,42,248,22,185,20,23,198,1,86, +94,23,193,1,248,80,144,43,8,50,42,248,22,185,20,23,196,1,28,248,22, +90,23,195,2,9,27,27,248,22,83,23,197,2,28,248,22,153,16,23,194,2, +248,22,156,16,23,194,1,28,248,22,152,16,23,194,2,90,144,42,11,89,146, +42,39,11,248,22,149,16,249,22,154,16,250,80,144,50,43,42,248,22,169,16, +2,56,11,11,248,22,169,16,2,57,86,95,23,195,1,23,194,1,248,22,156, +16,249,22,154,16,23,199,1,23,196,1,27,250,80,144,45,43,42,248,22,169, +16,2,56,23,197,1,10,28,23,193,2,248,22,156,16,23,194,1,86,94,23, +193,1,11,28,23,193,2,249,22,82,248,22,156,16,249,22,154,16,23,198,1, +247,22,170,16,27,248,22,185,20,23,199,1,28,248,22,90,23,194,2,86,94, +23,193,1,9,27,248,80,144,45,56,42,248,22,83,23,196,2,28,23,193,2, +249,22,82,248,22,156,16,249,22,154,16,23,198,1,247,22,170,16,248,80,144, +47,8,51,42,248,22,185,20,23,198,1,86,94,23,193,1,248,80,144,45,8, +51,42,248,22,185,20,23,196,1,86,94,23,193,1,27,248,22,185,20,23,197, +1,28,248,22,90,23,194,2,9,27,248,80,144,43,56,42,248,22,83,23,196, +2,28,23,193,2,249,22,82,248,22,156,16,249,22,154,16,23,198,1,247,22, +170,16,248,80,144,45,8,51,42,248,22,185,20,23,198,1,86,94,23,193,1, +248,80,144,43,8,51,42,248,22,185,20,23,196,1,27,248,22,169,16,2,58, +28,248,22,153,16,23,194,2,248,22,156,16,23,194,1,28,248,22,152,16,23, +194,2,90,144,42,11,89,146,42,39,11,248,22,149,16,249,22,154,16,250,80, +144,49,43,42,248,22,169,16,2,56,11,11,248,22,169,16,2,57,86,95,23, +195,1,23,194,1,248,22,156,16,249,22,154,16,23,199,1,23,196,1,27,250, +80,144,44,43,42,248,22,169,16,2,56,23,197,1,10,28,23,193,2,248,22, +156,16,23,194,1,11,28,248,22,90,23,195,2,9,27,27,248,22,83,23,197, +2,28,248,22,153,16,23,194,2,248,22,156,16,23,194,1,28,248,22,152,16, +23,194,2,90,144,42,11,89,146,42,39,11,248,22,149,16,249,22,154,16,250, +80,144,50,43,42,248,22,169,16,2,56,11,11,248,22,169,16,2,57,86,95, +23,195,1,23,194,1,248,22,156,16,249,22,154,16,23,199,1,23,196,1,27, +250,80,144,45,43,42,248,22,169,16,2,56,23,197,1,10,28,23,193,2,248, +22,156,16,23,194,1,86,94,23,193,1,11,28,23,193,2,249,22,82,248,22, +156,16,249,22,154,16,23,198,1,247,22,170,16,27,248,22,185,20,23,199,1, +28,248,22,90,23,194,2,86,94,23,193,1,9,27,27,248,22,83,23,196,2, +28,248,22,153,16,23,194,2,248,22,156,16,23,194,1,28,248,22,152,16,23, +194,2,90,144,42,11,89,146,42,39,11,248,22,149,16,249,22,154,16,250,80, +144,54,43,42,248,22,169,16,2,56,11,11,248,22,169,16,2,57,86,95,23, +195,1,23,194,1,248,22,156,16,249,22,154,16,23,199,1,23,196,1,27,250, +80,144,49,43,42,248,22,169,16,2,56,23,197,1,10,28,23,193,2,248,22, +156,16,23,194,1,86,94,23,193,1,11,28,23,193,2,249,22,82,248,22,156, +16,249,22,154,16,23,198,1,247,22,170,16,27,248,22,185,20,23,198,1,28, +248,22,90,23,194,2,86,94,23,193,1,9,27,248,80,144,49,56,42,248,22, +83,23,196,2,28,23,193,2,249,22,82,248,22,156,16,249,22,154,16,23,198, +1,247,22,170,16,248,80,144,51,8,53,42,248,22,185,20,23,198,1,86,94, +23,193,1,248,80,144,49,8,53,42,248,22,185,20,23,196,1,86,94,23,193, +1,27,248,22,185,20,23,196,1,28,248,22,90,23,194,2,86,94,23,193,1, +9,27,248,80,144,47,56,42,248,22,83,23,196,2,28,23,193,2,249,22,82, +248,22,156,16,249,22,154,16,23,198,1,247,22,170,16,248,80,144,49,8,53, +42,248,22,185,20,23,198,1,86,94,23,193,1,248,80,144,47,8,53,42,248, +22,185,20,23,196,1,86,94,23,193,1,27,248,22,185,20,23,197,1,28,248, +22,90,23,194,2,9,27,27,248,22,83,23,196,2,28,248,22,153,16,23,194, +2,248,22,156,16,23,194,1,28,248,22,152,16,23,194,2,90,144,42,11,89, +146,42,39,11,248,22,149,16,249,22,154,16,250,80,144,52,43,42,248,22,169, +16,2,56,11,11,248,22,169,16,2,57,86,95,23,195,1,23,194,1,248,22, +156,16,249,22,154,16,23,199,1,23,196,1,27,250,80,144,47,43,42,248,22, +169,16,2,56,23,197,1,10,28,23,193,2,248,22,156,16,23,194,1,86,94, +23,193,1,11,28,23,193,2,249,22,82,248,22,156,16,249,22,154,16,23,198, +1,247,22,170,16,27,248,22,185,20,23,198,1,28,248,22,90,23,194,2,86, +94,23,193,1,9,27,248,80,144,47,56,42,248,22,83,23,196,2,28,23,193, +2,249,22,82,248,22,156,16,249,22,154,16,23,198,1,247,22,170,16,248,80, +144,49,8,53,42,248,22,185,20,23,198,1,86,94,23,193,1,248,80,144,47, +8,53,42,248,22,185,20,23,196,1,86,94,23,193,1,27,248,22,185,20,23, +196,1,28,248,22,90,23,194,2,9,27,248,80,144,45,56,42,248,22,83,23, +196,2,28,23,193,2,249,22,82,248,22,156,16,249,22,154,16,23,198,1,247, +22,170,16,248,80,144,47,8,53,42,248,22,185,20,23,198,1,86,94,23,193, +1,248,80,144,45,8,53,42,248,22,185,20,23,196,1,27,247,22,177,16,27, +248,80,144,42,58,42,247,80,144,42,57,42,249,80,144,43,44,41,28,23,196, +2,27,249,22,184,8,247,22,183,8,2,72,28,192,249,22,174,8,194,7,63, +2,66,2,66,250,80,144,46,8,23,42,23,198,2,2,73,27,28,23,200,1, +250,22,146,16,248,22,169,16,2,61,250,22,161,2,23,205,1,2,59,247,22, +180,8,2,74,86,94,23,199,1,11,27,248,80,144,49,8,50,42,250,22,97, +9,248,22,92,248,22,169,16,2,55,9,28,193,249,22,82,195,194,192,27,247, +22,177,16,27,248,80,144,42,58,42,247,80,144,42,57,42,249,80,144,43,44, +41,28,23,196,2,27,249,22,184,8,247,22,183,8,2,72,28,192,249,22,174, +8,194,7,63,2,66,2,66,250,80,144,46,8,23,42,23,198,2,2,73,27, +28,23,200,1,250,22,146,16,248,22,169,16,2,61,250,22,161,2,23,205,1, +2,59,247,22,180,8,2,74,86,94,23,199,1,11,27,248,80,144,49,8,51, +42,250,22,97,23,207,1,248,22,92,248,22,169,16,2,55,9,28,193,249,22, +82,195,194,192,27,247,22,177,16,27,248,80,144,42,58,42,249,80,144,44,55, +40,40,80,144,44,8,52,42,249,80,144,43,44,41,28,23,196,2,27,249,22, +184,8,247,22,183,8,2,72,28,192,249,22,174,8,194,7,63,2,66,2,66, +250,80,144,46,8,23,42,23,198,2,2,73,27,28,23,200,1,250,22,146,16, +248,22,169,16,2,61,250,22,161,2,23,205,1,2,59,247,22,180,8,2,74, +86,94,23,199,1,11,27,27,250,22,97,23,207,1,248,22,92,248,22,169,16, +2,55,23,208,1,28,248,22,90,23,194,2,86,94,23,193,1,9,27,27,248, +22,83,23,196,2,28,248,22,153,16,23,194,2,248,22,156,16,23,194,1,28, +248,22,152,16,23,194,2,90,144,42,11,89,146,42,39,11,248,22,149,16,249, +22,154,16,250,80,144,60,43,42,248,22,169,16,2,56,11,11,248,22,169,16, +2,57,86,95,23,195,1,23,194,1,248,22,156,16,249,22,154,16,23,199,1, +23,196,1,27,250,80,144,55,43,42,248,22,169,16,2,56,23,197,1,10,28, +23,193,2,248,22,156,16,23,194,1,86,94,23,193,1,11,28,23,193,2,249, +22,82,248,22,156,16,249,22,154,16,23,198,1,247,22,170,16,27,248,22,185, +20,23,198,1,28,248,22,90,23,194,2,86,94,23,193,1,9,27,248,80,144, +55,56,42,248,22,83,23,196,2,28,23,193,2,249,22,82,248,22,156,16,249, +22,154,16,23,198,1,247,22,170,16,248,80,144,57,8,53,42,248,22,185,20, +23,198,1,86,94,23,193,1,248,80,144,55,8,53,42,248,22,185,20,23,196, +1,86,94,23,193,1,27,248,22,185,20,23,196,1,28,248,22,90,23,194,2, +86,94,23,193,1,9,27,248,80,144,53,56,42,248,22,83,23,196,2,28,23, +193,2,249,22,82,248,22,156,16,249,22,154,16,23,198,1,247,22,170,16,248, +80,144,55,8,53,42,248,22,185,20,23,198,1,86,94,23,193,1,248,80,144, +53,8,53,42,248,22,185,20,23,196,1,28,193,249,22,82,195,194,192,27,20, +13,144,80,144,40,46,40,26,9,80,144,49,47,40,249,22,31,11,80,144,51, +46,40,22,166,15,10,22,173,15,10,22,174,15,10,22,175,15,10,248,22,157, +6,23,196,2,28,248,22,157,7,23,194,2,12,86,94,248,22,190,9,23,194, +1,27,20,13,144,80,144,41,46,40,26,9,80,144,50,47,40,249,22,31,11, +80,144,52,46,40,22,166,15,10,22,173,15,10,22,174,15,10,22,175,15,10, +248,22,157,6,23,197,2,28,248,22,157,7,23,194,2,12,86,94,248,22,190, +9,23,194,1,27,20,13,144,80,144,42,46,40,26,9,80,144,51,47,40,249, +22,31,11,80,144,53,46,40,22,166,15,10,22,173,15,10,22,174,15,10,22, +175,15,10,248,22,157,6,23,198,2,28,248,22,157,7,23,194,2,12,86,94, +248,22,190,9,23,194,1,248,80,144,43,8,54,42,197,86,94,249,22,148,7, +247,22,181,5,23,195,2,248,22,172,6,249,22,142,4,39,249,22,190,3,23, +199,1,23,198,1,27,248,22,134,6,28,23,198,2,23,198,1,86,94,23,198, +1,27,250,80,144,45,43,42,248,22,169,16,2,56,11,11,27,248,22,145,4, +23,199,1,27,28,23,194,2,23,194,1,86,94,23,194,1,39,27,248,22,145, +4,23,202,1,27,28,23,194,2,23,194,1,86,94,23,194,1,39,249,22,149, +6,23,199,1,20,20,95,88,148,8,36,39,51,11,9,224,2,4,33,181,2, +23,197,1,23,195,1,248,80,144,41,8,54,42,193,145,40,9,20,122,145,2, +1,39,16,1,11,16,0,20,27,15,56,9,2,2,2,2,29,11,11,11,11, +11,11,11,9,9,11,11,11,10,47,80,143,39,39,20,122,145,2,1,54,16, +40,2,3,2,4,2,5,2,6,2,7,2,8,2,9,30,2,11,1,20,112, +97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,11,6, +30,2,11,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,11,4,2,12,2,13,2,14,2,15,2,16,2,17, +2,18,30,2,11,1,19,99,97,99,104,101,45,99,111,110,102,105,103,117,114, +97,116,105,111,110,11,1,2,19,2,20,2,21,2,22,2,23,2,24,2,25, +2,26,2,27,2,28,2,29,30,2,11,1,21,101,120,99,101,112,116,105,111, +110,45,104,97,110,100,108,101,114,45,107,101,121,11,3,2,30,2,31,2,32, +2,33,2,34,2,35,2,36,2,37,2,38,2,39,2,40,16,0,40,42,39, +16,0,39,16,19,2,13,2,14,2,12,2,25,2,4,2,35,2,23,2,24, +2,19,2,29,2,33,2,21,2,22,2,31,2,27,2,30,2,32,2,36,2, +28,58,11,11,11,16,17,2,9,2,17,2,15,2,40,2,16,2,7,2,26, +2,39,2,18,2,20,2,38,2,5,2,34,2,8,2,37,2,3,2,6,16, +17,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,16,17,2, +9,2,17,2,15,2,40,2,16,2,7,2,26,2,39,2,18,2,20,2,38, +2,5,2,34,2,8,2,37,2,3,2,6,56,56,40,12,11,11,16,0,16, +0,16,0,39,39,11,12,11,11,16,0,16,0,16,0,39,39,16,51,20,15, +16,2,32,0,88,148,8,36,40,47,11,2,3,222,33,75,80,144,39,39,40, +20,15,16,2,249,22,164,7,7,92,7,92,80,144,39,40,40,20,15,16,2, +88,148,8,36,40,57,41,2,5,223,0,33,80,80,144,39,41,40,20,15,16, +2,88,148,8,36,41,61,41,2,6,223,0,33,82,80,144,39,42,40,20,15, +16,2,20,26,96,2,7,88,148,8,36,42,8,24,8,32,9,223,0,33,89, +88,148,8,36,41,50,55,9,223,0,33,90,88,148,8,36,40,49,55,9,223, +0,33,91,80,144,39,43,40,20,15,16,2,27,248,22,182,16,248,22,176,8, +27,28,249,22,181,9,247,22,189,8,2,43,6,1,1,59,6,1,1,58,250, +22,146,8,6,14,14,40,91,94,126,97,93,42,41,126,97,40,46,42,41,23, +196,2,23,196,1,88,148,8,36,41,51,11,2,8,223,0,33,95,80,144,39, +44,40,20,15,16,2,88,148,39,40,8,44,8,128,6,2,9,223,0,33,96, +80,144,39,45,40,20,15,16,2,32,0,88,148,8,36,41,50,11,2,12,222, +33,97,80,144,39,48,40,20,15,16,2,32,0,88,148,8,36,42,51,11,2, +13,222,33,99,80,144,39,49,40,20,15,16,2,32,0,88,148,8,36,41,49, +11,2,14,222,33,100,80,144,39,50,40,20,15,16,2,88,148,39,42,53,8, +128,128,2,15,223,0,33,102,80,144,39,51,40,20,15,16,2,88,148,39,44, +55,8,128,128,2,17,223,0,33,104,80,144,39,53,40,20,15,16,2,88,148, +39,39,56,55,9,223,0,33,105,80,144,39,8,40,42,20,15,16,2,88,148, +39,39,47,16,4,39,40,8,128,4,39,2,18,223,0,33,106,80,144,39,54, +40,20,15,16,2,88,148,39,39,56,55,9,223,0,33,107,80,144,39,8,41, +42,20,15,16,2,88,148,39,39,47,16,4,39,40,8,128,8,39,2,20,223, +0,33,108,80,144,39,57,40,20,15,16,2,88,148,8,36,39,8,44,8,128, +6,9,223,0,33,109,80,144,39,8,42,42,20,15,16,2,88,148,8,36,40, +50,16,4,39,39,8,128,16,39,2,21,223,0,33,110,80,144,39,58,40,20, +15,16,2,20,28,143,32,0,88,148,39,40,48,11,2,22,222,33,111,32,0, +88,148,39,40,48,11,2,22,222,33,112,80,144,39,59,40,20,15,16,2,88, +148,8,36,40,50,8,240,0,128,0,0,2,23,223,0,33,113,80,144,39,60, +40,20,15,16,2,88,148,39,39,56,55,9,223,0,33,114,80,144,39,8,43, +42,20,15,16,2,88,148,8,36,40,51,16,4,39,40,8,128,32,39,2,24, +223,0,33,115,80,144,39,61,40,20,15,16,2,88,148,39,40,56,55,2,19, +223,0,33,116,80,144,39,56,40,20,15,16,2,88,148,8,36,41,58,16,4, +8,240,0,128,0,0,8,32,8,128,64,39,2,50,223,0,33,117,80,144,39, +8,44,42,20,15,16,2,88,148,8,36,42,52,16,4,39,39,8,128,64,39, +2,25,223,0,33,118,80,144,39,8,23,40,20,15,16,2,88,148,39,39,56, +55,9,223,0,33,119,80,144,39,8,45,42,20,15,16,2,88,148,8,36,39, +57,16,4,8,240,0,128,0,0,8,137,2,8,128,128,39,2,26,223,0,33, +120,80,144,39,8,24,40,20,15,16,2,247,22,143,2,80,144,39,8,25,40, +20,15,16,2,248,22,16,67,115,116,97,109,112,80,144,39,8,26,40,20,15, +16,2,88,148,39,40,49,8,240,0,0,0,4,9,223,0,33,122,80,144,39, +8,46,42,20,15,16,2,88,148,39,41,51,16,4,39,8,128,80,8,240,0, +64,0,0,39,2,29,223,0,33,130,2,80,144,39,8,27,40,20,15,16,2, +20,28,143,32,0,88,148,8,36,40,47,11,2,30,222,33,131,2,32,0,88, +148,8,36,40,47,11,2,30,222,33,132,2,80,144,39,8,29,40,20,15,16, +2,88,148,8,36,42,48,8,240,0,0,0,2,74,109,97,107,101,45,104,97, +110,100,108,101,114,223,0,33,134,2,80,144,39,8,47,42,20,15,16,2,88, +148,39,40,47,16,4,8,128,6,8,128,104,8,240,0,128,0,0,39,2,31, +223,0,33,144,2,80,144,39,8,30,40,20,15,16,2,88,148,39,41,59,16, +2,39,8,240,0,128,0,0,2,32,223,0,33,146,2,80,144,39,8,31,40, +20,15,16,2,88,148,8,36,41,61,16,4,39,8,240,0,64,0,0,39,40, +2,50,223,0,33,147,2,80,144,39,8,48,42,20,15,16,2,88,148,39,47, +8,33,16,4,39,39,40,41,67,99,108,111,111,112,223,0,33,154,2,80,144, +39,8,49,42,20,15,16,2,88,148,39,44,8,25,16,4,39,8,240,0,192, +0,0,39,42,2,16,223,0,33,155,2,80,144,39,52,40,20,15,16,2,88, +148,39,42,58,16,4,47,39,43,39,2,33,223,0,33,160,2,80,144,39,8, +32,40,20,15,16,2,32,0,88,148,39,42,53,11,2,35,222,33,161,2,80, +144,39,8,34,40,20,15,16,2,32,0,88,148,8,36,44,8,26,11,2,36, +222,33,164,2,80,144,39,8,35,40,20,15,16,2,32,0,88,148,8,36,41, +55,11,2,37,222,33,167,2,80,144,39,8,36,40,20,15,16,2,32,0,88, +148,8,36,41,55,11,2,34,222,33,170,2,80,144,39,8,33,40,20,15,16, +2,20,28,143,32,0,88,148,39,40,47,11,2,38,222,33,171,2,32,0,88, +148,39,40,47,11,2,38,222,33,172,2,80,144,39,8,37,40,20,15,16,2, +88,148,8,36,40,58,16,4,55,41,39,43,2,50,223,0,33,173,2,80,144, +39,8,50,42,20,15,16,2,88,148,8,36,40,58,16,4,55,41,39,47,2, +50,223,0,33,174,2,80,144,39,8,51,42,20,15,16,2,88,148,39,39,56, +55,9,223,0,33,175,2,80,144,39,8,52,42,20,15,16,2,88,148,8,36, +40,8,23,16,4,55,41,39,8,32,2,50,223,0,33,176,2,80,144,39,8, +53,42,20,15,16,2,20,26,96,2,39,88,148,39,39,60,16,4,8,32,8, +140,2,39,43,9,223,0,33,177,2,88,148,39,40,61,16,4,8,32,8,140, +2,39,47,9,223,0,33,178,2,88,148,39,41,8,30,16,4,8,48,8,139, +2,39,8,48,9,223,0,33,179,2,80,144,39,8,38,40,20,15,16,2,88, +148,8,36,40,60,16,4,8,128,6,39,39,8,64,2,50,223,0,33,180,2, +80,144,39,8,54,42,20,15,16,2,88,148,8,36,42,57,16,4,55,39,39, +8,64,2,40,223,0,33,182,2,80,144,39,8,39,40,95,29,94,2,10,70, +35,37,107,101,114,110,101,108,11,29,94,2,10,71,35,37,109,105,110,45,115, +116,120,11,2,11,9,9,9,39,9,0}; + EVAL_ONE_SIZED_STR((char *)expr, 19015); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,55,46,48,46,51,84,0,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,57,46,48,46,50,84,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,15,0,0,0,1,0,0,8,0,23,0, 48,0,65,0,83,0,105,0,128,0,149,0,171,0,181,0,191,0,199,0,209, 0,217,0,0,0,253,1,0,0,3,1,5,105,110,115,112,48,76,35,37,112, @@ -1046,8 +1031,8 @@ 39,16,0,39,16,2,2,6,2,7,41,11,11,11,16,5,2,4,2,8,2, 9,2,5,2,3,16,5,11,11,11,11,11,16,5,2,4,2,8,2,9,2, 5,2,3,44,44,40,12,11,11,16,0,16,0,16,0,39,39,11,12,11,11, -16,0,16,0,16,0,39,39,16,3,20,15,16,6,253,22,137,11,2,4,11, -41,39,11,248,22,92,249,22,82,22,186,10,88,148,39,40,48,47,9,223,9, +16,0,16,0,16,0,39,39,16,3,20,15,16,6,253,22,139,11,2,4,11, +41,39,11,248,22,92,249,22,82,22,188,10,88,148,39,40,48,47,9,223,9, 33,10,80,144,39,39,40,80,144,39,40,40,80,144,39,41,40,80,144,39,42, 40,80,144,39,43,40,20,15,16,2,20,28,143,88,148,39,40,48,47,9,223, 0,33,11,88,148,39,40,48,47,9,223,0,33,12,80,144,39,44,40,20,15, @@ -1057,7 +1042,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 581); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,55,46,48,46,51,84,0,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,57,46,48,46,50,84,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,102,0,0,0,1,0,0,8,0,15,0, 26,0,53,0,59,0,73,0,86,0,112,0,129,0,151,0,159,0,171,0,186, 0,202,0,220,0,241,0,253,0,13,1,36,1,60,1,72,1,103,1,108,1, @@ -1068,7 +1053,7 @@ 169,14,76,15,92,15,167,15,162,16,42,17,117,17,24,18,37,18,190,18,118, 19,161,19,243,19,115,20,176,20,184,20,195,20,229,21,76,22,89,22,10,23, 17,23,177,23,21,24,43,24,53,24,67,24,105,24,204,24,208,24,215,24,165, -25,190,34,243,34,11,35,35,35,0,0,116,39,0,0,3,1,5,105,110,115, +25,187,34,240,34,8,35,32,35,0,0,113,39,0,0,3,1,5,105,110,115, 112,48,68,35,37,98,111,111,116,72,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,67,113,117,111,116,101,29,94,2,5,70,35,37,112,97,114, @@ -1092,87 +1077,87 @@ 98,6,12,12,109,111,100,117,108,101,45,112,97,116,104,63,6,2,2,46,46, 68,115,117,98,109,111,100,6,1,1,46,66,102,105,108,101,68,112,108,97,110, 101,116,6,4,4,46,114,107,116,6,8,8,109,97,105,110,46,114,107,116,69, -105,103,110,111,114,101,100,250,22,144,16,28,249,22,179,9,23,201,2,2,27, -86,94,23,199,1,23,197,1,28,248,22,149,16,23,200,2,249,22,144,16,23, +105,103,110,111,114,101,100,250,22,146,16,28,249,22,181,9,23,201,2,2,27, +86,94,23,199,1,23,197,1,28,248,22,151,16,23,200,2,249,22,146,16,23, 199,1,23,201,1,249,80,144,46,45,42,23,199,1,23,201,1,23,200,1,249, -80,144,46,46,42,23,198,1,2,28,250,22,144,16,28,249,22,179,9,23,201, -2,2,27,86,94,23,199,1,23,197,1,28,248,22,149,16,23,200,2,249,22, -144,16,23,199,1,23,201,1,249,80,144,46,45,42,23,199,1,23,201,1,23, -200,1,249,80,144,46,46,42,23,198,1,2,28,252,22,144,16,28,249,22,179, -9,23,203,2,2,27,86,94,23,201,1,23,199,1,28,248,22,149,16,23,202, -2,249,22,144,16,23,201,1,23,203,1,249,80,144,48,45,42,23,201,1,23, +80,144,46,46,42,23,198,1,2,28,250,22,146,16,28,249,22,181,9,23,201, +2,2,27,86,94,23,199,1,23,197,1,28,248,22,151,16,23,200,2,249,22, +146,16,23,199,1,23,201,1,249,80,144,46,45,42,23,199,1,23,201,1,23, +200,1,249,80,144,46,46,42,23,198,1,2,28,252,22,146,16,28,249,22,181, +9,23,203,2,2,27,86,94,23,201,1,23,199,1,28,248,22,151,16,23,202, +2,249,22,146,16,23,201,1,23,203,1,249,80,144,48,45,42,23,201,1,23, 203,1,23,202,1,2,29,247,22,190,8,249,80,144,48,46,42,23,200,1,80, -144,48,39,41,252,22,144,16,28,249,22,179,9,23,203,2,2,27,86,94,23, -201,1,23,199,1,28,248,22,149,16,23,202,2,249,22,144,16,23,201,1,23, +144,48,39,41,252,22,146,16,28,249,22,181,9,23,203,2,2,27,86,94,23, +201,1,23,199,1,28,248,22,151,16,23,202,2,249,22,146,16,23,201,1,23, 203,1,249,80,144,48,45,42,23,201,1,23,203,1,23,202,1,2,29,247,22, -190,8,249,80,144,48,46,42,23,200,1,80,144,48,39,41,27,252,22,144,16, -28,249,22,179,9,23,205,2,2,27,86,94,23,203,1,23,201,1,28,248,22, -149,16,23,204,2,249,22,144,16,23,203,1,23,205,1,249,80,144,52,45,42, +190,8,249,80,144,48,46,42,23,200,1,80,144,48,39,41,27,252,22,146,16, +28,249,22,181,9,23,205,2,2,27,86,94,23,203,1,23,201,1,28,248,22, +151,16,23,204,2,249,22,146,16,23,203,1,23,205,1,249,80,144,52,45,42, 23,203,1,23,205,1,23,205,1,2,29,247,22,190,8,249,80,144,52,46,42, -23,202,1,80,144,52,39,41,27,250,22,162,16,196,11,32,0,88,148,8,36, +23,202,1,80,144,52,39,41,27,250,22,164,16,196,11,32,0,88,148,8,36, 39,44,11,9,222,11,28,192,249,22,82,195,28,196,194,39,11,249,22,5,20, 20,98,88,148,8,36,40,59,8,129,3,9,228,7,8,6,4,3,2,33,46, 23,195,1,23,196,1,23,197,1,23,199,1,23,201,1,23,198,1,27,252,22, -144,16,28,249,22,179,9,23,205,2,2,27,86,94,23,203,1,23,201,1,28, -248,22,149,16,23,204,2,249,22,144,16,23,203,1,23,205,1,249,80,144,52, +146,16,28,249,22,181,9,23,205,2,2,27,86,94,23,203,1,23,201,1,28, +248,22,151,16,23,204,2,249,22,146,16,23,203,1,23,205,1,249,80,144,52, 45,42,23,203,1,23,205,1,23,205,1,2,29,247,22,190,8,249,80,144,52, -46,42,23,202,1,80,144,52,39,41,27,250,22,162,16,196,11,32,0,88,148, +46,42,23,202,1,80,144,52,39,41,27,250,22,164,16,196,11,32,0,88,148, 8,36,39,44,11,9,222,11,28,192,249,22,82,195,28,196,194,39,11,249,22, 5,20,20,98,88,148,8,36,40,59,8,129,3,9,228,7,8,6,4,3,2, 33,48,23,195,1,23,196,1,23,197,1,23,199,1,23,201,1,23,198,1,27, -250,22,144,16,28,249,22,179,9,23,203,2,2,27,86,94,23,201,1,23,199, -1,28,248,22,149,16,23,202,2,249,22,144,16,23,201,1,23,203,1,249,80, +250,22,146,16,28,249,22,181,9,23,203,2,2,27,86,94,23,201,1,23,199, +1,28,248,22,151,16,23,202,2,249,22,146,16,23,201,1,23,203,1,249,80, 144,50,45,42,23,201,1,23,203,1,23,203,1,249,80,144,50,46,42,23,200, -1,2,28,27,250,22,162,16,196,11,32,0,88,148,8,36,39,44,11,9,222, +1,2,28,27,250,22,164,16,196,11,32,0,88,148,8,36,39,44,11,9,222, 11,28,192,249,22,82,195,28,196,194,39,11,249,22,5,20,20,98,88,148,8, 36,40,57,8,128,3,9,228,7,8,6,4,3,2,33,50,23,195,1,23,196, -1,23,197,1,23,199,1,23,201,1,23,198,1,27,250,22,144,16,28,249,22, -179,9,23,203,2,2,27,86,94,23,201,1,23,199,1,28,248,22,149,16,23, -202,2,249,22,144,16,23,201,1,23,203,1,249,80,144,50,45,42,23,201,1, -23,203,1,23,203,1,249,80,144,50,46,42,23,200,1,2,28,27,250,22,162, +1,23,197,1,23,199,1,23,201,1,23,198,1,27,250,22,146,16,28,249,22, +181,9,23,203,2,2,27,86,94,23,201,1,23,199,1,28,248,22,151,16,23, +202,2,249,22,146,16,23,201,1,23,203,1,249,80,144,50,45,42,23,201,1, +23,203,1,23,203,1,249,80,144,50,46,42,23,200,1,2,28,27,250,22,164, 16,196,11,32,0,88,148,8,36,39,44,11,9,222,11,28,192,249,22,82,195, 28,196,194,39,11,249,22,5,20,20,98,88,148,8,36,40,57,8,128,3,9, 228,7,8,6,4,3,2,33,52,23,195,1,23,196,1,23,197,1,23,199,1, 23,201,1,23,198,1,86,95,28,248,80,144,41,43,42,23,196,2,11,250,22, -130,12,2,25,6,12,12,112,97,116,104,45,115,116,114,105,110,103,63,23,198, -2,28,28,23,196,2,28,248,22,66,23,197,2,10,28,248,22,91,23,197,2, -28,249,22,169,20,248,22,96,23,199,2,40,28,28,248,22,66,248,22,83,23, -198,2,10,248,22,176,9,248,22,83,23,198,2,249,22,4,22,66,248,22,84, -23,199,2,11,11,11,10,11,250,22,130,12,2,25,6,71,71,40,111,114,47, -99,32,35,102,32,115,121,109,98,111,108,63,32,40,99,111,110,115,47,99,32, -40,111,114,47,99,32,35,102,32,115,121,109,98,111,108,63,41,32,40,110,111, -110,45,101,109,112,116,121,45,108,105,115,116,111,102,32,115,121,109,98,111,108, -63,41,41,41,23,198,2,27,28,23,197,2,247,22,134,5,11,27,28,23,194, -2,250,22,161,2,80,143,45,44,248,22,145,17,247,22,157,14,11,11,27,28, +132,12,2,25,6,12,12,112,97,116,104,45,115,116,114,105,110,103,63,23,198, +2,28,23,196,2,28,28,248,22,66,23,197,2,10,28,248,22,91,23,197,2, +28,249,22,171,20,248,22,96,23,199,2,40,28,28,248,22,66,248,22,83,23, +198,2,10,248,22,178,9,248,22,83,23,198,2,249,22,4,22,66,248,22,84, +23,199,2,11,11,11,11,250,22,132,12,2,25,6,71,71,40,111,114,47,99, +32,35,102,32,115,121,109,98,111,108,63,32,40,99,111,110,115,47,99,32,40, +111,114,47,99,32,35,102,32,115,121,109,98,111,108,63,41,32,40,110,111,110, +45,101,109,112,116,121,45,108,105,115,116,111,102,32,115,121,109,98,111,108,63, +41,41,41,23,198,2,11,27,28,23,197,2,247,22,134,5,11,27,28,23,194, +2,250,22,161,2,80,143,45,44,248,22,147,17,247,22,159,14,11,11,27,28, 23,194,2,250,22,161,2,248,22,84,23,198,2,23,198,2,11,11,28,23,193, 2,86,97,23,198,1,23,196,1,23,195,1,23,194,1,20,13,144,80,144,43, 41,40,250,80,144,46,42,40,249,22,31,11,80,144,48,41,40,22,135,5,248, 22,105,23,197,2,27,248,22,114,23,195,2,20,13,144,80,144,44,41,40,250, -80,144,47,42,40,249,22,31,11,80,144,49,41,40,22,186,5,28,248,22,190, -15,23,197,2,23,196,1,86,94,23,196,1,247,22,168,16,249,247,22,184,5, -248,22,182,20,23,197,1,23,202,1,86,94,23,193,1,27,28,248,22,151,16, -23,200,2,23,199,2,27,247,22,186,5,28,192,249,22,152,16,23,202,2,194, -23,200,2,90,144,42,11,89,146,42,39,11,248,22,147,16,23,203,1,86,94, -23,195,1,90,144,41,11,89,146,41,39,11,28,23,205,2,27,248,22,131,16, -23,198,2,19,248,22,156,8,194,28,28,249,22,171,20,23,195,4,43,249,22, +80,144,47,42,40,249,22,31,11,80,144,49,41,40,22,186,5,28,248,22,128, +16,23,197,2,23,196,1,86,94,23,196,1,247,22,170,16,249,247,22,184,5, +248,22,184,20,23,197,1,23,202,1,86,94,23,193,1,27,28,248,22,153,16, +23,200,2,23,199,2,27,247,22,186,5,28,192,249,22,154,16,23,202,2,194, +23,200,2,90,144,42,11,89,146,42,39,11,248,22,149,16,23,203,1,86,94, +23,195,1,90,144,41,11,89,146,41,39,11,28,23,205,2,27,248,22,133,16, +23,198,2,19,248,22,156,8,194,28,28,249,22,173,20,23,195,4,43,249,22, 159,8,2,26,249,22,162,8,197,249,22,190,3,23,199,4,43,11,249,22,7, -23,200,2,248,22,135,16,249,22,163,8,250,22,162,8,201,39,249,22,190,3, +23,200,2,248,22,137,16,249,22,163,8,250,22,162,8,201,39,249,22,190,3, 23,203,4,43,5,3,46,115,115,249,22,7,23,200,2,11,2,249,22,7,23, -198,2,11,27,28,249,22,179,9,23,196,2,23,199,2,23,199,2,249,22,144, -16,23,198,2,23,196,2,27,28,23,196,2,28,249,22,179,9,23,198,2,23, -200,1,23,200,1,86,94,23,200,1,249,22,144,16,23,199,2,23,198,2,86, -95,23,200,1,23,198,1,11,27,28,249,22,179,9,23,200,2,70,114,101,108, -97,116,105,118,101,86,94,23,198,1,2,27,23,198,1,27,247,22,173,16,27, -247,22,174,16,27,27,250,22,162,16,23,202,2,11,32,0,88,148,8,36,39, +198,2,11,27,28,249,22,181,9,23,196,2,23,199,2,23,199,2,249,22,146, +16,23,198,2,23,196,2,27,28,23,196,2,28,249,22,181,9,23,198,2,23, +200,1,23,200,1,86,94,23,200,1,249,22,146,16,23,199,2,23,198,2,86, +95,23,200,1,23,198,1,11,27,28,249,22,181,9,23,200,2,70,114,101,108, +97,116,105,118,101,86,94,23,198,1,2,27,23,198,1,27,247,22,175,16,27, +247,22,176,16,27,27,250,22,164,16,23,202,2,11,32,0,88,148,8,36,39, 44,11,9,222,11,28,192,249,22,82,23,201,2,28,23,211,2,194,39,11,27, -28,23,198,2,28,23,194,2,11,27,250,22,162,16,23,202,2,11,32,0,88, +28,23,198,2,28,23,194,2,11,27,250,22,164,16,23,202,2,11,32,0,88, 148,8,36,39,44,11,9,222,11,28,192,249,22,82,23,201,2,28,23,212,2, 194,39,11,11,27,28,23,195,2,23,195,2,23,194,2,27,88,148,8,36,41, 54,8,128,3,64,122,111,225,19,6,9,33,42,27,88,148,8,36,41,54,8, 128,3,68,97,108,116,45,122,111,225,20,7,11,33,43,27,88,148,8,36,41, 56,8,129,3,9,225,21,8,11,33,44,27,88,148,8,36,41,56,8,129,3, -9,225,22,9,13,33,45,27,28,23,200,2,23,200,2,248,22,176,9,23,200, -2,27,28,23,208,2,28,23,200,2,86,94,23,201,1,23,200,2,248,22,176, +9,225,22,9,13,33,45,27,28,23,200,2,23,200,2,248,22,178,9,23,200, +2,27,28,23,208,2,28,23,200,2,86,94,23,201,1,23,200,2,248,22,178, 9,23,202,1,86,94,23,201,1,11,27,28,23,195,2,27,249,22,5,20,20, 94,88,148,39,40,53,8,129,3,9,228,28,7,14,15,18,27,33,47,23,200, 1,23,206,2,27,28,23,202,2,11,193,28,192,192,28,193,28,23,202,2,28, @@ -1182,8 +1167,8 @@ 23,199,1,23,198,1,23,196,1,23,195,1,23,194,1,20,13,144,80,144,8, 25,41,40,250,80,144,8,28,42,40,249,22,31,11,80,144,8,30,41,40,22, 135,5,11,20,13,144,80,144,8,25,41,40,250,80,144,8,28,42,40,249,22, -31,11,80,144,8,30,41,40,22,186,5,28,248,22,190,15,23,209,2,23,208, -1,86,94,23,208,1,247,22,168,16,249,247,22,179,16,248,22,83,23,196,1, +31,11,80,144,8,30,41,40,22,186,5,28,248,22,128,16,23,209,2,23,208, +1,86,94,23,208,1,247,22,170,16,249,247,22,181,16,248,22,83,23,196,1, 23,222,1,86,94,23,193,1,27,28,23,195,2,27,249,22,5,20,20,94,88, 148,39,40,53,8,129,3,9,228,29,7,15,16,20,28,33,49,23,200,1,23, 207,2,27,28,23,204,2,11,193,28,192,86,94,23,204,1,192,28,193,28,203, @@ -1193,8 +1178,8 @@ 196,1,23,195,1,20,13,144,80,144,8,26,41,40,250,80,144,8,29,42,40, 249,22,31,11,80,144,8,31,41,40,22,135,5,23,210,1,20,13,144,80,144, 8,26,41,40,250,80,144,8,29,42,40,249,22,31,11,80,144,8,31,41,40, -22,186,5,28,248,22,190,15,23,210,2,23,209,1,86,94,23,209,1,247,22, -168,16,249,247,22,179,16,248,22,83,23,196,1,23,223,1,86,94,23,193,1, +22,186,5,28,248,22,128,16,23,210,2,23,209,1,86,94,23,209,1,247,22, +170,16,249,247,22,181,16,248,22,83,23,196,1,23,223,1,86,94,23,193,1, 27,28,23,197,2,27,249,22,5,20,20,95,88,148,39,40,53,8,128,3,9, 228,30,11,16,17,20,29,33,51,23,213,1,23,204,1,23,208,2,27,28,23, 204,2,11,193,28,192,192,28,193,28,23,204,2,28,249,22,138,4,248,22,84, @@ -1204,8 +1189,8 @@ 47,23,223,1,23,222,1,248,22,83,23,199,2,11,23,212,2,20,13,144,80, 144,8,27,41,40,250,80,144,8,30,42,40,249,22,31,11,80,144,8,32,41, 40,22,135,5,11,20,13,144,80,144,8,27,41,40,250,80,144,8,30,42,40, -249,22,31,11,80,144,8,32,41,40,22,186,5,28,248,22,190,15,23,211,2, -23,210,1,86,94,23,210,1,247,22,168,16,249,247,22,184,5,248,22,182,20, +249,22,31,11,80,144,8,32,41,40,22,186,5,28,248,22,128,16,23,211,2, +23,210,1,86,94,23,210,1,247,22,170,16,249,247,22,184,5,248,22,184,20, 23,196,1,23,224,32,0,0,0,1,86,94,23,193,1,27,28,23,197,1,27, 249,22,5,20,20,97,88,148,39,40,53,8,128,3,9,228,31,11,17,18,22, 30,33,53,23,223,1,23,215,1,23,210,1,23,204,1,23,209,1,27,28,23, @@ -1216,17 +1201,17 @@ 83,23,199,2,23,214,2,23,213,2,20,13,144,80,144,8,28,41,40,250,80, 144,8,31,42,40,249,22,31,11,80,144,8,33,41,40,22,135,5,23,212,1, 20,13,144,80,144,8,28,41,40,250,80,144,8,31,42,40,249,22,31,11,80, -144,8,33,41,40,22,186,5,28,248,22,190,15,23,212,2,23,211,1,86,94, -23,211,1,247,22,168,16,249,247,22,184,5,248,22,182,20,23,196,1,23,224, +144,8,33,41,40,22,186,5,28,248,22,128,16,23,212,2,23,211,1,86,94, +23,211,1,247,22,170,16,249,247,22,184,5,248,22,184,20,23,196,1,23,224, 33,0,0,0,1,86,96,23,219,1,23,218,1,23,193,1,28,28,248,22,80, -23,224,32,0,0,0,2,248,22,182,20,23,224,32,0,0,0,2,10,27,28, +23,224,32,0,0,0,2,248,22,184,20,23,224,32,0,0,0,2,10,27,28, 23,199,2,86,94,23,210,1,23,211,1,86,94,23,211,1,23,210,1,28,28, -248,22,80,23,224,33,0,0,0,2,248,22,176,9,248,22,138,16,23,195,2, +248,22,80,23,224,33,0,0,0,2,248,22,178,9,248,22,140,16,23,195,2, 11,12,20,13,144,80,144,8,29,41,40,250,80,144,8,32,42,40,249,22,31, 11,80,144,8,34,41,40,22,135,5,28,23,224,35,0,0,0,2,28,23,202, 1,11,23,196,2,86,94,23,202,1,11,20,13,144,80,144,8,29,41,40,250, 80,144,8,32,42,40,249,22,31,11,80,144,8,34,41,40,22,186,5,28,248, -22,190,15,23,213,2,23,212,1,86,94,23,212,1,247,22,168,16,249,247,22, +22,128,16,23,213,2,23,212,1,86,94,23,212,1,247,22,170,16,249,247,22, 184,5,23,195,1,23,224,34,0,0,0,1,12,28,23,194,2,250,22,159,2, 248,22,84,23,198,1,23,196,1,250,22,92,23,201,1,23,202,1,23,203,1, 12,27,249,22,134,9,80,144,42,50,41,249,22,133,4,248,22,129,4,248,22, @@ -1238,136 +1223,136 @@ 9,32,58,88,149,8,38,42,54,11,2,30,39,223,48,33,73,32,59,88,149, 8,38,42,53,11,2,30,39,223,48,33,72,32,60,88,148,8,36,40,53,11, 2,31,222,33,71,32,61,88,149,8,38,42,53,11,2,30,39,223,48,33,62, -28,249,22,134,4,23,197,2,23,196,4,248,22,92,193,28,249,22,146,9,7, +28,249,22,134,4,23,197,2,23,196,4,248,22,92,193,28,249,22,148,9,7, 47,249,22,166,7,23,197,2,23,199,2,249,22,82,250,22,184,7,23,198,2, 39,23,200,2,248,2,60,249,22,184,7,23,198,1,248,22,187,3,23,201,1, 250,2,61,195,23,197,4,248,22,187,3,198,32,63,88,149,8,38,42,55,11, 2,30,39,223,48,33,70,32,64,88,149,8,38,42,54,11,2,30,39,223,48, 33,67,32,65,88,149,8,38,42,53,11,2,30,39,223,48,33,66,28,249,22, -134,4,23,197,2,23,196,4,248,22,92,193,28,249,22,146,9,7,47,249,22, +134,4,23,197,2,23,196,4,248,22,92,193,28,249,22,148,9,7,47,249,22, 166,7,23,197,2,23,199,2,249,22,82,250,22,184,7,23,198,2,39,23,200, 2,248,2,60,249,22,184,7,23,198,1,248,22,187,3,23,201,1,250,2,65, 195,23,197,4,248,22,187,3,198,28,249,22,134,4,23,197,2,23,196,4,248, -22,92,193,28,249,22,146,9,7,47,249,22,166,7,23,197,2,23,199,2,249, +22,92,193,28,249,22,148,9,7,47,249,22,166,7,23,197,2,23,199,2,249, 22,82,250,22,184,7,23,198,2,39,23,200,2,27,249,22,184,7,23,198,1, 248,22,187,3,23,201,1,19,248,22,165,7,23,195,2,250,2,65,23,197,1, 23,196,4,39,2,27,248,22,187,3,23,197,1,28,249,22,134,4,23,195,2, -23,197,4,248,22,92,194,28,249,22,146,9,7,47,249,22,166,7,23,198,2, +23,197,4,248,22,92,194,28,249,22,148,9,7,47,249,22,166,7,23,198,2, 23,197,2,249,22,82,250,22,184,7,23,199,2,39,23,198,2,248,2,60,249, 22,184,7,23,199,1,248,22,187,3,23,199,1,250,2,64,196,23,198,4,248, 22,187,3,196,32,68,88,149,8,38,42,53,11,2,30,39,223,48,33,69,28, -249,22,134,4,23,197,2,23,196,4,248,22,92,193,28,249,22,146,9,7,47, +249,22,134,4,23,197,2,23,196,4,248,22,92,193,28,249,22,148,9,7,47, 249,22,166,7,23,197,2,23,199,2,249,22,82,250,22,184,7,23,198,2,39, 23,200,2,248,2,60,249,22,184,7,23,198,1,248,22,187,3,23,201,1,250, 2,68,195,23,197,4,248,22,187,3,198,28,249,22,134,4,23,197,2,23,196, -4,248,22,92,193,28,249,22,146,9,7,47,249,22,166,7,23,197,2,23,199, +4,248,22,92,193,28,249,22,148,9,7,47,249,22,166,7,23,197,2,23,199, 2,249,22,82,250,22,184,7,23,198,2,39,23,200,2,27,249,22,184,7,23, 198,1,248,22,187,3,23,201,1,19,248,22,165,7,23,195,2,250,2,64,23, 197,1,23,196,4,39,2,27,248,22,187,3,23,197,1,28,249,22,134,4,23, -195,2,23,197,4,248,22,92,194,28,249,22,146,9,7,47,249,22,166,7,23, +195,2,23,197,4,248,22,92,194,28,249,22,148,9,7,47,249,22,166,7,23, 198,2,23,197,2,249,22,82,250,22,184,7,23,199,2,39,23,198,2,27,249, 22,184,7,23,199,1,248,22,187,3,23,199,1,19,248,22,165,7,23,195,2, 250,2,68,23,197,1,23,196,4,39,2,27,248,22,187,3,23,195,1,28,249, -22,134,4,23,195,2,23,198,4,248,22,92,195,28,249,22,146,9,7,47,249, +22,134,4,23,195,2,23,198,4,248,22,92,195,28,249,22,148,9,7,47,249, 22,166,7,23,199,2,23,197,2,249,22,82,250,22,184,7,23,200,2,39,23, 198,2,248,2,60,249,22,184,7,23,200,1,248,22,187,3,23,199,1,250,2, 63,197,23,199,4,248,22,187,3,196,19,248,22,165,7,23,195,2,28,249,22, -167,20,39,23,195,4,248,22,92,194,28,249,22,146,9,7,47,249,22,166,7, +169,20,39,23,195,4,248,22,92,194,28,249,22,148,9,7,47,249,22,166,7, 23,198,2,39,249,22,82,250,22,184,7,23,199,2,39,39,27,249,22,184,7, 23,199,1,40,19,248,22,165,7,23,195,2,250,2,61,23,197,1,23,196,4, -39,2,28,249,22,167,20,40,23,195,4,248,22,92,194,28,249,22,146,9,7, +39,2,28,249,22,169,20,40,23,195,4,248,22,92,194,28,249,22,148,9,7, 47,249,22,166,7,23,198,2,40,249,22,82,250,22,184,7,23,199,2,39,40, 248,2,60,249,22,184,7,23,199,1,41,250,2,63,196,23,196,4,41,2,28, -249,22,134,4,23,197,2,23,196,4,248,22,92,193,28,249,22,146,9,7,47, +249,22,134,4,23,197,2,23,196,4,248,22,92,193,28,249,22,148,9,7,47, 249,22,166,7,23,197,2,23,199,2,249,22,82,250,22,184,7,23,198,2,39, 23,200,2,248,2,60,249,22,184,7,23,198,1,248,22,187,3,23,201,1,250, 2,59,195,23,197,4,248,22,187,3,198,28,249,22,134,4,23,197,2,23,196, -4,248,22,92,193,28,249,22,146,9,7,47,249,22,166,7,23,197,2,23,199, +4,248,22,92,193,28,249,22,148,9,7,47,249,22,166,7,23,197,2,23,199, 2,249,22,82,250,22,184,7,23,198,2,39,23,200,2,27,249,22,184,7,23, 198,1,248,22,187,3,23,201,1,19,248,22,165,7,23,195,2,250,2,59,23, 197,1,23,196,4,39,2,27,248,22,187,3,23,197,1,28,249,22,134,4,23, -195,2,23,197,4,248,22,92,194,28,249,22,146,9,7,47,249,22,166,7,23, +195,2,23,197,4,248,22,92,194,28,249,22,148,9,7,47,249,22,166,7,23, 198,2,23,197,2,249,22,82,250,22,184,7,23,199,2,39,23,198,2,248,2, 60,249,22,184,7,23,199,1,248,22,187,3,23,199,1,250,2,58,196,23,198, 4,248,22,187,3,196,32,74,88,148,39,40,58,11,2,31,222,33,75,28,248, -22,90,248,22,84,23,195,2,249,22,7,9,248,22,182,20,23,196,1,90,144, -41,11,89,146,41,39,11,27,248,22,183,20,23,197,2,28,248,22,90,248,22, -84,23,195,2,249,22,7,9,248,22,182,20,195,90,144,41,11,89,146,41,39, -11,27,248,22,183,20,196,28,248,22,90,248,22,84,23,195,2,249,22,7,9, -248,22,182,20,195,90,144,41,11,89,146,41,39,11,248,2,74,248,22,183,20, -196,249,22,7,249,22,82,248,22,182,20,199,196,195,249,22,7,249,22,82,248, -22,182,20,199,196,195,249,22,7,249,22,82,248,22,182,20,23,200,1,23,197, +22,90,248,22,84,23,195,2,249,22,7,9,248,22,184,20,23,196,1,90,144, +41,11,89,146,41,39,11,27,248,22,185,20,23,197,2,28,248,22,90,248,22, +84,23,195,2,249,22,7,9,248,22,184,20,195,90,144,41,11,89,146,41,39, +11,27,248,22,185,20,196,28,248,22,90,248,22,84,23,195,2,249,22,7,9, +248,22,184,20,195,90,144,41,11,89,146,41,39,11,248,2,74,248,22,185,20, +196,249,22,7,249,22,82,248,22,184,20,199,196,195,249,22,7,249,22,82,248, +22,184,20,199,196,195,249,22,7,249,22,82,248,22,184,20,23,200,1,23,197, 1,23,196,1,27,19,248,22,165,7,23,196,2,250,2,58,23,198,1,23,196, 4,39,2,28,23,195,1,192,28,248,22,90,248,22,84,23,195,2,249,22,7, -9,248,22,182,20,23,196,1,27,248,22,183,20,23,195,2,90,144,41,11,89, -146,41,39,11,28,248,22,90,248,22,84,23,197,2,249,22,7,9,248,22,182, -20,23,198,1,27,248,22,183,20,23,197,2,90,144,41,11,89,146,41,39,11, -28,248,22,90,248,22,84,23,197,2,249,22,7,9,248,22,182,20,197,90,144, -41,11,89,146,41,39,11,248,2,74,248,22,183,20,198,249,22,7,249,22,82, -248,22,182,20,201,196,195,249,22,7,249,22,82,248,22,182,20,23,203,1,196, -195,249,22,7,249,22,82,248,22,182,20,23,201,1,23,197,1,23,196,1,248, -22,156,12,252,22,173,10,248,22,169,4,23,200,2,248,22,165,4,23,200,2, +9,248,22,184,20,23,196,1,27,248,22,185,20,23,195,2,90,144,41,11,89, +146,41,39,11,28,248,22,90,248,22,84,23,197,2,249,22,7,9,248,22,184, +20,23,198,1,27,248,22,185,20,23,197,2,90,144,41,11,89,146,41,39,11, +28,248,22,90,248,22,84,23,197,2,249,22,7,9,248,22,184,20,197,90,144, +41,11,89,146,41,39,11,248,2,74,248,22,185,20,198,249,22,7,249,22,82, +248,22,184,20,201,196,195,249,22,7,249,22,82,248,22,184,20,23,203,1,196, +195,249,22,7,249,22,82,248,22,184,20,23,201,1,23,197,1,23,196,1,248, +22,158,12,252,22,175,10,248,22,169,4,23,200,2,248,22,165,4,23,200,2, 248,22,166,4,23,200,2,248,22,167,4,23,200,2,248,22,168,4,23,200,1, 28,24,194,2,12,20,13,144,80,144,39,41,40,80,143,39,59,89,146,40,40, 10,249,22,137,5,21,94,2,32,6,19,19,112,108,97,110,101,116,47,114,101, 115,111,108,118,101,114,46,114,107,116,1,27,112,108,97,110,101,116,45,109,111, 100,117,108,101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,12,27,28, -23,195,2,28,249,22,179,9,23,197,2,80,143,42,55,86,94,23,195,1,80, +23,195,2,28,249,22,181,9,23,197,2,80,143,42,55,86,94,23,195,1,80, 143,40,56,27,248,22,161,5,23,197,2,27,28,248,22,80,23,195,2,248,22, -182,20,23,195,1,23,194,1,28,248,22,190,15,23,194,2,90,144,42,11,89, -146,42,39,11,248,22,147,16,23,197,1,86,95,20,18,144,11,80,143,45,55, +184,20,23,195,1,23,194,1,28,248,22,128,16,23,194,2,90,144,42,11,89, +146,42,39,11,248,22,149,16,23,197,1,86,95,20,18,144,11,80,143,45,55, 199,20,18,144,11,80,143,45,56,192,192,86,94,23,193,1,11,86,94,23,195, -1,11,28,23,193,2,192,27,247,22,186,5,28,23,193,2,192,247,22,168,16, -90,144,42,11,89,146,42,39,11,248,22,147,16,23,198,2,86,95,23,195,1, -23,193,1,28,249,22,184,16,0,11,35,114,120,34,91,46,93,115,115,36,34, -248,22,131,16,23,197,1,249,80,144,44,61,42,23,199,1,2,26,196,249,80, +1,11,28,23,193,2,192,27,247,22,186,5,28,23,193,2,192,247,22,170,16, +90,144,42,11,89,146,42,39,11,248,22,149,16,23,198,2,86,95,23,195,1, +23,193,1,28,249,22,186,16,0,11,35,114,120,34,91,46,93,115,115,36,34, +248,22,133,16,23,197,1,249,80,144,44,61,42,23,199,1,2,26,196,249,80, 144,41,57,42,195,10,249,22,12,23,196,1,80,144,41,54,41,86,96,28,248, -22,159,5,23,196,2,11,250,22,130,12,2,22,6,21,21,114,101,115,111,108, -118,101,100,45,109,111,100,117,108,101,45,112,97,116,104,63,23,198,2,28,28, -23,196,2,248,22,158,14,23,197,2,10,11,250,22,130,12,2,22,6,20,20, -40,111,114,47,99,32,35,102,32,110,97,109,101,115,112,97,99,101,63,41,23, -199,2,28,24,193,2,248,24,194,1,23,196,2,86,94,23,193,1,11,27,250, -22,161,2,80,144,44,44,41,248,22,145,17,247,22,157,14,11,27,28,23,194, +22,159,5,23,196,2,11,250,22,132,12,2,22,6,21,21,114,101,115,111,108, +118,101,100,45,109,111,100,117,108,101,45,112,97,116,104,63,23,198,2,28,23, +196,2,28,248,22,160,14,23,197,2,11,250,22,132,12,2,22,6,20,20,40, +111,114,47,99,32,35,102,32,110,97,109,101,115,112,97,99,101,63,41,23,199, +2,11,28,24,193,2,248,24,194,1,23,196,2,86,94,23,193,1,11,27,250, +22,161,2,80,144,44,44,41,248,22,147,17,247,22,159,14,11,27,28,23,194, 2,23,194,1,86,94,23,194,1,27,249,22,82,247,22,141,2,247,22,141,2, -86,94,250,22,159,2,80,144,46,44,41,248,22,145,17,247,22,157,14,195,192, +86,94,250,22,159,2,80,144,46,44,41,248,22,147,17,247,22,159,14,195,192, 86,94,250,22,159,2,248,22,83,23,197,2,23,200,2,70,100,101,99,108,97, 114,101,100,28,23,198,2,27,28,248,22,80,248,22,161,5,23,200,2,248,22, 160,5,248,22,83,248,22,161,5,23,201,1,23,198,1,27,250,22,161,2,80, -144,47,44,41,248,22,145,17,23,204,1,11,28,23,193,2,27,250,22,161,2, -248,22,84,23,198,1,23,198,2,11,28,23,193,2,250,22,159,2,248,22,183, -20,23,200,1,23,198,1,23,196,1,12,12,12,86,94,251,22,151,12,247,22, -155,12,67,101,114,114,111,114,6,69,69,100,101,102,97,117,108,116,32,109,111, +144,47,44,41,248,22,147,17,23,204,1,11,28,23,193,2,27,250,22,161,2, +248,22,84,23,198,1,23,198,2,11,28,23,193,2,250,22,159,2,248,22,185, +20,23,200,1,23,198,1,23,196,1,12,12,12,86,94,251,22,153,12,247,22, +157,12,67,101,114,114,111,114,6,69,69,100,101,102,97,117,108,116,32,109,111, 100,117,108,101,32,110,97,109,101,32,114,101,115,111,108,118,101,114,32,99,97, 108,108,101,100,32,119,105,116,104,32,116,104,114,101,101,32,97,114,103,117,109, 101,110,116,115,32,40,100,101,112,114,101,99,97,116,101,100,41,11,251,24,197, 1,23,198,1,23,199,1,23,200,1,10,32,85,88,148,39,43,57,11,2,31, 222,33,86,28,248,22,90,23,197,2,28,248,22,90,195,193,249,22,82,195,248, -22,98,197,28,249,22,181,9,248,22,83,23,199,2,2,34,28,248,22,90,23, -196,2,86,95,23,196,1,23,195,1,250,22,190,11,2,22,6,37,37,116,111, +22,98,197,28,249,22,183,9,248,22,83,23,199,2,2,34,28,248,22,90,23, +196,2,86,95,23,196,1,23,195,1,250,22,128,12,2,22,6,37,37,116,111, 111,32,109,97,110,121,32,34,46,46,34,115,32,105,110,32,115,117,98,109,111, 100,117,108,101,32,112,97,116,104,58,32,126,46,115,250,22,93,2,35,28,249, -22,181,9,23,202,2,2,36,23,200,1,28,248,22,190,15,23,201,2,23,200, +22,183,9,23,202,2,2,36,23,200,1,28,248,22,128,16,23,201,2,23,200, 1,249,22,92,28,248,22,66,23,203,2,2,5,2,37,23,202,1,23,199,1, -251,2,85,196,197,248,22,84,199,248,22,183,20,200,251,2,85,196,197,249,22, -82,248,22,182,20,202,200,248,22,183,20,200,251,2,85,197,196,9,197,27,250, -22,185,7,27,28,23,198,2,28,247,22,143,12,248,80,144,47,58,42,23,199, +251,2,85,196,197,248,22,84,199,248,22,185,20,200,251,2,85,196,197,249,22, +82,248,22,184,20,202,200,248,22,185,20,200,251,2,85,197,196,9,197,27,250, +22,185,7,27,28,23,198,2,28,247,22,145,12,248,80,144,47,58,42,23,199, 2,11,11,28,192,192,6,29,29,115,116,97,110,100,97,114,100,45,109,111,100, 117,108,101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,6,2,2,58, -32,250,22,131,17,0,7,35,114,120,34,92,110,34,23,203,1,249,22,146,8, +32,250,22,133,17,0,7,35,114,120,34,92,110,34,23,203,1,249,22,146,8, 6,23,23,10,32,32,102,111,114,32,109,111,100,117,108,101,32,112,97,116,104, -58,32,126,115,10,23,203,2,248,22,186,13,28,23,195,2,251,22,130,13,23, +58,32,126,115,10,23,203,2,248,22,188,13,28,23,195,2,251,22,132,13,23, 198,1,247,22,27,248,22,92,23,200,1,23,200,1,86,94,23,195,1,250,22, -157,13,23,197,1,247,22,27,23,199,1,19,248,22,165,7,194,28,249,22,171, -20,23,195,4,42,28,249,22,179,9,7,46,249,22,166,7,197,249,22,190,3, -23,199,4,42,28,28,249,22,179,9,7,115,249,22,166,7,197,249,22,190,3, -23,199,4,41,249,22,179,9,7,115,249,22,166,7,197,249,22,190,3,23,199, +159,13,23,197,1,247,22,27,23,199,1,19,248,22,165,7,194,28,249,22,173, +20,23,195,4,42,28,249,22,181,9,7,46,249,22,166,7,197,249,22,190,3, +23,199,4,42,28,28,249,22,181,9,7,115,249,22,166,7,197,249,22,190,3, +23,199,4,41,249,22,181,9,7,115,249,22,166,7,197,249,22,190,3,23,199, 4,40,11,249,22,185,7,250,22,184,7,198,39,249,22,190,3,23,200,4,42, 2,39,193,193,193,2,28,249,22,168,7,194,2,36,2,27,28,249,22,168,7, 194,2,34,64,117,112,192,0,8,35,114,120,34,91,46,93,34,32,92,88,148, 8,36,40,50,11,2,31,222,33,93,28,248,22,90,23,194,2,9,250,22,93, -6,4,4,10,32,32,32,248,22,130,16,248,22,106,23,198,2,248,2,92,248, -22,183,20,23,198,1,28,249,22,181,9,248,22,84,23,200,2,23,196,1,28, -249,22,179,9,248,22,182,20,23,200,1,23,198,1,251,22,190,11,2,22,6, +6,4,4,10,32,32,32,248,22,132,16,248,22,106,23,198,2,248,2,92,248, +22,185,20,23,198,1,28,249,22,183,9,248,22,84,23,200,2,23,196,1,28, +249,22,181,9,248,22,184,20,23,200,1,23,198,1,251,22,128,12,2,22,6, 41,41,99,121,99,108,101,32,105,110,32,108,111,97,100,105,110,103,10,32,32, 97,116,32,112,97,116,104,58,32,126,97,10,32,32,112,97,116,104,115,58,126, 97,23,197,1,249,22,1,22,185,7,248,2,92,248,22,98,23,203,1,12,12, @@ -1376,184 +1361,184 @@ 252,80,144,54,42,40,249,22,31,11,80,144,56,41,40,22,134,5,23,204,2, 22,136,5,248,28,23,199,2,20,20,94,88,148,8,36,40,49,11,9,223,6, 33,96,23,199,1,86,94,23,199,1,22,7,28,248,22,66,23,201,2,23,200, -1,28,28,248,22,80,23,201,2,249,22,179,9,248,22,182,20,23,203,2,2, +1,28,28,248,22,80,23,201,2,249,22,181,9,248,22,184,20,23,203,2,2, 32,11,23,200,1,86,94,23,200,1,28,248,22,159,5,23,206,2,27,248,22, 161,5,23,207,2,28,248,22,66,193,249,22,92,2,5,194,192,23,205,2,249, -247,22,185,5,23,198,1,27,248,22,70,248,22,130,16,23,203,1,28,23,198, -2,28,250,22,161,2,248,22,182,20,23,207,1,23,205,1,11,249,22,82,11, +247,22,185,5,23,198,1,27,248,22,70,248,22,132,16,23,203,1,28,23,198, +2,28,250,22,161,2,248,22,184,20,23,207,1,23,205,1,11,249,22,82,11, 199,249,22,82,194,199,192,86,96,28,248,22,170,5,23,196,2,11,28,248,22, -161,4,23,198,2,250,22,128,12,11,6,15,15,98,97,100,32,109,111,100,117, -108,101,32,112,97,116,104,23,200,2,250,22,130,12,2,22,2,33,23,198,2, -28,28,23,196,2,248,22,159,5,23,197,2,10,11,250,22,130,12,2,22,6, -31,31,40,111,114,47,99,32,35,102,32,114,101,115,111,108,118,101,100,45,109, -111,100,117,108,101,45,112,97,116,104,63,41,23,199,2,28,28,23,197,2,248, -22,161,4,23,198,2,10,11,250,22,130,12,2,22,6,17,17,40,111,114,47, -99,32,35,102,32,115,121,110,116,97,120,63,41,23,200,2,27,32,0,88,148, +161,4,23,198,2,250,22,130,12,11,6,15,15,98,97,100,32,109,111,100,117, +108,101,32,112,97,116,104,23,200,2,250,22,132,12,2,22,2,33,23,198,2, +28,23,196,2,28,248,22,159,5,23,197,2,11,250,22,132,12,2,22,6,31, +31,40,111,114,47,99,32,35,102,32,114,101,115,111,108,118,101,100,45,109,111, +100,117,108,101,45,112,97,116,104,63,41,23,199,2,11,28,23,197,2,28,248, +22,161,4,23,198,2,11,250,22,132,12,2,22,6,17,17,40,111,114,47,99, +32,35,102,32,115,121,110,116,97,120,63,41,23,200,2,11,27,32,0,88,148, 39,41,50,11,78,102,108,97,116,116,101,110,45,115,117,98,45,112,97,116,104, -222,33,87,28,28,248,22,80,23,197,2,249,22,179,9,248,22,182,20,23,199, +222,33,87,28,28,248,22,80,23,197,2,249,22,181,9,248,22,184,20,23,199, 2,2,5,11,86,98,23,199,1,23,198,1,23,197,1,23,194,1,23,193,1, 248,22,160,5,248,22,105,23,198,1,28,28,248,22,80,23,197,2,28,249,22, -179,9,248,22,182,20,23,199,2,2,35,28,248,22,80,248,22,105,23,198,2, -249,22,179,9,248,22,109,23,199,2,2,5,11,11,11,86,97,23,199,1,23, +181,9,248,22,184,20,23,199,2,2,35,28,248,22,80,248,22,105,23,198,2, +249,22,181,9,248,22,109,23,199,2,2,5,11,11,11,86,97,23,199,1,23, 198,1,23,197,1,23,194,1,248,22,160,5,249,23,196,1,248,22,122,23,200, -2,248,22,107,23,200,1,28,28,248,22,80,23,197,2,28,249,22,179,9,248, -22,182,20,23,199,2,2,35,28,28,249,22,181,9,248,22,105,23,199,2,2, -36,10,249,22,181,9,248,22,105,23,199,2,2,34,28,23,197,2,27,248,22, +2,248,22,107,23,200,1,28,28,248,22,80,23,197,2,28,249,22,181,9,248, +22,184,20,23,199,2,2,35,28,28,249,22,183,9,248,22,105,23,199,2,2, +36,10,249,22,183,9,248,22,105,23,199,2,2,34,28,23,197,2,27,248,22, 161,5,23,199,2,28,248,22,66,193,10,28,248,22,80,193,248,22,66,248,22, -182,20,194,11,11,11,11,11,86,96,23,199,1,23,198,1,23,194,1,27,248, +184,20,194,11,11,11,11,11,86,96,23,199,1,23,198,1,23,194,1,27,248, 22,161,5,23,199,1,248,22,160,5,249,23,197,1,28,248,22,80,23,197,2, -248,22,182,20,23,197,2,23,196,2,27,28,249,22,181,9,248,22,105,23,204, -2,2,34,248,22,183,20,201,248,22,107,201,28,248,22,80,23,198,2,249,22, -97,248,22,183,20,199,194,192,28,28,248,22,80,23,197,2,249,22,179,9,248, -22,182,20,23,199,2,2,38,11,86,94,23,193,1,86,94,248,80,144,42,8, +248,22,184,20,23,197,2,23,196,2,27,28,249,22,183,9,248,22,105,23,204, +2,2,34,248,22,185,20,201,248,22,107,201,28,248,22,80,23,198,2,249,22, +97,248,22,185,20,199,194,192,28,28,248,22,80,23,197,2,249,22,181,9,248, +22,184,20,23,199,2,2,38,11,86,94,23,193,1,86,94,248,80,144,42,8, 28,42,23,195,2,253,24,200,1,23,202,1,23,203,1,23,204,1,23,205,1, -11,80,143,47,59,28,28,248,22,80,23,197,2,28,249,22,179,9,248,22,182, -20,23,199,2,2,35,28,248,22,80,248,22,105,23,198,2,249,22,179,9,248, +11,80,143,47,59,28,28,248,22,80,23,197,2,28,249,22,181,9,248,22,184, +20,23,199,2,2,35,28,248,22,80,248,22,105,23,198,2,249,22,181,9,248, 22,109,23,199,2,2,38,11,11,11,86,94,23,193,1,86,94,248,80,144,42, 8,28,42,23,195,2,253,24,200,1,248,22,105,23,203,2,23,203,1,23,204, 1,23,205,1,248,22,107,23,203,1,80,143,47,59,86,94,23,194,1,27,88, 148,8,36,40,57,8,240,0,0,8,0,1,19,115,104,111,119,45,99,111,108, 108,101,99,116,105,111,110,45,101,114,114,225,3,4,6,33,88,27,32,0,88, 148,8,36,40,53,11,69,115,115,45,62,114,107,116,222,33,89,27,28,248,22, -80,23,200,2,28,249,22,179,9,2,35,248,22,182,20,23,202,2,27,248,22, -105,23,201,2,28,28,249,22,181,9,23,195,2,2,36,10,249,22,181,9,23, +80,23,200,2,28,249,22,181,9,2,35,248,22,184,20,23,202,2,27,248,22, +105,23,201,2,28,28,249,22,183,9,23,195,2,2,36,10,249,22,183,9,23, 195,2,2,34,86,94,23,193,1,28,23,201,2,27,248,22,161,5,23,203,2, -28,248,22,80,193,248,22,182,20,193,192,250,22,190,11,2,22,6,45,45,110, +28,248,22,80,193,248,22,184,20,193,192,250,22,128,12,2,22,6,45,45,110, 111,32,98,97,115,101,32,112,97,116,104,32,102,111,114,32,114,101,108,97,116, 105,118,101,32,115,117,98,109,111,100,117,108,101,32,112,97,116,104,58,32,126, 46,115,23,203,2,192,23,199,2,23,199,2,27,28,248,22,80,23,201,2,28, -249,22,179,9,2,35,248,22,182,20,23,203,2,27,28,28,28,249,22,181,9, -248,22,105,23,204,2,2,36,10,249,22,181,9,248,22,105,23,204,2,2,34, -23,202,2,11,27,248,22,161,5,23,204,2,27,28,249,22,181,9,248,22,105, -23,206,2,2,34,248,22,183,20,23,204,1,248,22,107,23,204,1,28,248,22, -80,23,195,2,249,23,202,1,248,22,182,20,23,197,2,249,22,97,248,22,183, -20,23,199,1,23,197,1,249,23,202,1,23,196,1,23,195,1,249,23,200,1, -2,36,28,249,22,181,9,248,22,105,23,206,2,2,34,248,22,183,20,23,204, -1,248,22,107,23,204,1,28,248,22,80,193,248,22,183,20,193,11,86,95,23, -200,1,23,197,1,11,86,95,23,200,1,23,197,1,11,27,28,248,22,66,23, -196,2,86,94,23,196,1,27,248,80,144,48,51,42,249,22,82,23,199,2,248, -22,145,17,247,22,157,14,28,23,193,2,86,94,23,198,1,192,90,144,41,11, -89,146,41,39,11,249,80,144,51,57,42,248,22,73,23,201,2,11,27,28,248, -22,90,23,195,2,2,40,249,22,185,7,23,197,2,2,39,252,80,144,55,8, -23,42,23,206,1,28,248,22,90,23,200,2,23,200,1,86,94,23,200,1,248, -22,83,23,200,2,28,248,22,90,23,200,2,86,94,23,199,1,9,248,22,84, -23,200,1,23,198,1,10,28,248,22,162,7,23,196,2,86,94,23,197,1,27, -248,80,144,48,8,29,42,23,204,2,27,248,80,144,49,51,42,249,22,82,23, -200,2,23,197,2,28,23,193,2,86,95,23,198,1,23,194,1,192,90,144,41, -11,89,146,41,39,11,249,80,144,52,57,42,23,201,2,11,28,248,22,90,23, -194,2,86,94,23,193,1,249,22,144,16,23,198,1,248,23,203,1,23,197,1, -250,22,1,22,144,16,23,199,1,249,22,97,249,22,2,32,0,88,148,8,36, -40,47,11,9,222,33,90,23,200,1,248,22,92,248,23,207,1,23,201,1,28, -248,22,190,15,23,196,2,86,95,23,197,1,23,196,1,248,80,144,47,8,30, -42,248,22,154,16,28,248,22,151,16,23,198,2,23,197,2,249,22,152,16,23, -199,2,248,80,144,51,8,29,42,23,207,2,28,249,22,179,9,248,22,83,23, -198,2,2,32,27,248,80,144,48,51,42,249,22,82,23,199,2,248,22,145,17, -247,22,157,14,28,23,193,2,86,95,23,198,1,23,197,1,192,90,144,41,11, -89,146,41,39,11,249,80,144,51,57,42,248,22,105,23,201,2,11,27,28,248, -22,90,248,22,107,23,201,2,28,248,22,90,23,195,2,249,22,188,16,2,91, -23,197,2,11,10,27,28,23,194,2,248,23,202,1,23,197,2,28,248,22,90, -23,196,2,86,94,23,201,1,2,40,28,249,22,188,16,2,91,23,198,2,248, -23,202,1,23,197,2,86,94,23,201,1,249,22,185,7,23,198,2,2,39,27, -28,23,195,1,86,94,23,197,1,249,22,97,28,248,22,90,248,22,107,23,205, -2,21,93,6,5,5,109,122,108,105,98,249,22,1,22,97,249,22,2,80,144, -58,8,31,42,248,22,107,23,208,2,23,198,1,28,248,22,90,23,197,2,86, -94,23,196,1,248,22,92,23,198,1,86,94,23,197,1,23,196,1,252,80,144, -57,8,23,42,23,208,1,248,22,83,23,199,2,248,22,183,20,23,199,1,23, -199,1,10,86,95,23,197,1,23,196,1,28,249,22,179,9,248,22,182,20,23, -198,2,2,37,248,80,144,47,8,30,42,248,22,154,16,249,22,152,16,248,22, -156,16,248,22,105,23,201,2,248,80,144,51,8,29,42,23,207,2,12,86,94, -28,28,248,22,190,15,23,194,2,10,248,22,129,9,23,194,2,11,28,23,203, -2,250,22,128,12,69,114,101,113,117,105,114,101,249,22,146,8,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,83,23,199,2,6,0,0,23,206,2,250,22,130,12,2,22,2,33,23,198, -2,27,28,248,22,129,9,23,195,2,249,22,134,9,23,196,2,39,249,22,154, -16,248,22,155,16,23,197,2,11,27,28,248,22,129,9,23,196,2,249,22,134, -9,23,197,2,40,248,80,144,49,8,24,42,23,195,2,90,144,42,11,89,146, -42,39,11,28,248,22,129,9,23,199,2,250,22,7,2,41,249,22,134,9,23, -203,2,41,2,41,248,22,147,16,23,198,2,86,95,23,195,1,23,193,1,27, -28,248,22,129,9,23,200,2,249,22,134,9,23,201,2,42,249,80,144,54,61, -42,23,197,2,5,0,27,28,248,22,129,9,23,201,2,249,22,134,9,23,202, -2,43,248,22,160,5,23,200,2,27,250,22,161,2,80,144,57,44,41,248,22, -145,17,247,22,157,14,11,27,28,23,194,2,23,194,1,86,94,23,194,1,27, -249,22,82,247,22,141,2,247,22,141,2,86,94,250,22,159,2,80,144,59,44, -41,248,22,145,17,247,22,157,14,195,192,27,28,23,204,2,248,22,160,5,249, -22,82,248,22,161,5,23,200,2,23,207,2,23,196,2,86,95,28,23,214,2, -28,250,22,161,2,248,22,83,23,198,2,195,11,86,96,23,213,1,23,204,1, -23,194,1,11,27,251,22,31,11,80,144,61,53,41,9,28,248,22,15,80,144, -8,23,54,41,80,144,61,54,41,247,22,17,27,248,22,145,17,247,22,157,14, -86,94,249,22,3,88,148,8,36,40,57,11,9,226,2,3,12,13,33,94,23, -196,2,248,28,248,22,15,80,144,60,54,41,32,0,88,148,39,40,45,11,9, -222,33,95,80,144,59,8,32,42,20,20,98,88,148,39,39,8,25,8,240,12, -64,0,0,9,233,20,1,2,4,6,7,11,12,14,15,23,33,97,23,216,1, -23,207,1,23,197,1,23,195,1,23,194,1,86,96,23,213,1,23,204,1,23, -194,1,11,28,28,248,22,129,9,23,204,1,86,94,23,214,1,11,28,23,214, -1,28,248,22,162,7,23,206,2,10,28,248,22,66,23,206,2,10,28,248,22, -80,23,206,2,249,22,179,9,248,22,182,20,23,208,2,2,32,11,11,249,80, -144,58,52,42,28,248,22,162,7,23,208,2,249,22,82,23,209,1,248,80,144, -61,8,29,42,23,217,1,86,94,23,214,1,249,22,82,23,209,1,248,22,145, -17,247,22,157,14,252,22,131,9,23,209,1,23,208,1,23,206,1,23,204,1, -23,203,1,11,192,86,96,20,18,144,11,80,143,39,59,248,80,144,40,8,27, -40,249,22,31,11,80,144,42,41,40,248,22,133,5,80,144,40,60,41,248,22, -185,5,80,144,40,40,41,248,22,156,15,80,144,40,48,42,20,18,144,11,80, -143,39,59,248,80,144,40,8,27,40,249,22,31,11,80,144,42,41,40,20,18, -144,11,80,143,39,59,248,80,144,40,8,27,40,249,22,31,11,80,144,42,41, -40,145,40,9,20,122,145,2,1,39,16,1,11,16,0,20,27,15,56,9,2, -2,2,2,29,11,11,11,11,11,11,11,9,9,11,11,11,10,43,80,143,39, -39,20,122,145,2,1,44,16,28,2,3,2,4,30,2,6,1,20,112,97,114, -97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,11,6,30,2, -6,1,23,101,120,116,101,110,100,45,112,97,114,97,109,101,116,101,114,105,122, -97,116,105,111,110,11,4,30,2,7,74,112,97,116,104,45,115,116,114,105,110, -103,63,42,196,15,2,8,30,2,7,73,114,101,114,111,111,116,45,112,97,116, -104,44,196,16,30,2,7,1,18,112,97,116,104,45,97,100,100,45,101,120,116, -101,110,115,105,111,110,44,196,12,2,9,2,10,2,11,2,12,2,13,2,14, -2,15,2,16,2,17,2,18,2,19,2,20,2,21,2,22,30,2,7,1,22, -112,97,116,104,45,114,101,112,108,97,99,101,45,101,120,116,101,110,115,105,111, -110,44,196,14,30,2,7,75,102,105,110,100,45,99,111,108,45,102,105,108,101, -49,196,4,30,2,7,78,110,111,114,109,97,108,45,99,97,115,101,45,112,97, -116,104,42,196,11,2,23,2,24,30,2,6,76,114,101,112,97,114,97,109,101, -116,101,114,105,122,101,11,7,16,0,40,42,39,16,0,39,16,16,2,15,2, -16,2,8,2,12,2,17,2,18,2,11,2,4,2,10,2,3,2,20,2,13, -2,14,2,9,2,19,2,22,55,11,11,11,16,3,2,23,2,21,2,24,16, -3,11,11,11,16,3,2,23,2,21,2,24,42,42,40,12,11,11,16,0,16, -0,16,0,39,39,11,12,11,11,16,0,16,0,16,0,39,39,16,24,20,15, -16,2,248,22,189,8,71,115,111,45,115,117,102,102,105,120,80,144,39,39,40, -20,15,16,2,27,249,22,179,9,247,22,177,16,76,109,111,100,105,102,121,45, -115,101,99,111,110,100,115,88,148,39,41,8,42,8,189,7,2,4,224,1,0, -33,54,80,144,39,40,40,20,15,16,2,32,0,88,148,8,36,44,55,11,2, -9,222,33,55,80,144,39,47,40,20,15,16,2,20,28,143,32,0,88,148,8, -36,40,45,11,2,10,222,192,32,0,88,148,8,36,40,45,11,2,10,222,192, -80,144,39,48,40,20,15,16,2,247,22,144,2,80,144,39,44,40,20,15,16, -2,8,128,8,80,144,39,49,40,20,15,16,2,249,22,130,9,8,128,8,11, -80,144,39,50,40,20,15,16,2,88,148,8,36,40,53,8,128,32,2,13,223, -0,33,56,80,144,39,51,40,20,15,16,2,88,148,8,36,41,57,8,128,32, -2,14,223,0,33,57,80,144,39,52,40,20,15,16,2,247,22,78,80,144,39, -53,40,20,15,16,2,248,22,16,76,109,111,100,117,108,101,45,108,111,97,100, -105,110,103,80,144,39,54,40,20,15,16,2,11,80,143,39,55,20,15,16,2, -11,80,143,39,56,20,15,16,2,32,0,88,148,39,41,60,11,2,19,222,33, -76,80,144,39,57,40,20,15,16,2,32,0,88,148,8,36,40,52,11,2,20, -222,33,77,80,144,39,58,40,20,15,16,2,11,80,143,39,59,20,15,16,2, -88,149,8,34,40,48,8,240,4,0,16,0,1,21,112,114,101,112,45,112,108, -97,110,101,116,45,114,101,115,111,108,118,101,114,33,40,224,1,0,33,78,80, -144,39,8,28,42,20,15,16,2,88,148,39,40,53,8,240,0,0,3,0,69, -103,101,116,45,100,105,114,223,0,33,79,80,144,39,8,29,42,20,15,16,2, -88,148,39,40,52,8,240,0,0,64,0,74,112,97,116,104,45,115,115,45,62, -114,107,116,223,0,33,80,80,144,39,8,30,42,20,15,16,2,88,148,8,36, -40,48,8,240,0,0,4,0,9,223,0,33,81,80,144,39,8,31,42,20,15, -16,2,88,148,39,40,48,8,240,0,128,0,0,9,223,0,33,82,80,144,39, -8,32,42,20,15,16,2,27,11,20,19,143,39,90,144,40,10,89,146,40,39, -10,20,26,96,2,22,88,148,8,36,41,57,8,32,9,224,2,1,33,83,88, -148,39,42,52,11,9,223,0,33,84,88,148,39,43,8,34,16,4,8,240,44, -240,0,0,8,240,220,241,0,0,40,39,9,224,2,1,33,98,207,80,144,39, -60,40,20,15,16,2,88,148,39,39,48,16,2,8,134,8,8,176,32,2,23, -223,0,33,99,80,144,39,8,25,40,20,15,16,2,20,28,143,88,148,8,36, -39,48,16,2,43,8,144,32,2,24,223,0,33,100,88,148,8,36,39,48,16, -2,43,8,144,32,2,24,223,0,33,101,80,144,39,8,26,40,96,29,94,2, -5,70,35,37,107,101,114,110,101,108,11,29,94,2,5,71,35,37,109,105,110, -45,115,116,120,11,2,7,2,6,9,9,9,39,9,0}; - EVAL_ONE_SIZED_STR((char *)expr, 10346); +249,22,181,9,2,35,248,22,184,20,23,203,2,27,28,28,249,22,183,9,248, +22,105,23,204,2,2,36,23,202,2,28,249,22,183,9,248,22,105,23,204,2, +2,34,23,202,2,11,27,248,22,161,5,23,204,2,27,28,249,22,183,9,248, +22,105,23,206,2,2,34,248,22,185,20,23,204,1,248,22,107,23,204,1,28, +248,22,80,23,195,2,249,23,202,1,248,22,184,20,23,197,2,249,22,97,248, +22,185,20,23,199,1,23,197,1,249,23,202,1,23,196,1,23,195,1,249,23, +200,1,2,36,28,249,22,183,9,248,22,105,23,206,2,2,34,248,22,185,20, +23,204,1,248,22,107,23,204,1,28,248,22,80,193,248,22,185,20,193,11,86, +95,23,200,1,23,197,1,11,86,95,23,200,1,23,197,1,11,27,28,248,22, +66,23,196,2,86,94,23,196,1,27,248,80,144,48,51,42,249,22,82,23,199, +2,248,22,147,17,247,22,159,14,28,23,193,2,86,94,23,198,1,192,90,144, +41,11,89,146,41,39,11,249,80,144,51,57,42,248,22,73,23,201,2,11,27, +28,248,22,90,23,195,2,2,40,249,22,185,7,23,197,2,2,39,252,80,144, +55,8,23,42,23,206,1,28,248,22,90,23,200,2,23,200,1,86,94,23,200, +1,248,22,83,23,200,2,28,248,22,90,23,200,2,86,94,23,199,1,9,248, +22,84,23,200,1,23,198,1,10,28,248,22,162,7,23,196,2,86,94,23,197, +1,27,248,80,144,48,8,29,42,23,204,2,27,248,80,144,49,51,42,249,22, +82,23,200,2,23,197,2,28,23,193,2,86,95,23,198,1,23,194,1,192,90, +144,41,11,89,146,41,39,11,249,80,144,52,57,42,23,201,2,11,28,248,22, +90,23,194,2,86,94,23,193,1,249,22,146,16,23,198,1,248,23,203,1,23, +197,1,250,22,1,22,146,16,23,199,1,249,22,97,249,22,2,32,0,88,148, +8,36,40,47,11,9,222,33,90,23,200,1,248,22,92,248,23,207,1,23,201, +1,28,248,22,128,16,23,196,2,86,95,23,197,1,23,196,1,248,80,144,47, +8,30,42,248,22,156,16,28,248,22,153,16,23,198,2,23,197,2,249,22,154, +16,23,199,2,248,80,144,51,8,29,42,23,207,2,28,249,22,181,9,248,22, +83,23,198,2,2,32,27,248,80,144,48,51,42,249,22,82,23,199,2,248,22, +147,17,247,22,159,14,28,23,193,2,86,95,23,198,1,23,197,1,192,90,144, +41,11,89,146,41,39,11,249,80,144,51,57,42,248,22,105,23,201,2,11,27, +28,248,22,90,248,22,107,23,201,2,28,248,22,90,23,195,2,249,22,190,16, +2,91,23,197,2,11,10,27,28,23,194,2,248,23,202,1,23,197,2,28,248, +22,90,23,196,2,86,94,23,201,1,2,40,28,249,22,190,16,2,91,23,198, +2,248,23,202,1,23,197,2,86,94,23,201,1,249,22,185,7,23,198,2,2, +39,27,28,23,195,1,86,94,23,197,1,249,22,97,28,248,22,90,248,22,107, +23,205,2,21,93,6,5,5,109,122,108,105,98,249,22,1,22,97,249,22,2, +80,144,58,8,31,42,248,22,107,23,208,2,23,198,1,28,248,22,90,23,197, +2,86,94,23,196,1,248,22,92,23,198,1,86,94,23,197,1,23,196,1,252, +80,144,57,8,23,42,23,208,1,248,22,83,23,199,2,248,22,185,20,23,199, +1,23,199,1,10,86,95,23,197,1,23,196,1,28,249,22,181,9,248,22,184, +20,23,198,2,2,37,248,80,144,47,8,30,42,248,22,156,16,249,22,154,16, +248,22,158,16,248,22,105,23,201,2,248,80,144,51,8,29,42,23,207,2,12, +86,94,28,248,22,128,16,23,194,2,11,28,248,22,129,9,23,194,2,11,28, +23,203,2,250,22,130,12,69,114,101,113,117,105,114,101,249,22,146,8,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,83,23,199,2,6,0,0,23,206,2,250,22,132,12,2,22,2,33, +23,198,2,27,28,248,22,129,9,23,195,2,249,22,134,9,23,196,2,39,249, +22,156,16,248,22,157,16,23,197,2,11,27,28,248,22,129,9,23,196,2,249, +22,134,9,23,197,2,40,248,80,144,49,8,24,42,23,195,2,90,144,42,11, +89,146,42,39,11,28,248,22,129,9,23,199,2,250,22,7,2,41,249,22,134, +9,23,203,2,41,2,41,248,22,149,16,23,198,2,86,95,23,195,1,23,193, +1,27,28,248,22,129,9,23,200,2,249,22,134,9,23,201,2,42,249,80,144, +54,61,42,23,197,2,5,0,27,28,248,22,129,9,23,201,2,249,22,134,9, +23,202,2,43,248,22,160,5,23,200,2,27,250,22,161,2,80,144,57,44,41, +248,22,147,17,247,22,159,14,11,27,28,23,194,2,23,194,1,86,94,23,194, +1,27,249,22,82,247,22,141,2,247,22,141,2,86,94,250,22,159,2,80,144, +59,44,41,248,22,147,17,247,22,159,14,195,192,27,28,23,204,2,248,22,160, +5,249,22,82,248,22,161,5,23,200,2,23,207,2,23,196,2,86,95,28,23, +214,2,28,250,22,161,2,248,22,83,23,198,2,195,11,86,96,23,213,1,23, +204,1,23,194,1,11,27,251,22,31,11,80,144,61,53,41,9,28,248,22,15, +80,144,8,23,54,41,80,144,61,54,41,247,22,17,27,248,22,147,17,247,22, +159,14,86,94,249,22,3,88,148,8,36,40,57,11,9,226,2,3,12,13,33, +94,23,196,2,248,28,248,22,15,80,144,60,54,41,32,0,88,148,39,40,45, +11,9,222,33,95,80,144,59,8,32,42,20,20,98,88,148,39,39,8,25,8, +240,12,64,0,0,9,233,20,1,2,4,6,7,11,12,14,15,23,33,97,23, +216,1,23,207,1,23,197,1,23,195,1,23,194,1,86,96,23,213,1,23,204, +1,23,194,1,11,28,248,22,129,9,23,204,1,11,28,23,214,1,28,28,248, +22,162,7,23,206,2,10,28,248,22,66,23,206,2,10,28,248,22,80,23,206, +2,249,22,181,9,248,22,184,20,23,208,2,2,32,11,249,80,144,58,52,42, +28,248,22,162,7,23,208,2,249,22,82,23,209,1,248,80,144,61,8,29,42, +23,217,1,86,94,23,214,1,249,22,82,23,209,1,248,22,147,17,247,22,159, +14,252,22,131,9,23,209,1,23,208,1,23,206,1,23,204,1,23,203,1,11, +11,192,86,96,20,18,144,11,80,143,39,59,248,80,144,40,8,27,40,249,22, +31,11,80,144,42,41,40,248,22,133,5,80,144,40,60,41,248,22,185,5,80, +144,40,40,41,248,22,158,15,80,144,40,48,42,20,18,144,11,80,143,39,59, +248,80,144,40,8,27,40,249,22,31,11,80,144,42,41,40,20,18,144,11,80, +143,39,59,248,80,144,40,8,27,40,249,22,31,11,80,144,42,41,40,145,40, +9,20,122,145,2,1,39,16,1,11,16,0,20,27,15,56,9,2,2,2,2, +29,11,11,11,11,11,11,11,9,9,11,11,11,10,43,80,143,39,39,20,122, +145,2,1,44,16,28,2,3,2,4,30,2,6,1,20,112,97,114,97,109,101, +116,101,114,105,122,97,116,105,111,110,45,107,101,121,11,6,30,2,6,1,23, +101,120,116,101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105, +111,110,11,4,30,2,7,74,112,97,116,104,45,115,116,114,105,110,103,63,42, +196,15,2,8,30,2,7,73,114,101,114,111,111,116,45,112,97,116,104,44,196, +16,30,2,7,1,18,112,97,116,104,45,97,100,100,45,101,120,116,101,110,115, +105,111,110,44,196,12,2,9,2,10,2,11,2,12,2,13,2,14,2,15,2, +16,2,17,2,18,2,19,2,20,2,21,2,22,30,2,7,1,22,112,97,116, +104,45,114,101,112,108,97,99,101,45,101,120,116,101,110,115,105,111,110,44,196, +14,30,2,7,75,102,105,110,100,45,99,111,108,45,102,105,108,101,49,196,4, +30,2,7,78,110,111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,42, +196,11,2,23,2,24,30,2,6,76,114,101,112,97,114,97,109,101,116,101,114, +105,122,101,11,7,16,0,40,42,39,16,0,39,16,16,2,15,2,16,2,8, +2,12,2,17,2,18,2,11,2,4,2,10,2,3,2,20,2,13,2,14,2, +9,2,19,2,22,55,11,11,11,16,3,2,23,2,21,2,24,16,3,11,11, +11,16,3,2,23,2,21,2,24,42,42,40,12,11,11,16,0,16,0,16,0, +39,39,11,12,11,11,16,0,16,0,16,0,39,39,16,24,20,15,16,2,248, +22,189,8,71,115,111,45,115,117,102,102,105,120,80,144,39,39,40,20,15,16, +2,27,249,22,181,9,247,22,179,16,76,109,111,100,105,102,121,45,115,101,99, +111,110,100,115,88,148,39,41,8,42,8,189,7,2,4,224,1,0,33,54,80, +144,39,40,40,20,15,16,2,32,0,88,148,8,36,44,55,11,2,9,222,33, +55,80,144,39,47,40,20,15,16,2,20,28,143,32,0,88,148,8,36,40,45, +11,2,10,222,192,32,0,88,148,8,36,40,45,11,2,10,222,192,80,144,39, +48,40,20,15,16,2,247,22,144,2,80,144,39,44,40,20,15,16,2,8,128, +8,80,144,39,49,40,20,15,16,2,249,22,130,9,8,128,8,11,80,144,39, +50,40,20,15,16,2,88,148,8,36,40,53,8,128,32,2,13,223,0,33,56, +80,144,39,51,40,20,15,16,2,88,148,8,36,41,57,8,128,32,2,14,223, +0,33,57,80,144,39,52,40,20,15,16,2,247,22,78,80,144,39,53,40,20, +15,16,2,248,22,16,76,109,111,100,117,108,101,45,108,111,97,100,105,110,103, +80,144,39,54,40,20,15,16,2,11,80,143,39,55,20,15,16,2,11,80,143, +39,56,20,15,16,2,32,0,88,148,39,41,60,11,2,19,222,33,76,80,144, +39,57,40,20,15,16,2,32,0,88,148,8,36,40,52,11,2,20,222,33,77, +80,144,39,58,40,20,15,16,2,11,80,143,39,59,20,15,16,2,88,149,8, +34,40,48,8,240,4,0,16,0,1,21,112,114,101,112,45,112,108,97,110,101, +116,45,114,101,115,111,108,118,101,114,33,40,224,1,0,33,78,80,144,39,8, +28,42,20,15,16,2,88,148,39,40,53,8,240,0,0,3,0,69,103,101,116, +45,100,105,114,223,0,33,79,80,144,39,8,29,42,20,15,16,2,88,148,39, +40,52,8,240,0,0,64,0,74,112,97,116,104,45,115,115,45,62,114,107,116, +223,0,33,80,80,144,39,8,30,42,20,15,16,2,88,148,8,36,40,48,8, +240,0,0,4,0,9,223,0,33,81,80,144,39,8,31,42,20,15,16,2,88, +148,39,40,48,8,240,0,128,0,0,9,223,0,33,82,80,144,39,8,32,42, +20,15,16,2,27,11,20,19,143,39,90,144,40,10,89,146,40,39,10,20,26, +96,2,22,88,148,8,36,41,57,8,32,9,224,2,1,33,83,88,148,39,42, +52,11,9,223,0,33,84,88,148,39,43,8,34,16,4,8,240,44,240,0,0, +8,240,220,241,0,0,40,39,9,224,2,1,33,98,207,80,144,39,60,40,20, +15,16,2,88,148,39,39,48,16,2,8,134,8,8,176,32,2,23,223,0,33, +99,80,144,39,8,25,40,20,15,16,2,20,28,143,88,148,8,36,39,48,16, +2,43,8,144,32,2,24,223,0,33,100,88,148,8,36,39,48,16,2,43,8, +144,32,2,24,223,0,33,101,80,144,39,8,26,40,96,29,94,2,5,70,35, +37,107,101,114,110,101,108,11,29,94,2,5,71,35,37,109,105,110,45,115,116, +120,11,2,7,2,6,9,9,9,39,9,0}; + EVAL_ONE_SIZED_STR((char *)expr, 10343); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,55,46,48,46,51,84,0,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,57,46,48,46,50,84,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,18,0,0,0,1,0,0,8,0,18,0, 22,0,28,0,42,0,56,0,68,0,88,0,102,0,117,0,130,0,135,0,139, 0,151,0,235,0,242,0,20,1,0,0,224,1,0,0,3,1,5,105,110,115, diff --git a/racket/src/racket/src/fun.c b/racket/src/racket/src/fun.c index 813b34e8a7..98277003b4 100644 --- a/racket/src/racket/src/fun.c +++ b/racket/src/racket/src/fun.c @@ -3649,7 +3649,8 @@ static Scheme_Object *do_chaperone_procedure(const char *name, const char *whati initialized to -1) in a vector. Vector of odd size for redirects means a procedure chaperone, - vector with even slots means a structure chaperone. + vector with non-zero even slots means a structure chaperone, + vector with zero slots means a property-only vector chaperone. A size of 5 (instead of 3) indicates that the wrapper procedure accepts a "self" argument. An immutable vector means that it wraps a chaperone that wants the "self" diff --git a/racket/src/racket/src/jitcommon.c b/racket/src/racket/src/jitcommon.c index a80df8ffda..781e203dc3 100644 --- a/racket/src/racket/src/jitcommon.c +++ b/racket/src/racket/src/jitcommon.c @@ -1049,7 +1049,7 @@ static int generate_apply_proxy(mz_jit_state *jitter, int setter) original chaperone and index on runstack; for setter, put back result in R2, vec in R0, and index in V1 */ { - GC_CAN_IGNORE jit_insn *ref, *ref1, *ref2; + GC_CAN_IGNORE jit_insn *ref, *ref1, *ref2, *ref3, *ref_chaperone_of_check, *ref_not_star; GC_CAN_IGNORE jit_insn *refrts USED_ONLY_FOR_FUTURES; CHECK_LIMIT(); @@ -1058,12 +1058,13 @@ static int generate_apply_proxy(mz_jit_state *jitter, int setter) /* if chaperone was for properties, only, then we're done */ ref = mz_beqi_t(jit_forward(), JIT_R1, scheme_vector_type, JIT_V1); + /* unsafe vector chaperones also don't have any interposition */ + ref1 = mz_beqi_t(jit_forward(), JIT_R1, scheme_false_type, JIT_V1); if (setter) jit_ldxi_p(JIT_V1, JIT_R1, &SCHEME_CDR(0x0)); /* rator */ else jit_ldxi_p(JIT_V1, JIT_R1, &SCHEME_CAR(0x0)); /* rator */ - jit_ldxi_p(JIT_R2, JIT_R2, &((Scheme_Chaperone *)0x0)->prev); /* vec */ jit_ldxi_p(JIT_R1, JIT_RUNSTACK, WORDS_TO_BYTES(1)); /* index */ if (setter) { jit_subi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(4)); @@ -1073,9 +1074,37 @@ static int generate_apply_proxy(mz_jit_state *jitter, int setter) jit_stxi_p(WORDS_TO_BYTES(1), JIT_RUNSTACK, JIT_R0); /* save value */ jit_subi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(3)); } - jit_str_p(JIT_RUNSTACK, JIT_R2); - jit_stxi_p(WORDS_TO_BYTES(1), JIT_RUNSTACK, JIT_R1); + jit_stxi_p(WORDS_TO_BYTES(2), JIT_RUNSTACK, JIT_R0); + jit_stxi_p(WORDS_TO_BYTES(1), JIT_RUNSTACK, JIT_R1); + jit_ldxi_p(JIT_R0, JIT_R2, &((Scheme_Chaperone *)0x0)->prev); /* vec */ + jit_str_p(JIT_RUNSTACK, JIT_R0); + + /* if we have a chaperone-vector*, fall through and use extra arg */ + jit_ldxi_s(JIT_R2, JIT_R2, &MZ_OPT_HASH_KEY(&((Scheme_Stx *)0x0)->iso)); + ref_not_star = jit_bmci_ul(jit_forward(), JIT_R2, SCHEME_VEC_CHAPERONE_STAR); + /* get outermost from further down the stack */ + jit_subi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(1)); + if (setter){ + jit_ldxi_p(JIT_R0, JIT_RUNSTACK, WORDS_TO_BYTES(5)); + } else { + jit_ldxi_p(JIT_R0, JIT_RUNSTACK, WORDS_TO_BYTES(4)); + } + jit_str_p(JIT_RUNSTACK, JIT_R0); + CHECK_LIMIT(); + JIT_UPDATE_THREAD_RSPTR(); + __END_SHORT_JUMPS__(1); + scheme_generate_non_tail_call(jitter, 4, 0, 0, 0, 0, 0, 0, 1, 0, NULL); + __START_SHORT_JUMPS__(1); + CHECK_LIMIT(); + if (setter) { + jit_addi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(5)); + } else { + jit_addi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(4)); + } + ref_chaperone_of_check = jit_jmpi(jit_forward()); + + mz_patch_branch(ref_not_star); CHECK_LIMIT(); JIT_UPDATE_THREAD_RSPTR(); __END_SHORT_JUMPS__(1); @@ -1087,17 +1116,18 @@ static int generate_apply_proxy(mz_jit_state *jitter, int setter) } else { jit_addi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(3)); } - + + mz_patch_branch(ref_chaperone_of_check); jit_ldr_p(JIT_R1, JIT_RUNSTACK); jit_ldxi_s(JIT_R2, JIT_R1, &MZ_OPT_HASH_KEY(&((Scheme_Stx *)0x0)->iso)); /* if impersonator, no chaperone-of check needed */ - ref1 = jit_bmsi_ul(jit_forward(), JIT_R2, SCHEME_CHAPERONE_IS_IMPERSONATOR); + ref2 = jit_bmsi_ul(jit_forward(), JIT_R2, SCHEME_CHAPERONE_IS_IMPERSONATOR); if (setter) jit_ldxi_p(JIT_R1, JIT_RUNSTACK, WORDS_TO_BYTES(-1)); /* saved value */ else jit_ldxi_p(JIT_R1, JIT_RUNSTACK, WORDS_TO_BYTES(1)); /* saved value */ - ref2 = jit_beqr_p(jit_forward(), JIT_R1, JIT_R0); + ref3 = jit_beqr_p(jit_forward(), JIT_R1, JIT_R0); CHECK_LIMIT(); jit_prepare(3); jit_movi_i(JIT_R2, setter); @@ -1108,10 +1138,11 @@ static int generate_apply_proxy(mz_jit_state *jitter, int setter) (void)mz_finish_lwe(ts_vector_check_chaperone_of, refrts); jit_retval(JIT_R0); CHECK_LIMIT(); - + mz_patch_branch(ref); mz_patch_branch(ref1); mz_patch_branch(ref2); + mz_patch_branch(ref3); if (setter) { jit_movr_p(JIT_R2, JIT_R0); /* result needed in R2 for setter */ jit_ldxi_p(JIT_V1, JIT_RUNSTACK, WORDS_TO_BYTES(1)); /* saved index */ diff --git a/racket/src/racket/src/schminc.h b/racket/src/racket/src/schminc.h index c437c8afbf..14ba067924 100644 --- a/racket/src/racket/src/schminc.h +++ b/racket/src/racket/src/schminc.h @@ -14,8 +14,8 @@ #define USE_COMPILED_STARTUP 1 -#define EXPECTED_PRIM_COUNT 1153 -#define EXPECTED_UNSAFE_COUNT 126 +#define EXPECTED_PRIM_COUNT 1155 +#define EXPECTED_UNSAFE_COUNT 128 #define EXPECTED_FLFXNUM_COUNT 69 #define EXPECTED_EXTFL_COUNT 45 #define EXPECTED_FUTURES_COUNT 15 diff --git a/racket/src/racket/src/schpriv.h b/racket/src/racket/src/schpriv.h index 8bbbb9412b..1d841f2fb0 100644 --- a/racket/src/racket/src/schpriv.h +++ b/racket/src/racket/src/schpriv.h @@ -1166,6 +1166,13 @@ typedef struct Scheme_Chaperone { #define SCHEME_CHAPERONE_FLAGS(c) MZ_OPT_HASH_KEY(&(c)->iso) #define SCHEME_CHAPERONE_IS_IMPERSONATOR 0x1 #define SCHEME_PROC_CHAPERONE_CALL_DIRECT 0x2 +/* +We use the same bit to indicate either chaperone-vector* as well as +procedure chaperones which do not call interposition procedures. +This is ok because no value is simultaneously a vector and a procedure, +so we can safely reuse the bit. + */ +#define SCHEME_VEC_CHAPERONE_STAR 0x2 #define SCHEME_CHAPERONE_VAL(obj) (((Scheme_Chaperone *)obj)->val) diff --git a/racket/src/racket/src/schvers.h b/racket/src/racket/src/schvers.h index 776f07b51a..ee94858b2f 100644 --- a/racket/src/racket/src/schvers.h +++ b/racket/src/racket/src/schvers.h @@ -13,12 +13,12 @@ consistently.) */ -#define MZSCHEME_VERSION "6.9.0.1" +#define MZSCHEME_VERSION "6.9.0.2" #define MZSCHEME_VERSION_X 6 #define MZSCHEME_VERSION_Y 9 #define MZSCHEME_VERSION_Z 0 -#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/racket/src/racket/src/struct.c b/racket/src/racket/src/struct.c index 05df88dcde..a4a196f691 100644 --- a/racket/src/racket/src/struct.c +++ b/racket/src/racket/src/struct.c @@ -2465,6 +2465,11 @@ int scheme_is_noninterposing_chaperone(Scheme_Object *o) return 0; } + if (SCHEME_VEC_SIZE(px->redirects) == 0) { + /* property-only vector chaperone */ + return 1; + } + if (SCHEME_TRUEP(SCHEME_VEC_ELS(px->redirects)[0])) return 0; diff --git a/racket/src/racket/src/vector.c b/racket/src/racket/src/vector.c index 45eeea4d89..d9dd86c2aa 100644 --- a/racket/src/racket/src/vector.c +++ b/racket/src/racket/src/vector.c @@ -51,7 +51,11 @@ static Scheme_Object *vector_copy_bang(int argc, Scheme_Object *argv[]); static Scheme_Object *vector_to_immutable (int argc, Scheme_Object *argv[]); static Scheme_Object *vector_to_values (int argc, Scheme_Object *argv[]); static Scheme_Object *chaperone_vector(int argc, Scheme_Object **argv); +static Scheme_Object *chaperone_vector_star(int argc, Scheme_Object **argv); static Scheme_Object *impersonate_vector(int argc, Scheme_Object **argv); +static Scheme_Object *impersonate_vector_star(int argc, Scheme_Object **argv); +static Scheme_Object *unsafe_chaperone_vector(int argc, Scheme_Object **argv); +static Scheme_Object *unsafe_impersonate_vector(int argc, Scheme_Object **argv); static Scheme_Object *unsafe_vector_len (int argc, Scheme_Object *argv[]); static Scheme_Object *unsafe_vector_ref (int argc, Scheme_Object *argv[]); @@ -168,11 +172,24 @@ scheme_init_vector (Scheme_Env *env) "chaperone-vector", 3, -1), env); + + scheme_add_global_constant("chaperone-vector*", + scheme_make_prim_w_arity(chaperone_vector_star, + "chaperone-vector*", + 3, -1), + env); + scheme_add_global_constant("impersonate-vector", scheme_make_prim_w_arity(impersonate_vector, "impersonate-vector", 3, -1), env); + + scheme_add_global_constant("impersonate-vector*", + scheme_make_prim_w_arity(impersonate_vector_star, + "impersonate-vector*", + 3, -1), + env); } void @@ -272,6 +289,18 @@ scheme_init_unsafe_vector (Scheme_Env *env) p = scheme_make_immed_prim(unsafe_bytes_set, "unsafe-bytes-set!", 3, 3); SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("unsafe-bytes-set!", p, env); + + scheme_add_global_constant("unsafe-impersonate-vector", + scheme_make_prim_w_arity(unsafe_impersonate_vector, + "unsafe-impersonate-vector", + 2, -1), + env); + + scheme_add_global_constant("unsafe-chaperone-vector", + scheme_make_prim_w_arity(unsafe_chaperone_vector, + "unsafe-chaperone-vector", + 2, -1), + env); } #define VECTOR_BYTES(size) (sizeof(Scheme_Vector) + ((size) - mzFLEX_DELTA) * sizeof(Scheme_Object *)) @@ -445,13 +474,13 @@ static Scheme_Object *chaperone_vector_ref_overflow(Scheme_Object *o, int i) return scheme_handle_stack_overflow(chaperone_vector_ref_k); } -Scheme_Object *scheme_chaperone_vector_ref(Scheme_Object *o, int i) +Scheme_Object *scheme_chaperone_vector_ref2(Scheme_Object *o, int i, Scheme_Object *outermost) { if (!SCHEME_NP_CHAPERONEP(o)) { return SCHEME_VEC_ELS(o)[i]; } else { Scheme_Chaperone *px = (Scheme_Chaperone *)o; - Scheme_Object *a[3], *red, *orig; + Scheme_Object *a[4], *red, *orig; #ifdef DO_STACK_CHECK { @@ -460,18 +489,33 @@ Scheme_Object *scheme_chaperone_vector_ref(Scheme_Object *o, int i) } #endif - orig = scheme_chaperone_vector_ref(px->prev, i); + if(SCHEME_FALSEP(px->redirects)) { + /* unsafe chaperones */ + return scheme_chaperone_vector_ref2(px->val, i, outermost); + } + + orig = scheme_chaperone_vector_ref2(px->prev, i, outermost); if (SCHEME_VECTORP(px->redirects)) { /* chaperone was on property accessors */ + /* or vector chaperone is property only */ return orig; } - - a[0] = px->prev; - a[1] = scheme_make_integer(i); - a[2] = orig; red = SCHEME_CAR(px->redirects); - o = _scheme_apply(red, 3, a); + + if (SCHEME_CHAPERONE_FLAGS(px) & SCHEME_VEC_CHAPERONE_STAR) { + a[0] = outermost; + a[1] = px->prev; + a[2] = scheme_make_integer(i); + a[3] = orig; + o = _scheme_apply(red, 4, a); + } + else { + a[0] = px->prev; + a[1] = scheme_make_integer(i); + a[2] = orig; + o = _scheme_apply(red, 3, a); + } if (!(SCHEME_CHAPERONE_FLAGS(px) & SCHEME_CHAPERONE_IS_IMPERSONATOR)) if (!scheme_chaperone_of(o, orig)) @@ -481,6 +525,11 @@ Scheme_Object *scheme_chaperone_vector_ref(Scheme_Object *o, int i) } } +Scheme_Object *scheme_chaperone_vector_ref(Scheme_Object *o, int i) +{ + return scheme_chaperone_vector_ref2(o, i, o); +} + Scheme_Object * scheme_checked_vector_ref (int argc, Scheme_Object *argv[]) { @@ -510,24 +559,46 @@ scheme_checked_vector_ref (int argc, Scheme_Object *argv[]) void scheme_chaperone_vector_set(Scheme_Object *o, int i, Scheme_Object *v) { + Scheme_Object *outermost = o; while (1) { if (!SCHEME_NP_CHAPERONEP(o)) { SCHEME_VEC_ELS(o)[i] = v; return; } else { Scheme_Chaperone *px = (Scheme_Chaperone *)o; - Scheme_Object *a[3], *red; - - o = px->prev; - a[0] = o; - a[1] = scheme_make_integer(i); - a[2] = v; - red = SCHEME_CDR(px->redirects); - v = _scheme_apply(red, 3, a); + Scheme_Object *a[4], *red; + int chap_star = SCHEME_CHAPERONE_FLAGS(px) & SCHEME_VEC_CHAPERONE_STAR ? 1 : 0; - if (!(SCHEME_CHAPERONE_FLAGS(px) & SCHEME_CHAPERONE_IS_IMPERSONATOR)) - if (!scheme_chaperone_of(v, a[2])) - scheme_wrong_chaperoned("vector-set!", "value", a[2], v); + red = px->redirects; + if (SCHEME_FALSEP(red)) { + o = px->val; + continue; + } + + o = px->prev; + + if (!SCHEME_VECTORP(red)) { + /* not a property only chaperone */ + red = SCHEME_CDR(px->redirects); + + if (chap_star) { + a[0] = outermost; + a[1] = o; + a[2] = scheme_make_integer(i); + a[3] = v; + v = _scheme_apply(red, 4, a); + } + else { + a[0] = o; + a[1] = scheme_make_integer(i); + a[2] = v; + v = _scheme_apply(red, 3, a); + } + + if (!(SCHEME_CHAPERONE_FLAGS(px) & SCHEME_CHAPERONE_IS_IMPERSONATOR)) + if (!scheme_chaperone_of(v, a[2 + chap_star])) + scheme_wrong_chaperoned("vector-set!", "value", a[2 + chap_star], v); + } } } } @@ -850,26 +921,59 @@ static Scheme_Object *vector_to_values (int argc, Scheme_Object *argv[]) return SCHEME_MULTIPLE_VALUES; } -static Scheme_Object *do_chaperone_vector(const char *name, int is_impersonator, int argc, Scheme_Object **argv) +static Scheme_Object *do_chaperone_vector(const char *name, int is_impersonator, int pass_self, int unsafe, int argc, Scheme_Object **argv) { Scheme_Chaperone *px; Scheme_Object *val = argv[0]; Scheme_Object *redirects; Scheme_Hash_Tree *props; - if (SCHEME_CHAPERONEP(val)) + if (SCHEME_CHAPERONEP(val)) { val = SCHEME_CHAPERONE_VAL(val); + } if (!SCHEME_VECTORP(val) || (is_impersonator && !SCHEME_MUTABLEP(val))) scheme_wrong_contract(name, is_impersonator ? "(and/c vector? (not/c immutable?))" : "vector?", 0, argc, argv); - scheme_check_proc_arity(name, 3, 1, argc, argv); - scheme_check_proc_arity(name, 3, 2, argc, argv); - props = scheme_parse_chaperone_props(name, 3, argc, argv); + if (unsafe) { + /* We cannot dispatch the operations on an unsafe vector chaperone to a chaperoned vector because of the invariant + that the val field of a vector chaperone must point to a non-chaperoned vector. + To ensure this we error if the second argument passed to `unsafe-chaperone-vector` is not a unchaperoned vector */ + if (!SCHEME_VECTORP(argv[1])) { + scheme_wrong_contract(name, "(and/c vector? (not/c impersonator?))", 1, argc, argv); + } + val = argv[1]; + } + else { + /* allow false for interposition procedures */ + scheme_check_proc_arity2(name, 3 + (pass_self ? 1 : 0), 1, argc, argv,1); + + if (SCHEME_PROCP(argv[1])) { + scheme_check_proc_arity(name, 3 + (pass_self ? 1 : 0), 2, argc, argv); + } + else if (!SCHEME_FALSEP(argv[2])) { + scheme_wrong_contract(name, "#f", 2, argc, argv); + } + } + + props = scheme_parse_chaperone_props(name, unsafe ? 2 : 3, argc, argv); + + /* + Regular vector chaperones store redirect procedures in a pair, (cons getter setter). + Property only vector chaperones have no redirection procedures, and redirects is assigned an empty vector. + Unsafe vector chaperones dispatch operations to another vector stored in a box in redirects. + */ + if (SCHEME_FALSEP(argv[1])) { + redirects = scheme_make_vector(0, NULL); + } + else if (unsafe) { + redirects = scheme_false; + } + else { + redirects = scheme_make_pair(argv[1], argv[2]); + } - redirects = scheme_make_pair(argv[1], argv[2]); - px = MALLOC_ONE_TAGGED(Scheme_Chaperone); px->iso.so.type = scheme_chaperone_type; px->props = props; @@ -880,17 +984,41 @@ static Scheme_Object *do_chaperone_vector(const char *name, int is_impersonator, if (is_impersonator) SCHEME_CHAPERONE_FLAGS(px) |= SCHEME_CHAPERONE_IS_IMPERSONATOR; + /* Use flag to tell if the chaperone is a chaperone* */ + if (pass_self) { + SCHEME_CHAPERONE_FLAGS(px) |= SCHEME_VEC_CHAPERONE_STAR; + } return (Scheme_Object *)px; } static Scheme_Object *chaperone_vector(int argc, Scheme_Object **argv) { - return do_chaperone_vector("chaperone-vector", 0, argc, argv); + return do_chaperone_vector("chaperone-vector", 0, 0, 0, argc, argv); +} + +static Scheme_Object *chaperone_vector_star(int argc, Scheme_Object **argv) +{ + return do_chaperone_vector("chaperone-vector", 0, 1, 0, argc, argv); } static Scheme_Object *impersonate_vector(int argc, Scheme_Object **argv) { - return do_chaperone_vector("impersonate-vector", 1, argc, argv); + return do_chaperone_vector("impersonate-vector", 1, 0, 0, argc, argv); +} + +static Scheme_Object *impersonate_vector_star(int argc, Scheme_Object **argv) +{ + return do_chaperone_vector("impersonate-vector", 1, 1, 0, argc, argv); +} + +static Scheme_Object *unsafe_chaperone_vector(int argc, Scheme_Object **argv) +{ + return do_chaperone_vector("unsafe-chaperone-vector", 0, 0, 1, argc, argv); +} + +static Scheme_Object *unsafe_impersonate_vector(int argc, Scheme_Object **argv) +{ + return do_chaperone_vector("unsafe-impersonate-vector", 1, 0, 1, argc, argv); } /************************************************************/