diff --git a/pkgs/base/info.rkt b/pkgs/base/info.rkt index 3fdb8049d4..69f2430022 100644 --- a/pkgs/base/info.rkt +++ b/pkgs/base/info.rkt @@ -12,7 +12,7 @@ (define collection 'multi) -(define version "6.5.0.7") +(define version "6.5.0.8") (define deps `("racket-lib" ["racket" #:version ,version])) diff --git a/pkgs/racket-doc/scribblings/reference/hashes.scrbl b/pkgs/racket-doc/scribblings/reference/hashes.scrbl index e3048f51e9..28336d7802 100644 --- a/pkgs/racket-doc/scribblings/reference/hashes.scrbl +++ b/pkgs/racket-doc/scribblings/reference/hashes.scrbl @@ -414,6 +414,19 @@ Returns a list of the key--value pairs of @racket[hash] in an unspecified order. See @racket[hash-map] for information about modifying @racket[hash] during @racket[hash->list]. @see-also-concurrency-caveat[]} +@defproc[(hash-keys-subset? [hash1 hash?] [hash2 hash?]) + boolean?]{ +Returns @racket[#t] if the keys of @racket[hash1] are a subset of or +the same as the keys of @racket[hash2]. The hash tables must both use +the same key-comparison function (@racket[equal?], @racket[eqv?], or +@racket[eq?]), otherwise the @exnraise[exn:fail:contract]. + +Using @racket[hash-keys-subset?] on immutable hash tables can be much +faster than iterating through the keys of @racket[hash1] to make sure +that each is in @racket[hash2]. + +@history[#:added "6.5.0.8"]} + @defproc[(hash-for-each [hash hash?] [proc (any/c any/c . -> . any)] [try-order? any/c #f]) diff --git a/pkgs/racket-test-core/tests/racket/basic.rktl b/pkgs/racket-test-core/tests/racket/basic.rktl index b92448688b..a1fb812fe6 100644 --- a/pkgs/racket-test-core/tests/racket/basic.rktl +++ b/pkgs/racket-test-core/tests/racket/basic.rktl @@ -2126,7 +2126,8 @@ hash-iterate-value hash-iterate-key hash-copy hash-clear! hash-clear - hash-empty?) + hash-empty? + hash-keys-subset?) (define-struct ax (b c)) ; opaque (define-struct a (b c) #:inspector (make-inspector)) @@ -2271,6 +2272,7 @@ (define (check-tables-equal mode t1 t2 weak?) (test #t equal? t1 t2) + (test #t hash-keys-subset? t1 t2) (test (equal-hash-code t1) equal-hash-code t2) (test #t equal? t1 (hash-copy t1)) (let ([again (if weak? (make-weak-hash) (make-hash))]) @@ -2338,7 +2340,8 @@ hash-iterate-value hash-iterate-key hash-copy hash-clear! hash-clear - hash-empty?) + hash-empty? + hash-keys-subset?) (let ([ub-wrap (lambda (proc) (lambda (ht . args) (apply proc (unbox ht) args)))]) @@ -2364,7 +2367,9 @@ (lambda (ht) (box (unbox ht))) (lambda (ht) (set-box! ht (hash-clear (unbox ht)))) #f - (ub-wrap hash-empty?))) + (ub-wrap hash-empty?) + (lambda (ht1 ht2) + (hash-keys-subset? (unbox ht1) (unbox ht2))))) (test #f hash? 5) (test #t hash? (make-hasheq)) @@ -2465,6 +2470,48 @@ (test #f equal? (mk make-immutable-hash) (mk make-immutable-hasheqv)) (test #f equal? (mk make-immutable-hasheq) (mk make-immutable-hasheqv))) +(let ([check-subset (lambda (mk1 mk2 [v2 2] #:k1 [k1 'a] #:k2 [k2 'a]) + (define h1 (mk1 k1 #t 'b v2)) + (define h2 (mk2 k2 #t)) + (test #t hash-keys-subset? h2 h1) + (test #f hash-keys-subset? h1 h2) + (define h3 (mk2 k2 'something-else)) + (test #t hash-keys-subset? h3 h1) + (test #t hash-keys-subset? h3 h2))] + [make-make-hash (lambda (mk) + (lambda args + (define ht (mk)) + (let loop ([args args]) + (cond + [(null? args) (void)] + [else + (hash-set! ht (car args) (cadr args)) + (loop (cddr args))])) + ht))]) + + (check-subset hasheq hasheq #t) + (check-subset hasheq hasheq) + (check-subset hasheqv hasheqv) + (check-subset hasheqv hasheqv #:k1 (expt 2 70) #:k2 (expt 2 70)) + (check-subset hash hash) + (check-subset hash hash #:k1 (cons 1 2) #:k2 (cons 1 2)) + (check-subset hasheq (make-make-hash make-hasheq)) + (check-subset hasheq (make-make-hash make-weak-hasheq)) + (check-subset hasheqv (make-make-hash make-hasheqv)) + (check-subset hasheqv (make-make-hash make-weak-hasheqv)) + (check-subset hash (make-make-hash make-hash)) + (check-subset hash (make-make-hash make-weak-hash)) + (check-subset (make-make-hash make-hash) (make-make-hash make-weak-hash)) + (check-subset hash (make-make-hash make-hash) #:k1 (expt 2 70) #:k2 (expt 2 70))) + +(let ([not-same-comparison? (lambda (x) + (regexp-match? #rx"do not use the same key comparison" (exn-message x)))]) + (err/rt-test (hash-keys-subset? #hash() #hasheq()) not-same-comparison?) + (err/rt-test (hash-keys-subset? #hash() #hasheqv()) not-same-comparison?) + (err/rt-test (hash-keys-subset? #hasheq() #hasheqv()) not-same-comparison?) + (err/rt-test (hash-keys-subset? (make-hasheq #hasheqv()) not-same-comparison?)) + (err/rt-test (hash-keys-subset? (make-weak-hasheq #hasheqv()) not-same-comparison?))) + (define im-t (make-immutable-hasheq null)) (test #t hash? im-t) (test #t hash-eq? im-t) diff --git a/racket/src/racket/include/mzwin.def b/racket/src/racket/include/mzwin.def index e51140ea36..4aac8a930f 100644 --- a/racket/src/racket/include/mzwin.def +++ b/racket/src/racket/include/mzwin.def @@ -258,7 +258,6 @@ EXPORTS scheme_hash_table_index scheme_hash_table_next scheme_make_hash_tree - scheme_make_hash_tree_set scheme_hash_tree_set scheme_hash_tree_get scheme_eq_hash_tree_get diff --git a/racket/src/racket/include/mzwin3m.def b/racket/src/racket/include/mzwin3m.def index d7c00461da..dc3effbf66 100644 --- a/racket/src/racket/include/mzwin3m.def +++ b/racket/src/racket/include/mzwin3m.def @@ -272,7 +272,6 @@ EXPORTS scheme_hash_table_index scheme_hash_table_next scheme_make_hash_tree - scheme_make_hash_tree_set scheme_hash_tree_set scheme_hash_tree_get scheme_eq_hash_tree_get diff --git a/racket/src/racket/include/racket.exp b/racket/src/racket/include/racket.exp index ad896f5215..8d209b50fd 100644 --- a/racket/src/racket/include/racket.exp +++ b/racket/src/racket/include/racket.exp @@ -274,7 +274,6 @@ scheme_clear_hash_table scheme_hash_table_index scheme_hash_table_next scheme_make_hash_tree -scheme_make_hash_tree_set scheme_hash_tree_set scheme_hash_tree_get scheme_eq_hash_tree_get diff --git a/racket/src/racket/include/racket3m.exp b/racket/src/racket/include/racket3m.exp index 0d56c72219..dfa8a027b6 100644 --- a/racket/src/racket/include/racket3m.exp +++ b/racket/src/racket/include/racket3m.exp @@ -279,7 +279,6 @@ scheme_clear_hash_table scheme_hash_table_index scheme_hash_table_next scheme_make_hash_tree -scheme_make_hash_tree_set scheme_hash_tree_set scheme_hash_tree_get scheme_eq_hash_tree_get diff --git a/racket/src/racket/src/cstartup.inc b/racket/src/racket/src/cstartup.inc index 0650712d1f..aa8cded116 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,53,46,48,46,54,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,53,46,48,46,56,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, @@ -25,54 +25,54 @@ 2,29,38,33,93,143,2,32,143,2,1,2,3,36,34,2,144,40,143,2,35, 16,4,2,17,40,39,2,1,16,2,2,15,93,143,2,35,147,2,1,2,3, 40,2,15,143,2,3,40,2,15,38,35,143,2,34,2,29,18,143,66,104,101, -114,101,2,28,27,248,22,169,4,195,249,22,162,4,80,143,42,39,251,22,92, -2,19,248,22,105,199,12,249,22,82,2,20,248,22,107,201,27,248,22,169,4, -195,249,22,162,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,169,4,196,28,248,22,90,193, -20,14,144,40,39,40,28,248,22,90,248,22,84,194,248,22,179,20,193,249,22, -162,4,80,143,42,39,251,22,92,2,19,248,22,179,20,199,249,22,82,2,4, -248,22,180,20,201,11,18,143,10,2,28,27,248,22,84,248,22,169,4,196,28, -248,22,90,193,20,14,144,40,39,40,28,248,22,90,248,22,84,194,248,22,179, -20,193,249,22,162,4,80,143,42,39,250,22,92,2,21,248,22,92,249,22,92, -248,22,92,2,22,248,22,179,20,201,251,22,92,2,19,2,22,2,22,249,22, -82,2,11,248,22,180,20,204,18,143,11,2,28,248,22,169,4,193,27,248,22, -169,4,194,249,22,82,248,22,92,248,22,83,196,248,22,180,20,195,27,248,22, -84,248,22,169,4,23,197,1,249,22,162,4,80,143,42,39,28,248,22,66,248, -22,163,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,169,4,248,22,105,23,200,2,250,22,92,2,23,248, -22,92,249,22,92,248,22,92,248,22,179,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,179,20,23, +114,101,2,28,27,248,22,170,4,195,249,22,163,4,80,143,42,39,251,22,92, +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,180,20,193,249,22, +163,4,80,143,42,39,251,22,92,2,19,248,22,180,20,199,249,22,82,2,4, +248,22,181,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,180, +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,180,20,201,251,22,92,2,19,2,22,2,22,249,22, +82,2,11,248,22,181,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,181,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,180,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,180,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,169,4,248,22,179,20,201,248,22, -180,20,198,27,248,22,169,4,194,249,22,82,248,22,92,248,22,83,196,248,22, -180,20,195,27,248,22,84,248,22,169,4,23,197,1,249,22,162,4,80,143,42, +148,8,36,40,50,11,9,222,33,44,248,22,170,4,248,22,180,20,201,248,22, +181,20,198,27,248,22,170,4,194,249,22,82,248,22,92,248,22,83,196,248,22, +181,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,169,4,248,22,83,201,248,22,180,20,198,27,248,22,84,248,22,169, -4,196,27,248,22,169,4,248,22,83,195,249,22,162,4,80,143,43,39,28,248, -22,90,195,250,22,93,2,21,9,248,22,180,20,199,250,22,92,2,7,248,22, -92,248,22,83,199,250,22,93,2,8,248,22,180,20,201,248,22,180,20,202,27, -248,22,84,248,22,169,4,196,27,248,22,169,4,248,22,83,195,249,22,162,4, -80,143,43,39,28,248,22,90,195,250,22,93,2,21,9,248,22,180,20,199,250, -22,92,2,21,248,22,92,248,22,83,199,250,22,93,2,9,248,22,180,20,201, -248,22,180,20,202,27,248,22,84,248,22,169,4,23,197,1,27,249,22,1,22, -97,249,22,2,22,169,4,248,22,169,4,248,22,83,199,248,22,191,4,249,22, -162,4,80,143,44,39,251,22,92,1,22,119,105,116,104,45,99,111,110,116,105, +46,248,22,170,4,248,22,83,201,248,22,181,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,181,20,199,250,22,92,2,7,248,22, +92,248,22,83,199,250,22,93,2,8,248,22,181,20,201,248,22,181,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,181,20,199,250, +22,92,2,21,248,22,92,248,22,83,199,250,22,93,2,9,248,22,181,20,201, +248,22,181,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,180,20,204,27,248,22,84,248,22,169,4,196,28,248,22,90,193,20,14,144, -40,39,40,249,22,162,4,80,143,42,39,27,248,22,169,4,248,22,83,197,28, -249,22,177,9,64,61,62,248,22,163,4,248,22,105,196,250,22,92,2,21,248, -22,92,249,22,92,21,93,2,26,248,22,179,20,199,250,22,93,2,5,249,22, -92,2,26,249,22,92,248,22,114,203,2,26,248,22,180,20,202,251,22,92,2, -19,28,249,22,177,9,248,22,163,4,248,22,179,20,200,66,101,108,115,101,10, -248,22,179,20,197,250,22,93,2,21,9,248,22,180,20,200,249,22,82,2,5, -248,22,180,20,202,18,143,94,10,66,118,111,105,100,2,28,27,248,22,84,248, -22,169,4,196,249,22,162,4,80,143,42,39,28,248,22,66,248,22,163,4,248, -22,83,197,250,22,92,2,27,248,22,92,248,22,179,20,199,248,22,105,198,27, -248,22,163,4,248,22,179,20,197,250,22,92,2,27,248,22,92,248,22,83,197, -250,22,93,2,24,248,22,180,20,199,248,22,180,20,202,145,40,9,20,122,145, +22,181,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,178,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,180,20,199,250,22,93,2,5,249,22, +92,2,26,249,22,92,248,22,114,203,2,26,248,22,181,20,202,251,22,92,2, +19,28,249,22,178,9,248,22,164,4,248,22,180,20,200,66,101,108,115,101,10, +248,22,180,20,197,250,22,93,2,21,9,248,22,181,20,200,249,22,82,2,5, +248,22,181,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,180,20,199,248,22,105,198,27, +248,22,164,4,248,22,180,20,197,250,22,92,2,27,248,22,92,248,22,83,197, +250,22,93,2,24,248,22,181,20,199,248,22,181,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,7 +102,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 2090); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,53,46,48,46,54,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,53,46,48,46,56,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, @@ -182,744 +182,744 @@ 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,27, -248,22,188,15,194,28,192,192,28,248,22,161,7,194,27,248,22,147,16,195,28, -192,192,248,22,148,16,195,11,0,21,35,114,120,34,94,91,92,92,93,91,92, +248,22,189,15,194,28,192,192,28,248,22,162,7,194,27,248,22,148,16,195,28, +192,192,248,22,149,16,195,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,189,15,23,195,2,10,28,248,22,188,15,23,195,2,10, -28,248,22,161,7,23,195,2,28,248,22,147,16,23,195,2,10,248,22,148,16, -23,195,2,11,12,250,22,128,12,2,41,2,42,23,197,2,28,28,248,22,189, -15,23,195,2,249,22,177,9,248,22,190,15,23,197,2,2,43,249,22,177,9, -247,22,188,8,2,43,27,28,248,22,161,7,23,196,2,23,195,2,248,22,173, -8,248,22,129,16,23,197,2,28,249,22,185,16,2,76,23,195,2,28,248,22, -161,7,195,248,22,132,16,195,194,86,94,23,195,1,27,248,22,136,8,23,195, -1,249,22,133,16,248,22,176,8,250,22,129,17,2,77,28,249,22,185,16,2, -78,23,201,2,23,199,1,250,22,129,17,2,79,23,202,1,2,44,80,144,47, -40,41,2,43,28,248,22,161,7,194,248,22,132,16,194,193,0,28,35,114,120, +86,94,28,28,248,22,190,15,23,195,2,10,28,248,22,189,15,23,195,2,10, +28,248,22,162,7,23,195,2,28,248,22,148,16,23,195,2,10,248,22,149,16, +23,195,2,11,12,250,22,129,12,2,41,2,42,23,197,2,28,28,248,22,190, +15,23,195,2,249,22,178,9,248,22,191,15,23,197,2,2,43,249,22,178,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,130,16,23,197,2,28,249,22,186,16,2,76,23,195,2,28,248,22, +162,7,195,248,22,133,16,195,194,86,94,23,195,1,27,248,22,137,8,23,195, +1,249,22,134,16,248,22,177,8,250,22,130,17,2,77,28,249,22,186,16,2, +78,23,201,2,23,199,1,250,22,130,17,2,79,23,202,1,2,44,80,144,47, +40,41,2,43,28,248,22,162,7,194,248,22,133,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,188,15,23,195,2,10,28,248,22,161, -7,23,195,2,28,248,22,147,16,23,195,2,10,248,22,148,16,23,195,2,11, -10,248,22,189,15,23,195,2,12,252,22,128,12,2,6,2,45,39,23,199,2, -23,200,2,28,28,28,248,22,188,15,23,196,2,10,28,248,22,161,7,23,196, -2,28,248,22,147,16,23,196,2,10,248,22,148,16,23,196,2,11,10,248,22, -189,15,23,196,2,12,252,22,128,12,2,6,2,45,40,23,199,2,23,200,2, -27,28,248,22,189,15,23,196,2,248,22,190,15,23,196,2,247,22,191,15,86, -95,28,28,248,22,149,16,23,196,2,10,249,22,177,9,247,22,191,15,23,195, -2,12,253,22,130,12,2,6,6,54,54,112,97,116,104,32,105,115,32,110,111, +92,92,92,34,86,95,28,28,28,248,22,189,15,23,195,2,10,28,248,22,162, +7,23,195,2,28,248,22,148,16,23,195,2,10,248,22,149,16,23,195,2,11, +10,248,22,190,15,23,195,2,12,252,22,129,12,2,6,2,45,39,23,199,2, +23,200,2,28,28,28,248,22,189,15,23,196,2,10,28,248,22,162,7,23,196, +2,28,248,22,148,16,23,196,2,10,248,22,149,16,23,196,2,11,10,248,22, +190,15,23,196,2,12,252,22,129,12,2,6,2,45,40,23,199,2,23,200,2, +27,28,248,22,190,15,23,196,2,248,22,191,15,23,196,2,247,22,128,16,86, +95,28,28,248,22,150,16,23,196,2,10,249,22,178,9,247,22,128,16,23,195, +2,12,253,22,131,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,191,15,28,249,22,177, -9,28,248,22,189,15,23,199,2,248,22,190,15,23,199,2,247,22,191,15,23, -195,2,12,253,22,130,12,2,6,6,37,37,103,105,118,101,110,32,112,97,116, +110,118,101,110,116,105,111,110,32,116,121,112,101,247,22,128,16,28,249,22,178, +9,28,248,22,190,15,23,199,2,248,22,191,15,23,199,2,247,22,128,16,23, +195,2,12,253,22,131,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,153,16,28,248,22,149,16,23,199,2,23, -198,1,248,22,150,16,23,199,1,86,94,28,28,248,22,189,15,23,194,2,10, -28,248,22,188,15,23,194,2,10,28,248,22,161,7,23,194,2,28,248,22,147, -16,23,194,2,10,248,22,148,16,23,194,2,11,12,250,22,128,12,2,41,2, -42,23,196,2,28,28,248,22,189,15,23,194,2,249,22,177,9,248,22,190,15, -23,196,2,2,43,249,22,177,9,247,22,188,8,2,43,27,28,248,22,161,7, -23,195,2,23,194,2,248,22,173,8,248,22,129,16,23,196,2,28,249,22,185, -16,2,76,23,195,2,28,248,22,161,7,194,248,22,132,16,194,193,86,94,23, -194,1,27,248,22,136,8,23,195,1,249,22,133,16,248,22,176,8,250,22,129, -17,2,77,28,249,22,185,16,2,78,23,201,2,23,199,1,250,22,129,17,2, -79,23,202,1,2,44,80,144,50,40,41,2,43,28,248,22,161,7,193,248,22, -132,16,193,192,27,248,22,129,16,23,195,2,28,249,22,177,9,23,197,2,66, -117,110,105,120,28,249,22,158,8,194,5,1,47,28,248,22,189,15,198,197,248, -22,132,16,198,249,22,142,16,199,249,22,133,16,249,22,161,8,248,22,129,16, -200,40,198,86,94,23,194,1,28,249,22,177,9,23,197,2,2,43,249,22,142, -16,23,200,1,249,22,133,16,28,249,22,185,16,0,27,35,114,120,34,94,92, +97,116,104,23,202,2,27,27,248,22,154,16,28,248,22,150,16,23,199,2,23, +198,1,248,22,151,16,23,199,1,86,94,28,28,248,22,190,15,23,194,2,10, +28,248,22,189,15,23,194,2,10,28,248,22,162,7,23,194,2,28,248,22,148, +16,23,194,2,10,248,22,149,16,23,194,2,11,12,250,22,129,12,2,41,2, +42,23,196,2,28,28,248,22,190,15,23,194,2,249,22,178,9,248,22,191,15, +23,196,2,2,43,249,22,178,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,130,16,23,196,2,28,249,22,186, +16,2,76,23,195,2,28,248,22,162,7,194,248,22,133,16,194,193,86,94,23, +194,1,27,248,22,137,8,23,195,1,249,22,134,16,248,22,177,8,250,22,130, +17,2,77,28,249,22,186,16,2,78,23,201,2,23,199,1,250,22,130,17,2, +79,23,202,1,2,44,80,144,50,40,41,2,43,28,248,22,162,7,193,248,22, +133,16,193,192,27,248,22,130,16,23,195,2,28,249,22,178,9,23,197,2,66, +117,110,105,120,28,249,22,159,8,194,5,1,47,28,248,22,190,15,198,197,248, +22,133,16,198,249,22,143,16,199,249,22,134,16,249,22,162,8,248,22,130,16, +200,40,198,86,94,23,194,1,28,249,22,178,9,23,197,2,2,43,249,22,143, +16,23,200,1,249,22,134,16,28,249,22,186,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,162,8,2,47,250,22,161,8,203,43,44,5,1,92,249,22, -161,8,202,45,28,249,22,185,16,2,81,23,199,2,249,22,162,8,2,47,249, -22,161,8,200,43,28,249,22,185,16,2,81,23,199,2,249,22,162,8,2,47, -249,22,161,8,200,43,28,249,22,185,16,0,14,35,114,120,34,94,92,92,92, -92,92,92,92,92,34,23,199,2,249,22,162,8,5,4,85,78,67,92,249,22, -161,8,200,41,28,249,22,185,16,0,12,35,114,120,34,94,91,97,45,122,93, -58,34,198,249,22,162,8,250,22,161,8,201,39,40,249,22,161,8,200,41,12, +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,186,16,2,81,23,199,2,249,22,163,8,2,47,249, +22,162,8,200,43,28,249,22,186,16,2,81,23,199,2,249,22,163,8,2,47, +249,22,162,8,200,43,28,249,22,186,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,186,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,151,16,23,197,2,28,249,22,179,9,23,195,2,23,198,1,11,28, -248,22,147,16,23,194,2,27,249,22,142,16,23,200,1,23,196,1,28,23,196, -2,90,144,42,11,89,146,42,39,11,248,22,145,16,23,197,2,86,95,23,195, -1,23,194,1,27,28,23,199,2,27,248,22,151,16,23,199,2,28,249,22,179, -9,23,195,2,23,200,2,11,28,248,22,147,16,23,194,2,250,2,83,23,203, -2,23,204,2,249,22,142,16,23,200,2,23,198,1,250,2,83,23,203,2,23, -204,2,23,196,1,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,188, -15,23,196,2,27,249,22,142,16,23,198,2,23,204,2,28,28,248,22,137,16, -193,10,248,22,136,16,193,192,11,11,28,23,193,2,192,86,94,23,193,1,28, -23,200,2,11,27,248,22,151,16,23,200,2,28,249,22,179,9,194,23,201,1, -11,28,248,22,147,16,193,250,2,83,203,204,249,22,142,16,200,197,250,2,83, +27,248,22,152,16,23,197,2,28,249,22,180,9,23,195,2,23,198,1,11,28, +248,22,148,16,23,194,2,27,249,22,143,16,23,200,1,23,196,1,28,23,196, +2,90,144,42,11,89,146,42,39,11,248,22,146,16,23,197,2,86,95,23,195, +1,23,194,1,27,28,23,199,2,27,248,22,152,16,23,199,2,28,249,22,180, +9,23,195,2,23,200,2,11,28,248,22,148,16,23,194,2,250,2,83,23,203, +2,23,204,2,249,22,143,16,23,200,2,23,198,1,250,2,83,23,203,2,23, +204,2,23,196,1,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,189, +15,23,196,2,27,249,22,143,16,23,198,2,23,204,2,28,28,248,22,138,16, +193,10,248,22,137,16,193,192,11,11,28,23,193,2,192,86,94,23,193,1,28, +23,200,2,11,27,248,22,152,16,23,200,2,28,249,22,180,9,194,23,201,1, +11,28,248,22,148,16,193,250,2,83,203,204,249,22,143,16,200,197,250,2,83, 203,204,195,192,86,94,23,197,1,28,23,195,2,90,144,42,11,89,146,42,39, -11,248,22,145,16,23,197,2,86,95,23,195,1,23,194,1,27,28,23,198,2, -27,248,22,151,16,23,199,2,28,249,22,179,9,23,195,2,23,200,2,11,28, -248,22,147,16,23,194,2,250,2,83,23,202,2,23,203,2,249,22,142,16,23, +11,248,22,146,16,23,197,2,86,95,23,195,1,23,194,1,27,28,23,198,2, +27,248,22,152,16,23,199,2,28,249,22,180,9,23,195,2,23,200,2,11,28, +248,22,148,16,23,194,2,250,2,83,23,202,2,23,203,2,249,22,143,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,86,94,23,193,1,27,28,248,22,188,15,23,196,2,27,249,22,142,16, -23,198,2,23,203,2,28,28,248,22,137,16,193,10,248,22,136,16,193,192,11, -11,28,23,193,2,192,86,94,23,193,1,28,23,199,2,11,27,248,22,151,16, -23,200,2,28,249,22,179,9,194,23,201,1,11,28,248,22,147,16,193,250,2, -83,202,203,249,22,142,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,145,16,23,199,2,86,95,23,195,1,23, +2,192,86,94,23,193,1,27,28,248,22,189,15,23,196,2,27,249,22,143,16, +23,198,2,23,203,2,28,28,248,22,138,16,193,10,248,22,137,16,193,192,11, +11,28,23,193,2,192,86,94,23,193,1,28,23,199,2,11,27,248,22,152,16, +23,200,2,28,249,22,180,9,194,23,201,1,11,28,248,22,148,16,193,250,2, +83,202,203,249,22,143,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,146,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,86,94,23,193,1,27,28,248,22,188,15,195,27,249, -22,142,16,197,201,28,28,248,22,137,16,193,10,248,22,136,16,193,192,11,11, +2,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,189,15,195,27,249, +22,143,16,197,201,28,28,248,22,138,16,193,10,248,22,137,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,142,16,248, -22,150,16,248,22,83,23,201,2,23,198,2,28,248,22,136,16,23,194,2,250, -2,83,196,197,195,86,94,23,193,1,27,248,22,180,20,23,199,1,28,248,22, -90,23,194,2,11,27,249,22,142,16,248,22,150,16,248,22,83,23,198,2,23, -200,2,28,248,22,136,16,23,194,2,250,2,83,198,199,195,86,94,23,193,1, -27,248,22,180,20,23,196,1,28,248,22,90,23,194,2,11,27,249,22,142,16, -248,22,150,16,248,22,83,23,198,2,23,202,2,28,248,22,136,16,23,194,2, -250,2,83,200,201,195,86,94,23,193,1,27,248,22,180,20,23,196,1,28,248, -22,90,23,194,2,11,27,249,22,142,16,248,22,150,16,248,22,83,197,203,28, -248,22,136,16,193,250,2,83,202,203,195,251,2,87,203,204,205,248,22,180,20, -198,86,95,28,28,248,22,188,15,23,195,2,10,28,248,22,161,7,23,195,2, -28,248,22,147,16,23,195,2,10,248,22,148,16,23,195,2,11,12,250,22,128, -12,2,7,2,48,23,197,2,28,28,23,195,2,28,28,248,22,188,15,23,196, -2,10,28,248,22,161,7,23,196,2,28,248,22,147,16,23,196,2,10,248,22, -148,16,23,196,2,11,248,22,147,16,23,196,2,11,10,12,250,22,128,12,2, +60,11,2,50,222,33,88,28,248,22,90,23,197,2,11,27,249,22,143,16,248, +22,151,16,248,22,83,23,201,2,23,198,2,28,248,22,137,16,23,194,2,250, +2,83,196,197,195,86,94,23,193,1,27,248,22,181,20,23,199,1,28,248,22, +90,23,194,2,11,27,249,22,143,16,248,22,151,16,248,22,83,23,198,2,23, +200,2,28,248,22,137,16,23,194,2,250,2,83,198,199,195,86,94,23,193,1, +27,248,22,181,20,23,196,1,28,248,22,90,23,194,2,11,27,249,22,143,16, +248,22,151,16,248,22,83,23,198,2,23,202,2,28,248,22,137,16,23,194,2, +250,2,83,200,201,195,86,94,23,193,1,27,248,22,181,20,23,196,1,28,248, +22,90,23,194,2,11,27,249,22,143,16,248,22,151,16,248,22,83,197,203,28, +248,22,137,16,193,250,2,83,202,203,195,251,2,87,203,204,205,248,22,181,20, +198,86,95,28,28,248,22,189,15,23,195,2,10,28,248,22,162,7,23,195,2, +28,248,22,148,16,23,195,2,10,248,22,149,16,23,195,2,11,12,250,22,129, +12,2,7,2,48,23,197,2,28,28,23,195,2,28,28,248,22,189,15,23,196, +2,10,28,248,22,162,7,23,196,2,28,248,22,148,16,23,196,2,10,248,22, +149,16,23,196,2,11,248,22,148,16,23,196,2,11,10,12,250,22,129,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,147,16,23,195,2,90,144, -42,11,89,146,42,39,11,248,22,145,16,23,198,2,249,22,177,9,194,2,49, -11,27,249,22,183,8,247,22,182,8,5,4,80,65,84,72,27,28,23,194,2, -249,80,143,43,44,249,22,173,8,23,198,1,7,63,9,86,94,23,194,1,9, -27,28,249,22,177,9,247,22,188,8,2,43,249,22,82,248,22,133,16,5,1, -46,23,196,1,23,194,1,28,248,22,90,23,194,2,11,27,249,22,142,16,248, -22,150,16,248,22,83,23,198,2,23,200,2,28,248,22,136,16,23,194,2,250, -2,83,202,201,195,86,94,23,193,1,27,248,22,180,20,23,196,1,28,248,22, -90,23,194,2,11,27,249,22,142,16,248,22,150,16,248,22,83,23,198,2,23, -202,2,28,248,22,136,16,23,194,2,250,2,83,204,203,195,86,94,23,193,1, -27,248,22,180,20,23,196,1,28,248,22,90,23,194,2,11,27,249,22,142,16, -248,22,150,16,248,22,83,23,198,2,23,204,2,28,248,22,136,16,23,194,2, -250,2,83,206,205,195,86,94,23,193,1,27,248,22,180,20,23,196,1,28,248, -22,90,23,194,2,11,27,249,22,142,16,248,22,150,16,248,22,83,197,205,28, -248,22,136,16,193,250,2,83,23,16,23,15,195,251,2,87,23,17,23,16,23, -15,248,22,180,20,198,27,248,22,150,16,23,196,1,28,248,22,136,16,193,250, +112,97,116,104,63,41,41,23,198,2,28,28,248,22,148,16,23,195,2,90,144, +42,11,89,146,42,39,11,248,22,146,16,23,198,2,249,22,178,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,178,9,247,22,189,8,2,43,249,22,82,248,22,134,16,5,1, +46,23,196,1,23,194,1,28,248,22,90,23,194,2,11,27,249,22,143,16,248, +22,151,16,248,22,83,23,198,2,23,200,2,28,248,22,137,16,23,194,2,250, +2,83,202,201,195,86,94,23,193,1,27,248,22,181,20,23,196,1,28,248,22, +90,23,194,2,11,27,249,22,143,16,248,22,151,16,248,22,83,23,198,2,23, +202,2,28,248,22,137,16,23,194,2,250,2,83,204,203,195,86,94,23,193,1, +27,248,22,181,20,23,196,1,28,248,22,90,23,194,2,11,27,249,22,143,16, +248,22,151,16,248,22,83,23,198,2,23,204,2,28,248,22,137,16,23,194,2, +250,2,83,206,205,195,86,94,23,193,1,27,248,22,181,20,23,196,1,28,248, +22,90,23,194,2,11,27,249,22,143,16,248,22,151,16,248,22,83,197,205,28, +248,22,137,16,193,250,2,83,23,16,23,15,195,251,2,87,23,17,23,16,23, +15,248,22,181,20,198,27,248,22,151,16,23,196,1,28,248,22,137,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,181,16,23,196,2,23,198,2,28,23,193,2, +120,35,34,92,34,34,27,249,22,182,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,181,16,23,200,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248, +249,22,182,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,177,9,247,22,188,8,2,43,250,22,129,17,2,93,23,198,1,2,51, -194,28,249,22,158,8,194,2,51,249,22,97,203,195,249,22,82,248,22,133,16, -195,195,86,95,23,198,1,23,193,1,27,28,249,22,177,9,247,22,188,8,2, -43,250,22,129,17,2,93,23,198,1,2,51,194,28,249,22,158,8,194,2,51, -249,22,97,201,9,249,22,82,248,22,133,16,195,9,27,28,249,22,177,9,247, -22,188,8,2,43,250,22,129,17,2,93,23,198,1,2,51,194,28,249,22,158, -8,194,2,51,249,22,97,199,195,249,22,82,248,22,133,16,195,195,86,95,23, -194,1,23,193,1,27,28,249,22,177,9,247,22,188,8,2,43,250,22,129,17, -2,93,23,200,1,2,51,196,28,249,22,158,8,194,2,51,249,22,97,197,9, -249,22,82,248,22,133,16,195,9,86,95,28,28,248,22,150,8,194,10,248,22, -161,7,194,12,250,22,128,12,2,8,6,21,21,40,111,114,47,99,32,98,121, +249,22,178,9,247,22,189,8,2,43,250,22,130,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,134,16, +195,195,86,95,23,198,1,23,193,1,27,28,249,22,178,9,247,22,189,8,2, +43,250,22,130,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,134,16,195,9,27,28,249,22,178,9,247, +22,189,8,2,43,250,22,130,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,134,16,195,195,86,95,23, +194,1,23,193,1,27,28,249,22,178,9,247,22,189,8,2,43,250,22,130,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,134,16,195,9,86,95,28,28,248,22,151,8,194,10,248,22, +162,7,194,12,250,22,129,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,188,15,196,11,12,250,22,128,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,161,7, -197,248,22,175,8,197,196,28,28,248,22,0,23,195,2,249,22,48,23,196,2, +22,4,22,189,15,196,11,12,250,22,129,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,155,15,10,22,156,15,10,22,157,15,10,22,158, -15,11,22,159,15,11,22,163,15,10,22,162,15,11,22,164,15,10,22,161,15, -10,22,165,15,10,22,160,15,11,22,166,15,10,22,167,15,10,22,168,15,10, -22,169,15,11,22,170,15,10,22,153,15,11,247,23,194,1,250,22,128,12,2, -9,2,52,23,197,1,86,94,28,28,248,22,188,15,23,195,2,10,28,248,22, -161,7,23,195,2,28,248,22,147,16,23,195,2,10,248,22,148,16,23,195,2, -11,12,250,22,128,12,23,196,2,2,48,23,197,2,28,248,22,147,16,23,195, -2,12,251,22,130,12,23,197,1,2,53,2,46,23,198,1,86,94,28,28,248, -22,188,15,23,195,2,10,28,248,22,161,7,23,195,2,28,248,22,147,16,23, -195,2,10,248,22,148,16,23,195,2,11,12,250,22,128,12,23,196,2,2,48, -23,197,2,28,248,22,147,16,23,195,2,12,251,22,130,12,23,197,1,2,53, -2,46,23,198,1,86,95,28,28,248,22,188,15,23,195,2,10,28,248,22,161, -7,23,195,2,28,248,22,147,16,23,195,2,10,248,22,148,16,23,195,2,11, -12,250,22,128,12,23,196,2,2,48,23,197,2,28,248,22,147,16,23,195,2, -86,94,23,194,1,12,251,22,130,12,23,197,2,2,53,2,46,23,198,1,249, +11,80,144,8,37,46,40,22,156,15,10,22,157,15,10,22,158,15,10,22,159, +15,11,22,160,15,11,22,164,15,10,22,163,15,11,22,165,15,10,22,162,15, +10,22,166,15,10,22,161,15,11,22,167,15,10,22,168,15,10,22,169,15,10, +22,170,15,11,22,171,15,10,22,154,15,11,247,23,194,1,250,22,129,12,2, +9,2,52,23,197,1,86,94,28,28,248,22,189,15,23,195,2,10,28,248,22, +162,7,23,195,2,28,248,22,148,16,23,195,2,10,248,22,149,16,23,195,2, +11,12,250,22,129,12,23,196,2,2,48,23,197,2,28,248,22,148,16,23,195, +2,12,251,22,131,12,23,197,1,2,53,2,46,23,198,1,86,94,28,28,248, +22,189,15,23,195,2,10,28,248,22,162,7,23,195,2,28,248,22,148,16,23, +195,2,10,248,22,149,16,23,195,2,11,12,250,22,129,12,23,196,2,2,48, +23,197,2,28,248,22,148,16,23,195,2,12,251,22,131,12,23,197,1,2,53, +2,46,23,198,1,86,95,28,28,248,22,189,15,23,195,2,10,28,248,22,162, +7,23,195,2,28,248,22,148,16,23,195,2,10,248,22,149,16,23,195,2,11, +12,250,22,129,12,23,196,2,2,48,23,197,2,28,248,22,148,16,23,195,2, +86,94,23,194,1,12,251,22,131,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, -128,12,23,196,1,2,54,23,197,1,86,94,28,28,248,22,188,15,23,194,2, -10,28,248,22,161,7,23,194,2,28,248,22,147,16,23,194,2,10,248,22,148, -16,23,194,2,11,12,250,22,128,12,2,15,2,48,23,196,2,28,248,22,147, -16,23,194,2,12,251,22,130,12,2,15,2,53,2,46,23,197,1,86,97,28, -28,248,22,188,15,23,196,2,10,28,248,22,161,7,23,196,2,28,248,22,147, -16,23,196,2,10,248,22,148,16,23,196,2,11,12,250,22,128,12,2,15,2, -48,23,198,2,28,248,22,147,16,23,196,2,12,251,22,130,12,2,15,2,53, +129,12,23,196,1,2,54,23,197,1,86,94,28,28,248,22,189,15,23,194,2, +10,28,248,22,162,7,23,194,2,28,248,22,148,16,23,194,2,10,248,22,149, +16,23,194,2,11,12,250,22,129,12,2,15,2,48,23,196,2,28,248,22,148, +16,23,194,2,12,251,22,131,12,2,15,2,53,2,46,23,197,1,86,97,28, +28,248,22,189,15,23,196,2,10,28,248,22,162,7,23,196,2,28,248,22,148, +16,23,196,2,10,248,22,149,16,23,196,2,11,12,250,22,129,12,2,15,2, +48,23,198,2,28,248,22,148,16,23,196,2,12,251,22,131,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,12,250, -22,128,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,188,15,23,194,2,10,28,248,22,161, -7,23,194,2,28,248,22,147,16,23,194,2,10,248,22,148,16,23,194,2,11, -12,250,22,128,12,2,17,2,48,23,196,2,28,248,22,147,16,23,194,2,12, -251,22,130,12,2,17,2,53,2,46,23,197,1,86,99,28,28,248,22,188,15, -23,197,2,10,28,248,22,161,7,23,197,2,28,248,22,147,16,23,197,2,10, -248,22,148,16,23,197,2,11,12,250,22,128,12,2,17,2,48,23,199,2,28, -248,22,147,16,23,197,2,12,251,22,130,12,2,17,2,53,2,46,23,200,2, -28,28,248,22,188,15,23,198,2,10,28,248,22,161,7,23,198,2,28,248,22, -147,16,23,198,2,10,248,22,148,16,23,198,2,11,12,250,22,128,12,2,17, -2,48,23,200,2,28,248,22,147,16,23,198,2,12,251,22,130,12,2,17,2, +22,129,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,189,15,23,194,2,10,28,248,22,162, +7,23,194,2,28,248,22,148,16,23,194,2,10,248,22,149,16,23,194,2,11, +12,250,22,129,12,2,17,2,48,23,196,2,28,248,22,148,16,23,194,2,12, +251,22,131,12,2,17,2,53,2,46,23,197,1,86,99,28,28,248,22,189,15, +23,197,2,10,28,248,22,162,7,23,197,2,28,248,22,148,16,23,197,2,10, +248,22,149,16,23,197,2,11,12,250,22,129,12,2,17,2,48,23,199,2,28, +248,22,148,16,23,197,2,12,251,22,131,12,2,17,2,53,2,46,23,200,2, +28,28,248,22,189,15,23,198,2,10,28,248,22,162,7,23,198,2,28,248,22, +148,16,23,198,2,10,248,22,149,16,23,198,2,11,12,250,22,129,12,2,17, +2,48,23,200,2,28,248,22,148,16,23,198,2,12,251,22,131,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,12, -250,22,128,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,165,16,2,55,28,248,22,149, -16,23,194,2,248,22,152,16,23,194,1,28,248,22,148,16,23,194,2,90,144, -42,11,89,146,42,39,11,248,22,145,16,249,22,150,16,250,80,144,49,43,42, -248,22,165,16,2,56,11,11,248,22,165,16,2,57,86,95,23,195,1,23,194, -1,248,22,152,16,249,22,150,16,23,199,1,23,196,1,27,250,80,144,44,43, -42,248,22,165,16,2,56,23,197,1,10,28,23,193,2,248,22,152,16,23,194, -1,11,249,80,144,41,55,40,39,80,144,41,8,40,42,27,248,22,165,16,2, -58,28,248,22,149,16,23,194,2,248,22,152,16,23,194,1,28,248,22,148,16, -23,194,2,90,144,42,11,89,146,42,39,11,248,22,145,16,249,22,150,16,250, -80,144,49,43,42,248,22,165,16,2,56,11,11,248,22,165,16,2,57,86,95, -23,195,1,23,194,1,248,22,152,16,249,22,150,16,23,199,1,23,196,1,27, -250,80,144,44,43,42,248,22,165,16,2,56,23,197,1,10,28,23,193,2,248, -22,152,16,23,194,1,11,249,80,144,41,55,40,40,80,144,41,8,41,42,27, +250,22,129,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,166,16,2,55,28,248,22,150, +16,23,194,2,248,22,153,16,23,194,1,28,248,22,149,16,23,194,2,90,144, +42,11,89,146,42,39,11,248,22,146,16,249,22,151,16,250,80,144,49,43,42, +248,22,166,16,2,56,11,11,248,22,166,16,2,57,86,95,23,195,1,23,194, +1,248,22,153,16,249,22,151,16,23,199,1,23,196,1,27,250,80,144,44,43, +42,248,22,166,16,2,56,23,197,1,10,28,23,193,2,248,22,153,16,23,194, +1,11,249,80,144,41,55,40,39,80,144,41,8,40,42,27,248,22,166,16,2, +58,28,248,22,150,16,23,194,2,248,22,153,16,23,194,1,28,248,22,149,16, +23,194,2,90,144,42,11,89,146,42,39,11,248,22,146,16,249,22,151,16,250, +80,144,49,43,42,248,22,166,16,2,56,11,11,248,22,166,16,2,57,86,95, +23,195,1,23,194,1,248,22,153,16,249,22,151,16,23,199,1,23,196,1,27, +250,80,144,44,43,42,248,22,166,16,2,56,23,197,1,10,28,23,193,2,248, +22,153,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,155,15,10,22,156,15,10,22,157,15,10,22,158,15,11, -22,159,15,11,22,163,15,10,22,162,15,11,22,164,15,10,22,161,15,10,22, -165,15,10,22,160,15,11,22,166,15,10,22,167,15,10,22,168,15,10,22,169, -15,11,22,170,15,10,22,153,15,11,247,22,156,6,28,248,22,152,2,193,192, -11,27,28,23,195,2,249,22,142,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,136, -16,23,195,2,249,22,148,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,179,8,250,22,161, -2,195,2,59,247,22,179,8,28,248,22,161,7,23,195,2,27,248,22,132,16, -23,196,1,28,248,22,149,16,23,194,2,192,249,22,150,16,23,195,1,27,247, -80,144,43,54,42,28,23,193,2,192,86,94,23,193,1,247,22,166,16,28,248, -22,150,8,23,195,2,27,248,22,133,16,23,196,1,28,248,22,149,16,23,194, -2,192,249,22,150,16,23,195,1,27,247,80,144,43,54,42,28,23,193,2,192, -86,94,23,193,1,247,22,166,16,28,248,22,188,15,23,195,2,28,248,22,149, -16,23,195,2,193,249,22,150,16,23,196,1,27,247,80,144,42,54,42,28,23, -193,2,192,86,94,23,193,1,247,22,166,16,193,27,248,22,165,16,2,55,28, -248,22,149,16,23,194,2,248,22,152,16,23,194,1,28,248,22,148,16,23,194, -2,90,144,42,11,89,146,42,39,11,248,22,145,16,249,22,150,16,250,80,144, -49,43,42,248,22,165,16,2,56,11,11,248,22,165,16,2,57,86,95,23,195, -1,23,194,1,248,22,152,16,249,22,150,16,23,199,1,23,196,1,27,250,80, -144,44,43,42,248,22,165,16,2,56,23,197,1,10,28,23,193,2,248,22,152, -16,23,194,1,11,28,248,22,149,16,23,195,2,193,249,22,150,16,23,196,1, +144,8,38,46,40,22,156,15,10,22,157,15,10,22,158,15,10,22,159,15,11, +22,160,15,11,22,164,15,10,22,163,15,11,22,165,15,10,22,162,15,10,22, +166,15,10,22,161,15,11,22,167,15,10,22,168,15,10,22,169,15,10,22,170, +15,11,22,171,15,10,22,154,15,11,247,22,157,6,28,248,22,152,2,193,192, +11,27,28,23,195,2,249,22,143,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,137, +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,133,16, +23,196,1,28,248,22,150,16,23,194,2,192,249,22,151,16,23,195,1,27,247, +80,144,43,54,42,28,23,193,2,192,86,94,23,193,1,247,22,167,16,28,248, +22,151,8,23,195,2,27,248,22,134,16,23,196,1,28,248,22,150,16,23,194, +2,192,249,22,151,16,23,195,1,27,247,80,144,43,54,42,28,23,193,2,192, +86,94,23,193,1,247,22,167,16,28,248,22,189,15,23,195,2,28,248,22,150, +16,23,195,2,193,249,22,151,16,23,196,1,27,247,80,144,42,54,42,28,23, +193,2,192,86,94,23,193,1,247,22,167,16,193,27,248,22,166,16,2,55,28, +248,22,150,16,23,194,2,248,22,153,16,23,194,1,28,248,22,149,16,23,194, +2,90,144,42,11,89,146,42,39,11,248,22,146,16,249,22,151,16,250,80,144, +49,43,42,248,22,166,16,2,56,11,11,248,22,166,16,2,57,86,95,23,195, +1,23,194,1,248,22,153,16,249,22,151,16,23,199,1,23,196,1,27,250,80, +144,44,43,42,248,22,166,16,2,56,23,197,1,10,28,23,193,2,248,22,153, +16,23,194,1,11,28,248,22,150,16,23,195,2,193,249,22,151,16,23,196,1, 27,249,80,144,44,55,40,39,80,144,44,8,43,42,28,23,193,2,192,86,94, -23,193,1,247,22,166,16,28,248,22,149,16,23,195,2,248,22,152,16,23,195, -1,28,248,22,148,16,23,195,2,90,144,42,11,89,146,42,39,11,248,22,145, -16,249,22,150,16,250,80,144,48,43,42,248,22,165,16,2,56,11,11,248,22, -165,16,2,57,86,95,23,195,1,23,194,1,248,22,152,16,249,22,150,16,23, -200,1,23,196,1,27,250,80,144,43,43,42,248,22,165,16,2,56,23,198,1, -10,28,23,193,2,248,22,152,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,179,20,23,199,2,28,248,22, -161,7,23,194,2,27,248,22,132,16,23,195,1,28,248,22,149,16,23,194,2, -192,249,22,150,16,23,195,1,27,247,80,144,46,54,42,28,23,193,2,192,86, -94,23,193,1,247,22,166,16,28,248,22,150,8,23,194,2,27,248,22,133,16, -23,195,1,28,248,22,149,16,23,194,2,192,249,22,150,16,23,195,1,27,247, -80,144,46,54,42,28,23,193,2,192,86,94,23,193,1,247,22,166,16,28,248, -22,188,15,23,194,2,28,248,22,149,16,23,194,2,192,249,22,150,16,23,195, -1,27,247,80,144,45,54,42,28,23,193,2,192,86,94,23,193,1,247,22,166, -16,192,27,248,22,180,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,179,20,23,197,2,27, -248,22,180,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,179,20,23,197,2,249,80,144,49, -8,44,42,23,204,1,248,22,180,20,23,198,1,249,22,97,23,202,2,249,80, -144,49,8,44,42,23,204,1,248,22,180,20,23,198,1,249,22,97,23,199,2, -27,248,22,180,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,179,20,23,197,2,249,80,144, -49,8,44,42,23,204,1,248,22,180,20,23,198,1,249,22,97,23,202,2,249, -80,144,49,8,44,42,23,204,1,248,22,180,20,23,198,1,249,22,97,23,196, -2,27,248,22,180,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,179,20,23,197,2,27,248, -22,180,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,179,20,23,197,2,249,80,144,49,8, -44,42,23,204,1,248,22,180,20,23,198,1,249,22,97,23,202,2,249,80,144, -49,8,44,42,23,204,1,248,22,180,20,23,198,1,249,22,97,23,199,2,27, -248,22,180,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,179,20,23,197,2,249,80,144,49, -8,44,42,23,204,1,248,22,180,20,23,198,1,249,22,97,23,202,2,249,80, -144,49,8,44,42,23,204,1,248,22,180,20,23,198,1,27,250,22,161,2,23, +23,193,1,247,22,167,16,28,248,22,150,16,23,195,2,248,22,153,16,23,195, +1,28,248,22,149,16,23,195,2,90,144,42,11,89,146,42,39,11,248,22,146, +16,249,22,151,16,250,80,144,48,43,42,248,22,166,16,2,56,11,11,248,22, +166,16,2,57,86,95,23,195,1,23,194,1,248,22,153,16,249,22,151,16,23, +200,1,23,196,1,27,250,80,144,43,43,42,248,22,166,16,2,56,23,198,1, +10,28,23,193,2,248,22,153,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,180,20,23,199,2,28,248,22, +162,7,23,194,2,27,248,22,133,16,23,195,1,28,248,22,150,16,23,194,2, +192,249,22,151,16,23,195,1,27,247,80,144,46,54,42,28,23,193,2,192,86, +94,23,193,1,247,22,167,16,28,248,22,151,8,23,194,2,27,248,22,134,16, +23,195,1,28,248,22,150,16,23,194,2,192,249,22,151,16,23,195,1,27,247, +80,144,46,54,42,28,23,193,2,192,86,94,23,193,1,247,22,167,16,28,248, +22,189,15,23,194,2,28,248,22,150,16,23,194,2,192,249,22,151,16,23,195, +1,27,247,80,144,45,54,42,28,23,193,2,192,86,94,23,193,1,247,22,167, +16,192,27,248,22,181,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,180,20,23,197,2,27, +248,22,181,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,180,20,23,197,2,249,80,144,49, +8,44,42,23,204,1,248,22,181,20,23,198,1,249,22,97,23,202,2,249,80, +144,49,8,44,42,23,204,1,248,22,181,20,23,198,1,249,22,97,23,199,2, +27,248,22,181,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,180,20,23,197,2,249,80,144, +49,8,44,42,23,204,1,248,22,181,20,23,198,1,249,22,97,23,202,2,249, +80,144,49,8,44,42,23,204,1,248,22,181,20,23,198,1,249,22,97,23,196, +2,27,248,22,181,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,180,20,23,197,2,27,248, +22,181,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,180,20,23,197,2,249,80,144,49,8, +44,42,23,204,1,248,22,181,20,23,198,1,249,22,97,23,202,2,249,80,144, +49,8,44,42,23,204,1,248,22,181,20,23,198,1,249,22,97,23,199,2,27, +248,22,181,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,180,20,23,197,2,249,80,144,49, +8,44,42,23,204,1,248,22,181,20,23,198,1,249,22,97,23,202,2,249,80, +144,49,8,44,42,23,204,1,248,22,181,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, -165,16,2,58,28,248,22,149,16,23,194,2,248,22,152,16,23,194,1,28,248, -22,148,16,23,194,2,90,144,42,11,89,146,42,39,11,248,22,145,16,249,22, -150,16,250,80,144,49,43,42,248,22,165,16,2,56,11,11,248,22,165,16,2, -57,86,95,23,195,1,23,194,1,248,22,152,16,249,22,150,16,23,199,1,23, -196,1,27,250,80,144,44,43,42,248,22,165,16,2,56,23,197,1,10,28,23, -193,2,248,22,152,16,23,194,1,11,27,248,80,144,41,58,42,249,80,144,43, +166,16,2,58,28,248,22,150,16,23,194,2,248,22,153,16,23,194,1,28,248, +22,149,16,23,194,2,90,144,42,11,89,146,42,39,11,248,22,146,16,249,22, +151,16,250,80,144,49,43,42,248,22,166,16,2,56,11,11,248,22,166,16,2, +57,86,95,23,195,1,23,194,1,248,22,153,16,249,22,151,16,23,199,1,23, +196,1,27,250,80,144,44,43,42,248,22,166,16,2,56,23,197,1,10,28,23, +193,2,248,22,153,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,142,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,142,16,64,117,112,6,5,5,115,104,97,114,101, -2,60,28,248,22,161,7,23,194,2,27,248,22,132,16,23,195,1,28,248,22, -149,16,23,194,2,192,249,22,150,16,23,195,1,27,247,80,144,47,54,42,28, -23,193,2,192,86,94,23,193,1,247,22,166,16,28,248,22,150,8,23,194,2, -27,248,22,133,16,23,195,1,28,248,22,149,16,23,194,2,192,249,22,150,16, +1,249,22,143,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,143,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,133,16,23,195,1,28,248,22, +150,16,23,194,2,192,249,22,151,16,23,195,1,27,247,80,144,47,54,42,28, +23,193,2,192,86,94,23,193,1,247,22,167,16,28,248,22,151,8,23,194,2, +27,248,22,134,16,23,195,1,28,248,22,150,16,23,194,2,192,249,22,151,16, 23,195,1,27,247,80,144,47,54,42,28,23,193,2,192,86,94,23,193,1,247, -22,166,16,28,248,22,188,15,23,194,2,28,248,22,149,16,23,194,2,192,249, -22,150,16,23,195,1,27,247,80,144,46,54,42,28,23,193,2,192,86,94,23, -193,1,247,22,166,16,192,250,22,97,248,22,92,11,28,247,22,173,16,28,247, -22,174,16,248,22,92,250,22,142,16,248,22,165,16,2,61,250,22,161,2,23, -204,2,2,59,247,22,179,8,2,60,9,9,28,247,22,174,16,250,80,144,47, +22,167,16,28,248,22,189,15,23,194,2,28,248,22,150,16,23,194,2,192,249, +22,151,16,23,195,1,27,247,80,144,46,54,42,28,23,193,2,192,86,94,23, +193,1,247,22,167,16,192,250,22,97,248,22,92,11,28,247,22,174,16,28,247, +22,175,16,248,22,92,250,22,143,16,248,22,166,16,2,61,250,22,161,2,23, +204,2,2,59,247,22,180,8,2,60,9,9,28,247,22,175,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,184,13,23,194,1,249,22, -14,80,144,41,8,26,41,28,248,22,140,13,23,197,2,86,94,23,196,1,32, +102,105,108,101,115,248,22,92,23,200,1,9,248,22,185,13,23,194,1,249,22, +14,80,144,41,8,26,41,28,248,22,141,13,23,197,2,86,94,23,196,1,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,145,16,23,197,1,86,95,23,195,1, -23,194,1,28,248,22,188,15,23,194,2,28,248,22,137,16,23,194,2,249,22, -153,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,145,16,23,197,1,86,95,23,195,1,23,194,1,28, -248,22,188,15,23,194,2,28,248,22,137,16,23,194,2,249,22,153,6,23,195, +90,144,42,11,89,146,42,39,11,248,22,146,16,23,197,1,86,95,23,195,1, +23,194,1,28,248,22,189,15,23,194,2,28,248,22,138,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,146,16,23,197,1,86,95,23,195,1,23,194,1,28, +248,22,189,15,23,194,2,28,248,22,138,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,145,16,23,197,1,86,95,23,195,1,23,194,1,28,248,22,188,15, -23,194,2,28,248,22,137,16,23,194,2,249,22,153,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,145, -16,23,197,1,86,95,23,195,1,23,194,1,28,248,22,188,15,23,194,2,28, -248,22,137,16,23,194,2,249,22,153,6,23,195,1,32,0,88,148,8,36,39, +11,248,22,146,16,23,197,1,86,95,23,195,1,23,194,1,28,248,22,189,15, +23,194,2,28,248,22,138,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,146, +16,23,197,1,86,95,23,195,1,23,194,1,28,248,22,189,15,23,194,2,28, +248,22,138,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,171,6,8,128,128,23,196,2,28,248, -22,156,7,23,194,2,9,249,22,82,23,195,1,27,249,22,171,6,8,128,128, -23,199,2,28,248,22,156,7,23,194,2,9,249,22,82,23,195,1,27,249,22, -171,6,8,128,128,23,202,2,28,248,22,156,7,23,194,2,9,249,22,82,23, -195,1,27,249,22,171,6,8,128,128,23,205,2,28,248,22,156,7,23,194,2, -9,249,22,82,23,195,1,248,2,125,23,206,1,27,249,22,171,6,8,128,128, -23,196,2,28,248,22,150,8,23,194,2,28,249,22,168,20,248,22,159,21,23, -196,2,8,128,128,249,22,1,22,162,8,249,22,82,23,197,1,27,249,22,171, -6,8,128,128,23,201,2,28,248,22,156,7,23,194,2,9,249,22,82,23,195, -1,27,249,22,171,6,8,128,128,23,204,2,28,248,22,156,7,23,194,2,9, -249,22,82,23,195,1,27,249,22,171,6,8,128,128,23,207,2,28,248,22,156, -7,23,194,2,9,249,22,82,23,195,1,27,249,22,171,6,8,128,128,23,210, -2,28,248,22,156,7,23,194,2,9,249,22,82,23,195,1,248,2,125,23,211, -1,192,192,248,22,141,6,23,194,1,20,13,144,80,144,40,8,28,40,80,144, -40,8,46,42,27,28,249,22,133,9,248,22,188,8,2,62,41,90,144,42,11, -89,146,42,39,11,248,22,145,16,23,198,2,86,95,23,195,1,23,194,1,28, -248,22,188,15,23,194,2,28,248,22,137,16,23,194,2,249,22,153,6,23,195, +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,169,20,248,22,160,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,146,16,23,198,2,86,95,23,195,1,23,194,1,28, +248,22,189,15,23,194,2,28,248,22,138,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,145,16,23,197,1,86,95,23,195,1,23,194,1,28,248,22,188,15, -23,194,2,28,248,22,137,16,23,194,2,249,22,153,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,145, -16,23,197,1,86,95,23,195,1,23,194,1,28,248,22,188,15,23,194,2,28, -248,22,137,16,23,194,2,249,22,153,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,145,16,23,197,1, -86,95,23,195,1,23,194,1,28,248,22,188,15,23,194,2,28,248,22,137,16, -23,194,2,249,22,153,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,11,28,248,22,136,16,23,195,2,27, -28,249,22,133,9,248,22,188,8,2,62,41,249,22,153,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,155,6, -23,195,1,86,94,23,194,1,12,249,22,82,27,248,22,132,6,23,199,1,250, +11,248,22,146,16,23,197,1,86,95,23,195,1,23,194,1,28,248,22,189,15, +23,194,2,28,248,22,138,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,146, +16,23,197,1,86,95,23,195,1,23,194,1,28,248,22,189,15,23,194,2,28, +248,22,138,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,146,16,23,197,1, +86,95,23,195,1,23,194,1,28,248,22,189,15,23,194,2,28,248,22,138,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,11,28,248,22,137,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,12,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,175,9,249,22,186,14,39,248, -22,180,20,23,199,2,11,11,194,86,94,23,195,1,249,22,12,20,20,94,88, +28,23,195,2,28,248,22,84,23,196,2,248,22,176,9,249,22,187,14,39,248, +22,181,20,23,199,2,11,11,194,86,94,23,195,1,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,27,248,22,175,9,194,28,192, -192,248,22,175,9,248,22,83,195,86,95,28,248,22,161,12,23,198,2,27,247, -22,153,12,28,249,22,143,12,23,195,2,2,63,251,22,149,12,23,197,1,2, -63,250,22,145,8,6,42,42,101,114,114,111,114,32,114,101,97,100,105,110,103, +3,33,129,2,23,196,1,80,144,41,8,26,41,27,248,22,176,9,194,28,192, +192,248,22,176,9,248,22,83,195,86,95,28,248,22,162,12,23,198,2,27,247, +22,154,12,28,249,22,144,12,23,195,2,2,63,251,22,150,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,157,12,23,206,2,247,22,27, +101,32,126,115,58,32,126,97,23,201,2,248,22,158,12,23,206,2,247,22,27, 12,12,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,12,28,248,22,161, +82,23,200,1,21,17,0,0,86,95,23,195,1,23,193,1,12,28,248,22,162, 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,132,2,20,20,94,248, -22,156,6,23,194,2,28,248,22,156,7,248,22,156,6,23,195,1,12,248,22, -188,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,141,6,23,194,1, -28,248,22,91,193,28,28,249,22,133,4,41,248,22,96,195,10,249,22,133,4, -42,248,22,96,195,28,28,248,22,161,7,248,22,83,194,10,28,249,22,177,9, -2,64,248,22,83,195,10,249,22,177,9,2,65,248,22,83,195,28,27,248,22, -105,194,28,248,22,188,15,193,10,28,248,22,161,7,193,28,248,22,147,16,193, -10,248,22,148,16,193,11,27,248,22,90,248,22,107,195,28,192,192,248,22,130, -17,248,22,114,195,11,11,11,11,28,248,22,137,16,249,22,142,16,23,197,2, -23,198,2,27,248,22,70,248,22,128,16,23,198,1,250,22,159,2,23,197,2, +22,157,6,23,194,2,28,248,22,157,7,248,22,157,6,23,195,1,12,248,22, +189,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,134,4,41,248,22,96,195,10,249,22,134,4, +42,248,22,96,195,28,28,248,22,162,7,248,22,83,194,10,28,249,22,178,9, +2,64,248,22,83,195,10,249,22,178,9,2,65,248,22,83,195,28,27,248,22, +105,194,28,248,22,189,15,193,10,28,248,22,162,7,193,28,248,22,148,16,193, +10,248,22,149,16,193,11,27,248,22,90,248,22,107,195,28,192,192,248,22,131, +17,248,22,114,195,11,11,11,11,28,248,22,138,16,249,22,143,16,23,197,2, +23,198,2,27,248,22,70,248,22,129,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,185,16,248,22,114,23,198,2,247, -22,179,8,27,248,22,152,16,249,22,150,16,248,22,105,23,200,2,23,198,1, -28,249,22,177,9,248,22,179,20,23,199,2,2,65,86,94,23,196,1,249,22, +248,22,90,248,22,107,23,197,2,10,249,22,186,16,248,22,114,23,198,2,247, +22,180,8,27,248,22,153,16,249,22,151,16,248,22,105,23,200,2,23,198,1, +28,249,22,178,9,248,22,180,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,137,2,23,196,1, -248,22,155,16,23,196,1,28,249,22,177,9,248,22,179,20,23,199,2,2,64, +248,22,156,16,23,196,1,28,249,22,178,9,248,22,180,20,23,199,2,2,64, 86,94,23,196,1,86,94,28,250,22,161,2,23,197,2,11,11,12,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,138,2,23,196,1,23,195,1,27,248,22,70,248,22, -179,20,23,199,1,250,22,159,2,23,198,2,23,196,2,249,22,82,248,22,132, +180,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,175,9, -248,22,83,23,197,2,10,9,27,249,22,132,6,23,197,2,68,98,105,110,97, +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,134,2,20, 20,94,88,148,8,36,39,46,11,9,223,3,33,135,2,23,196,1,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,136,2,23,195,2,11,12,248,22,188,11,6,18,18,105,108,108,45,102,111, +33,136,2,23,195,2,11,12,248,22,189,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,145,16,23,200,2,192,86,96,249,22,3,20,20, +11,89,146,42,39,11,248,22,146,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,139,2,23,195,1,23,197,1, 249,22,167,2,195,88,148,8,36,41,51,11,9,223,3,33,140,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,179,9,23,195,2,23,196,1,248,22,180,20,195,86,94,23,195,1,20,13, +22,180,9,23,195,2,23,196,1,248,22,181,20,195,86,94,23,195,1,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,141,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,155,15,10,22,156,15,10,22,157,15,10,22,158,15,11,22,159, -15,11,22,163,15,10,22,162,15,11,22,164,15,10,22,161,15,10,22,165,15, -10,22,160,15,11,22,166,15,10,22,167,15,10,22,168,15,10,22,169,15,11, -22,170,15,10,22,153,15,11,247,23,193,1,250,22,128,12,2,9,2,52,23, +42,46,40,22,156,15,10,22,157,15,10,22,158,15,10,22,159,15,11,22,160, +15,11,22,164,15,10,22,163,15,11,22,165,15,10,22,162,15,10,22,166,15, +10,22,161,15,11,22,167,15,10,22,168,15,10,22,169,15,10,22,170,15,11, +22,171,15,10,22,154,15,11,247,23,193,1,250,22,129,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,142,2,23,195,1,0,7,35, -114,120,34,47,43,34,28,248,22,161,7,23,195,2,27,249,22,183,16,2,144, -2,23,197,2,28,23,193,2,28,249,22,133,4,248,22,104,23,196,2,248,22, -187,3,248,22,164,7,23,199,2,249,22,7,250,22,183,7,23,200,1,39,248, -22,104,23,199,1,23,198,1,249,22,7,250,22,183,7,23,200,2,39,248,22, -104,23,199,2,249,22,82,249,22,183,7,23,201,1,248,22,106,23,200,1,23, +114,120,34,47,43,34,28,248,22,162,7,23,195,2,27,249,22,184,16,2,144, +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,165,7,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,145,16,23,198,1,86,94,23,195,1,28,249,22,177,9, +146,42,39,11,248,22,146,16,23,198,1,86,94,23,195,1,28,249,22,178,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,161,7,23,195,2,27,249,22,183,16, -2,144,2,23,197,2,28,23,193,2,28,249,22,133,4,248,22,104,23,196,2, -248,22,187,3,248,22,164,7,23,199,2,249,22,7,250,22,183,7,23,200,1, -39,248,22,104,23,199,1,23,196,1,249,22,7,250,22,183,7,23,200,2,39, -248,22,104,23,199,2,249,22,82,249,22,183,7,23,201,1,248,22,106,23,200, +22,82,23,197,1,23,201,1,28,248,22,162,7,23,195,2,27,249,22,184,16, +2,144,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,165,7,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,145,16,23,198,1,86,94,23,195,1,28,249,22, -177,9,23,195,2,2,49,86,94,23,193,1,249,22,7,23,196,1,23,198,1, +11,89,146,42,39,11,248,22,146,16,23,198,1,86,94,23,195,1,28,249,22, +178,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,179,20,23,197,2,250,22, -97,249,22,2,22,132,2,250,22,161,2,248,22,179,20,23,204,2,23,202,2, -9,250,22,161,2,248,22,179,20,23,202,2,11,9,27,248,22,180,20,23,200, +28,248,22,83,23,196,2,28,248,22,152,2,248,22,180,20,23,197,2,250,22, +97,249,22,2,22,132,2,250,22,161,2,248,22,180,20,23,204,2,23,202,2, +9,250,22,161,2,248,22,180,20,23,202,2,11,9,27,248,22,181,20,23,200, 1,28,248,22,90,23,194,2,9,28,248,22,83,23,194,2,28,248,22,152,2, -248,22,179,20,23,195,2,250,22,97,249,22,2,22,132,2,250,22,161,2,248, -22,179,20,23,202,2,23,206,2,9,250,22,161,2,248,22,179,20,23,200,2, -11,9,249,80,144,48,8,48,42,23,203,1,248,22,180,20,23,199,1,27,248, -80,144,45,8,30,42,248,22,179,20,23,196,2,250,22,97,250,22,161,2,23, +248,22,180,20,23,195,2,250,22,97,249,22,2,22,132,2,250,22,161,2,248, +22,180,20,23,202,2,23,206,2,9,250,22,161,2,248,22,180,20,23,200,2, +11,9,249,80,144,48,8,48,42,23,203,1,248,22,181,20,23,199,1,27,248, +80,144,45,8,30,42,248,22,180,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,180,20,23,200,1,249,22,97,247,22,169,16,249,80,144, -47,8,48,42,23,202,1,248,22,180,20,23,198,1,27,248,80,144,41,8,30, -42,248,22,179,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,180,20,23,201,1,28,248,22, -90,23,194,2,9,28,248,22,83,23,194,2,28,248,22,152,2,248,22,179,20, -23,195,2,250,22,97,249,22,2,22,132,2,250,22,161,2,248,22,179,20,23, -202,2,23,207,2,9,250,22,161,2,248,22,179,20,23,200,2,11,9,249,80, -144,49,8,48,42,23,204,1,248,22,180,20,23,199,1,27,248,80,144,46,8, -30,42,248,22,179,20,23,196,2,250,22,97,250,22,161,2,23,199,2,23,206, +42,23,204,1,248,22,181,20,23,200,1,249,22,97,247,22,170,16,249,80,144, +47,8,48,42,23,202,1,248,22,181,20,23,198,1,27,248,80,144,41,8,30, +42,248,22,180,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,181,20,23,201,1,28,248,22, +90,23,194,2,9,28,248,22,83,23,194,2,28,248,22,152,2,248,22,180,20, +23,195,2,250,22,97,249,22,2,22,132,2,250,22,161,2,248,22,180,20,23, +202,2,23,207,2,9,250,22,161,2,248,22,180,20,23,200,2,11,9,249,80, +144,49,8,48,42,23,204,1,248,22,181,20,23,199,1,27,248,80,144,46,8, +30,42,248,22,180,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,180,20,23,200,1,249,22,97,247,22,169,16,249,80,144,48,8,48,42, -23,203,1,248,22,180,20,23,198,1,249,22,97,247,22,169,16,27,248,22,180, +248,22,181,20,23,200,1,249,22,97,247,22,170,16,249,80,144,48,8,48,42, +23,203,1,248,22,181,20,23,198,1,249,22,97,247,22,170,16,27,248,22,181, 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,179,20,23,195,2,250,22,97,249,22,2,22,132,2,250,22, -161,2,248,22,179,20,23,202,2,23,205,2,9,250,22,161,2,248,22,179,20, -23,200,2,11,9,249,80,144,47,8,48,42,23,202,1,248,22,180,20,23,199, -1,27,248,80,144,44,8,30,42,248,22,179,20,23,196,2,250,22,97,250,22, +22,152,2,248,22,180,20,23,195,2,250,22,97,249,22,2,22,132,2,250,22, +161,2,248,22,180,20,23,202,2,23,205,2,9,250,22,161,2,248,22,180,20, +23,200,2,11,9,249,80,144,47,8,48,42,23,202,1,248,22,181,20,23,199, +1,27,248,80,144,44,8,30,42,248,22,180,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,180,20,23,200,1,249,22,97,247,22,169,16, -249,80,144,46,8,48,42,23,201,1,248,22,180,20,23,198,1,32,147,2,88, +48,8,48,42,23,203,1,248,22,181,20,23,200,1,249,22,97,247,22,170,16, +249,80,144,46,8,48,42,23,201,1,248,22,181,20,23,198,1,32,147,2,88, 148,8,36,41,52,11,2,50,222,33,148,2,28,248,22,90,248,22,84,23,196, -2,248,22,92,248,23,195,1,248,22,179,20,23,197,1,250,22,93,248,23,197, -2,248,22,179,20,23,199,2,2,67,249,2,147,2,23,198,1,248,22,180,20, -23,200,1,250,22,145,8,6,7,7,10,32,126,97,32,126,97,6,1,1,32, -23,196,1,249,22,145,8,6,6,6,10,32,32,32,126,97,248,22,135,2,23, +2,248,22,92,248,23,195,1,248,22,180,20,23,197,1,250,22,93,248,23,197, +2,248,22,180,20,23,199,2,2,67,249,2,147,2,23,198,1,248,22,181,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,151,2,88,148,39,41,51,11,68,102,105,108,116,101,114,222,33,152, 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,179,20,23,197,2,249,2,151,2,23,197,1,248,22,180,20,23, -199,1,249,2,151,2,23,195,1,248,22,180,20,23,197,1,28,248,22,90,23, -202,2,86,95,23,201,1,23,194,1,28,23,202,2,28,194,249,22,142,16,203, +22,82,248,22,180,20,23,197,2,249,2,151,2,23,197,1,248,22,181,20,23, +199,1,249,2,151,2,23,195,1,248,22,181,20,23,197,1,28,248,22,90,23, +202,2,86,95,23,201,1,23,194,1,28,23,202,2,28,194,249,22,143,16,203, 196,201,86,95,23,202,1,23,195,1,27,28,248,22,90,23,199,2,2,66,249, -22,1,22,184,7,249,2,147,2,23,205,2,23,202,2,248,23,198,1,251,22, -145,8,6,70,70,99,111,108,108,101,99,116,105,111,110,32,110,111,116,32,102, +22,1,22,185,7,249,2,147,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,184,7,248,23,210,1,23,208,1,2,67,23,201,2, -249,22,1,22,184,7,249,22,2,32,0,88,148,8,36,40,48,11,9,222,33, -149,2,27,248,22,96,23,211,2,27,248,22,96,247,22,169,16,28,249,22,134, -4,249,22,189,3,23,198,2,23,197,2,44,23,211,2,249,22,97,247,22,169, -16,248,22,92,249,22,145,8,6,50,50,46,46,46,32,91,126,97,32,97,100, +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, +149,2,27,248,22,96,23,211,2,27,248,22,96,247,22,170,16,28,249,22,135, +4,249,22,190,3,23,198,2,23,197,2,44,23,211,2,249,22,97,247,22,170, +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, -189,3,23,201,1,23,200,1,28,249,22,5,22,134,2,23,207,2,250,22,145, +190,3,23,201,1,23,200,1,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,184,7,249, +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,150,2,249,2,151,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,188,15,23,195,2,249,22,142,16,23,196,1,23,202,2,248, -22,135,2,23,195,1,28,28,248,22,188,15,248,22,179,20,23,205,2,248,22, -137,16,23,194,2,10,27,250,22,1,22,142,16,23,197,1,23,203,2,28,28, -248,22,90,23,201,2,10,248,22,137,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,188,15,199,248,22,128,16, -199,198,19,248,22,164,7,23,195,2,27,28,249,22,168,20,23,196,4,43,28, -249,22,167,7,6,4,4,46,114,107,116,249,22,183,7,23,199,2,249,22,189, -3,23,200,4,43,249,22,184,7,250,22,183,7,23,200,1,39,249,22,189,3, +2,27,28,248,22,189,15,23,195,2,249,22,143,16,23,196,1,23,202,2,248, +22,135,2,23,195,1,28,28,248,22,189,15,248,22,180,20,23,205,2,248,22, +138,16,23,194,2,10,27,250,22,1,22,143,16,23,197,1,23,203,2,28,28, +248,22,90,23,201,2,10,248,22,138,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,189,15,199,248,22,129,16, +199,198,19,248,22,165,7,23,195,2,27,28,249,22,169,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,142,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,180,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,180, +249,22,143,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,181,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,181, 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,180,20,23,20,23,20,28,248,22,188,15,193,248,22,128,16, +17,23,18,248,22,181,20,23,20,23,20,28,248,22,189,15,193,248,22,129,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,188,15,195,248,22,128,16,195,194,27,27, -247,22,170,16,28,248,22,90,23,194,2,9,28,248,22,83,23,194,2,28,248, -22,152,2,248,22,179,20,23,195,2,250,22,97,249,22,2,22,132,2,250,22, -161,2,248,22,179,20,23,202,2,23,203,2,9,250,22,161,2,248,22,179,20, -23,200,2,11,9,249,80,144,49,8,48,42,23,200,1,248,22,180,20,23,199, -1,27,248,80,144,46,8,30,42,248,22,179,20,23,196,2,250,22,97,250,22, +23,200,1,27,248,22,70,28,248,22,189,15,195,248,22,129,16,195,194,27,27, +247,22,171,16,28,248,22,90,23,194,2,9,28,248,22,83,23,194,2,28,248, +22,152,2,248,22,180,20,23,195,2,250,22,97,249,22,2,22,132,2,250,22, +161,2,248,22,180,20,23,202,2,23,203,2,9,250,22,161,2,248,22,180,20, +23,200,2,11,9,249,80,144,49,8,48,42,23,200,1,248,22,181,20,23,199, +1,27,248,80,144,46,8,30,42,248,22,180,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,180,20,23,200,1,249,22,97,247,22,169,16, -249,80,144,48,8,48,42,23,199,1,248,22,180,20,23,198,1,27,32,0,88, +50,8,48,42,23,201,1,248,22,181,20,23,200,1,249,22,97,247,22,170,16, +249,80,144,48,8,48,42,23,199,1,248,22,181,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,154,2,26, 9,80,144,53,8,49,42,23,19,23,18,23,15,205,204,202,201,202,11,32,156, -2,88,148,8,36,42,57,11,2,50,222,33,157,2,28,248,22,138,4,195,19, -248,22,155,8,195,249,22,134,16,251,22,162,8,250,22,161,8,203,39,23,202, -4,2,51,249,22,161,8,202,248,22,159,21,203,2,68,28,248,22,189,15,196, -248,22,190,15,196,247,22,191,15,2,27,248,22,187,3,196,28,28,248,22,138, -4,193,11,249,22,177,9,8,46,249,22,156,8,198,196,249,22,134,16,251,22, -162,8,250,22,161,8,203,39,201,2,69,249,22,161,8,202,248,22,186,3,201, -2,68,28,248,22,189,15,196,248,22,190,15,196,247,22,191,15,250,2,156,2, -196,197,195,248,22,136,16,27,250,22,142,16,23,198,1,23,202,1,23,199,1, -28,249,22,177,9,23,199,2,66,115,97,109,101,192,28,248,22,147,16,23,198, -2,249,22,142,16,194,198,249,80,144,46,42,42,23,195,1,23,199,1,249,22, +2,88,148,8,36,42,57,11,2,50,222,33,157,2,28,248,22,139,4,195,19, +248,22,156,8,195,249,22,135,16,251,22,163,8,250,22,162,8,203,39,23,202, +4,2,51,249,22,162,8,202,248,22,160,21,203,2,68,28,248,22,190,15,196, +248,22,191,15,196,247,22,128,16,2,27,248,22,188,3,196,28,28,248,22,139, +4,193,11,249,22,178,9,8,46,249,22,157,8,198,196,249,22,135,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,190,15,196,248,22,191,15,196,247,22,128,16,250,2,156,2, +196,197,195,248,22,137,16,27,250,22,143,16,23,198,1,23,202,1,23,199,1, +28,249,22,178,9,23,199,2,66,115,97,109,101,192,28,248,22,148,16,23,198, +2,249,22,143,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,136,16,249,22,142,16,23,198, +1,23,196,1,23,199,1,23,197,1,27,248,22,137,16,249,22,143,16,23,198, 2,23,199,2,28,23,193,2,192,86,94,23,193,1,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,130,16,23,196,1,27,250,2,156,2,23,204,1,23,197,2,248,22, -155,8,23,198,1,28,248,22,189,15,195,249,22,142,16,196,194,192,27,247,22, -171,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,172,16,11,86,95,28,28,248, -22,189,15,23,194,2,10,28,248,22,188,15,23,194,2,10,28,248,22,161,7, -23,194,2,28,248,22,147,16,23,194,2,10,248,22,148,16,23,194,2,11,12, -252,22,128,12,23,200,2,2,42,39,23,198,2,23,199,2,28,28,248,22,161, -7,23,195,2,10,248,22,150,8,23,195,2,86,94,23,194,1,12,252,22,128, +27,248,22,131,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,190,15,195,249,22,143,16,196,194,192,27,247,22, +172,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,173,16,11,86,95,28,28,248, +22,190,15,23,194,2,10,28,248,22,189,15,23,194,2,10,28,248,22,162,7, +23,194,2,28,248,22,148,16,23,194,2,10,248,22,149,16,23,194,2,11,12, +252,22,129,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,12,252,22,129, 12,23,200,2,2,70,40,23,198,2,23,199,1,90,144,42,11,89,146,42,39, -11,248,22,145,16,23,197,2,86,94,23,195,1,86,94,28,23,193,2,86,95, -23,198,1,23,196,1,12,250,22,131,12,23,201,1,2,71,23,199,1,249,22, +11,248,22,146,16,23,197,2,86,94,23,195,1,86,94,28,23,193,2,86,95, +23,198,1,23,196,1,12,250,22,132,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,138,4,23,199,2,86,95,23,198,1,23,196,1,19,248, -22,155,8,23,199,2,249,22,134,16,251,22,162,8,250,22,161,8,23,207,2, -39,23,202,4,2,51,249,23,204,1,23,206,2,248,22,159,21,23,207,1,28, -248,22,161,7,200,249,22,176,8,201,8,63,199,28,248,22,189,15,197,248,22, -190,15,197,247,22,191,15,2,27,248,22,187,3,23,200,1,28,28,248,22,138, -4,23,194,2,11,249,22,177,9,8,46,249,22,156,8,23,202,2,23,197,2, -249,22,134,16,251,22,162,8,250,22,161,8,23,207,2,39,23,202,2,23,203, -1,249,23,204,1,23,206,1,248,22,186,3,23,202,1,28,248,22,161,7,200, -249,22,176,8,201,8,63,199,28,248,22,189,15,197,248,22,190,15,197,247,22, -191,15,28,248,22,138,4,23,194,2,86,95,23,197,1,23,193,1,19,248,22, -155,8,23,200,2,249,22,134,16,251,22,162,8,250,22,161,8,23,208,2,39, -23,202,4,2,51,249,23,205,1,23,207,2,248,22,159,21,23,208,1,28,248, -22,161,7,201,249,22,176,8,202,8,63,200,28,248,22,189,15,198,248,22,190, -15,198,247,22,191,15,2,27,248,22,187,3,23,195,1,28,28,248,22,138,4, -23,194,2,11,249,22,177,9,8,46,249,22,156,8,23,203,2,23,197,2,249, -22,134,16,251,22,162,8,250,22,161,8,23,208,2,39,23,202,2,23,204,1, -249,23,205,1,23,207,1,248,22,186,3,23,202,1,28,248,22,161,7,201,249, -22,176,8,202,8,63,200,28,248,22,189,15,198,248,22,190,15,198,247,22,191, -15,28,248,22,138,4,23,194,2,86,95,23,198,1,23,193,1,19,248,22,155, -8,23,201,2,249,22,134,16,251,22,162,8,250,22,161,8,23,209,2,39,23, -202,4,2,51,249,23,206,1,23,208,2,248,22,159,21,23,209,1,28,248,22, -161,7,202,249,22,176,8,203,8,63,201,28,248,22,189,15,199,248,22,190,15, -199,247,22,191,15,2,27,248,22,187,3,23,195,1,28,28,248,22,138,4,23, -194,2,11,249,22,177,9,8,46,249,22,156,8,23,204,2,23,197,2,249,22, -134,16,251,22,162,8,250,22,161,8,23,209,2,39,23,202,2,23,205,1,249, -23,206,1,23,208,1,248,22,186,3,23,202,1,28,248,22,161,7,202,249,22, -176,8,203,8,63,201,28,248,22,189,15,199,248,22,190,15,199,247,22,191,15, +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,135,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,160,21,23,207,1,28, +248,22,162,7,200,249,22,177,8,201,8,63,199,28,248,22,190,15,197,248,22, +191,15,197,247,22,128,16,2,27,248,22,188,3,23,200,1,28,28,248,22,139, +4,23,194,2,11,249,22,178,9,8,46,249,22,157,8,23,202,2,23,197,2, +249,22,135,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,190,15,197,248,22,191,15,197,247,22, +128,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,135,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,160,21,23,208,1,28,248, +22,162,7,201,249,22,177,8,202,8,63,200,28,248,22,190,15,198,248,22,191, +15,198,247,22,128,16,2,27,248,22,188,3,23,195,1,28,28,248,22,139,4, +23,194,2,11,249,22,178,9,8,46,249,22,157,8,23,203,2,23,197,2,249, +22,135,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,190,15,198,248,22,191,15,198,247,22,128, +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,135,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,160,21,23,209,1,28,248,22, +162,7,202,249,22,177,8,203,8,63,201,28,248,22,190,15,199,248,22,191,15, +199,247,22,128,16,2,27,248,22,188,3,23,195,1,28,28,248,22,139,4,23, +194,2,11,249,22,178,9,8,46,249,22,157,8,23,204,2,23,197,2,249,22, +135,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,190,15,199,248,22,191,15,199,247,22,128,16, 253,2,162,2,201,202,203,204,205,198,90,144,41,11,89,146,41,39,11,86,95, -28,28,248,22,189,15,23,199,2,10,28,248,22,188,15,23,199,2,10,28,248, -22,161,7,23,199,2,28,248,22,147,16,23,199,2,10,248,22,148,16,23,199, -2,11,12,252,22,128,12,23,200,2,2,42,39,23,203,2,23,204,2,28,28, -248,22,161,7,23,200,2,10,248,22,150,8,23,200,2,12,252,22,128,12,23, +28,28,248,22,190,15,23,199,2,10,28,248,22,189,15,23,199,2,10,28,248, +22,162,7,23,199,2,28,248,22,148,16,23,199,2,10,248,22,149,16,23,199, +2,11,12,252,22,129,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,12,252,22,129,12,23, 200,2,2,70,40,23,203,2,23,204,2,90,144,42,11,89,146,42,39,11,248, -22,145,16,23,202,2,86,94,23,195,1,86,94,28,192,12,250,22,131,12,23, -201,1,2,71,23,204,2,249,22,7,194,195,27,248,22,130,16,23,196,1,27, -19,248,22,155,8,23,196,2,28,249,22,164,20,23,195,4,39,86,94,23,199, -1,249,22,134,16,251,22,162,8,250,22,161,8,23,204,2,39,248,22,159,21, -23,205,2,2,51,249,23,208,1,23,203,2,248,22,159,21,23,204,1,28,248, -22,161,7,23,16,249,22,176,8,23,17,8,63,23,15,28,248,22,189,15,203, -248,22,190,15,203,247,22,191,15,27,248,22,187,3,23,195,4,28,28,248,22, -138,4,23,194,2,11,249,22,177,9,8,46,249,22,156,8,23,200,2,23,197, -2,249,22,134,16,251,22,162,8,250,22,161,8,23,205,2,39,23,202,2,23, -206,1,249,23,209,1,23,204,1,248,22,186,3,23,202,1,28,248,22,161,7, -23,17,249,22,176,8,23,18,8,63,23,16,28,248,22,189,15,204,248,22,190, -15,204,247,22,191,15,28,248,22,138,4,23,194,2,86,95,23,200,1,23,193, -1,249,22,134,16,251,22,162,8,250,22,161,8,23,205,2,39,248,22,159,21, -23,206,2,2,51,249,23,209,1,23,204,2,248,22,159,21,23,205,1,28,248, -22,161,7,23,17,249,22,176,8,23,18,8,63,23,16,28,248,22,189,15,204, -248,22,190,15,204,247,22,191,15,27,248,22,187,3,23,195,1,28,28,248,22, -138,4,23,194,2,11,249,22,177,9,8,46,249,22,156,8,23,201,2,23,197, -2,249,22,134,16,251,22,162,8,250,22,161,8,23,206,2,39,23,202,2,23, -207,1,249,23,210,1,23,205,1,248,22,186,3,23,202,1,28,248,22,161,7, -23,18,249,22,176,8,23,19,8,63,23,17,28,248,22,189,15,205,248,22,190, -15,205,247,22,191,15,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,189,15,195,249,22,142,16,196,194,192, -32,165,2,88,148,8,36,43,59,11,2,50,222,33,166,2,28,248,22,138,4, -196,19,248,22,155,8,196,249,22,134,16,251,22,162,8,250,22,161,8,204,39, -23,202,4,2,51,2,51,28,248,22,161,7,200,249,22,176,8,201,8,63,199, -28,248,22,189,15,197,248,22,190,15,197,247,22,191,15,2,27,248,22,187,3, -197,28,28,248,22,138,4,193,11,249,22,177,9,8,46,249,22,156,8,199,196, -249,22,134,16,251,22,162,8,250,22,161,8,204,39,201,2,51,2,51,28,248, -22,161,7,200,249,22,176,8,201,8,63,199,28,248,22,189,15,197,248,22,190, -15,197,247,22,191,15,28,248,22,138,4,193,19,248,22,155,8,197,249,22,134, -16,251,22,162,8,250,22,161,8,205,39,23,202,4,2,51,2,51,28,248,22, -161,7,201,249,22,176,8,202,8,63,200,28,248,22,189,15,198,248,22,190,15, -198,247,22,191,15,2,27,248,22,187,3,194,28,28,248,22,138,4,193,11,249, -22,177,9,8,46,249,22,156,8,200,196,249,22,134,16,251,22,162,8,250,22, -161,8,205,39,201,2,51,2,51,28,248,22,161,7,201,249,22,176,8,202,8, -63,200,28,248,22,189,15,198,248,22,190,15,198,247,22,191,15,251,2,165,2, -198,199,200,196,90,144,41,11,89,146,41,39,11,86,95,28,28,248,22,189,15, -23,196,2,10,28,248,22,188,15,23,196,2,10,28,248,22,161,7,23,196,2, -28,248,22,147,16,23,196,2,10,248,22,148,16,23,196,2,11,12,252,22,128, -12,2,37,2,42,39,23,200,2,23,201,2,28,28,248,22,161,7,23,197,2, -10,248,22,150,8,23,197,2,12,252,22,128,12,2,37,2,70,40,23,200,2, -23,201,2,90,144,42,11,89,146,42,39,11,248,22,145,16,23,199,2,86,94, -23,195,1,86,94,28,192,12,250,22,131,12,2,37,2,71,23,201,2,249,22, -7,194,195,27,248,22,130,16,23,196,1,27,251,2,165,2,23,202,1,23,201, -1,23,198,2,248,22,155,8,23,199,1,28,248,22,189,15,195,249,22,142,16, +22,146,16,23,202,2,86,94,23,195,1,86,94,28,192,12,250,22,132,12,23, +201,1,2,71,23,204,2,249,22,7,194,195,27,248,22,131,16,23,196,1,27, +19,248,22,156,8,23,196,2,28,249,22,165,20,23,195,4,39,86,94,23,199, +1,249,22,135,16,251,22,163,8,250,22,162,8,23,204,2,39,248,22,160,21, +23,205,2,2,51,249,23,208,1,23,203,2,248,22,160,21,23,204,1,28,248, +22,162,7,23,16,249,22,177,8,23,17,8,63,23,15,28,248,22,190,15,203, +248,22,191,15,203,247,22,128,16,27,248,22,188,3,23,195,4,28,28,248,22, +139,4,23,194,2,11,249,22,178,9,8,46,249,22,157,8,23,200,2,23,197, +2,249,22,135,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,190,15,204,248,22,191, +15,204,247,22,128,16,28,248,22,139,4,23,194,2,86,95,23,200,1,23,193, +1,249,22,135,16,251,22,163,8,250,22,162,8,23,205,2,39,248,22,160,21, +23,206,2,2,51,249,23,209,1,23,204,2,248,22,160,21,23,205,1,28,248, +22,162,7,23,17,249,22,177,8,23,18,8,63,23,16,28,248,22,190,15,204, +248,22,191,15,204,247,22,128,16,27,248,22,188,3,23,195,1,28,28,248,22, +139,4,23,194,2,11,249,22,178,9,8,46,249,22,157,8,23,201,2,23,197, +2,249,22,135,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,190,15,205,248,22,191, +15,205,247,22,128,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,190,15,195,249,22,143,16,196,194,192, +32,165,2,88,148,8,36,43,59,11,2,50,222,33,166,2,28,248,22,139,4, +196,19,248,22,156,8,196,249,22,135,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,190,15,197,248,22,191,15,197,247,22,128,16,2,27,248,22,188,3, +197,28,28,248,22,139,4,193,11,249,22,178,9,8,46,249,22,157,8,199,196, +249,22,135,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,190,15,197,248,22,191, +15,197,247,22,128,16,28,248,22,139,4,193,19,248,22,156,8,197,249,22,135, +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,190,15,198,248,22,191,15, +198,247,22,128,16,2,27,248,22,188,3,194,28,28,248,22,139,4,193,11,249, +22,178,9,8,46,249,22,157,8,200,196,249,22,135,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,190,15,198,248,22,191,15,198,247,22,128,16,251,2,165,2, +198,199,200,196,90,144,41,11,89,146,41,39,11,86,95,28,28,248,22,190,15, +23,196,2,10,28,248,22,189,15,23,196,2,10,28,248,22,162,7,23,196,2, +28,248,22,148,16,23,196,2,10,248,22,149,16,23,196,2,11,12,252,22,129, +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,12,252,22,129,12,2,37,2,70,40,23,200,2, +23,201,2,90,144,42,11,89,146,42,39,11,248,22,146,16,23,199,2,86,94, +23,195,1,86,94,28,192,12,250,22,132,12,2,37,2,71,23,201,2,249,22, +7,194,195,27,248,22,131,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,190,15,195,249,22,143,16, 196,194,192,32,168,2,88,148,8,36,43,59,11,2,50,222,33,169,2,28,248, -22,138,4,196,19,248,22,155,8,196,249,22,134,16,251,22,162,8,250,22,161, -8,204,39,23,202,4,2,51,249,22,161,8,203,248,22,159,21,204,28,248,22, -161,7,200,249,22,176,8,201,8,63,199,28,248,22,189,15,197,248,22,190,15, -197,247,22,191,15,2,27,248,22,187,3,197,28,28,248,22,138,4,193,11,249, -22,177,9,8,46,249,22,156,8,199,196,249,22,134,16,251,22,162,8,250,22, -161,8,204,39,201,2,69,249,22,161,8,203,248,22,186,3,201,28,248,22,161, -7,200,249,22,176,8,201,8,63,199,28,248,22,189,15,197,248,22,190,15,197, -247,22,191,15,28,248,22,138,4,193,19,248,22,155,8,197,249,22,134,16,251, -22,162,8,250,22,161,8,205,39,23,202,4,2,51,249,22,161,8,204,248,22, -159,21,205,28,248,22,161,7,201,249,22,176,8,202,8,63,200,28,248,22,189, -15,198,248,22,190,15,198,247,22,191,15,2,27,248,22,187,3,194,28,28,248, -22,138,4,193,11,249,22,177,9,8,46,249,22,156,8,200,196,249,22,134,16, -251,22,162,8,250,22,161,8,205,39,201,2,69,249,22,161,8,204,248,22,186, -3,201,28,248,22,161,7,201,249,22,176,8,202,8,63,200,28,248,22,189,15, -198,248,22,190,15,198,247,22,191,15,251,2,168,2,198,199,200,196,90,144,41, -11,89,146,41,39,11,86,95,28,28,248,22,189,15,23,196,2,10,28,248,22, -188,15,23,196,2,10,28,248,22,161,7,23,196,2,28,248,22,147,16,23,196, -2,10,248,22,148,16,23,196,2,11,12,252,22,128,12,2,34,2,42,39,23, -200,2,23,201,2,28,28,248,22,161,7,23,197,2,10,248,22,150,8,23,197, -2,12,252,22,128,12,2,34,2,70,40,23,200,2,23,201,2,90,144,42,11, -89,146,42,39,11,248,22,145,16,23,199,2,86,94,23,195,1,86,94,28,192, -12,250,22,131,12,2,34,2,71,23,201,2,249,22,7,194,195,27,248,22,130, -16,23,196,1,27,251,2,168,2,23,202,1,23,201,1,23,198,2,248,22,155, -8,23,199,1,28,248,22,189,15,195,249,22,142,16,196,194,192,249,247,22,184, -5,23,195,1,11,249,247,22,184,5,194,11,28,248,22,90,23,195,2,9,27, -27,248,22,83,23,197,2,28,248,22,149,16,23,194,2,248,22,152,16,23,194, -1,28,248,22,148,16,23,194,2,90,144,42,11,89,146,42,39,11,248,22,145, -16,249,22,150,16,250,80,144,50,43,42,248,22,165,16,2,56,11,11,248,22, -165,16,2,57,86,95,23,195,1,23,194,1,248,22,152,16,249,22,150,16,23, -199,1,23,196,1,27,250,80,144,45,43,42,248,22,165,16,2,56,23,197,1, -10,28,23,193,2,248,22,152,16,23,194,1,11,28,23,193,2,249,22,82,248, -22,152,16,249,22,150,16,23,198,1,247,22,166,16,27,248,22,180,20,23,199, +22,139,4,196,19,248,22,156,8,196,249,22,135,16,251,22,163,8,250,22,162, +8,204,39,23,202,4,2,51,249,22,162,8,203,248,22,160,21,204,28,248,22, +162,7,200,249,22,177,8,201,8,63,199,28,248,22,190,15,197,248,22,191,15, +197,247,22,128,16,2,27,248,22,188,3,197,28,28,248,22,139,4,193,11,249, +22,178,9,8,46,249,22,157,8,199,196,249,22,135,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,190,15,197,248,22,191,15,197, +247,22,128,16,28,248,22,139,4,193,19,248,22,156,8,197,249,22,135,16,251, +22,163,8,250,22,162,8,205,39,23,202,4,2,51,249,22,162,8,204,248,22, +160,21,205,28,248,22,162,7,201,249,22,177,8,202,8,63,200,28,248,22,190, +15,198,248,22,191,15,198,247,22,128,16,2,27,248,22,188,3,194,28,28,248, +22,139,4,193,11,249,22,178,9,8,46,249,22,157,8,200,196,249,22,135,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,190,15, +198,248,22,191,15,198,247,22,128,16,251,2,168,2,198,199,200,196,90,144,41, +11,89,146,41,39,11,86,95,28,28,248,22,190,15,23,196,2,10,28,248,22, +189,15,23,196,2,10,28,248,22,162,7,23,196,2,28,248,22,148,16,23,196, +2,10,248,22,149,16,23,196,2,11,12,252,22,129,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,12,252,22,129,12,2,34,2,70,40,23,200,2,23,201,2,90,144,42,11, +89,146,42,39,11,248,22,146,16,23,199,2,86,94,23,195,1,86,94,28,192, +12,250,22,132,12,2,34,2,71,23,201,2,249,22,7,194,195,27,248,22,131, +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,190,15,195,249,22,143,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,150,16,23,194,2,248,22,153,16,23,194, +1,28,248,22,149,16,23,194,2,90,144,42,11,89,146,42,39,11,248,22,146, +16,249,22,151,16,250,80,144,50,43,42,248,22,166,16,2,56,11,11,248,22, +166,16,2,57,86,95,23,195,1,23,194,1,248,22,153,16,249,22,151,16,23, +199,1,23,196,1,27,250,80,144,45,43,42,248,22,166,16,2,56,23,197,1, +10,28,23,193,2,248,22,153,16,23,194,1,11,28,23,193,2,249,22,82,248, +22,153,16,249,22,151,16,23,198,1,247,22,167,16,27,248,22,181,20,23,199, 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,152,16,249,22,150,16,23,198,1,247,22, -166,16,248,80,144,47,8,50,42,248,22,180,20,23,198,1,86,94,23,193,1, -248,80,144,45,8,50,42,248,22,180,20,23,196,1,86,94,23,193,1,27,248, -22,180,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,152,16,249,22,150,16, -23,198,1,247,22,166,16,248,80,144,45,8,50,42,248,22,180,20,23,198,1, -86,94,23,193,1,248,80,144,43,8,50,42,248,22,180,20,23,196,1,28,248, -22,90,23,195,2,9,27,27,248,22,83,23,197,2,28,248,22,149,16,23,194, -2,248,22,152,16,23,194,1,28,248,22,148,16,23,194,2,90,144,42,11,89, -146,42,39,11,248,22,145,16,249,22,150,16,250,80,144,50,43,42,248,22,165, -16,2,56,11,11,248,22,165,16,2,57,86,95,23,195,1,23,194,1,248,22, -152,16,249,22,150,16,23,199,1,23,196,1,27,250,80,144,45,43,42,248,22, -165,16,2,56,23,197,1,10,28,23,193,2,248,22,152,16,23,194,1,11,28, -23,193,2,249,22,82,248,22,152,16,249,22,150,16,23,198,1,247,22,166,16, -27,248,22,180,20,23,199,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,152,16,249,22, -150,16,23,198,1,247,22,166,16,248,80,144,47,8,51,42,248,22,180,20,23, -198,1,86,94,23,193,1,248,80,144,45,8,51,42,248,22,180,20,23,196,1, -86,94,23,193,1,27,248,22,180,20,23,197,1,28,248,22,90,23,194,2,9, +2,28,23,193,2,249,22,82,248,22,153,16,249,22,151,16,23,198,1,247,22, +167,16,248,80,144,47,8,50,42,248,22,181,20,23,198,1,86,94,23,193,1, +248,80,144,45,8,50,42,248,22,181,20,23,196,1,86,94,23,193,1,27,248, +22,181,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,153,16,249,22,151,16, +23,198,1,247,22,167,16,248,80,144,45,8,50,42,248,22,181,20,23,198,1, +86,94,23,193,1,248,80,144,43,8,50,42,248,22,181,20,23,196,1,28,248, +22,90,23,195,2,9,27,27,248,22,83,23,197,2,28,248,22,150,16,23,194, +2,248,22,153,16,23,194,1,28,248,22,149,16,23,194,2,90,144,42,11,89, +146,42,39,11,248,22,146,16,249,22,151,16,250,80,144,50,43,42,248,22,166, +16,2,56,11,11,248,22,166,16,2,57,86,95,23,195,1,23,194,1,248,22, +153,16,249,22,151,16,23,199,1,23,196,1,27,250,80,144,45,43,42,248,22, +166,16,2,56,23,197,1,10,28,23,193,2,248,22,153,16,23,194,1,11,28, +23,193,2,249,22,82,248,22,153,16,249,22,151,16,23,198,1,247,22,167,16, +27,248,22,181,20,23,199,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,153,16,249,22, +151,16,23,198,1,247,22,167,16,248,80,144,47,8,51,42,248,22,181,20,23, +198,1,86,94,23,193,1,248,80,144,45,8,51,42,248,22,181,20,23,196,1, +86,94,23,193,1,27,248,22,181,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,152,16,249,22,150,16,23,198,1,247,22,166,16,248,80,144,45,8,51,42, -248,22,180,20,23,198,1,86,94,23,193,1,248,80,144,43,8,51,42,248,22, -180,20,23,196,1,27,248,22,165,16,2,58,28,248,22,149,16,23,194,2,248, -22,152,16,23,194,1,28,248,22,148,16,23,194,2,90,144,42,11,89,146,42, -39,11,248,22,145,16,249,22,150,16,250,80,144,49,43,42,248,22,165,16,2, -56,11,11,248,22,165,16,2,57,86,95,23,195,1,23,194,1,248,22,152,16, -249,22,150,16,23,199,1,23,196,1,27,250,80,144,44,43,42,248,22,165,16, -2,56,23,197,1,10,28,23,193,2,248,22,152,16,23,194,1,11,28,248,22, -90,23,195,2,9,27,27,248,22,83,23,197,2,28,248,22,149,16,23,194,2, -248,22,152,16,23,194,1,28,248,22,148,16,23,194,2,90,144,42,11,89,146, -42,39,11,248,22,145,16,249,22,150,16,250,80,144,50,43,42,248,22,165,16, -2,56,11,11,248,22,165,16,2,57,86,95,23,195,1,23,194,1,248,22,152, -16,249,22,150,16,23,199,1,23,196,1,27,250,80,144,45,43,42,248,22,165, -16,2,56,23,197,1,10,28,23,193,2,248,22,152,16,23,194,1,11,28,23, -193,2,249,22,82,248,22,152,16,249,22,150,16,23,198,1,247,22,166,16,27, -248,22,180,20,23,199,1,28,248,22,90,23,194,2,9,27,27,248,22,83,23, -196,2,28,248,22,149,16,23,194,2,248,22,152,16,23,194,1,28,248,22,148, -16,23,194,2,90,144,42,11,89,146,42,39,11,248,22,145,16,249,22,150,16, -250,80,144,54,43,42,248,22,165,16,2,56,11,11,248,22,165,16,2,57,86, -95,23,195,1,23,194,1,248,22,152,16,249,22,150,16,23,199,1,23,196,1, -27,250,80,144,49,43,42,248,22,165,16,2,56,23,197,1,10,28,23,193,2, -248,22,152,16,23,194,1,11,28,23,193,2,249,22,82,248,22,152,16,249,22, -150,16,23,198,1,247,22,166,16,27,248,22,180,20,23,198,1,28,248,22,90, +22,153,16,249,22,151,16,23,198,1,247,22,167,16,248,80,144,45,8,51,42, +248,22,181,20,23,198,1,86,94,23,193,1,248,80,144,43,8,51,42,248,22, +181,20,23,196,1,27,248,22,166,16,2,58,28,248,22,150,16,23,194,2,248, +22,153,16,23,194,1,28,248,22,149,16,23,194,2,90,144,42,11,89,146,42, +39,11,248,22,146,16,249,22,151,16,250,80,144,49,43,42,248,22,166,16,2, +56,11,11,248,22,166,16,2,57,86,95,23,195,1,23,194,1,248,22,153,16, +249,22,151,16,23,199,1,23,196,1,27,250,80,144,44,43,42,248,22,166,16, +2,56,23,197,1,10,28,23,193,2,248,22,153,16,23,194,1,11,28,248,22, +90,23,195,2,9,27,27,248,22,83,23,197,2,28,248,22,150,16,23,194,2, +248,22,153,16,23,194,1,28,248,22,149,16,23,194,2,90,144,42,11,89,146, +42,39,11,248,22,146,16,249,22,151,16,250,80,144,50,43,42,248,22,166,16, +2,56,11,11,248,22,166,16,2,57,86,95,23,195,1,23,194,1,248,22,153, +16,249,22,151,16,23,199,1,23,196,1,27,250,80,144,45,43,42,248,22,166, +16,2,56,23,197,1,10,28,23,193,2,248,22,153,16,23,194,1,11,28,23, +193,2,249,22,82,248,22,153,16,249,22,151,16,23,198,1,247,22,167,16,27, +248,22,181,20,23,199,1,28,248,22,90,23,194,2,9,27,27,248,22,83,23, +196,2,28,248,22,150,16,23,194,2,248,22,153,16,23,194,1,28,248,22,149, +16,23,194,2,90,144,42,11,89,146,42,39,11,248,22,146,16,249,22,151,16, +250,80,144,54,43,42,248,22,166,16,2,56,11,11,248,22,166,16,2,57,86, +95,23,195,1,23,194,1,248,22,153,16,249,22,151,16,23,199,1,23,196,1, +27,250,80,144,49,43,42,248,22,166,16,2,56,23,197,1,10,28,23,193,2, +248,22,153,16,23,194,1,11,28,23,193,2,249,22,82,248,22,153,16,249,22, +151,16,23,198,1,247,22,167,16,27,248,22,181,20,23,198,1,28,248,22,90, 23,194,2,9,27,248,80,144,49,56,42,248,22,83,23,196,2,28,23,193,2, -249,22,82,248,22,152,16,249,22,150,16,23,198,1,247,22,166,16,248,80,144, -51,8,53,42,248,22,180,20,23,198,1,86,94,23,193,1,248,80,144,49,8, -53,42,248,22,180,20,23,196,1,86,94,23,193,1,27,248,22,180,20,23,196, +249,22,82,248,22,153,16,249,22,151,16,23,198,1,247,22,167,16,248,80,144, +51,8,53,42,248,22,181,20,23,198,1,86,94,23,193,1,248,80,144,49,8, +53,42,248,22,181,20,23,196,1,86,94,23,193,1,27,248,22,181,20,23,196, 1,28,248,22,90,23,194,2,9,27,248,80,144,47,56,42,248,22,83,23,196, -2,28,23,193,2,249,22,82,248,22,152,16,249,22,150,16,23,198,1,247,22, -166,16,248,80,144,49,8,53,42,248,22,180,20,23,198,1,86,94,23,193,1, -248,80,144,47,8,53,42,248,22,180,20,23,196,1,86,94,23,193,1,27,248, -22,180,20,23,197,1,28,248,22,90,23,194,2,9,27,27,248,22,83,23,196, -2,28,248,22,149,16,23,194,2,248,22,152,16,23,194,1,28,248,22,148,16, -23,194,2,90,144,42,11,89,146,42,39,11,248,22,145,16,249,22,150,16,250, -80,144,52,43,42,248,22,165,16,2,56,11,11,248,22,165,16,2,57,86,95, -23,195,1,23,194,1,248,22,152,16,249,22,150,16,23,199,1,23,196,1,27, -250,80,144,47,43,42,248,22,165,16,2,56,23,197,1,10,28,23,193,2,248, -22,152,16,23,194,1,11,28,23,193,2,249,22,82,248,22,152,16,249,22,150, -16,23,198,1,247,22,166,16,27,248,22,180,20,23,198,1,28,248,22,90,23, +2,28,23,193,2,249,22,82,248,22,153,16,249,22,151,16,23,198,1,247,22, +167,16,248,80,144,49,8,53,42,248,22,181,20,23,198,1,86,94,23,193,1, +248,80,144,47,8,53,42,248,22,181,20,23,196,1,86,94,23,193,1,27,248, +22,181,20,23,197,1,28,248,22,90,23,194,2,9,27,27,248,22,83,23,196, +2,28,248,22,150,16,23,194,2,248,22,153,16,23,194,1,28,248,22,149,16, +23,194,2,90,144,42,11,89,146,42,39,11,248,22,146,16,249,22,151,16,250, +80,144,52,43,42,248,22,166,16,2,56,11,11,248,22,166,16,2,57,86,95, +23,195,1,23,194,1,248,22,153,16,249,22,151,16,23,199,1,23,196,1,27, +250,80,144,47,43,42,248,22,166,16,2,56,23,197,1,10,28,23,193,2,248, +22,153,16,23,194,1,11,28,23,193,2,249,22,82,248,22,153,16,249,22,151, +16,23,198,1,247,22,167,16,27,248,22,181,20,23,198,1,28,248,22,90,23, 194,2,9,27,248,80,144,47,56,42,248,22,83,23,196,2,28,23,193,2,249, -22,82,248,22,152,16,249,22,150,16,23,198,1,247,22,166,16,248,80,144,49, -8,53,42,248,22,180,20,23,198,1,86,94,23,193,1,248,80,144,47,8,53, -42,248,22,180,20,23,196,1,86,94,23,193,1,27,248,22,180,20,23,196,1, +22,82,248,22,153,16,249,22,151,16,23,198,1,247,22,167,16,248,80,144,49, +8,53,42,248,22,181,20,23,198,1,86,94,23,193,1,248,80,144,47,8,53, +42,248,22,181,20,23,196,1,86,94,23,193,1,27,248,22,181,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,152,16,249,22,150,16,23,198,1,247,22,166, -16,248,80,144,47,8,53,42,248,22,180,20,23,198,1,86,94,23,193,1,248, -80,144,45,8,53,42,248,22,180,20,23,196,1,27,247,22,173,16,27,248,80, +28,23,193,2,249,22,82,248,22,153,16,249,22,151,16,23,198,1,247,22,167, +16,248,80,144,47,8,53,42,248,22,181,20,23,198,1,86,94,23,193,1,248, +80,144,45,8,53,42,248,22,181,20,23,196,1,27,247,22,174,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,183,8,247,22,182,8,2,72,28,192,249,22,173,8,194,7,63,2,66, +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, -142,16,248,22,165,16,2,61,250,22,161,2,23,205,1,2,59,247,22,179,8, +143,16,248,22,166,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,165,16,2,55,9,28,193,249,22,82,195,194,192,27,247,22,173, +22,92,248,22,166,16,2,55,9,28,193,249,22,82,195,194,192,27,247,22,174, 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,183,8,247,22,182,8,2,72,28,192,249,22,173,8,194, +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,142,16,248,22,165,16,2,61,250,22,161,2,23,205,1,2,59, -247,22,179,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,165,16,2,55,9,28,193,249,22,82,195, -194,192,27,247,22,173,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,183,8, -247,22,182,8,2,72,28,192,249,22,173,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,142,16,248,22, -165,16,2,61,250,22,161,2,23,205,1,2,59,247,22,179,8,2,74,86,94, -23,199,1,11,27,27,250,22,97,23,207,1,248,22,92,248,22,165,16,2,55, +200,1,250,22,143,16,248,22,166,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,166,16,2,55,9,28,193,249,22,82,195, +194,192,27,247,22,174,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,143,16,248,22, +166,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,166,16,2,55, 23,208,1,28,248,22,90,23,194,2,9,27,27,248,22,83,23,196,2,28,248, -22,149,16,23,194,2,248,22,152,16,23,194,1,28,248,22,148,16,23,194,2, -90,144,42,11,89,146,42,39,11,248,22,145,16,249,22,150,16,250,80,144,60, -43,42,248,22,165,16,2,56,11,11,248,22,165,16,2,57,86,95,23,195,1, -23,194,1,248,22,152,16,249,22,150,16,23,199,1,23,196,1,27,250,80,144, -55,43,42,248,22,165,16,2,56,23,197,1,10,28,23,193,2,248,22,152,16, -23,194,1,11,28,23,193,2,249,22,82,248,22,152,16,249,22,150,16,23,198, -1,247,22,166,16,27,248,22,180,20,23,198,1,28,248,22,90,23,194,2,9, +22,150,16,23,194,2,248,22,153,16,23,194,1,28,248,22,149,16,23,194,2, +90,144,42,11,89,146,42,39,11,248,22,146,16,249,22,151,16,250,80,144,60, +43,42,248,22,166,16,2,56,11,11,248,22,166,16,2,57,86,95,23,195,1, +23,194,1,248,22,153,16,249,22,151,16,23,199,1,23,196,1,27,250,80,144, +55,43,42,248,22,166,16,2,56,23,197,1,10,28,23,193,2,248,22,153,16, +23,194,1,11,28,23,193,2,249,22,82,248,22,153,16,249,22,151,16,23,198, +1,247,22,167,16,27,248,22,181,20,23,198,1,28,248,22,90,23,194,2,9, 27,248,80,144,55,56,42,248,22,83,23,196,2,28,23,193,2,249,22,82,248, -22,152,16,249,22,150,16,23,198,1,247,22,166,16,248,80,144,57,8,53,42, -248,22,180,20,23,198,1,86,94,23,193,1,248,80,144,55,8,53,42,248,22, -180,20,23,196,1,86,94,23,193,1,27,248,22,180,20,23,196,1,28,248,22, +22,153,16,249,22,151,16,23,198,1,247,22,167,16,248,80,144,57,8,53,42, +248,22,181,20,23,198,1,86,94,23,193,1,248,80,144,55,8,53,42,248,22, +181,20,23,196,1,86,94,23,193,1,27,248,22,181,20,23,196,1,28,248,22, 90,23,194,2,9,27,248,80,144,53,56,42,248,22,83,23,196,2,28,23,193, -2,249,22,82,248,22,152,16,249,22,150,16,23,198,1,247,22,166,16,248,80, -144,55,8,53,42,248,22,180,20,23,198,1,86,94,23,193,1,248,80,144,53, -8,53,42,248,22,180,20,23,196,1,28,193,249,22,82,195,194,192,27,20,13, +2,249,22,82,248,22,153,16,249,22,151,16,23,198,1,247,22,167,16,248,80, +144,55,8,53,42,248,22,181,20,23,198,1,86,94,23,193,1,248,80,144,53, +8,53,42,248,22,181,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,162,15,10,22,169,15,10,22,170,15,10,22,171,15,10,248,22,156,6, -23,196,2,28,248,22,156,7,23,194,2,12,86,94,248,22,186,9,23,194,1, +40,22,163,15,10,22,170,15,10,22,171,15,10,22,172,15,10,248,22,157,6, +23,196,2,28,248,22,157,7,23,194,2,12,86,94,248,22,187,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,162,15,10,22,169,15,10,22,170,15,10,22,171,15,10,248, -22,156,6,23,197,2,28,248,22,156,7,23,194,2,12,86,94,248,22,186,9, +144,52,46,40,22,163,15,10,22,170,15,10,22,171,15,10,22,172,15,10,248, +22,157,6,23,197,2,28,248,22,157,7,23,194,2,12,86,94,248,22,187,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,162,15,10,22,169,15,10,22,170,15,10,22,171, -15,10,248,22,156,6,23,198,2,28,248,22,156,7,23,194,2,12,86,94,248, -22,186,9,23,194,1,248,80,144,43,8,54,42,197,86,94,249,22,147,7,247, -22,180,5,23,195,2,248,22,171,6,249,22,141,4,39,249,22,189,3,28,23, -199,2,23,199,1,86,94,23,199,1,39,23,198,1,27,248,22,133,6,28,23, +31,11,80,144,53,46,40,22,163,15,10,22,170,15,10,22,171,15,10,22,172, +15,10,248,22,157,6,23,198,2,28,248,22,157,7,23,194,2,12,86,94,248, +22,187,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,86,95,23,197,1,23,196,1,23,198,1,86,94,23,198,1,27,250,80, -144,45,43,42,248,22,165,16,2,56,11,11,27,248,22,144,4,23,199,1,27, -28,23,194,2,23,194,1,86,94,23,194,1,39,27,248,22,144,4,23,202,1, -249,22,148,6,23,198,1,20,20,95,88,148,8,36,39,51,11,9,224,2,3, +144,45,43,42,248,22,166,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,181,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, @@ -941,14 +941,14 @@ 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,48,11,2,3,222,33,75,80,144, -39,39,40,20,15,16,2,249,22,163,7,7,92,7,92,80,144,39,40,40,20, +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,177,16,248, -22,175,8,27,28,249,22,177,9,247,22,188,8,2,43,6,1,1,59,6,1, -1,58,250,22,145,8,6,14,14,40,91,94,126,97,93,42,41,126,97,40,46, +55,9,223,0,33,91,80,144,39,43,40,20,15,16,2,27,248,22,178,16,248, +22,176,8,27,28,249,22,178,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, @@ -1017,7 +1017,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 19147); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,53,46,48,46,54,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,53,46,48,46,56,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,180,0,189,0,196,0,205, 0,212,0,0,0,248,1,0,0,3,1,5,105,110,115,112,48,76,35,37,112, @@ -1037,8 +1037,8 @@ 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,135,11,2,4,11,41,39,11,248,22, -92,249,22,82,22,184,10,88,148,39,40,48,47,9,223,9,33,10,80,144,39, +0,39,39,16,3,20,15,16,6,253,22,136,11,2,4,11,41,39,11,248,22, +92,249,22,82,22,185,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,16,2,20,28,143, @@ -1048,7 +1048,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 576); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,53,46,48,46,54,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,53,46,48,46,56,84,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,98,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, @@ -1083,385 +1083,385 @@ 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,27, -252,22,142,16,28,249,22,177,9,23,203,2,2,27,86,94,23,201,1,23,200, -1,28,248,22,147,16,23,202,2,249,22,142,16,23,202,1,23,203,1,249,80, -144,50,45,42,23,202,1,23,203,1,23,203,1,2,28,247,22,189,8,249,80, -144,50,46,42,23,201,1,80,144,50,39,41,27,250,22,160,16,196,11,32,0, +252,22,143,16,28,249,22,178,9,23,203,2,2,27,86,94,23,201,1,23,200, +1,28,248,22,148,16,23,202,2,249,22,143,16,23,202,1,23,203,1,249,80, +144,50,45,42,23,202,1,23,203,1,23,203,1,2,28,247,22,190,8,249,80, +144,50,46,42,23,201,1,80,144,50,39,41,27,250,22,161,16,196,11,32,0, 88,148,8,36,39,44,11,9,222,11,28,192,249,22,82,195,194,11,249,22,5, 20,20,96,88,148,8,36,40,57,8,129,3,9,226,5,6,3,2,33,42,23, -195,1,23,196,1,23,199,1,23,197,1,27,252,22,142,16,28,249,22,177,9, -23,203,2,2,27,86,94,23,201,1,23,200,1,28,248,22,147,16,23,202,2, -249,22,142,16,23,202,1,23,203,1,249,80,144,50,45,42,23,202,1,23,203, -1,23,203,1,2,28,247,22,189,8,249,80,144,50,46,42,23,201,1,80,144, -50,39,41,27,250,22,160,16,196,11,32,0,88,148,8,36,39,44,11,9,222, +195,1,23,196,1,23,199,1,23,197,1,27,252,22,143,16,28,249,22,178,9, +23,203,2,2,27,86,94,23,201,1,23,200,1,28,248,22,148,16,23,202,2, +249,22,143,16,23,202,1,23,203,1,249,80,144,50,45,42,23,202,1,23,203, +1,23,203,1,2,28,247,22,190,8,249,80,144,50,46,42,23,201,1,80,144, +50,39,41,27,250,22,161,16,196,11,32,0,88,148,8,36,39,44,11,9,222, 11,28,192,249,22,82,195,194,11,249,22,5,20,20,96,88,148,8,36,40,57, 8,129,3,9,226,5,6,3,2,33,44,23,195,1,23,196,1,23,199,1,23, -197,1,27,250,22,142,16,28,249,22,177,9,23,201,2,2,27,86,94,23,199, -1,23,198,1,28,248,22,147,16,23,200,2,249,22,142,16,23,200,1,23,201, +197,1,27,250,22,143,16,28,249,22,178,9,23,201,2,2,27,86,94,23,199, +1,23,198,1,28,248,22,148,16,23,200,2,249,22,143,16,23,200,1,23,201, 1,249,80,144,48,45,42,23,200,1,23,201,1,23,201,1,249,80,144,48,46, -42,23,199,1,2,29,27,250,22,160,16,196,11,32,0,88,148,8,36,39,44, +42,23,199,1,2,29,27,250,22,161,16,196,11,32,0,88,148,8,36,39,44, 11,9,222,11,28,192,249,22,82,195,194,11,249,22,5,20,20,96,88,148,8, 36,40,55,8,128,3,9,226,5,6,3,2,33,46,23,195,1,23,196,1,23, -199,1,23,197,1,27,250,22,142,16,28,249,22,177,9,23,201,2,2,27,86, -94,23,199,1,23,198,1,28,248,22,147,16,23,200,2,249,22,142,16,23,200, +199,1,23,197,1,27,250,22,143,16,28,249,22,178,9,23,201,2,2,27,86, +94,23,199,1,23,198,1,28,248,22,148,16,23,200,2,249,22,143,16,23,200, 1,23,201,1,249,80,144,48,45,42,23,200,1,23,201,1,23,201,1,249,80, -144,48,46,42,23,199,1,2,29,27,250,22,160,16,196,11,32,0,88,148,8, +144,48,46,42,23,199,1,2,29,27,250,22,161,16,196,11,32,0,88,148,8, 36,39,44,11,9,222,11,28,192,249,22,82,195,194,11,249,22,5,20,20,96, 88,148,8,36,40,55,8,128,3,9,226,5,6,3,2,33,48,23,195,1,23, 196,1,23,199,1,23,197,1,86,95,28,248,80,144,40,43,42,23,195,2,12, -250,22,128,12,2,25,6,12,12,112,97,116,104,45,115,116,114,105,110,103,63, +250,22,129,12,2,25,6,12,12,112,97,116,104,45,115,116,114,105,110,103,63, 23,197,2,28,28,23,195,2,28,248,22,66,23,196,2,10,28,248,22,91,23, -196,2,28,249,22,135,4,248,22,96,23,198,2,40,28,28,248,22,66,248,22, -83,23,197,2,10,248,22,175,9,248,22,83,23,197,2,249,22,4,22,66,248, -22,84,23,198,2,11,11,11,10,12,250,22,128,12,2,25,6,71,71,40,111, +196,2,28,249,22,136,4,248,22,96,23,198,2,40,28,28,248,22,66,248,22, +83,23,197,2,10,248,22,176,9,248,22,83,23,197,2,249,22,4,22,66,248, +22,84,23,198,2,11,11,11,10,12,250,22,129,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,197,2,27,28,23,196,2,247,22,133,5,11,27,28, -23,194,2,250,22,161,2,80,143,44,44,248,22,142,17,247,22,155,14,11,11, +111,108,63,41,41,41,23,197,2,27,28,23,196,2,247,22,134,5,11,27,28, +23,194,2,250,22,161,2,80,143,44,44,248,22,143,17,247,22,156,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,96,23,197,1,23,195,1,23,194,1,20,13,144,80,144,42,41, -40,250,80,144,45,42,40,249,22,31,11,80,144,47,41,40,22,134,5,248,22, +40,250,80,144,45,42,40,249,22,31,11,80,144,47,41,40,22,135,5,248,22, 105,23,197,2,27,248,22,114,23,195,2,20,13,144,80,144,43,41,40,250,80, -144,46,42,40,249,22,31,11,80,144,48,41,40,22,185,5,28,248,22,188,15, -23,197,2,23,196,1,86,94,23,196,1,247,22,166,16,249,247,22,183,5,248, -22,179,20,23,197,1,23,201,1,86,94,23,193,1,27,28,248,22,149,16,23, -199,2,23,198,2,27,247,22,185,5,28,192,249,22,150,16,23,201,2,194,23, -199,2,90,144,42,11,89,146,42,39,11,248,22,145,16,23,202,1,86,94,23, -195,1,90,144,41,11,89,146,41,39,11,28,23,204,2,27,248,22,129,16,23, -198,2,19,248,22,155,8,194,28,28,249,22,168,20,23,195,4,43,249,22,158, -8,2,26,249,22,161,8,197,249,22,189,3,23,199,4,43,11,249,22,7,23, -200,2,248,22,133,16,249,22,162,8,250,22,161,8,201,39,249,22,189,3,23, +144,46,42,40,249,22,31,11,80,144,48,41,40,22,186,5,28,248,22,189,15, +23,197,2,23,196,1,86,94,23,196,1,247,22,167,16,249,247,22,184,5,248, +22,180,20,23,197,1,23,201,1,86,94,23,193,1,27,28,248,22,150,16,23, +199,2,23,198,2,27,247,22,186,5,28,192,249,22,151,16,23,201,2,194,23, +199,2,90,144,42,11,89,146,42,39,11,248,22,146,16,23,202,1,86,94,23, +195,1,90,144,41,11,89,146,41,39,11,28,23,204,2,27,248,22,130,16,23, +198,2,19,248,22,156,8,194,28,28,249,22,169,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,134,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,177,9,23,196,2,23,199,2,23,199,2,249,22,142,16, -23,198,2,23,196,2,27,28,23,196,2,28,249,22,177,9,23,198,2,23,200, -1,23,200,1,86,94,23,200,1,249,22,142,16,23,199,2,23,198,2,86,95, -23,200,1,23,198,1,11,27,28,249,22,177,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,171,16,27,247, -22,172,16,27,250,22,160,16,23,201,2,11,32,0,88,148,8,36,39,44,11, +2,11,27,28,249,22,178,9,23,196,2,23,199,2,23,199,2,249,22,143,16, +23,198,2,23,196,2,27,28,23,196,2,28,249,22,178,9,23,198,2,23,200, +1,23,200,1,86,94,23,200,1,249,22,143,16,23,199,2,23,198,2,86,95, +23,200,1,23,198,1,11,27,28,249,22,178,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,172,16,27,247, +22,173,16,27,250,22,161,16,23,201,2,11,32,0,88,148,8,36,39,44,11, 9,222,11,27,28,23,194,2,249,22,82,23,201,2,23,196,1,86,94,23,194, -1,11,27,28,23,199,2,28,23,194,2,11,27,250,22,160,16,23,203,2,11, +1,11,27,28,23,199,2,28,23,194,2,11,27,250,22,161,16,23,203,2,11, 32,0,88,148,8,36,39,44,11,9,222,11,28,192,249,22,82,23,202,2,194, 11,11,27,28,23,195,2,23,195,2,23,194,2,27,28,23,196,2,23,196,2, -248,22,175,9,23,196,2,27,28,23,205,2,28,23,196,2,86,94,23,197,1, -23,196,2,248,22,175,9,23,198,1,86,94,23,197,1,11,27,28,23,195,2, +248,22,176,9,23,196,2,27,28,23,205,2,28,23,196,2,86,94,23,197,1, +23,196,2,248,22,176,9,23,198,1,86,94,23,197,1,11,27,28,23,195,2, 27,249,22,5,88,148,39,40,51,8,129,3,9,226,24,11,12,15,33,43,23, 203,2,27,28,23,198,2,11,193,28,192,192,28,193,28,23,198,2,28,249,22, -137,4,248,22,84,196,248,22,84,23,201,2,193,11,11,11,11,28,23,193,2, +138,4,248,22,84,196,248,22,84,23,201,2,193,11,11,11,11,28,23,193,2, 86,105,23,213,1,23,212,1,23,206,1,23,205,1,23,204,1,23,203,1,23, 201,1,23,200,1,23,197,1,23,196,1,23,195,1,23,194,1,20,13,144,80, 144,60,41,40,250,80,144,8,24,42,40,249,22,31,11,80,144,8,26,41,40, -22,134,5,11,20,13,144,80,144,60,41,40,250,80,144,8,24,42,40,249,22, -31,11,80,144,8,26,41,40,22,185,5,28,248,22,188,15,23,206,2,23,205, -1,86,94,23,205,1,247,22,166,16,249,247,22,176,16,248,22,83,23,196,1, +22,135,5,11,20,13,144,80,144,60,41,40,250,80,144,8,24,42,40,249,22, +31,11,80,144,8,26,41,40,22,186,5,28,248,22,189,15,23,206,2,23,205, +1,86,94,23,205,1,247,22,167,16,249,247,22,177,16,248,22,83,23,196,1, 23,218,1,86,94,23,193,1,27,28,23,195,2,27,249,22,5,88,148,39,40, 51,8,129,3,9,226,25,12,13,17,33,45,23,204,2,27,28,23,200,2,11, -193,28,192,192,28,193,28,199,28,249,22,137,4,248,22,84,196,248,22,84,202, +193,28,192,192,28,193,28,199,28,249,22,138,4,248,22,84,196,248,22,84,202, 193,11,11,11,86,94,23,198,1,11,28,23,193,2,86,103,23,214,1,23,213, 1,23,207,1,23,206,1,23,205,1,23,202,1,23,201,1,23,197,1,23,196, 1,23,195,1,20,13,144,80,144,61,41,40,250,80,144,8,25,42,40,249,22, -31,11,80,144,8,27,41,40,22,134,5,23,207,1,20,13,144,80,144,61,41, -40,250,80,144,8,25,42,40,249,22,31,11,80,144,8,27,41,40,22,185,5, -28,248,22,188,15,23,207,2,23,206,1,86,94,23,206,1,247,22,166,16,249, -247,22,176,16,248,22,83,23,196,1,23,219,1,86,94,23,193,1,27,28,23, +31,11,80,144,8,27,41,40,22,135,5,23,207,1,20,13,144,80,144,61,41, +40,250,80,144,8,25,42,40,249,22,31,11,80,144,8,27,41,40,22,186,5, +28,248,22,189,15,23,207,2,23,206,1,86,94,23,206,1,247,22,167,16,249, +247,22,177,16,248,22,83,23,196,1,23,219,1,86,94,23,193,1,27,28,23, 197,2,27,249,22,5,20,20,94,88,148,39,40,51,8,128,3,9,226,26,13, 14,17,33,47,23,210,1,23,205,2,27,28,23,200,2,11,193,28,192,192,28, -193,28,23,200,2,28,249,22,137,4,248,22,84,196,248,22,84,23,203,2,193, +193,28,23,200,2,28,249,22,138,4,248,22,84,196,248,22,84,23,203,2,193, 11,11,11,86,94,23,207,1,11,28,23,193,2,86,101,23,208,1,23,206,1, 23,205,1,23,203,1,23,202,1,23,198,1,23,197,1,23,196,1,86,94,27, 248,22,83,23,195,2,28,23,215,2,250,22,159,2,248,22,84,23,219,1,23, 219,1,250,22,92,23,199,1,11,23,211,2,12,20,13,144,80,144,8,23,41, -40,250,80,144,8,26,42,40,249,22,31,11,80,144,8,28,41,40,22,134,5, +40,250,80,144,8,26,42,40,249,22,31,11,80,144,8,28,41,40,22,135,5, 11,20,13,144,80,144,8,23,41,40,250,80,144,8,26,42,40,249,22,31,11, -80,144,8,28,41,40,22,185,5,28,248,22,188,15,23,208,2,23,207,1,86, -94,23,207,1,247,22,166,16,249,247,22,183,5,248,22,179,20,23,196,1,23, +80,144,8,28,41,40,22,186,5,28,248,22,189,15,23,208,2,23,207,1,86, +94,23,207,1,247,22,167,16,249,247,22,184,5,248,22,180,20,23,196,1,23, 220,1,86,94,23,193,1,27,28,23,197,1,27,249,22,5,20,20,95,88,148, 39,40,51,8,128,3,9,226,27,14,15,19,33,49,23,212,1,23,207,1,23, -206,1,27,28,23,201,2,11,193,28,192,192,28,193,28,200,28,249,22,137,4, +206,1,27,28,23,201,2,11,193,28,192,192,28,193,28,200,28,249,22,138,4, 248,22,84,196,248,22,84,203,193,11,11,11,86,97,23,209,1,23,204,1,23, 203,1,23,199,1,11,28,23,193,2,86,95,23,207,1,23,198,1,86,94,27, 248,22,83,23,195,2,28,23,216,2,250,22,159,2,248,22,84,23,220,1,23, 220,1,250,22,92,23,199,1,23,213,2,23,212,2,12,20,13,144,80,144,8, 24,41,40,250,80,144,8,27,42,40,249,22,31,11,80,144,8,29,41,40,22, -134,5,23,209,1,20,13,144,80,144,8,24,41,40,250,80,144,8,27,42,40, -249,22,31,11,80,144,8,29,41,40,22,185,5,28,248,22,188,15,23,209,2, -23,208,1,86,94,23,208,1,247,22,166,16,249,247,22,183,5,248,22,179,20, +135,5,23,209,1,20,13,144,80,144,8,24,41,40,250,80,144,8,27,42,40, +249,22,31,11,80,144,8,29,41,40,22,186,5,28,248,22,189,15,23,209,2, +23,208,1,86,94,23,208,1,247,22,167,16,249,247,22,184,5,248,22,180,20, 23,196,1,23,221,1,86,96,23,216,1,23,215,1,23,193,1,28,28,248,22, -80,23,220,2,248,22,179,20,23,220,2,10,27,28,23,199,2,86,94,23,207, +80,23,220,2,248,22,180,20,23,220,2,10,27,28,23,199,2,86,94,23,207, 1,23,208,1,86,94,23,208,1,23,207,1,28,28,248,22,80,23,221,2,248, -22,175,9,248,22,136,16,23,195,2,11,12,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,134,5,28, +22,176,9,248,22,137,16,23,195,2,11,12,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,28, 23,223,2,28,23,202,1,11,23,196,2,86,94,23,202,1,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,185,5,28,248,22,188,15,23,210,2,23,209,1,86,94,23,209,1,247, -22,166,16,249,247,22,183,5,23,195,1,23,222,1,12,28,23,194,2,250,22, +40,22,186,5,28,248,22,189,15,23,210,2,23,209,1,86,94,23,209,1,247, +22,167,16,249,247,22,184,5,23,195,1,23,222,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,133,9,80,144,42,50,41,249,22,132,4,248,22,128,4, -248,22,178,2,200,8,128,8,27,28,193,248,22,181,2,194,11,28,192,27,249, -22,103,198,195,28,192,248,22,84,193,11,11,27,249,22,132,4,248,22,128,4, -248,22,178,2,23,199,2,8,128,8,27,249,22,133,9,80,144,43,50,41,23, -196,2,250,22,134,9,80,144,44,50,41,23,197,1,248,22,180,2,249,22,82, -249,22,82,23,204,1,23,205,1,27,28,23,200,2,248,22,181,2,200,11,28, +203,1,12,27,249,22,134,9,80,144,42,50,41,249,22,133,4,248,22,129,4, +248,22,179,2,200,8,128,8,27,28,193,248,22,182,2,194,11,28,192,27,249, +22,103,198,195,28,192,248,22,84,193,11,11,27,249,22,133,4,248,22,129,4, +248,22,179,2,23,199,2,8,128,8,27,249,22,134,9,80,144,43,50,41,23, +196,2,250,22,135,9,80,144,44,50,41,23,197,1,248,22,181,2,249,22,82, +249,22,82,23,204,1,23,205,1,27,28,23,200,2,248,22,182,2,200,11,28, 192,192,9,32,54,88,149,8,38,42,54,11,2,30,39,223,48,33,69,32,55, 88,149,8,38,42,53,11,2,30,39,223,48,33,68,32,56,88,148,8,36,40, 53,11,2,31,222,33,67,32,57,88,149,8,38,42,53,11,2,30,39,223,48, -33,58,28,249,22,133,4,23,197,2,23,196,4,248,22,92,193,28,249,22,144, -9,7,47,249,22,165,7,23,197,2,23,199,2,249,22,82,250,22,183,7,23, -198,2,39,23,200,2,248,2,56,249,22,183,7,23,198,1,248,22,186,3,23, -201,1,250,2,57,195,23,197,4,248,22,186,3,198,32,59,88,149,8,38,42, +33,58,28,249,22,134,4,23,197,2,23,196,4,248,22,92,193,28,249,22,145, +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,56,249,22,184,7,23,198,1,248,22,187,3,23, +201,1,250,2,57,195,23,197,4,248,22,187,3,198,32,59,88,149,8,38,42, 55,11,2,30,39,223,48,33,66,32,60,88,149,8,38,42,54,11,2,30,39, 223,48,33,63,32,61,88,149,8,38,42,53,11,2,30,39,223,48,33,62,28, -249,22,133,4,23,197,2,23,196,4,248,22,92,193,28,249,22,144,9,7,47, -249,22,165,7,23,197,2,23,199,2,249,22,82,250,22,183,7,23,198,2,39, -23,200,2,248,2,56,249,22,183,7,23,198,1,248,22,186,3,23,201,1,250, -2,61,195,23,197,4,248,22,186,3,198,28,249,22,133,4,23,197,2,23,196, -4,248,22,92,193,28,249,22,144,9,7,47,249,22,165,7,23,197,2,23,199, -2,249,22,82,250,22,183,7,23,198,2,39,23,200,2,27,249,22,183,7,23, -198,1,248,22,186,3,23,201,1,19,248,22,164,7,23,195,2,250,2,61,23, -197,1,23,196,4,39,2,27,248,22,186,3,23,197,1,28,249,22,133,4,23, -195,2,23,197,4,248,22,92,194,28,249,22,144,9,7,47,249,22,165,7,23, -198,2,23,197,2,249,22,82,250,22,183,7,23,199,2,39,23,198,2,248,2, -56,249,22,183,7,23,199,1,248,22,186,3,23,199,1,250,2,60,196,23,198, -4,248,22,186,3,196,32,64,88,149,8,38,42,53,11,2,30,39,223,48,33, -65,28,249,22,133,4,23,197,2,23,196,4,248,22,92,193,28,249,22,144,9, -7,47,249,22,165,7,23,197,2,23,199,2,249,22,82,250,22,183,7,23,198, -2,39,23,200,2,248,2,56,249,22,183,7,23,198,1,248,22,186,3,23,201, -1,250,2,64,195,23,197,4,248,22,186,3,198,28,249,22,133,4,23,197,2, -23,196,4,248,22,92,193,28,249,22,144,9,7,47,249,22,165,7,23,197,2, -23,199,2,249,22,82,250,22,183,7,23,198,2,39,23,200,2,27,249,22,183, -7,23,198,1,248,22,186,3,23,201,1,19,248,22,164,7,23,195,2,250,2, -60,23,197,1,23,196,4,39,2,27,248,22,186,3,23,197,1,28,249,22,133, -4,23,195,2,23,197,4,248,22,92,194,28,249,22,144,9,7,47,249,22,165, -7,23,198,2,23,197,2,249,22,82,250,22,183,7,23,199,2,39,23,198,2, -27,249,22,183,7,23,199,1,248,22,186,3,23,199,1,19,248,22,164,7,23, -195,2,250,2,64,23,197,1,23,196,4,39,2,27,248,22,186,3,23,195,1, -28,249,22,133,4,23,195,2,23,198,4,248,22,92,195,28,249,22,144,9,7, -47,249,22,165,7,23,199,2,23,197,2,249,22,82,250,22,183,7,23,200,2, -39,23,198,2,248,2,56,249,22,183,7,23,200,1,248,22,186,3,23,199,1, -250,2,59,197,23,199,4,248,22,186,3,196,19,248,22,164,7,23,195,2,28, -249,22,164,20,39,23,195,4,248,22,92,194,28,249,22,144,9,7,47,249,22, -165,7,23,198,2,39,249,22,82,250,22,183,7,23,199,2,39,39,27,249,22, -183,7,23,199,1,40,19,248,22,164,7,23,195,2,250,2,57,23,197,1,23, -196,4,39,2,28,249,22,164,20,40,23,195,4,248,22,92,194,28,249,22,144, -9,7,47,249,22,165,7,23,198,2,40,249,22,82,250,22,183,7,23,199,2, -39,40,248,2,56,249,22,183,7,23,199,1,41,250,2,59,196,23,196,4,41, -2,28,249,22,133,4,23,197,2,23,196,4,248,22,92,193,28,249,22,144,9, -7,47,249,22,165,7,23,197,2,23,199,2,249,22,82,250,22,183,7,23,198, -2,39,23,200,2,248,2,56,249,22,183,7,23,198,1,248,22,186,3,23,201, -1,250,2,55,195,23,197,4,248,22,186,3,198,28,249,22,133,4,23,197,2, -23,196,4,248,22,92,193,28,249,22,144,9,7,47,249,22,165,7,23,197,2, -23,199,2,249,22,82,250,22,183,7,23,198,2,39,23,200,2,27,249,22,183, -7,23,198,1,248,22,186,3,23,201,1,19,248,22,164,7,23,195,2,250,2, -55,23,197,1,23,196,4,39,2,27,248,22,186,3,23,197,1,28,249,22,133, -4,23,195,2,23,197,4,248,22,92,194,28,249,22,144,9,7,47,249,22,165, -7,23,198,2,23,197,2,249,22,82,250,22,183,7,23,199,2,39,23,198,2, -248,2,56,249,22,183,7,23,199,1,248,22,186,3,23,199,1,250,2,54,196, -23,198,4,248,22,186,3,196,32,70,88,148,39,40,58,11,2,31,222,33,71, -28,248,22,90,248,22,84,23,195,2,249,22,7,9,248,22,179,20,23,196,1, -90,144,41,11,89,146,41,39,11,27,248,22,180,20,23,197,2,28,248,22,90, -248,22,84,23,195,2,249,22,7,9,248,22,179,20,195,90,144,41,11,89,146, -41,39,11,27,248,22,180,20,196,28,248,22,90,248,22,84,23,195,2,249,22, -7,9,248,22,179,20,195,90,144,41,11,89,146,41,39,11,248,2,70,248,22, -180,20,196,249,22,7,249,22,82,248,22,179,20,199,196,195,249,22,7,249,22, -82,248,22,179,20,199,196,195,249,22,7,249,22,82,248,22,179,20,23,200,1, -23,197,1,23,196,1,27,19,248,22,164,7,23,196,2,250,2,54,23,198,1, +249,22,134,4,23,197,2,23,196,4,248,22,92,193,28,249,22,145,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,56,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,28,249,22,134,4,23,197,2,23,196, +4,248,22,92,193,28,249,22,145,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,61,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,145,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, +56,249,22,184,7,23,199,1,248,22,187,3,23,199,1,250,2,60,196,23,198, +4,248,22,187,3,196,32,64,88,149,8,38,42,53,11,2,30,39,223,48,33, +65,28,249,22,134,4,23,197,2,23,196,4,248,22,92,193,28,249,22,145,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,56,249,22,184,7,23,198,1,248,22,187,3,23,201, +1,250,2,64,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,145,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, +60,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,145,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,64,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,145,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,56,249,22,184,7,23,200,1,248,22,187,3,23,199,1, +250,2,59,197,23,199,4,248,22,187,3,196,19,248,22,165,7,23,195,2,28, +249,22,165,20,39,23,195,4,248,22,92,194,28,249,22,145,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,57,23,197,1,23, +196,4,39,2,28,249,22,165,20,40,23,195,4,248,22,92,194,28,249,22,145, +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,56,249,22,184,7,23,199,1,41,250,2,59,196,23,196,4,41, +2,28,249,22,134,4,23,197,2,23,196,4,248,22,92,193,28,249,22,145,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,56,249,22,184,7,23,198,1,248,22,187,3,23,201, +1,250,2,55,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,145,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, +55,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,145,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,56,249,22,184,7,23,199,1,248,22,187,3,23,199,1,250,2,54,196, +23,198,4,248,22,187,3,196,32,70,88,148,39,40,58,11,2,31,222,33,71, +28,248,22,90,248,22,84,23,195,2,249,22,7,9,248,22,180,20,23,196,1, +90,144,41,11,89,146,41,39,11,27,248,22,181,20,23,197,2,28,248,22,90, +248,22,84,23,195,2,249,22,7,9,248,22,180,20,195,90,144,41,11,89,146, +41,39,11,27,248,22,181,20,196,28,248,22,90,248,22,84,23,195,2,249,22, +7,9,248,22,180,20,195,90,144,41,11,89,146,41,39,11,248,2,70,248,22, +181,20,196,249,22,7,249,22,82,248,22,180,20,199,196,195,249,22,7,249,22, +82,248,22,180,20,199,196,195,249,22,7,249,22,82,248,22,180,20,23,200,1, +23,197,1,23,196,1,27,19,248,22,165,7,23,196,2,250,2,54,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,179,20,23,196,1,27,248,22,180,20,23,195,2,90,144,41, +22,7,9,248,22,180,20,23,196,1,27,248,22,181,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,179,20,23,198,1,27,248,22,180,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,179,20,197, -90,144,41,11,89,146,41,39,11,248,2,70,248,22,180,20,198,249,22,7,249, -22,82,248,22,179,20,201,196,195,249,22,7,249,22,82,248,22,179,20,23,203, -1,196,195,249,22,7,249,22,82,248,22,179,20,23,201,1,23,197,1,23,196, -1,248,22,154,12,252,22,171,10,248,22,168,4,23,200,2,248,22,164,4,23, -200,2,248,22,165,4,23,200,2,248,22,166,4,23,200,2,248,22,167,4,23, +22,180,20,23,198,1,27,248,22,181,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,180,20,197, +90,144,41,11,89,146,41,39,11,248,2,70,248,22,181,20,198,249,22,7,249, +22,82,248,22,180,20,201,196,195,249,22,7,249,22,82,248,22,180,20,23,203, +1,196,195,249,22,7,249,22,82,248,22,180,20,23,201,1,23,197,1,23,196, +1,248,22,155,12,252,22,172,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,136,5,21,94,2,32,6,19,19,112,108,97,110,101,116,47, +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,177,9,23,197,2,80,143,42,55,86,94,23,195, -1,80,143,40,56,27,248,22,160,5,23,197,2,27,28,248,22,80,23,195,2, -248,22,179,20,23,195,1,23,194,1,28,248,22,188,15,23,194,2,90,144,42, -11,89,146,42,39,11,248,22,145,16,23,197,1,86,95,20,18,144,11,80,143, +27,28,23,195,2,28,249,22,178,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,180,20,23,195,1,23,194,1,28,248,22,189,15,23,194,2,90,144,42, +11,89,146,42,39,11,248,22,146,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,11,86,94,23,195,1,11,28, -23,193,2,192,86,94,23,193,1,27,247,22,185,5,28,23,193,2,192,86,94, -23,193,1,247,22,166,16,90,144,42,11,89,146,42,39,11,248,22,145,16,23, -198,2,86,95,23,195,1,23,193,1,28,249,22,181,16,0,11,35,114,120,34, -91,46,93,115,115,36,34,248,22,129,16,23,197,1,249,80,144,44,61,42,23, +23,193,2,192,86,94,23,193,1,27,247,22,186,5,28,23,193,2,192,86,94, +23,193,1,247,22,167,16,90,144,42,11,89,146,42,39,11,248,22,146,16,23, +198,2,86,95,23,195,1,23,193,1,28,249,22,182,16,0,11,35,114,120,34, +91,46,93,115,115,36,34,248,22,130,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,158,5,23,196,2,12,250,22,128,12,2,22,6, +41,54,41,86,96,28,248,22,159,5,23,196,2,12,250,22,129,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,156,14,23,197,2,10,12,250,22, -128,12,2,22,6,20,20,40,111,114,47,99,32,35,102,32,110,97,109,101,115, +104,63,23,198,2,28,28,23,196,2,248,22,157,14,23,197,2,10,12,250,22, +129,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,12,27,250,22,161,2,80,144,44,44,41,248,22,142,17,247,22, -155,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,142, -17,247,22,155,14,195,192,86,94,250,22,159,2,248,22,83,23,197,2,23,200, +94,23,193,1,12,27,250,22,161,2,80,144,44,44,41,248,22,143,17,247,22, +156,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,143, +17,247,22,156,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, -160,5,23,200,2,248,22,159,5,248,22,83,248,22,160,5,23,201,1,23,198, -1,27,250,22,161,2,80,144,47,44,41,248,22,142,17,23,204,1,11,28,23, +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,143,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,180,20,23,200,1,23,198,1,23,196,1,12,12,12,86, -94,251,22,149,12,247,22,153,12,67,101,114,114,111,114,6,69,69,100,101,102, +250,22,159,2,248,22,181,20,23,200,1,23,198,1,23,196,1,12,12,12,86, +94,251,22,150,12,247,22,154,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,81,88, 148,39,43,57,11,2,31,222,33,82,28,248,22,90,23,197,2,28,248,22,90, -195,193,249,22,82,195,248,22,98,197,28,249,22,179,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,188,11, +195,193,249,22,82,195,248,22,98,197,28,249,22,180,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,189,11, 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,179,9,23,202,2,2,36,23,200,1,28,248,22, -188,15,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,81,196,197,248,22,84,199,248,22,180,20,200, -251,2,81,196,197,249,22,82,248,22,179,20,202,200,248,22,180,20,200,251,2, -81,197,196,9,197,27,250,22,184,7,27,28,23,198,2,28,247,22,141,12,248, +250,22,93,2,35,28,249,22,180,9,23,202,2,2,36,23,200,1,28,248,22, +189,15,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,81,196,197,248,22,84,199,248,22,181,20,200, +251,2,81,196,197,249,22,82,248,22,180,20,202,200,248,22,181,20,200,251,2, +81,197,196,9,197,27,250,22,185,7,27,28,23,198,2,28,247,22,142,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,128,17,0,7,35,114,120,34,92,110,34, -23,203,1,249,22,145,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,184,13,28,23, -195,2,251,22,128,13,23,198,1,247,22,27,248,22,92,23,200,1,23,200,1, -86,94,23,195,1,250,22,155,13,23,197,1,247,22,27,23,199,1,19,248,22, -164,7,194,28,249,22,168,20,23,195,4,42,28,249,22,177,9,7,46,249,22, -165,7,197,249,22,189,3,23,199,4,42,28,28,249,22,177,9,7,115,249,22, -165,7,197,249,22,189,3,23,199,4,41,249,22,177,9,7,115,249,22,165,7, -197,249,22,189,3,23,199,4,40,11,249,22,184,7,250,22,183,7,198,39,249, -22,189,3,23,200,4,42,2,39,193,193,193,2,28,249,22,167,7,194,2,36, -2,27,28,249,22,167,7,194,2,34,64,117,112,192,0,8,35,114,120,34,91, +118,101,114,6,2,2,58,32,250,22,129,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,185,13,28,23, +195,2,251,22,129,13,23,198,1,247,22,27,248,22,92,23,200,1,23,200,1, +86,94,23,195,1,250,22,156,13,23,197,1,247,22,27,23,199,1,19,248,22, +165,7,194,28,249,22,169,20,23,195,4,42,28,249,22,178,9,7,46,249,22, +166,7,197,249,22,190,3,23,199,4,42,28,28,249,22,178,9,7,115,249,22, +166,7,197,249,22,190,3,23,199,4,41,249,22,178,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,88,88,148,8,36,40,50,11,2,31,222,33,89,28,248,22,90, -23,194,2,9,250,22,93,6,4,4,10,32,32,32,248,22,128,16,248,22,106, -23,198,2,248,2,88,248,22,180,20,23,198,1,28,249,22,179,9,248,22,84, -23,200,2,23,196,1,28,249,22,177,9,248,22,179,20,23,200,1,23,198,1, -251,22,188,11,2,22,6,41,41,99,121,99,108,101,32,105,110,32,108,111,97, +23,194,2,9,250,22,93,6,4,4,10,32,32,32,248,22,129,16,248,22,106, +23,198,2,248,2,88,248,22,181,20,23,198,1,28,249,22,180,9,248,22,84, +23,200,2,23,196,1,28,249,22,178,9,248,22,180,20,23,200,1,23,198,1, +251,22,189,11,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,184,7,248,2,88,248, -22,98,23,203,1,12,12,247,23,193,1,250,22,162,4,11,196,195,20,13,144, +112,97,116,104,115,58,126,97,23,197,1,249,22,1,22,185,7,248,2,88,248, +22,98,23,203,1,12,12,247,23,193,1,250,22,163,4,11,196,195,20,13,144, 80,144,49,53,41,249,22,82,249,22,82,23,206,1,23,201,1,23,203,1,20, 13,144,80,144,49,41,40,252,80,144,54,42,40,249,22,31,11,80,144,56,41, -40,22,133,5,23,204,2,22,135,5,248,28,23,199,2,20,20,94,88,148,8, +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,92,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,177,9,248, -22,179,20,23,203,2,2,32,11,23,200,1,86,94,23,200,1,28,248,22,158, -5,23,206,2,27,248,22,160,5,23,207,2,28,248,22,66,193,249,22,92,2, -5,194,192,23,205,2,249,247,22,184,5,23,198,1,27,248,22,70,248,22,128, -16,23,203,1,28,23,198,2,28,250,22,161,2,248,22,179,20,23,207,1,23, -205,1,11,249,22,82,11,199,249,22,82,194,199,192,86,96,28,248,22,169,5, -23,196,2,12,28,248,22,160,4,23,198,2,250,22,190,11,11,6,15,15,98, -97,100,32,109,111,100,117,108,101,32,112,97,116,104,23,200,2,250,22,128,12, -2,22,2,33,23,198,2,28,28,23,196,2,248,22,158,5,23,197,2,10,12, -250,22,128,12,2,22,6,31,31,40,111,114,47,99,32,35,102,32,114,101,115, +22,66,23,201,2,23,200,1,28,28,248,22,80,23,201,2,249,22,178,9,248, +22,180,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,129, +16,23,203,1,28,23,198,2,28,250,22,161,2,248,22,180,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,12,28,248,22,161,4,23,198,2,250,22,191,11,11,6,15,15,98, +97,100,32,109,111,100,117,108,101,32,112,97,116,104,23,200,2,250,22,129,12, +2,22,2,33,23,198,2,28,28,23,196,2,248,22,159,5,23,197,2,10,12, +250,22,129,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,160,4,23,198,2,10,12,250,22,128,12,2,22, +2,28,28,23,197,2,248,22,161,4,23,198,2,10,12,250,22,129,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,39,41,50,11,78,102,108,97,116,116,101,110,45,115, -117,98,45,112,97,116,104,222,33,83,28,28,248,22,80,23,197,2,249,22,177, -9,248,22,179,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,159,5,248,22,105,23,198,1,28,28,248,22, -80,23,197,2,28,249,22,177,9,248,22,179,20,23,199,2,2,35,28,248,22, -80,248,22,105,23,198,2,249,22,177,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,159,5,249,23, +117,98,45,112,97,116,104,222,33,83,28,28,248,22,80,23,197,2,249,22,178, +9,248,22,180,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,178,9,248,22,180,20,23,199,2,2,35,28,248,22, +80,248,22,105,23,198,2,249,22,178,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,177,9,248,22,179,20,23,199,2,2,35,28,28,249,22,179,9, -248,22,105,23,199,2,2,36,10,249,22,179,9,248,22,105,23,199,2,2,34, -28,23,197,2,27,248,22,160,5,23,199,2,28,248,22,66,193,10,28,248,22, -80,193,248,22,66,248,22,179,20,194,11,11,11,11,11,86,96,23,199,1,23, -198,1,23,194,1,27,248,22,160,5,23,199,1,248,22,159,5,249,23,197,1, -28,248,22,80,23,197,2,248,22,179,20,23,197,2,23,196,2,27,28,249,22, -179,9,248,22,105,23,204,2,2,34,248,22,180,20,201,248,22,107,201,28,248, -22,80,23,198,2,249,22,97,248,22,180,20,199,194,192,28,28,248,22,80,23, -197,2,249,22,177,9,248,22,179,20,23,199,2,2,38,11,86,94,23,193,1, +2,28,249,22,178,9,248,22,180,20,23,199,2,2,35,28,28,249,22,180,9, +248,22,105,23,199,2,2,36,10,249,22,180,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,180,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,180,20,23,197,2,23,196,2,27,28,249,22, +180,9,248,22,105,23,204,2,2,34,248,22,181,20,201,248,22,107,201,28,248, +22,80,23,198,2,249,22,97,248,22,181,20,199,194,192,28,28,248,22,80,23, +197,2,249,22,178,9,248,22,180,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,177,9,248,22,179,20,23,199,2,2,35,28,248,22,80,248,22,105,23, -198,2,249,22,177,9,248,22,109,23,199,2,2,38,11,11,11,86,94,23,193, +249,22,178,9,248,22,180,20,23,199,2,2,35,28,248,22,80,248,22,105,23, +198,2,249,22,178,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,84,27,32,0,88,148,8,36,40,53,11,69,115,115,45,62,114,107,116, -222,33,85,27,28,248,22,80,23,200,2,28,249,22,177,9,2,35,248,22,179, -20,23,202,2,27,248,22,105,23,201,2,28,28,249,22,179,9,23,195,2,2, -36,10,249,22,179,9,23,195,2,2,34,86,94,23,193,1,28,23,201,2,27, -248,22,160,5,23,203,2,28,248,22,80,193,248,22,179,20,193,192,250,22,188, +222,33,85,27,28,248,22,80,23,200,2,28,249,22,178,9,2,35,248,22,180, +20,23,202,2,27,248,22,105,23,201,2,28,28,249,22,180,9,23,195,2,2, +36,10,249,22,180,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,180,20,193,192,250,22,189, 11,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,177,9,2,35,248,22,179,20,23,203,2,27, -28,28,28,249,22,179,9,248,22,105,23,204,2,2,36,10,249,22,179,9,248, -22,105,23,204,2,2,34,23,202,2,11,27,248,22,160,5,23,204,2,27,28, -249,22,179,9,248,22,105,23,206,2,2,34,248,22,180,20,23,204,1,248,22, -107,23,204,1,28,248,22,80,23,195,2,249,23,202,1,248,22,179,20,23,197, -2,249,22,97,248,22,180,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,179,9,248,22,105,23,206,2,2, -34,248,22,180,20,23,204,1,248,22,107,23,204,1,28,248,22,80,193,248,22, -180,20,193,11,86,95,23,200,1,23,197,1,11,86,95,23,200,1,23,197,1, +248,22,80,23,201,2,28,249,22,178,9,2,35,248,22,180,20,23,203,2,27, +28,28,28,249,22,180,9,248,22,105,23,204,2,2,36,10,249,22,180,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,180,9,248,22,105,23,206,2,2,34,248,22,181,20,23,204,1,248,22, +107,23,204,1,28,248,22,80,23,195,2,249,23,202,1,248,22,180,20,23,197, +2,249,22,97,248,22,181,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,180,9,248,22,105,23,206,2,2, +34,248,22,181,20,23,204,1,248,22,107,23,204,1,28,248,22,80,193,248,22, +181,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,142,17,247,22,155,14,28,23,193,2,192,86,94, +249,22,82,23,199,2,248,22,143,17,247,22,156,14,28,23,193,2,192,86,94, 23,193,1,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,184,7,23,197,2, +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,161,7,23,196, +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,192,86,94,23,193, 1,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,142,16,23,198,1,248,23,203, -1,23,197,1,250,22,1,22,142,16,23,199,1,249,22,97,249,22,2,32,0, +248,22,90,23,194,2,86,94,23,193,1,249,22,143,16,23,198,1,248,23,203, +1,23,197,1,250,22,1,22,143,16,23,199,1,249,22,97,249,22,2,32,0, 88,148,8,36,40,47,11,9,222,33,86,23,200,1,248,22,92,248,23,207,1, -23,201,1,28,248,22,188,15,23,196,2,86,95,23,197,1,23,196,1,248,80, -144,47,8,30,42,248,22,152,16,28,248,22,149,16,23,198,2,23,197,2,249, -22,150,16,23,199,2,248,80,144,51,8,29,42,23,207,2,28,249,22,177,9, +23,201,1,28,248,22,189,15,23,196,2,86,95,23,197,1,23,196,1,248,80, +144,47,8,30,42,248,22,153,16,28,248,22,150,16,23,198,2,23,197,2,249, +22,151,16,23,199,2,248,80,144,51,8,29,42,23,207,2,28,249,22,178,9, 248,22,83,23,198,2,2,32,27,248,80,144,48,51,42,249,22,82,23,199,2, -248,22,142,17,247,22,155,14,28,23,193,2,192,86,94,23,193,1,90,144,41, +248,22,143,17,247,22,156,14,28,23,193,2,192,86,94,23,193,1,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,185,16,2, +248,22,90,248,22,107,23,201,2,28,248,22,90,23,195,2,249,22,186,16,2, 87,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,185,16,2,87,23,198,2, -248,23,202,1,23,197,2,86,94,23,201,1,249,22,184,7,23,198,2,2,39, +90,23,196,2,86,94,23,201,1,2,40,28,249,22,186,16,2,87,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,180,20,23,199,1, -23,199,1,10,86,95,23,197,1,23,196,1,28,249,22,177,9,248,22,179,20, -23,198,2,2,37,248,80,144,47,8,30,42,248,22,152,16,249,22,150,16,248, -22,154,16,248,22,105,23,201,2,248,80,144,51,8,29,42,23,207,2,12,86, -94,28,28,248,22,188,15,23,194,2,10,248,22,128,9,23,194,2,12,28,23, -203,2,250,22,190,11,69,114,101,113,117,105,114,101,249,22,145,8,6,17,17, +144,57,8,23,42,23,208,1,248,22,83,23,199,2,248,22,181,20,23,199,1, +23,199,1,10,86,95,23,197,1,23,196,1,28,249,22,178,9,248,22,180,20, +23,198,2,2,37,248,80,144,47,8,30,42,248,22,153,16,249,22,151,16,248, +22,155,16,248,22,105,23,201,2,248,80,144,51,8,29,42,23,207,2,12,86, +94,28,28,248,22,189,15,23,194,2,10,248,22,129,9,23,194,2,12,28,23, +203,2,250,22,191,11,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,128,12,2,22,2,33,23, -198,2,27,28,248,22,128,9,23,195,2,249,22,133,9,23,196,2,39,249,22, -152,16,248,22,153,16,23,197,2,11,27,28,248,22,128,9,23,196,2,249,22, -133,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,128,9,23,199,2,250,22,7,2,41,249,22,133,9, -23,203,2,41,2,41,248,22,145,16,23,198,2,86,95,23,195,1,23,193,1, -27,28,248,22,128,9,23,200,2,249,22,133,9,23,201,2,42,249,80,144,54, -61,42,23,197,2,5,0,27,28,248,22,128,9,23,201,2,249,22,133,9,23, -202,2,43,248,22,159,5,23,200,2,27,250,22,161,2,80,144,57,44,41,248, -22,142,17,247,22,155,14,11,27,28,23,194,2,23,194,1,86,94,23,194,1, +248,22,83,23,199,2,6,0,0,23,206,2,250,22,129,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, +153,16,248,22,154,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,146,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,143,17,247,22,156,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,142,17,247,22,155,14,195,192,27,28,23,204,2,248,22,159,5, -249,22,82,248,22,160,5,23,200,2,23,207,2,23,196,2,86,95,28,23,214, +44,41,248,22,143,17,247,22,156,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,12,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,142,17,247,22,155, +144,8,23,54,41,80,144,61,54,41,247,22,17,27,248,22,143,17,247,22,156, 14,86,94,249,22,3,88,148,8,36,40,57,11,9,226,2,3,12,13,33,90, 23,196,2,248,28,248,22,15,80,144,60,54,41,32,0,88,148,39,40,45,11, 9,222,33,91,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,93,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,12,28,28,248,22,128,9,23,204,1,86,94,23,214,1,11,28,23, -214,1,28,248,22,161,7,23,206,2,10,28,248,22,66,23,206,2,10,28,248, -22,80,23,206,2,249,22,177,9,248,22,179,20,23,208,2,2,32,11,11,249, -80,144,58,52,42,28,248,22,161,7,23,208,2,249,22,82,23,209,1,248,80, +23,194,1,12,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,178,9,248,22,180,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, -142,17,247,22,155,14,252,22,130,9,23,209,1,23,208,1,23,206,1,23,204, +143,17,247,22,156,14,252,22,131,9,23,209,1,23,208,1,23,206,1,23,204, 1,23,203,1,12,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,132,5,80,144,40,60,41,248, -22,184,5,80,144,40,40,42,248,22,154,15,80,144,40,48,42,20,18,144,11, +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,42,248,22,155,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, @@ -1483,13 +1483,13 @@ 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,188,8,71,115,111,45,115,117,102,102,105,120,80,144,39,39, +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,88,148,39,41,8,39,8,189,3,2,4,223,0,33,50,80, 144,39,40,40,20,15,16,2,32,0,88,148,8,36,44,55,11,2,9,222,33, 51,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,129,9,8,128,8,11,80,144,39, +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,52, 80,144,39,51,40,20,15,16,2,88,148,8,36,41,57,8,128,32,2,14,223, 0,33,53,80,144,39,52,40,20,15,16,2,247,22,78,80,144,39,53,40,20, @@ -1519,7 +1519,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 9818); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,53,46,48,46,54,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,53,46,48,46,56,84,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,17,0,0,0,1,0,0,8,0,18,0, 24,0,38,0,52,0,64,0,84,0,98,0,113,0,126,0,131,0,135,0,147, 0,231,0,238,0,8,1,0,0,214,1,0,0,3,1,5,105,110,115,112,48, diff --git a/racket/src/racket/src/hash.c b/racket/src/racket/src/hash.c index f1f0d1841a..05ed3e3586 100644 --- a/racket/src/racket/src/hash.c +++ b/racket/src/racket/src/hash.c @@ -2412,6 +2412,10 @@ intptr_t scheme_eqv_hash_key2(Scheme_Object *o) #define HASHTR_HAS_VAL 0x1 #define HASHTR_HAS_CODE 0x2 +/* In a hash tree without HASHTR_HAS_VAL, all values are `#t`; we nodes without + HASHTR_HAS_VAL to nodes with it on demand, but we don't go the other way */ +#define NOT_IMPLICIT_VALUE(v) (!SAME_OBJ(v, scheme_true)) + #define HASHTR_SUBTREEP(o) SAME_TYPE(SCHEME_TYPE(o), scheme_hash_tree_subtree_type) #define HASHTR_COLLISIONP(o) SAME_TYPE(SCHEME_TYPE(o), scheme_hash_tree_collision_type) @@ -2475,7 +2479,7 @@ XFORM_NONGCING static hash_tree_bitmap_t hamt_bit(int index) XFORM_NONGCING Scheme_Object *_mzHAMT_VAL(Scheme_Hash_Tree *ht, int pos, int popcount) { - return ((SCHEME_HASHTR_FLAGS(ht) & HASHTR_HAS_VAL) ? (ht)->els[(popcount)+(pos)] : (ht)->els[pos]); + return ((SCHEME_HASHTR_FLAGS(ht) & HASHTR_HAS_VAL) ? (ht)->els[(popcount)+(pos)] : scheme_true); } XFORM_NONGCING uintptr_t mzHAMT_KEY_CODE(Scheme_Object *o) @@ -2513,6 +2517,11 @@ XFORM_NONGCING static void hamt_content_copy(Scheme_Hash_Tree *dest, Scheme_Hash if (SCHEME_HASHTR_FLAGS(src) & HASHTR_HAS_CODE) { memcpy(dest->els+2*dest_popcount+dest_start, src->els+2*src_popcount+src_start, len*sizeof(Scheme_Object*)); } + } else if (SCHEME_HASHTR_FLAGS(dest) & HASHTR_HAS_VAL) { + /* make source's implicit `#t` values explicit in dest */ + while (len--) { + _mzHAMT_SET_VAL(dest, dest_start+len, scheme_true, dest_popcount); + } } } @@ -2547,14 +2556,23 @@ static Scheme_Hash_Tree *hamt_alloc(int kind, int popcount) return (Scheme_Hash_Tree *)scheme_malloc_small_tagged(HASH_TREE_RECORD_SIZE(kind, popcount)); } -static Scheme_Hash_Tree *hamt_dup(Scheme_Hash_Tree *ht, int popcount) +static Scheme_Hash_Tree *hamt_dup(Scheme_Hash_Tree *ht, int popcount, int need_value) { Scheme_Hash_Tree *new_ht; int kind; kind = SCHEME_HASHTR_KIND(ht); - new_ht = hamt_alloc(kind, popcount); + new_ht = hamt_alloc(kind | (need_value ? HASHTR_HAS_VAL : 0), popcount); memcpy(new_ht, ht, HASH_TREE_RECORD_SIZE(kind, popcount)); + + if (!(kind & HASHTR_HAS_VAL) && need_value) { + /* make original's implicit `#t` values explicit in the copy */ + int i; + SCHEME_HASHTR_FLAGS(new_ht) |= HASHTR_HAS_VAL; + for (i = popcount; i--; ) { + _mzHAMT_SET_VAL(new_ht, i, scheme_true, popcount); + } + } return new_ht; } @@ -2595,6 +2613,7 @@ static Scheme_Hash_Tree *hamt_make2(int kind, int shift, code2, key2, val2); return hamt_make1(new_ht, index1); } else { + kind = kind | ((NOT_IMPLICIT_VALUE(val1) || NOT_IMPLICIT_VALUE(val2)) ? HASHTR_HAS_VAL : 0); new_ht = hamt_alloc(kind, 2); new_ht->iso.so.type = scheme_hash_tree_subtree_type; SCHEME_HASHTR_FLAGS(new_ht) = kind; @@ -2639,7 +2658,7 @@ static Scheme_Hash_Tree *hamt_set(Scheme_Hash_Tree *ht, uintptr_t code, int shif if (ht->bitmap & hamt_bit(index)) { /* Replacing: */ - new_ht = hamt_dup(ht, popcount); + new_ht = hamt_dup(ht, popcount, NOT_IMPLICIT_VALUE(val)); if (HASHTR_SUBTREEP(ht->els[pos])) { ht = (Scheme_Hash_Tree *)ht->els[pos]; ht = hamt_set(ht, code, shift + mzHAMT_LOG_WORD_SIZE, key, val, inc); @@ -2648,7 +2667,7 @@ static Scheme_Hash_Tree *hamt_set(Scheme_Hash_Tree *ht, uintptr_t code, int shif } else { if (code == _mzHAMT_CODE(new_ht, pos, popcount)) { new_ht->els[pos] = key; - if (SCHEME_HASHTR_FLAGS(ht) & HASHTR_HAS_VAL) + if (SCHEME_HASHTR_FLAGS(new_ht) & HASHTR_HAS_VAL) _mzHAMT_SET_VAL(new_ht, pos, val, popcount); new_ht->count += inc; } else { @@ -2657,23 +2676,25 @@ static Scheme_Hash_Tree *hamt_set(Scheme_Hash_Tree *ht, uintptr_t code, int shif _mzHAMT_CODE(new_ht, pos, popcount), new_ht->els[pos], _mzHAMT_VAL(new_ht, pos, popcount), code, key, val); new_ht->els[pos] = (Scheme_Object *)ht; - if (SCHEME_HASHTR_FLAGS(ht) & HASHTR_HAS_VAL) + if (SCHEME_HASHTR_FLAGS(new_ht) & HASHTR_HAS_VAL) _mzHAMT_SET_VAL(new_ht, pos, NULL, popcount); new_ht->count += inc; } } } else { - new_ht = hamt_alloc(SCHEME_HASHTR_KIND(ht), popcount+1); - memcpy(new_ht, ht, HASH_TREE_RECORD_SIZE(SCHEME_HASHTR_KIND(new_ht), 0)); - hamt_content_copy(new_ht, ht, popcount+1,popcount, 0, 0, pos); + int kind = SCHEME_HASHTR_KIND(ht) | (NOT_IMPLICIT_VALUE(val) ? HASHTR_HAS_VAL : 0); + new_ht = hamt_alloc(kind, popcount+1); + memcpy(new_ht, ht, HASH_TREE_RECORD_SIZE(SCHEME_HASHTR_KIND(ht), 0)); + SCHEME_HASHTR_FLAGS(new_ht) |= kind; + hamt_content_copy(new_ht, ht, popcount+1, popcount, 0, 0, pos); if (pos < popcount) hamt_content_copy(new_ht, ht, popcount+1, popcount, pos+1, pos, popcount-pos); new_ht->bitmap |= hamt_bit(index); new_ht->count += inc; new_ht->els[pos] = key; - if (SCHEME_HASHTR_FLAGS(ht) & HASHTR_HAS_VAL) { + if (SCHEME_HASHTR_FLAGS(new_ht) & HASHTR_HAS_VAL) { _mzHAMT_SET_VAL(new_ht, pos, val, popcount+1); - if (SCHEME_HASHTR_FLAGS(ht) & HASHTR_HAS_CODE) + if (SCHEME_HASHTR_FLAGS(new_ht) & HASHTR_HAS_CODE) _mzHAMT_SET_CODE(new_ht, pos, code, popcount+1); } } @@ -2690,7 +2711,7 @@ static Scheme_Hash_Tree *hamt_contract(Scheme_Hash_Tree *ht, int popcount, int i return NULL; new_ht = hamt_alloc(SCHEME_HASHTR_KIND(ht), popcount-1); - memcpy(new_ht, ht, HASH_TREE_RECORD_SIZE(SCHEME_HASHTR_KIND(new_ht), 0)); + memcpy(new_ht, ht, HASH_TREE_RECORD_SIZE(SCHEME_HASHTR_KIND(ht), 0)); hamt_content_copy(new_ht, ht, popcount-1, popcount, 0, 0, pos); if (pos < popcount-1) hamt_content_copy(new_ht, ht, popcount-1, popcount, pos, pos+1, popcount-pos-1); @@ -2717,13 +2738,15 @@ static Scheme_Hash_Tree *hamt_remove(Scheme_Hash_Tree *ht, uintptr_t code, int s if (!SAME_OBJ((Scheme_Object *)sub_ht, ht->els[pos])) { if (!sub_ht) return hamt_contract(ht, popcount, index, pos); - ht = hamt_dup(ht, popcount); + ht = hamt_dup(ht, popcount, 0); ht->count -= 1; if (((sub_ht->count == 1) && !HASHTR_SUBTREEP(sub_ht->els[0])) || (HASHTR_COLLISIONP(sub_ht->els[0]) && (sub_ht->count == ((Scheme_Hash_Tree *)sub_ht->els[0])->count))) { /* drop extra layer that has 1 immediate entry */ ht->els[pos] = sub_ht->els[0]; + if (!(SCHEME_HASHTR_FLAGS(ht) & HASHTR_HAS_VAL) && (SCHEME_HASHTR_FLAGS(sub_ht) & HASHTR_HAS_VAL)) + ht = hamt_dup(ht, popcount, 1); if (SCHEME_HASHTR_FLAGS(ht) & HASHTR_HAS_VAL) { _mzHAMT_SET_VAL(ht, pos, _mzHAMT_VAL(sub_ht, 0, 1), popcount); if (SCHEME_HASHTR_FLAGS(ht) & HASHTR_HAS_CODE) @@ -2867,11 +2890,7 @@ XFORM_NONGCING void scheme_unsafe_hash_tree_subtree(Scheme_Object *obj, Scheme_O XFORM_NONGCING Scheme_Object *scheme_unsafe_hash_tree_access(Scheme_Hash_Tree *subtree, int i) { - int popcount; - - popcount = hamt_popcount(subtree->bitmap); - - return subtree->els[i+popcount]; + return _mzHAMT_VAL(subtree, i, hamt_popcount(subtree->bitmap)); } /* args is a (cons subtree (cons subtree-index stack-of-parents)) @@ -3092,10 +3111,10 @@ XFORM_NONGCING static uintptr_t hamt_find_free_code(Scheme_Hash_Tree *tree, int shift + mzHAMT_LOG_WORD_SIZE); } -static Scheme_Hash_Tree *make_hash_tree(int eql_kind, int val_kind, int popcount) +static Scheme_Hash_Tree *make_hash_tree(int eql_kind, int popcount) { Scheme_Hash_Tree *ht; - int kind = val_kind | (eql_kind ? (HASHTR_HAS_CODE | HASHTR_HAS_VAL) : 0); + int kind = (eql_kind ? (HASHTR_HAS_CODE | HASHTR_HAS_VAL) : 0); ht = hamt_alloc(kind, popcount); @@ -3111,12 +3130,7 @@ static Scheme_Hash_Tree *make_hash_tree(int eql_kind, int val_kind, int popcount Scheme_Hash_Tree *scheme_make_hash_tree(int eql_kind) { - return make_hash_tree(eql_kind, HASHTR_HAS_VAL, 0); -} - -Scheme_Hash_Tree *scheme_make_hash_tree_set(int eql_kind) -{ - return make_hash_tree(eql_kind, 0, 0); + return make_hash_tree(eql_kind, 0); } Scheme_Hash_Tree *scheme_make_hash_tree_of_type(Scheme_Type stype) @@ -3136,12 +3150,12 @@ Scheme_Hash_Tree *scheme_make_hash_tree_placeholder(int eql_kind) { Scheme_Hash_Tree *ht, *sub; - ht = make_hash_tree(eql_kind, 0, 1); + ht = make_hash_tree(eql_kind, 1); ht->iso.so.type = scheme_hash_tree_indirection_type; ht->count = 0; ht->bitmap = 1; - sub = make_hash_tree(eql_kind, HASHTR_HAS_VAL, 0); + sub = make_hash_tree(eql_kind, 0); ht->els[0] = (Scheme_Object *)sub; return ht; @@ -3354,11 +3368,18 @@ static int hamt_equal_entries(int stype, void *eql_data, return SAME_OBJ(v1, v2); } } else if (stype == scheme_hash_tree_type) { - if (scheme_recur_equal(k1, k2, eql_data)) - return scheme_recur_equal(v1, v2, eql_data); + if (eql_data) { + if (scheme_recur_equal(k1, k2, eql_data)) + return scheme_recur_equal(v1, v2, eql_data); + } else + return scheme_equal(k1, k2); } else { - if (scheme_eqv(k1, k2)) - return scheme_recur_equal(v1, v2, eql_data); + if (scheme_eqv(k1, k2)) { + if (eql_data) + return scheme_recur_equal(v1, v2, eql_data); + else + return 1; + } } return 0; } @@ -3472,6 +3493,17 @@ int scheme_eq_hash_tree_subset_of(Scheme_Hash_Tree *t1, Scheme_Hash_Tree *t2) return hamt_eq_subset_of(t1, t2, 0, scheme_eq_hash_tree_type, NULL); } +int scheme_hash_tree_subset_of(Scheme_Hash_Tree *t1, Scheme_Hash_Tree *t2) +{ + t1 = resolve_placeholder(t1); + t2 = resolve_placeholder(t2); + + if (t1->count > t2->count) + return 0; + + return hamt_subset_of(t1, t2, 0, SCHEME_TYPE(t1), NULL); +} + int scheme_eq_hash_tree_subset_match_of(Scheme_Hash_Tree *t1, Scheme_Hash_Tree *t2) /* assumes that `t1` and `t2` are sets, as opposed to maps */ { diff --git a/racket/src/racket/src/list.c b/racket/src/racket/src/list.c index a9d94836a1..e0eea96d33 100644 --- a/racket/src/racket/src/list.c +++ b/racket/src/racket/src/list.c @@ -139,6 +139,7 @@ Scheme_Object *scheme_hash_table_iterate_key(int argc, Scheme_Object *argv[]); Scheme_Object *scheme_hash_table_iterate_value(int argc, Scheme_Object *argv[]); Scheme_Object *scheme_hash_table_iterate_pair(int argc, Scheme_Object *argv[]); Scheme_Object *scheme_hash_table_iterate_key_value(int argc, Scheme_Object *argv[]); +static Scheme_Object *hash_keys_subset_p(int argc, Scheme_Object *argv[]); static Scheme_Object *eq_hash_code(int argc, Scheme_Object *argv[]); static Scheme_Object *equal_hash_code(int argc, Scheme_Object *argv[]); static Scheme_Object *equal_hash2_code(int argc, Scheme_Object *argv[]); @@ -685,6 +686,12 @@ scheme_init_list (Scheme_Env *env) 2, 2, 2, 2), env); + scheme_add_global_constant("hash-keys-subset?", + scheme_make_immed_prim(hash_keys_subset_p, + "hash-keys-subset?", + 2, 2), + env); + scheme_add_global_constant("chaperone-hash", scheme_make_prim_w_arity(chaperone_hash, "chaperone-hash", @@ -3087,6 +3094,82 @@ Scheme_Object *scheme_hash_table_iterate_key_value(int argc, Scheme_Object *argv return NULL; } +static Scheme_Object *hash_keys_subset_p_slow(int argc, Scheme_Object *argv[]) +{ + Scheme_Object *b[2], *i1, *c2; + int kind1, kind2; + + if (SCHEME_HASHTRP(argv[0]) && SCHEME_HASHTRP(argv[1])) { + if (SAME_TYPE(SCHEME_HASHTR_TYPE(argv[0]), SCHEME_HASHTR_TYPE(argv[1]))) + return (scheme_hash_tree_subset_of((Scheme_Hash_Tree *)argv[0], (Scheme_Hash_Tree *)argv[1]) + ? scheme_true + : scheme_false); + } + + b[0] = argv[1]; + if (!SCHEME_TRUEP(hash_p(1, argv))) + scheme_wrong_type("hash-keys-subset?", "hash?", 0 , argc, argv); + if (!SCHEME_TRUEP(hash_p(1, b))) + scheme_wrong_type("hash-keys-subset?", "hash?", 1, argc, argv); + + if (SCHEME_TRUEP(scheme_hash_eq_p(1, argv))) + kind1 = 0; + else if (SCHEME_TRUEP(scheme_hash_equal_p(1, argv))) + kind1 = 1; + else + kind1 = 2; + + if (SCHEME_TRUEP(scheme_hash_eq_p(1, b))) + kind2 = 0; + else if (SCHEME_TRUEP(scheme_hash_equal_p(1, b))) + kind2 = 1; + else + kind2 = 2; + + if (kind1 != kind2) { + scheme_contract_error("hash-keys-subset?", + "given hash tables do not use the same key comparison", + "first table", 1, argv[0], + "second table", 1, argv[1], + NULL); + return NULL; + } + + i1 = hash_table_count(1, argv); + c2 = hash_table_count(1, b); + if (SCHEME_INT_VAL(i1) > SCHEME_INT_VAL(c2)) + return scheme_false; + + i1 = scheme_hash_table_iterate_start(1, argv); + b[0] = argv[0]; + while (!SCHEME_FALSEP(i1)) { + b[1] = i1; + c2 = scheme_hash_table_iterate_key(2, b); + + if (!scheme_chaperone_hash_get(argv[1], c2)) + return scheme_false; + + i1 = scheme_hash_table_iterate_next(2, b); + } + + return scheme_true; +} + +static Scheme_Object *hash_keys_subset_p(int argc, Scheme_Object *argv[]) XFORM_ASSERT_NO_CONVERSION +{ + if (SCHEME_HASHTRP(argv[0]) + && SCHEME_HASHTRP(argv[1]) + && SAME_TYPE(scheme_eq_hash_tree_type, SCHEME_HASHTR_TYPE(argv[0])) + && SAME_TYPE(scheme_eq_hash_tree_type, SCHEME_HASHTR_TYPE(argv[1]))) { + if (scheme_eq_hash_tree_subset_of((Scheme_Hash_Tree *)argv[0], (Scheme_Hash_Tree *)argv[1])) + return scheme_true; + else + return scheme_false; + } else + return hash_keys_subset_p_slow(argc, argv); +} + + static Scheme_Object *do_chaperone_hash(const char *name, int is_impersonator, int argc, Scheme_Object **argv) { Scheme_Chaperone *px; diff --git a/racket/src/racket/src/schemef.h b/racket/src/racket/src/schemef.h index 1143f34808..bcf084a4d4 100644 --- a/racket/src/racket/src/schemef.h +++ b/racket/src/racket/src/schemef.h @@ -518,7 +518,6 @@ XFORM_NONGCING_NONALIASING MZ_EXTERN int scheme_hash_table_index(Scheme_Hash_Tab XFORM_NONGCING MZ_EXTERN Scheme_Object *scheme_hash_table_next(Scheme_Hash_Table *hash, mzlonglong start); MZ_EXTERN Scheme_Hash_Tree *scheme_make_hash_tree(int kind); -MZ_EXTERN Scheme_Hash_Tree *scheme_make_hash_tree_set(int kind); MZ_EXTERN Scheme_Hash_Tree *scheme_hash_tree_set(Scheme_Hash_Tree *tree, Scheme_Object *key, Scheme_Object *val); MZ_EXTERN Scheme_Object *scheme_hash_tree_get(Scheme_Hash_Tree *tree, Scheme_Object *key); XFORM_NONGCING MZ_EXTERN Scheme_Object *scheme_eq_hash_tree_get(Scheme_Hash_Tree *tree, Scheme_Object *key); diff --git a/racket/src/racket/src/schemex.h b/racket/src/racket/src/schemex.h index 98e7e8e563..a702725d97 100644 --- a/racket/src/racket/src/schemex.h +++ b/racket/src/racket/src/schemex.h @@ -409,7 +409,6 @@ void (*scheme_clear_hash_table)(Scheme_Hash_Table *ht); int (*scheme_hash_table_index)(Scheme_Hash_Table *hash, mzlonglong pos, Scheme_Object **_key, Scheme_Object **_val); Scheme_Object *(*scheme_hash_table_next)(Scheme_Hash_Table *hash, mzlonglong start); Scheme_Hash_Tree *(*scheme_make_hash_tree)(int kind); -Scheme_Hash_Tree *(*scheme_make_hash_tree_set)(int kind); Scheme_Hash_Tree *(*scheme_hash_tree_set)(Scheme_Hash_Tree *tree, Scheme_Object *key, Scheme_Object *val); Scheme_Object *(*scheme_hash_tree_get)(Scheme_Hash_Tree *tree, Scheme_Object *key); Scheme_Object *(*scheme_eq_hash_tree_get)(Scheme_Hash_Tree *tree, Scheme_Object *key); diff --git a/racket/src/racket/src/schemex.inc b/racket/src/racket/src/schemex.inc index 7a05e9ded5..ff8c789f59 100644 --- a/racket/src/racket/src/schemex.inc +++ b/racket/src/racket/src/schemex.inc @@ -305,7 +305,6 @@ scheme_extension_table->scheme_hash_table_index = scheme_hash_table_index; scheme_extension_table->scheme_hash_table_next = scheme_hash_table_next; scheme_extension_table->scheme_make_hash_tree = scheme_make_hash_tree; - scheme_extension_table->scheme_make_hash_tree_set = scheme_make_hash_tree_set; scheme_extension_table->scheme_hash_tree_set = scheme_hash_tree_set; scheme_extension_table->scheme_hash_tree_get = scheme_hash_tree_get; scheme_extension_table->scheme_eq_hash_tree_get = scheme_eq_hash_tree_get; diff --git a/racket/src/racket/src/schemexm.h b/racket/src/racket/src/schemexm.h index caadf0237f..b039b40e47 100644 --- a/racket/src/racket/src/schemexm.h +++ b/racket/src/racket/src/schemexm.h @@ -305,7 +305,6 @@ #define scheme_hash_table_index (scheme_extension_table->scheme_hash_table_index) #define scheme_hash_table_next (scheme_extension_table->scheme_hash_table_next) #define scheme_make_hash_tree (scheme_extension_table->scheme_make_hash_tree) -#define scheme_make_hash_tree_set (scheme_extension_table->scheme_make_hash_tree_set) #define scheme_hash_tree_set (scheme_extension_table->scheme_hash_tree_set) #define scheme_hash_tree_get (scheme_extension_table->scheme_hash_tree_get) #define scheme_eq_hash_tree_get (scheme_extension_table->scheme_eq_hash_tree_get) diff --git a/racket/src/racket/src/schminc.h b/racket/src/racket/src/schminc.h index 284bde84e0..59d287ae36 100644 --- a/racket/src/racket/src/schminc.h +++ b/racket/src/racket/src/schminc.h @@ -14,7 +14,7 @@ #define USE_COMPILED_STARTUP 1 -#define EXPECTED_PRIM_COUNT 1150 +#define EXPECTED_PRIM_COUNT 1151 #define EXPECTED_UNSAFE_COUNT 126 #define EXPECTED_FLFXNUM_COUNT 69 #define EXPECTED_EXTFL_COUNT 45 diff --git a/racket/src/racket/src/schpriv.h b/racket/src/racket/src/schpriv.h index a0a873023a..d76bff8127 100644 --- a/racket/src/racket/src/schpriv.h +++ b/racket/src/racket/src/schpriv.h @@ -4450,6 +4450,7 @@ Scheme_Hash_Tree *scheme_make_hash_tree_placeholder(int kind); void scheme_hash_tree_tie_placeholder(Scheme_Hash_Tree *t, Scheme_Hash_Tree *base); XFORM_NONGCING Scheme_Hash_Tree *scheme_hash_tree_resolve_placeholder(Scheme_Hash_Tree *t); int scheme_hash_tree_kind(Scheme_Hash_Tree *t); +int scheme_hash_tree_subset_of(Scheme_Hash_Tree *t1, Scheme_Hash_Tree *t2); XFORM_NONGCING int scheme_eq_hash_tree_subset_of(Scheme_Hash_Tree *t1, Scheme_Hash_Tree *t2); XFORM_NONGCING int scheme_eq_hash_tree_subset_match_of(Scheme_Hash_Tree *t1, Scheme_Hash_Tree *t2); intptr_t scheme_hash_tree_key_hash(Scheme_Hash_Tree *t1); diff --git a/racket/src/racket/src/schvers.h b/racket/src/racket/src/schvers.h index e779d4d29c..a1e963bfdd 100644 --- a/racket/src/racket/src/schvers.h +++ b/racket/src/racket/src/schvers.h @@ -13,12 +13,12 @@ consistently.) */ -#define MZSCHEME_VERSION "6.5.0.7" +#define MZSCHEME_VERSION "6.5.0.8" #define MZSCHEME_VERSION_X 6 #define MZSCHEME_VERSION_Y 5 #define MZSCHEME_VERSION_Z 0 -#define MZSCHEME_VERSION_W 7 +#define MZSCHEME_VERSION_W 8 #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/syntax.c b/racket/src/racket/src/syntax.c index c2571f91ee..2f71ee3ec8 100644 --- a/racket/src/racket/src/syntax.c +++ b/racket/src/racket/src/syntax.c @@ -312,7 +312,7 @@ void scheme_init_stx(Scheme_Env *env) REGISTER_SO(empty_propagate_table); REGISTER_SO(empty_scope_set); empty_hash_tree = scheme_make_hash_tree(0); - empty_scope_set = (Scheme_Scope_Set *)scheme_make_hash_tree_set(0); + empty_scope_set = (Scheme_Scope_Set *)scheme_make_hash_tree(0); empty_scope_table = MALLOC_ONE_TAGGED(Scheme_Scope_Table); empty_scope_table->so.type = scheme_scope_table_type; empty_scope_table->simple_scopes = empty_scope_set;