From a8fcbe452ef2bbdab50f501c255a7acc08d1f361 Mon Sep 17 00:00:00 2001 From: Alexa VanHattum Date: Mon, 10 Apr 2023 13:11:35 -0400 Subject: [PATCH 01/30] add distinction for rhs assertions --- cranelift/codegen/src/clif_lower.isle | 58 +- cranelift/codegen/src/prelude.isle | 22 +- cranelift/codegen/src/prelude_lower.isle | 24 +- cranelift/isle/veri/example_annotations.isle | 8 +- .../veri/veri_annotation/examples/simple.isle | 6 +- .../veri_annotation/examples/simple2.isle | 2 +- .../veri/veri_annotation/src/parser.lalrpop | 10 +- .../isle/veri/veri_annotation/src/parser.rs | 17378 ++++++++++------ .../veri_annotation/tests/integration_test.rs | 12 +- .../veri/veri_annotation/tests/parser_test.rs | 20 +- .../veri_engine/examples/band/64_band.isle | 10 +- .../examples/band/fits_in_32_band.isle | 10 +- .../veri/veri_engine/examples/bor/64_bor.isle | 10 +- .../examples/bor/fits_in_32_bor.isle | 10 +- .../broken_32_general_rotl_to_rotr.isle | 8 +- .../broken_fits_in_16_rotl_to_rotr.isle | 26 +- ...oken_fits_in_16_with_imm_rotl_to_rotr.isle | 34 +- .../broken/broken_fits_in_32_band.isle | 8 +- .../broken/broken_fits_in_32_bor.isle | 8 +- .../examples/broken/broken_imul.isle | 6 +- .../broken/broken_mask_small_rotr.isle | 24 +- .../broken/broken_rule_or_small_rotr.isle | 26 +- .../examples/broken/broken_uextend.isle | 4 +- .../examples/broken/cls/broken_cls.isle | 4 +- .../examples/broken/cls/broken_cls16.isle | 10 +- .../examples/broken/cls/broken_cls8.isle | 10 +- .../examples/broken/clz/broken_clz.isle | 4 +- .../examples/broken/clz/broken_clz16.isle | 10 +- .../examples/broken/clz/broken_clz8.isle | 10 +- .../examples/broken/ctz/broken_ctz.isle | 6 +- .../examples/broken/ctz/broken_ctz16.isle | 10 +- .../examples/broken/ctz/broken_ctz8.isle | 10 +- .../broken/iadd/broken_base_case.isle | 4 +- .../examples/broken/iadd/broken_imm12.isle | 6 +- .../examples/broken/iadd/broken_imm12_2.isle | 6 +- .../examples/broken/iadd/broken_imm12neg.isle | 6 +- .../broken/iadd/broken_imm12neg2.isle | 6 +- .../examples/broken/iadd/broken_madd.isle | 4 +- .../examples/broken/iadd/broken_madd2.isle | 4 +- .../examples/broken/iadd/broken_msub.isle | 4 +- .../examples/broken/iadd/broken_shift.isle | 6 +- .../examples/broken/iadd/broken_shift2.isle | 6 +- .../examples/broken/imul/broken_imul.isle | 6 +- .../broken/isub/broken_base_case.isle | 4 +- .../examples/broken/isub/broken_imm12.isle | 6 +- .../examples/broken/isub/broken_imm12neg.isle | 6 +- .../examples/broken/isub/broken_shift.isle | 6 +- .../examples/broken/sdiv/broken_sdiv.isle | 10 +- .../broken/sdiv/broken_sdiv_safe_const.isle | 14 +- .../broken/shifts/broken_do_shift_32.isle | 10 +- .../shifts/broken_ishl_to_do_shift_64.isle | 10 +- .../broken_sshr_to_do_shift_fits_in_32.isle | 12 +- .../broken_ushr_to_do_shift_fits_in_32.isle | 12 +- .../examples/broken/udiv/broken_udiv.isle | 8 +- .../veri_engine/examples/bxor/64_bxor.isle | 10 +- .../examples/bxor/fits_in_32_bxor.isle | 10 +- .../veri/veri_engine/examples/cls/cls.isle | 4 +- .../veri/veri_engine/examples/cls/cls16.isle | 10 +- .../veri/veri_engine/examples/cls/cls8.isle | 10 +- .../veri/veri_engine/examples/clz/clz.isle | 4 +- .../veri/veri_engine/examples/clz/clz16.isle | 10 +- .../veri/veri_engine/examples/clz/clz8.isle | 10 +- .../examples/constructs/if-let.isle | 6 +- .../veri/veri_engine/examples/ctz/ctz.isle | 6 +- .../veri/veri_engine/examples/ctz/ctz16.isle | 10 +- .../veri/veri_engine/examples/ctz/ctz8.isle | 10 +- .../veri_engine/examples/iadd/base_case.isle | 4 +- .../veri/veri_engine/examples/iadd/imm12.isle | 6 +- .../veri_engine/examples/iadd/imm12_2.isle | 6 +- .../iadd/imm12_from_negated_value.isle | 8 +- .../veri_engine/examples/iadd/imm12neg.isle | 6 +- .../veri_engine/examples/iadd/imm12neg2.isle | 6 +- .../examples/iadd/imm12neg2_new.isle | 6 +- .../examples/iadd/imm12neg_new.isle | 6 +- .../veri/veri_engine/examples/iadd/madd.isle | 4 +- .../veri/veri_engine/examples/iadd/madd2.isle | 4 +- .../veri/veri_engine/examples/iadd/shift.isle | 6 +- .../veri_engine/examples/iadd/shift2.isle | 6 +- .../examples/icmp/icmp_to_lower_icmp.isle | 4 +- .../examples/icmp/lower_icmp_32_64.isle | 8 +- .../lower_icmp_32_64_to_lower_icmp_const.isle | 4 +- .../examples/icmp/lower_icmp_const_32_64.isle | 14 +- .../icmp/lower_icmp_const_32_64_imm.isle | 10 +- .../icmp/lower_icmp_const_32_64_sgte.isle | 14 +- .../icmp/lower_icmp_const_32_64_ugte.isle | 14 +- .../icmp/lower_icmp_fits_in_16_signed.isle | 16 +- .../icmp/lower_icmp_fits_in_16_unsigned.isle | 14 +- .../lower_icmp_fits_in_16_unsigned_imm.isle | 12 +- .../examples/icmp/lower_icmp_into_reg.isle | 8 +- .../veri/veri_engine/examples/imul/imul.isle | 6 +- .../veri/veri_engine/examples/ineg/ineg.isle | 6 +- .../veri_engine/examples/isub/base_case.isle | 4 +- .../veri/veri_engine/examples/isub/imm12.isle | 6 +- .../veri_engine/examples/isub/imm12neg.isle | 6 +- .../examples/isub/imm12neg_new.isle | 6 +- .../veri/veri_engine/examples/isub/isub.isle | 8 +- .../veri/veri_engine/examples/isub/msub.isle | 4 +- .../veri/veri_engine/examples/isub/shift.isle | 6 +- .../rotl/32_general_rotl_to_rotr.isle | 8 +- .../rotl/32_with_imm_rotl_to_rotr.isle | 12 +- .../rotl/64_general_rotl_to_rotr.isle | 8 +- .../rotl/64_with_imm_rotl_to_rotr.isle | 12 +- .../rotl/fits_in_16_rotl_to_rotr.isle | 26 +- .../fits_in_16_with_imm_rotl_to_rotr.isle | 34 +- .../veri_engine/examples/rotr/32_rotr.isle | 4 +- .../examples/rotr/32_with_imm_rotr.isle | 6 +- .../veri_engine/examples/rotr/64_rotr.isle | 4 +- .../examples/rotr/64_with_imm_rotr.isle | 6 +- .../examples/rotr/fits_in_16_rotr.isle | 6 +- .../rotr/fits_in_16_with_imm_rotr.isle | 8 +- .../rotr/small_rotr_imm_to_shifts.isle | 10 +- .../examples/rotr/small_rotr_to_shifts.isle | 24 +- .../veri/veri_engine/examples/sdiv/sdiv.isle | 10 +- .../examples/sdiv/sdiv_safe_const.isle | 14 +- .../veri_engine/examples/sextend/sextend.isle | 4 +- .../examples/shifts/do_shift_32.isle | 10 +- .../examples/shifts/do_shift_64.isle | 10 +- .../examples/shifts/do_shift_fits_in_16.isle | 14 +- .../examples/shifts/do_shift_with_imm.isle | 12 +- .../examples/shifts/ishl_to_do_shift_64.isle | 18 +- .../shifts/ishl_to_do_shift_fits_in_32.isle | 10 +- .../examples/shifts/sshr_to_do_shift_64.isle | 12 +- .../shifts/sshr_to_do_shift_fits_in_32.isle | 12 +- .../examples/shifts/ushr_to_do_shift_64.isle | 12 +- .../shifts/ushr_to_do_shift_fits_in_32.isle | 12 +- .../veri/veri_engine/examples/srem/srem.isle | 10 +- .../veri/veri_engine/examples/udiv/udiv.isle | 8 +- .../veri_engine/examples/uextend/uextend.isle | 4 +- .../veri/veri_engine/examples/urem/urem.isle | 10 +- cranelift/isle/veri/veri_engine/src/solver.rs | 24 +- .../veri/veri_engine/src/type_inference.rs | 33 +- .../tests/code/selfcontained/let.isle | 16 +- .../tests/code/selfcontained/prelude.isle | 26 +- .../code/selfcontained/simple_prelude.isle | 18 +- .../isle/veri/veri_ir/src/annotation_ir.rs | 8 +- .../isle/veri/veri_ir/src/isle_annotations.rs | 14 +- 136 files changed, 12159 insertions(+), 6622 deletions(-) diff --git a/cranelift/codegen/src/clif_lower.isle b/cranelift/codegen/src/clif_lower.isle index 2c87edef237c..4cf40d2cd921 100644 --- a/cranelift/codegen/src/clif_lower.isle +++ b/cranelift/codegen/src/clif_lower.isle @@ -695,7 +695,7 @@ ) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (zero_ext (64) (ret))))) +;;@ (assume (= (arg) (zero_ext (64) (ret))))) (decl iconst (Imm64) Inst) (extractor (iconst N) @@ -795,7 +795,7 @@ ;; ) ;; ) ;;@ (spec (sig (args c, x, y) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (c) ;;@ ((0i8:bv8) (if (= (x) (y)) (1i8:bv8) (0i8:bv8))) @@ -823,7 +823,7 @@ ) ;;@ (spec (sig (args x, y) (ret)) -;;@ (assertions (= (+ (x) (y)) (ret)))) +;;@ (assume (= (+ (x) (y)) (ret)))) (decl iadd (Value Value) Inst) (extractor (iadd x y) @@ -831,7 +831,7 @@ ) ;;@ (spec (sig (args x, y) (ret)) -;;@ (assertions (= (- (x) (y)) (ret)))) +;;@ (assume (= (- (x) (y)) (ret)))) (decl isub (Value Value) Inst) (extractor (isub x y) @@ -839,7 +839,7 @@ ) ;;@ (spec (sig (args x) (ret)) -;;@ (assertions (= (-(x)) (ret)))) +;;@ (assume (= (-(x)) (ret)))) (decl ineg (Value) Inst) (extractor (ineg x) @@ -853,7 +853,7 @@ ) ;;@ (spec (sig (args x, y) (ret)) -;;@ (assertions (= (* (x) (y)) (ret)))) +;;@ (assume (= (* (x) (y)) (ret)))) (decl imul (Value Value) Inst) (extractor (imul x y) @@ -861,7 +861,7 @@ ) ;;@ (spec (sig (args x, y) (ret)) -;;@ (assertions (= (extract 127 64 (* (zero_ext (128) (x)) (zero_ext (128) (y)))) (ret)))) +;;@ (assume (= (extract 127 64 (* (zero_ext (128) (x)) (zero_ext (128) (y)))) (ret)))) (decl umulhi (Value Value) Inst) (extractor (umulhi x y) @@ -869,7 +869,7 @@ ) ;;@ (spec (sig (args x, y) (ret)) -;;@ (assertions (= (extract 127 64 (* (sign_ext (128) (x)) (sign_ext (128) (y)))) (ret)))) +;;@ (assume (= (extract 127 64 (* (sign_ext (128) (x)) (sign_ext (128) (y)))) (ret)))) (decl smulhi (Value Value) Inst) (extractor (smulhi x y) @@ -883,7 +883,7 @@ ) ;;@ (spec (sig (args x, y) (ret)) -;;@ (assertions (= (/ (x) (y)) (ret)))) +;;@ (assume (= (/ (x) (y)) (ret)))) (decl udiv (Value Value) Inst) (extractor (udiv x y) @@ -891,7 +891,7 @@ ) ;;@ (spec (sig (args x, y) (ret)) -;;@ (assertions (= (sdiv (x) (y)) (ret)))) +;;@ (assume (= (sdiv (x) (y)) (ret)))) (decl sdiv (Value Value) Inst) (extractor (sdiv x y) @@ -899,7 +899,7 @@ ) ;;@ (spec (sig (args x, y) (ret)) -;;@ (assertions (= (urem (x) (y)) (ret)), +;;@ (assume (= (urem (x) (y)) (ret)), ;;@ (! (= (bv2int (ret)) (0i0:isleType))) ;;@ )) (decl urem (Value Value) Inst) @@ -909,7 +909,7 @@ ) ;;@ (spec (sig (args x, y) (ret)) -;;@ (assertions (= (srem (x) (y)) (ret)), +;;@ (assume (= (srem (x) (y)) (ret)), ;;@ (! (= (bv2int (ret)) (0i0:isleType))) ;;@ )) (decl srem (Value Value) Inst) @@ -919,7 +919,7 @@ ) ;;@ (spec (sig (args x, y) (ret)) -;;@ (assertions (= (+ (sign_ext (64) (x)) (y)) (ret)))) +;;@ (assume (= (+ (sign_ext (64) (x)) (y)) (ret)))) (decl iadd_imm (Value Imm64) Inst) (extractor (iadd_imm x Y) @@ -927,7 +927,7 @@ ) ;;@ (spec (sig (args x, y) (ret)) -;;@ (assertions (= (* (sign_ext (64) (x)) (y)) (ret)))) +;;@ (assume (= (* (sign_ext (64) (x)) (y)) (ret)))) (decl imul_imm (Value Imm64) Inst) (extractor (imul_imm x Y) @@ -965,7 +965,7 @@ ) ;;@ (spec (sig (args x, y, cin) (ret)) -;;@ (assertions (= (+ (+ (x) (y)) (cin)) (ret)))) +;;@ (assume (= (+ (+ (x) (y)) (cin)) (ret)))) (decl iadd_cin (Value Value Value) Inst) (extractor (iadd_cin x y c_in) @@ -991,7 +991,7 @@ ) ;;@ (spec (sig (args x, y, bin) (ret)) -;;@ (assertions (= (- (x) (+ (y) (bin))) (ret)))) +;;@ (assume (= (- (x) (+ (y) (bin))) (ret)))) (decl isub_bin (Value Value Value) Inst) (extractor (isub_bin x y b_in) @@ -1011,7 +1011,7 @@ ) ;;@ (spec (sig (args x, y) (ret)) -;;@ (assertions (= (& (x) (y)) (ret)))) +;;@ (assume (= (& (x) (y)) (ret)))) (decl band (Value Value) Inst) (extractor (band x y) @@ -1019,7 +1019,7 @@ ) ;;@ (spec (sig (args x, y) (ret)) -;;@ (assertions (= (| (x) (y)) (ret)))) +;;@ (assume (= (| (x) (y)) (ret)))) (decl bor (Value Value) Inst) (extractor (bor x y) @@ -1027,7 +1027,7 @@ ) ;;@ (spec (sig (args x, y) (ret)) -;;@ (assertions (= (xor (x) (y)) (ret)))) +;;@ (assume (= (xor (x) (y)) (ret)))) (decl bxor (Value Value) Inst) (extractor (bxor x y) @@ -1077,7 +1077,7 @@ ) ;;@ (spec (sig (args x, y) (ret)) -;;@ (assertions (= (rotl (x) (y)) (ret)))) +;;@ (assume (= (rotl (x) (y)) (ret)))) (decl rotl (Value Value) Inst) (extractor (rotl x y) @@ -1085,7 +1085,7 @@ ) ;;@ (spec (sig (args x, y) (ret)) -;;@ (assertions (= (rotr (x) (y)) (ret)))) +;;@ (assume (= (rotr (x) (y)) (ret)))) (decl rotr (Value Value) Inst) (extractor (rotr x y) @@ -1112,7 +1112,7 @@ ;; } ;;@ (spec (sig (args a, b) (ret)) -;;@ (assertions (= (ret) (shl (a) (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b)))))) +;;@ (assume (= (ret) (shl (a) (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b)))))) (decl ishl (Value Value) Inst) (extractor (ishl x y) @@ -1120,7 +1120,7 @@ ) ;;@ (spec (sig (args a, b) (ret)) -;;@ (assertions (= (ret) (shr (a) (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b)))))) +;;@ (assume (= (ret) (shr (a) (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b)))))) (decl ushr (Value Value) Inst) (extractor (ushr x y) @@ -1128,7 +1128,7 @@ ) ;;@ (spec (sig (args a, b) (ret)) -;;@ (assertions (= (ret) (ashr (a) (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b)))))) +;;@ (assume (= (ret) (ashr (a) (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b)))))) (decl sshr (Value Value) Inst) (extractor (sshr x y) @@ -1160,7 +1160,7 @@ ) ;;@ (spec (sig (args a) (ret)) -;;@ (assertions (= (ret) (clz (a))))) +;;@ (assume (= (ret) (clz (a))))) (decl clz (Value) Inst) (extractor (clz x) @@ -1168,7 +1168,7 @@ ) ;;@ (spec (sig (args a) (ret)) -;;@ (assertions (= (ret) (cls (a))))) +;;@ (assume (= (ret) (cls (a))))) (decl cls (Value) Inst) (extractor (cls x) @@ -1176,7 +1176,7 @@ ) ;;@ (spec (sig (args a) (ret)) -;;@ (assertions (= (ret) (clz (rev (a)))))) +;;@ (assume (= (ret) (clz (rev (a)))))) (decl ctz (Value) Inst) (extractor (ctz x) @@ -1394,7 +1394,7 @@ ) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (ret) (zero_ext (widthof (ret)) (arg))))) +;;@ (assume (= (ret) (zero_ext (widthof (ret)) (arg))))) (decl uextend (Value) Inst) (extractor (uextend x) @@ -1402,7 +1402,7 @@ ) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (ret) (sign_ext (widthof (ret)) (arg))))) +;;@ (assume (= (ret) (sign_ext (widthof (ret)) (arg))))) (decl sextend (Value) Inst) (extractor (sextend x) diff --git a/cranelift/codegen/src/prelude.isle b/cranelift/codegen/src/prelude.isle index 78f32e79e5dc..ae9f36b9c9e7 100644 --- a/cranelift/codegen/src/prelude.isle +++ b/cranelift/codegen/src/prelude.isle @@ -40,7 +40,7 @@ ;; Extract the type of a `Value`. ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (widthof (ret))))) +;;@ (assume (= (arg) (widthof (ret))))) (decl value_type (Type) Value) (extern extractor infallible value_type value_type) @@ -102,7 +102,7 @@ (extern constructor u32_as_u64 u32_as_u64) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl pure i64_as_u64 (i64) u64) (extern constructor i64_as_u64 i64_as_u64) @@ -112,7 +112,7 @@ (extern constructor u64_add u64_add) ;;@ (spec (sig (args a, b) (ret)) -;;@ (assertions (= (ret) (- (a) (b))))) +;;@ (assume (= (ret) (- (a) (b))))) (decl pure u64_sub (u64 u64) u64) (extern constructor u64_sub u64_sub) @@ -155,7 +155,7 @@ ;; x & 1 == 1 ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (ret) (= (1i1:bv1) (extract 0 0 (arg)))))) +;;@ (assume (= (ret) (= (1i1:bv1) (extract 0 0 (arg)))))) (decl pure u64_is_odd (u64) bool) (extern constructor u64_is_odd u64_is_odd) @@ -188,7 +188,7 @@ ;; Get the bit width of a given type. ;;@ (spec (sig (args x) (ret)) -;;@ (assertions (= (ret) (int2bv 8 (x))))) +;;@ (assume (= (ret) (int2bv 8 (x))))) (decl pure ty_bits (Type) u8) (extern constructor ty_bits ty_bits) @@ -240,13 +240,13 @@ ;; An extractor that only matches types that can fit in 16 bits. ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)), (<= (arg) (16i128: isleType)))) +;;@ (assume (= (arg) (ret)), (<= (arg) (16i128: isleType)))) (decl fits_in_16 (Type) Type) (extern extractor fits_in_16 fits_in_16) ;; An extractor that only matches types that can fit in 32 bits. ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)), (<= (arg) (32i128: isleType)))) +;;@ (assume (= (arg) (ret)), (<= (arg) (32i128: isleType)))) (decl fits_in_32 (Type) Type) (extern extractor fits_in_32 fits_in_32) @@ -256,7 +256,7 @@ ;; An extractor that only matches types that can fit in 64 bits. ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)), (<= (arg) (64i128: isleType)))) +;;@ (assume (= (arg) (ret)), (<= (arg) (64i128: isleType)))) (decl fits_in_64 (Type) Type) (extern extractor fits_in_64 fits_in_64) @@ -271,7 +271,7 @@ ;; A pure constructor that only matches scalar integers, and references that can ;; fit in 64 bits. ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)), (<= (arg) (64i128: isleType)))) +;;@ (assume (= (arg) (ret)), (<= (arg) (64i128: isleType)))) (decl pure partial ty_int_ref_scalar_64 (Type) Type) (extern constructor ty_int_ref_scalar_64 ty_int_ref_scalar_64) @@ -359,7 +359,7 @@ ;; Extract a `u64` from an `Imm64`. ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl u64_from_imm64 (u64) Imm64) (extern extractor infallible u64_from_imm64 u64_from_imm64) @@ -425,7 +425,7 @@ ;; Pure constructor that only matches signed integer cond codes. ;;@ (spec (sig (args c) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) (c)), ;;@ (&& (ugte (c) (2i8:bv8)) (ulte (c) (5i8:bv8))) ;;@ )) diff --git a/cranelift/codegen/src/prelude_lower.isle b/cranelift/codegen/src/prelude_lower.isle index 61cc7208cd29..f1421b5f8326 100644 --- a/cranelift/codegen/src/prelude_lower.isle +++ b/cranelift/codegen/src/prelude_lower.isle @@ -28,7 +28,7 @@ ;; Construct a `ValueRegs` of one register. ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl value_reg (Reg) ValueRegs) (extern constructor value_reg value_reg) @@ -46,7 +46,7 @@ ;; Construct a single-element `InstOutput`. ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl output (ValueRegs) InstOutput) (extern constructor output output) @@ -56,13 +56,13 @@ ;; Construct a single-element `InstOutput` from a single register. ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (conv_to (widthof (arg)) (ret))))) +;;@ (assume (= (arg) (conv_to (widthof (arg)) (ret))))) (decl output_reg (Reg) InstOutput) (rule (output_reg reg) (output (value_reg reg))) ;; Construct a single-element `InstOutput` from a value. ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl output_value (Value) InstOutput) (rule (output_value val) (output (put_in_regs val))) @@ -110,7 +110,7 @@ ;; ;; As a side effect, this marks the value as used. ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (conv_to (regwidth) (arg)) (ret)))) +;;@ (assume (= (conv_to (regwidth) (arg)) (ret)))) (decl put_in_reg (Value) Reg) (extern constructor put_in_reg put_in_reg) @@ -118,7 +118,7 @@ ;; ;; As a side effect, this marks the value as used. ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (conv_to (regwidth) (arg)) (ret)))) +;;@ (assume (= (conv_to (regwidth) (arg)) (ret)))) (decl put_in_regs (Value) ValueRegs) (extern constructor put_in_regs put_in_regs) @@ -129,7 +129,7 @@ ;; Get the `n`th register inside a `ValueRegs`. ;;@ (spec (sig (args arg, i) (ret)) -;;@ (assertions (= (arg) (ret)), +;;@ (assume (= (arg) (ret)), ;;@ (= (widthof (i)) (1i1:isleType)) ;;@ ;;@)) @@ -216,13 +216,13 @@ ;; Extract the first result value of the given instruction. ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl first_result (Value) Inst) (extern extractor first_result first_result) ;; Extract the `InstructionData` for an `Inst`. ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl inst_data (InstructionData) Inst) (extern extractor infallible inst_data inst_data) @@ -234,7 +234,7 @@ ;; Extract the type of the instruction's first result and pass along the ;; instruction as well. ;;@ (spec (sig (args ty, arg) (ret)) -;;@ (assertions (= (ty) (widthof (arg))), (= (arg) (ret)))) +;;@ (assume (= (ty) (widthof (arg))), (= (arg) (ret)))) (decl has_type (Type Inst) Inst) (extractor (has_type ty inst) (and (result_type ty) @@ -242,13 +242,13 @@ ;; Match the instruction that defines the given value, if any. ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl def_inst (Inst) Value) (extern extractor def_inst def_inst) ;; Extract a constant `u64` from a value defined by an `iconst`. ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (zero_ext (64) (ret))))) +;;@ (assume (= (arg) (zero_ext (64) (ret))))) (decl u64_from_iconst (u64) Value) (extractor (u64_from_iconst x) (def_inst (iconst (u64_from_imm64 x)))) diff --git a/cranelift/isle/veri/example_annotations.isle b/cranelift/isle/veri/example_annotations.isle index 3cacbbf07313..e4cfea2e08bd 100644 --- a/cranelift/isle/veri/example_annotations.isle +++ b/cranelift/isle/veri/example_annotations.isle @@ -1,13 +1,13 @@ ;; (spec (sig (args (x: bvX) (ret: bvX))) -;; (assumptions (= x ret))) +;; (assume (= x ret))) (decl put_in_reg (Value) Reg) ;; (spec (sig (args x) (ret r))) -;; (assumptions (= r (zext 52 x)))) +;; (assume (= r (zext 52 x)))) (decl imm12_from_negated_u64 (Imm12) u64) ;; (spec (sig (args ty) (ret r))) -;; (assumptions (= r ty) (<= ty 64))) +;; (assume (= r ty) (<= ty 64))) (decl fits_in_64 (Type) Type) (type Opcode extern @@ -15,7 +15,7 @@ ;; ... ;; (spec (sig (args) (ret r))) - ;; (assumptions (= r (func (x : ValueArray2) (bvadd x[0] x[1])))))) + ;; (assume (= r (func (x : ValueArray2) (bvadd x[0] x[1])))))) Iadd ;; Open questions: diff --git a/cranelift/isle/veri/veri_annotation/examples/simple.isle b/cranelift/isle/veri/veri_annotation/examples/simple.isle index e7d23d3e9034..65b24c9c176d 100644 --- a/cranelift/isle/veri/veri_annotation/examples/simple.isle +++ b/cranelift/isle/veri/veri_annotation/examples/simple.isle @@ -2,7 +2,7 @@ ;; {((a : Type) b : Type) | a = b, a.ty.width <= 64} ;; (decl fits_in_64 (Type) Type) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)), (<= (arg) (64i128: isleType)))) +;;@ (assume (= (arg) (ret)), (<= (arg) (64i128: isleType)))) (decl fits_in_64 (Type) Type) (extern extractor fits_in_64 fits_in_64) @@ -11,12 +11,12 @@ ;; (decl (a b) c bvX) (assert (= c (+ a b))) ;;@ (spec (sig (args a, b) (r)) -;;@ (assertions (= (+ (a) (b)) (r)))) +;;@ (assume (= (+ (a) (b)) (r)))) (decl iadd (Value Value) Inst) (extern extractor iadd iadd) ;; CONSTRUCTORS ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl value_reg (Reg) ValueRegs) (extern constructor value_reg value_reg) diff --git a/cranelift/isle/veri/veri_annotation/examples/simple2.isle b/cranelift/isle/veri/veri_annotation/examples/simple2.isle index d0ec6b794c44..84096927b279 100644 --- a/cranelift/isle/veri/veri_annotation/examples/simple2.isle +++ b/cranelift/isle/veri/veri_annotation/examples/simple2.isle @@ -16,5 +16,5 @@ ;; EXTRACTORS ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) ValueRegs) diff --git a/cranelift/isle/veri/veri_annotation/src/parser.lalrpop b/cranelift/isle/veri/veri_annotation/src/parser.lalrpop index 6dd3ac87fa82..1be4edae87ed 100644 --- a/cranelift/isle/veri/veri_annotation/src/parser.lalrpop +++ b/cranelift/isle/veri/veri_annotation/src/parser.lalrpop @@ -149,7 +149,13 @@ pub Expr: Box = { "(" "widthof" ")" => Box::new(Expr::WidthOf(v, 0)), }; +pub AssertBlock: Vec> = { + "(" "assert" ")" => a, +} + pub TermAnnotation: TermAnnotation = { - "(" "spec" "(" "assertions" ")" ")" => - TermAnnotation {sig: s, assertions: a}, + "(" "spec" "(" "assume" ")" "(" "assert" ")" ")" => + TermAnnotation {sig: s, assumptions: a, assertions: b }, + "(" "spec" "(" "assume" ")" ")" => + TermAnnotation {sig: s, assumptions: a, assertions: vec![] }, }; diff --git a/cranelift/isle/veri/veri_annotation/src/parser.rs b/cranelift/isle/veri/veri_annotation/src/parser.rs index 2dc780f78db0..2fc14ef26352 100644 --- a/cranelift/isle/veri/veri_annotation/src/parser.rs +++ b/cranelift/isle/veri/veri_annotation/src/parser.rs @@ -1,5 +1,5 @@ // auto-generated: "lalrpop 0.19.8" -// sha3: 7aa98e985ac468453eed6d35833e39fba4ca4e750df0be6ed5c5a499393b3a47 +// sha3: f2a45af5ff4864e7fb8c1d301a4543bbb6fd8855ef05be0f29fd3db4dfbbf784 use std::str::FromStr; use veri_ir as ast; use ast::annotation_ir::*; @@ -10,6 +10,4633 @@ use self::__lalrpop_util::state_machine as __state_machine; extern crate core; extern crate alloc; +#[cfg_attr(rustfmt, rustfmt_skip)] +mod __parse__AssertBlock { + #![allow(non_snake_case, non_camel_case_types, unused_mut, unused_variables, unused_imports, unused_parens, clippy::all)] + + use std::str::FromStr; + use veri_ir as ast; + use ast::annotation_ir::*; + #[allow(unused_extern_crates)] + extern crate lalrpop_util as __lalrpop_util; + #[allow(unused_imports)] + use self::__lalrpop_util::state_machine as __state_machine; + extern crate core; + extern crate alloc; + use self::__lalrpop_util::lexer::Token; + #[allow(dead_code)] + pub(crate) enum __Symbol<'input> + { + Variant0(&'input str), + Variant1(BoundVar), + Variant2(alloc::vec::Vec), + Variant3(Box), + Variant4(alloc::vec::Vec>), + Variant5(Type), + Variant6(alloc::vec::Vec), + Variant7(Vec), + Variant8(Vec>), + Variant9(core::option::Option), + Variant10(Vec), + Variant11(Const), + Variant12(core::option::Option>), + Variant13(Function), + Variant14(FunctionApplication), + Variant15(FunctionType), + Variant16(String), + Variant17(i128), + Variant18((Expr, Expr)), + Variant19(alloc::vec::Vec<(Expr, Expr)>), + Variant20(TermAnnotation), + Variant21(TermSignature), + Variant22(core::option::Option), + Variant23(usize), + Variant24(Box), + } + const __ACTION: &[i16] = &[ + // State 0 + 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1 + 0, 0, 0, 4, 0, -28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 2 + 0, 0, 0, 4, 0, -30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 3 + 6, 7, 8, 0, 0, 0, 9, 10, 0, 11, 12, 0, 13, 14, 15, 16, 17, 18, 19, 20, 0, 0, 0, 0, 21, 22, 23, 24, 25, 115, 0, 26, 27, 0, 0, 28, 29, 30, 31, 32, 33, 34, 35, 0, 36, 37, 38, 0, 39, 40, 41, 116, 42, 43, 44, 45, 46, 47, 48, 49, 0, 50, 51, 0, 52, 117, 0, 118, 119, 120, + // State 4 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, + // State 5 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 6 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 7 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 8 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 9 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 10 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 11 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 12 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 13 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 14 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 15 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 16 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 17 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 18 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 19 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 20 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 21 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 22 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 23 + 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 24 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, + // State 25 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 26 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, + // State 27 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 28 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 29 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 30 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 31 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 32 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 33 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 34 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 35 + 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 36 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 37 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 38 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 39 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 40 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 41 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 42 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 43 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 44 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 45 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 46 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 47 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 48 + 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 49 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 50 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 51 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 52 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 53 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 54 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 55 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 56 + 0, 0, 0, 4, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 57 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 58 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 59 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 60 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 61 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 62 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 63 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 64 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 65 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 66 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 67 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 68 + 6, 7, 8, 0, 0, 0, 9, 10, 0, 11, 12, 0, 13, 14, 15, 16, 17, 18, 19, 20, 0, 0, 0, 0, 21, 22, 23, 24, 25, 115, 0, 26, 27, 0, 157, 28, 29, 30, 31, 32, 33, 34, 35, 0, 36, 37, 38, 0, 39, 40, 41, 116, 42, 43, 44, 45, 46, 47, 48, 49, 0, 50, 51, 0, 52, 117, 125, 118, 119, 120, + // State 69 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, + // State 70 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 71 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 72 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 73 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 74 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 75 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 76 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 77 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 78 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 79 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 80 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 81 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 82 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 83 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 84 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 85 + 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 86 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 87 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 88 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 89 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 90 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 91 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 92 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 93 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 94 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 95 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 96 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 97 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 98 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 99 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 100 + 0, 0, 0, 102, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 101 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 102 + 0, 0, 0, 0, 0, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, + // State 103 + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 104 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 105 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 106 + 0, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 107 + 0, 0, 0, 0, 0, -27, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 108 + 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 109 + 0, 0, 0, 0, 0, -29, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 110 + 0, 0, 0, -9, 0, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 111 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 112 + 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 113 + 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 114 + 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 115 + 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 116 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0, 0, 0, + // State 117 + 0, 0, 0, 0, 0, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 118 + 0, 0, 0, 0, 0, -98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 119 + 0, 0, 0, 0, 0, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 120 + 0, 0, 0, -10, 0, -10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 121 + 0, 0, 0, -37, 0, -37, 0, 0, -37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 122 + 0, 0, 0, -36, 0, -36, 0, 0, -36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 123 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 124 + 0, 0, 0, -114, 0, -114, 0, 0, 0, 0, 0, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, 0, 0, 0, + // State 125 + 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 126 + 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 127 + 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 128 + 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 129 + 0, 0, 0, -39, 0, -39, 0, 0, -39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 130 + 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 131 + 0, 0, 0, -38, 0, -38, 0, 0, -38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 132 + 0, 0, 0, 0, 0, 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 133 + 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 134 + 0, 0, 0, -40, 0, -40, 0, 0, -40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 135 + 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 136 + 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 137 + 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 138 + 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 139 + 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 140 + 0, 0, 0, -55, 0, -55, 0, 0, -55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 141 + 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 142 + 0, 0, 0, 0, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 143 + 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 144 + 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 145 + 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 146 + 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 147 + 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 148 + 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 149 + 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 150 + 0, 0, 0, -89, 0, -89, 0, 0, -89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 151 + 0, 0, 0, -59, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 152 + 0, 0, 0, -57, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 153 + 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 154 + 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 155 + 0, 0, 0, 0, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 156 + 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 157 + 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 158 + 0, 0, 0, -61, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 159 + 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 160 + 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 161 + 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 162 + 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 163 + 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 164 + 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 165 + 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 166 + 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 167 + 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 168 + 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 169 + 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 170 + 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 171 + 0, 0, 0, -102, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 172 + 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 173 + 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 174 + 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 175 + 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 176 + 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 177 + 0, 0, 0, -90, 0, -90, 0, 0, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 178 + 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 179 + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 180 + 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 181 + 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 182 + 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 183 + 0, 0, 0, -56, 0, -56, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 184 + 0, 0, 0, 0, 0, -35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 185 + 0, 0, 0, 0, 0, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 186 + 0, 0, 0, 0, 0, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 187 + 0, 0, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 188 + 0, 0, 0, -41, 0, -41, 0, 0, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 189 + 0, 0, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 190 + 0, 0, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 191 + 0, 0, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 192 + 0, 0, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 193 + 0, 0, 0, -46, 0, -46, 0, 0, -46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 194 + 0, 0, 0, -45, 0, -45, 0, 0, -45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 195 + 0, 0, 0, -44, 0, -44, 0, 0, -44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 196 + 0, 0, 0, -43, 0, -43, 0, 0, -43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 197 + 0, 0, 0, -60, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 198 + 0, 0, 0, -58, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 199 + 0, 0, 0, -62, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 200 + 0, 0, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 201 + 0, 0, 0, -85, 0, -85, 0, 0, -85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 202 + 0, 0, 0, -84, 0, -84, 0, 0, -84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 203 + 0, 0, 0, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 204 + 0, 0, 0, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 205 + 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 206 + 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 207 + 0, 0, 0, -88, 0, -88, 0, 0, -88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 208 + 0, 0, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 209 + 0, 0, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 210 + 0, 0, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 211 + 0, 0, 0, -47, 0, -47, 0, 0, -47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 212 + 0, 0, 0, -48, 0, -48, 0, 0, -48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 213 + 0, 0, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 214 + 0, 0, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 215 + 0, 0, 0, -82, 0, -82, 0, 0, -82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 216 + 0, 0, 0, -81, 0, -81, 0, 0, -81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 217 + 0, 0, 0, -49, 0, -49, 0, 0, -49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 218 + 0, 0, 0, -50, 0, -50, 0, 0, -50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 219 + 0, 0, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 220 + 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 221 + 0, 0, 0, -103, 0, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 222 + 0, 0, 0, -87, 0, -87, 0, 0, -87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 223 + 0, 0, 0, -51, 0, -51, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 224 + 0, 0, 0, -52, 0, -52, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 225 + 0, 0, 0, -53, 0, -53, 0, 0, -53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 226 + 0, 0, 0, -54, 0, -54, 0, 0, -54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 227 + 0, 0, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 228 + 0, 0, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 229 + 0, 0, 0, -80, 0, -80, 0, 0, -80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 230 + 0, 0, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 231 + 0, 0, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 232 + 0, 0, 0, -42, 0, -42, 0, 0, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 233 + 0, 0, 0, 0, 0, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 234 + 0, 0, 0, -83, 0, -83, 0, 0, -83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 235 + 0, 0, 0, -86, 0, -86, 0, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 236 + 0, 0, 0, -63, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 237 + 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 238 + 0, 0, 0, -101, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + ]; + fn __action(state: i16, integer: usize) -> i16 { + __ACTION[(state as usize) * 70 + integer] + } + const __EOF_ACTION: &[i16] = &[ + // State 0 + 0, + // State 1 + 0, + // State 2 + 0, + // State 3 + 0, + // State 4 + 0, + // State 5 + 0, + // State 6 + 0, + // State 7 + 0, + // State 8 + 0, + // State 9 + 0, + // State 10 + 0, + // State 11 + 0, + // State 12 + 0, + // State 13 + 0, + // State 14 + 0, + // State 15 + 0, + // State 16 + 0, + // State 17 + 0, + // State 18 + 0, + // State 19 + 0, + // State 20 + 0, + // State 21 + 0, + // State 22 + 0, + // State 23 + 0, + // State 24 + 0, + // State 25 + 0, + // State 26 + 0, + // State 27 + 0, + // State 28 + 0, + // State 29 + 0, + // State 30 + 0, + // State 31 + 0, + // State 32 + 0, + // State 33 + 0, + // State 34 + 0, + // State 35 + 0, + // State 36 + 0, + // State 37 + 0, + // State 38 + 0, + // State 39 + 0, + // State 40 + 0, + // State 41 + 0, + // State 42 + 0, + // State 43 + 0, + // State 44 + 0, + // State 45 + 0, + // State 46 + 0, + // State 47 + 0, + // State 48 + 0, + // State 49 + 0, + // State 50 + 0, + // State 51 + 0, + // State 52 + 0, + // State 53 + 0, + // State 54 + 0, + // State 55 + 0, + // State 56 + 0, + // State 57 + 0, + // State 58 + 0, + // State 59 + 0, + // State 60 + 0, + // State 61 + 0, + // State 62 + 0, + // State 63 + 0, + // State 64 + 0, + // State 65 + 0, + // State 66 + 0, + // State 67 + 0, + // State 68 + 0, + // State 69 + 0, + // State 70 + 0, + // State 71 + 0, + // State 72 + 0, + // State 73 + 0, + // State 74 + 0, + // State 75 + 0, + // State 76 + 0, + // State 77 + 0, + // State 78 + 0, + // State 79 + 0, + // State 80 + 0, + // State 81 + 0, + // State 82 + 0, + // State 83 + 0, + // State 84 + 0, + // State 85 + 0, + // State 86 + 0, + // State 87 + 0, + // State 88 + 0, + // State 89 + 0, + // State 90 + 0, + // State 91 + 0, + // State 92 + 0, + // State 93 + 0, + // State 94 + 0, + // State 95 + 0, + // State 96 + 0, + // State 97 + 0, + // State 98 + 0, + // State 99 + 0, + // State 100 + 0, + // State 101 + 0, + // State 102 + 0, + // State 103 + 0, + // State 104 + -117, + // State 105 + 0, + // State 106 + 0, + // State 107 + 0, + // State 108 + 0, + // State 109 + 0, + // State 110 + 0, + // State 111 + -18, + // State 112 + 0, + // State 113 + 0, + // State 114 + 0, + // State 115 + 0, + // State 116 + 0, + // State 117 + 0, + // State 118 + 0, + // State 119 + 0, + // State 120 + 0, + // State 121 + 0, + // State 122 + 0, + // State 123 + 0, + // State 124 + 0, + // State 125 + 0, + // State 126 + 0, + // State 127 + 0, + // State 128 + 0, + // State 129 + 0, + // State 130 + 0, + // State 131 + 0, + // State 132 + 0, + // State 133 + 0, + // State 134 + 0, + // State 135 + 0, + // State 136 + 0, + // State 137 + 0, + // State 138 + 0, + // State 139 + 0, + // State 140 + 0, + // State 141 + 0, + // State 142 + 0, + // State 143 + 0, + // State 144 + 0, + // State 145 + 0, + // State 146 + 0, + // State 147 + 0, + // State 148 + 0, + // State 149 + 0, + // State 150 + 0, + // State 151 + 0, + // State 152 + 0, + // State 153 + 0, + // State 154 + 0, + // State 155 + 0, + // State 156 + 0, + // State 157 + 0, + // State 158 + 0, + // State 159 + 0, + // State 160 + 0, + // State 161 + 0, + // State 162 + 0, + // State 163 + 0, + // State 164 + 0, + // State 165 + 0, + // State 166 + 0, + // State 167 + 0, + // State 168 + 0, + // State 169 + 0, + // State 170 + 0, + // State 171 + 0, + // State 172 + 0, + // State 173 + 0, + // State 174 + 0, + // State 175 + 0, + // State 176 + 0, + // State 177 + 0, + // State 178 + 0, + // State 179 + 0, + // State 180 + 0, + // State 181 + 0, + // State 182 + 0, + // State 183 + 0, + // State 184 + 0, + // State 185 + 0, + // State 186 + 0, + // State 187 + 0, + // State 188 + 0, + // State 189 + 0, + // State 190 + 0, + // State 191 + 0, + // State 192 + 0, + // State 193 + 0, + // State 194 + 0, + // State 195 + 0, + // State 196 + 0, + // State 197 + 0, + // State 198 + 0, + // State 199 + 0, + // State 200 + 0, + // State 201 + 0, + // State 202 + 0, + // State 203 + 0, + // State 204 + 0, + // State 205 + 0, + // State 206 + 0, + // State 207 + 0, + // State 208 + 0, + // State 209 + 0, + // State 210 + 0, + // State 211 + 0, + // State 212 + 0, + // State 213 + 0, + // State 214 + 0, + // State 215 + 0, + // State 216 + 0, + // State 217 + 0, + // State 218 + 0, + // State 219 + 0, + // State 220 + 0, + // State 221 + 0, + // State 222 + 0, + // State 223 + 0, + // State 224 + 0, + // State 225 + 0, + // State 226 + 0, + // State 227 + 0, + // State 228 + 0, + // State 229 + 0, + // State 230 + 0, + // State 231 + 0, + // State 232 + 0, + // State 233 + 0, + // State 234 + 0, + // State 235 + 0, + // State 236 + 0, + // State 237 + 0, + // State 238 + 0, + ]; + fn __goto(state: i16, nt: usize) -> i16 { + match nt { + 5 => 2, + 11 => 104, + 15 => 106, + 17 => 112, + 18 => match state { + 7 => 53, + 8 => 54, + 9 => 55, + 10 => 56, + 11 => 57, + 12 => 58, + 13 => 59, + 14 => 60, + 15 => 61, + 16 => 62, + 17 => 63, + 18 => 64, + 19 => 65, + 23 => 66, + 25 => 70, + 28 => 72, + 29 => 73, + 30 => 74, + 31 => 75, + 32 => 76, + 33 => 77, + 34 => 78, + 35 => 79, + 36 => 81, + 37 => 82, + 38 => 83, + 39 => 84, + 40 => 85, + 41 => 86, + 42 => 87, + 43 => 88, + 44 => 89, + 45 => 90, + 47 => 91, + 48 => 92, + 49 => 94, + 50 => 95, + 70 => 98, + 84 => 99, + 101 => 103, + 1 => 107, + 2 => 109, + 5 => 125, + 20 => 126, + 21 => 127, + 22 => 128, + 27 => 130, + 46 => 132, + 51 => 133, + 52 => 135, + 53 => 136, + 54 => 137, + 55 => 138, + 56 => 139, + 57 => 141, + 58 => 142, + 59 => 143, + 60 => 144, + 61 => 145, + 62 => 146, + 63 => 147, + 64 => 148, + 65 => 149, + 66 => 153, + 67 => 154, + 71 => 157, + 72 => 159, + 73 => 160, + 74 => 161, + 75 => 162, + 76 => 163, + 77 => 164, + 78 => 165, + 79 => 166, + 80 => 167, + 81 => 168, + 82 => 169, + 83 => 170, + 86 => 172, + 87 => 173, + 88 => 174, + 89 => 175, + 90 => 176, + 91 => 178, + 92 => 179, + 93 => 180, + 94 => 181, + 95 => 182, + 97 => 205, + 98 => 206, + 99 => 220, + 103 => 237, + _ => 52, + }, + 20 => 108, + 24 => 113, + 25 => 4, + 26 => match state { + 100 => 221, + _ => 171, + }, + 27 => 100, + 30 => 184, + 33 => match state { + 26 => 71, + 69 => 97, + 4 => 123, + 68 => 155, + 102 => 233, + _ => 69, + }, + 34 => match state { + 35 => 80, + 48 => 93, + _ => 67, + }, + _ => 0, + } + } + fn __expected_tokens(__state: i16) -> alloc::vec::Vec { + const __TERMINAL: &[&str] = &[ + r###""!""###, + r###""&""###, + r###""&&""###, + r###""(""###, + r###""(args""###, + r###"")""###, + r###""*""###, + r###""+""###, + r###"",""###, + r###""-""###, + r###""/""###, + r###"":""###, + r###""<""###, + r###""<=""###, + r###""=""###, + r###""=>""###, + r###""a64cls""###, + r###""a64clz""###, + r###""a64rev""###, + r###""ashr""###, + r###""assert""###, + r###""assume""###, + r###""bool""###, + r###""bv""###, + r###""bv2int""###, + r###""cls""###, + r###""clz""###, + r###""conv_to""###, + r###""extract""###, + r###""false""###, + r###""func""###, + r###""if""###, + r###""int2bv""###, + r###""isleType""###, + r###""regwidth""###, + r###""rev""###, + r###""rotl""###, + r###""rotr""###, + r###""sdiv""###, + r###""sgt""###, + r###""sgte""###, + r###""shl""###, + r###""shr""###, + r###""sig""###, + r###""sign_ext""###, + r###""slt""###, + r###""slte""###, + r###""spec""###, + r###""srem""###, + r###""subs""###, + r###""switch""###, + r###""true""###, + r###""ugt""###, + r###""ugte""###, + r###""ult""###, + r###""ulte""###, + r###""urem""###, + r###""widthof""###, + r###""xor""###, + r###""zero_ext""###, + r###""{""###, + r###""|""###, + r###""||""###, + r###""}""###, + r###""~""###, + r###"r#"-?[0-9]+i"#"###, + r###"r#"[0-9]+"#"###, + r###"r#"[A-Za-z]"#"###, + r###"r#"[A-Zac-z][\\.\\w]+"#"###, + r###"r#"b[\\w&&[^v]][\\.\\w]*"#"###, + ]; + __TERMINAL.iter().enumerate().filter_map(|(index, terminal)| { + let next_state = __action(__state, index); + if next_state == 0 { + None + } else { + Some(alloc::string::ToString::to_string(terminal)) + } + }).collect() + } + pub(crate) struct __StateMachine<'input> + where + { + input: &'input str, + __phantom: core::marker::PhantomData<(&'input ())>, + } + impl<'input> __state_machine::ParserDefinition for __StateMachine<'input> + where + { + type Location = usize; + type Error = &'static str; + type Token = Token<'input>; + type TokenIndex = usize; + type Symbol = __Symbol<'input>; + type Success = Vec>; + type StateIndex = i16; + type Action = i16; + type ReduceIndex = i16; + type NonterminalIndex = usize; + + #[inline] + fn start_location(&self) -> Self::Location { + Default::default() + } + + #[inline] + fn start_state(&self) -> Self::StateIndex { + 0 + } + + #[inline] + fn token_to_index(&self, token: &Self::Token) -> Option { + __token_to_integer(token, core::marker::PhantomData::<(&())>) + } + + #[inline] + fn action(&self, state: i16, integer: usize) -> i16 { + __action(state, integer) + } + + #[inline] + fn error_action(&self, state: i16) -> i16 { + __action(state, 70 - 1) + } + + #[inline] + fn eof_action(&self, state: i16) -> i16 { + __EOF_ACTION[state as usize] + } + + #[inline] + fn goto(&self, state: i16, nt: usize) -> i16 { + __goto(state, nt) + } + + fn token_to_symbol(&self, token_index: usize, token: Self::Token) -> Self::Symbol { + __token_to_symbol(token_index, token, core::marker::PhantomData::<(&())>) + } + + fn expected_tokens(&self, state: i16) -> alloc::vec::Vec { + __expected_tokens(state) + } + + #[inline] + fn uses_error_recovery(&self) -> bool { + false + } + + #[inline] + fn error_recovery_symbol( + &self, + recovery: __state_machine::ErrorRecovery, + ) -> Self::Symbol { + panic!("error recovery not enabled for this grammar") + } + + fn reduce( + &mut self, + action: i16, + start_location: Option<&Self::Location>, + states: &mut alloc::vec::Vec, + symbols: &mut alloc::vec::Vec<__state_machine::SymbolTriple>, + ) -> Option<__state_machine::ParseResult> { + __reduce( + self.input, + action, + start_location, + states, + symbols, + core::marker::PhantomData::<(&())>, + ) + } + + fn simulate_reduce(&self, action: i16) -> __state_machine::SimulatedReduce { + panic!("error recovery not enabled for this grammar") + } + } + fn __token_to_integer< + 'input, + >( + __token: &Token<'input>, + _: core::marker::PhantomData<(&'input ())>, + ) -> Option + { + match *__token { + Token(5, _) if true => Some(0), + Token(6, _) if true => Some(1), + Token(7, _) if true => Some(2), + Token(8, _) if true => Some(3), + Token(9, _) if true => Some(4), + Token(10, _) if true => Some(5), + Token(11, _) if true => Some(6), + Token(12, _) if true => Some(7), + Token(13, _) if true => Some(8), + Token(14, _) if true => Some(9), + Token(15, _) if true => Some(10), + Token(16, _) if true => Some(11), + Token(17, _) if true => Some(12), + Token(18, _) if true => Some(13), + Token(19, _) if true => Some(14), + Token(20, _) if true => Some(15), + Token(21, _) if true => Some(16), + Token(22, _) if true => Some(17), + Token(23, _) if true => Some(18), + Token(24, _) if true => Some(19), + Token(25, _) if true => Some(20), + Token(26, _) if true => Some(21), + Token(27, _) if true => Some(22), + Token(28, _) if true => Some(23), + Token(29, _) if true => Some(24), + Token(30, _) if true => Some(25), + Token(31, _) if true => Some(26), + Token(32, _) if true => Some(27), + Token(33, _) if true => Some(28), + Token(34, _) if true => Some(29), + Token(35, _) if true => Some(30), + Token(36, _) if true => Some(31), + Token(37, _) if true => Some(32), + Token(38, _) if true => Some(33), + Token(39, _) if true => Some(34), + Token(40, _) if true => Some(35), + Token(41, _) if true => Some(36), + Token(42, _) if true => Some(37), + Token(43, _) if true => Some(38), + Token(44, _) if true => Some(39), + Token(45, _) if true => Some(40), + Token(46, _) if true => Some(41), + Token(47, _) if true => Some(42), + Token(48, _) if true => Some(43), + Token(49, _) if true => Some(44), + Token(50, _) if true => Some(45), + Token(51, _) if true => Some(46), + Token(52, _) if true => Some(47), + Token(53, _) if true => Some(48), + Token(54, _) if true => Some(49), + Token(55, _) if true => Some(50), + Token(56, _) if true => Some(51), + Token(57, _) if true => Some(52), + Token(58, _) if true => Some(53), + Token(59, _) if true => Some(54), + Token(60, _) if true => Some(55), + Token(61, _) if true => Some(56), + Token(62, _) if true => Some(57), + Token(63, _) if true => Some(58), + Token(64, _) if true => Some(59), + Token(65, _) if true => Some(60), + Token(66, _) if true => Some(61), + Token(67, _) if true => Some(62), + Token(68, _) if true => Some(63), + Token(69, _) if true => Some(64), + Token(0, _) if true => Some(65), + Token(1, _) if true => Some(66), + Token(2, _) if true => Some(67), + Token(3, _) if true => Some(68), + Token(4, _) if true => Some(69), + _ => None, + } + } + fn __token_to_symbol< + 'input, + >( + __token_index: usize, + __token: Token<'input>, + _: core::marker::PhantomData<(&'input ())>, + ) -> __Symbol<'input> + { + match __token_index { + 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 => match __token { + Token(5, __tok0) | Token(6, __tok0) | Token(7, __tok0) | Token(8, __tok0) | Token(9, __tok0) | Token(10, __tok0) | Token(11, __tok0) | Token(12, __tok0) | Token(13, __tok0) | Token(14, __tok0) | Token(15, __tok0) | Token(16, __tok0) | Token(17, __tok0) | Token(18, __tok0) | Token(19, __tok0) | Token(20, __tok0) | Token(21, __tok0) | Token(22, __tok0) | Token(23, __tok0) | Token(24, __tok0) | Token(25, __tok0) | Token(26, __tok0) | Token(27, __tok0) | Token(28, __tok0) | Token(29, __tok0) | Token(30, __tok0) | Token(31, __tok0) | Token(32, __tok0) | Token(33, __tok0) | Token(34, __tok0) | Token(35, __tok0) | Token(36, __tok0) | Token(37, __tok0) | Token(38, __tok0) | Token(39, __tok0) | Token(40, __tok0) | Token(41, __tok0) | Token(42, __tok0) | Token(43, __tok0) | Token(44, __tok0) | Token(45, __tok0) | Token(46, __tok0) | Token(47, __tok0) | Token(48, __tok0) | Token(49, __tok0) | Token(50, __tok0) | Token(51, __tok0) | Token(52, __tok0) | Token(53, __tok0) | Token(54, __tok0) | Token(55, __tok0) | Token(56, __tok0) | Token(57, __tok0) | Token(58, __tok0) | Token(59, __tok0) | Token(60, __tok0) | Token(61, __tok0) | Token(62, __tok0) | Token(63, __tok0) | Token(64, __tok0) | Token(65, __tok0) | Token(66, __tok0) | Token(67, __tok0) | Token(68, __tok0) | Token(69, __tok0) | Token(0, __tok0) | Token(1, __tok0) | Token(2, __tok0) | Token(3, __tok0) | Token(4, __tok0) if true => __Symbol::Variant0(__tok0), + _ => unreachable!(), + }, + _ => unreachable!(), + } + } + pub struct AssertBlockParser { + builder: __lalrpop_util::lexer::MatcherBuilder, + _priv: (), + } + + impl AssertBlockParser { + pub fn new() -> AssertBlockParser { + let __builder = super::__intern_token::new_builder(); + AssertBlockParser { + builder: __builder, + _priv: (), + } + } + + #[allow(dead_code)] + pub fn parse< + 'input, + >( + &self, + input: &'input str, + ) -> Result>, __lalrpop_util::ParseError, &'static str>> + { + let mut __tokens = self.builder.matcher(input); + __state_machine::Parser::drive( + __StateMachine { + input, + __phantom: core::marker::PhantomData::<(&())>, + }, + __tokens, + ) + } + } + pub(crate) fn __reduce< + 'input, + >( + input: &'input str, + __action: i16, + __lookahead_start: Option<&usize>, + __states: &mut alloc::vec::Vec, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> Option>,__lalrpop_util::ParseError, &'static str>>> + { + let (__pop_states, __nonterminal) = match __action { + 0 => { + __reduce0(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 1 => { + __reduce1(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 2 => { + __reduce2(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 3 => { + __reduce3(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 4 => { + __reduce4(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 5 => { + __reduce5(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 6 => { + __reduce6(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 7 => { + __reduce7(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 8 => { + __reduce8(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 9 => { + __reduce9(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 10 => { + __reduce10(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 11 => { + __reduce11(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 12 => { + __reduce12(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 13 => { + __reduce13(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 14 => { + __reduce14(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 15 => { + __reduce15(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 16 => { + __reduce16(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 17 => { + __reduce17(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 18 => { + __reduce18(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 19 => { + __reduce19(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 20 => { + __reduce20(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 21 => { + __reduce21(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 22 => { + __reduce22(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 23 => { + __reduce23(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 24 => { + __reduce24(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 25 => { + __reduce25(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 26 => { + __reduce26(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 27 => { + __reduce27(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 28 => { + __reduce28(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 29 => { + __reduce29(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 30 => { + __reduce30(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 31 => { + __reduce31(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 32 => { + __reduce32(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 33 => { + __reduce33(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 34 => { + __reduce34(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 35 => { + __reduce35(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 36 => { + __reduce36(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 37 => { + __reduce37(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 38 => { + __reduce38(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 39 => { + __reduce39(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 40 => { + __reduce40(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 41 => { + __reduce41(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 42 => { + __reduce42(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 43 => { + __reduce43(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 44 => { + __reduce44(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 45 => { + __reduce45(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 46 => { + __reduce46(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 47 => { + __reduce47(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 48 => { + __reduce48(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 49 => { + __reduce49(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 50 => { + __reduce50(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 51 => { + __reduce51(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 52 => { + __reduce52(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 53 => { + __reduce53(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 54 => { + __reduce54(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 55 => { + __reduce55(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 56 => { + __reduce56(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 57 => { + __reduce57(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 58 => { + __reduce58(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 59 => { + __reduce59(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 60 => { + __reduce60(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 61 => { + __reduce61(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 62 => { + __reduce62(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 63 => { + __reduce63(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 64 => { + __reduce64(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 65 => { + __reduce65(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 66 => { + __reduce66(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 67 => { + __reduce67(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 68 => { + __reduce68(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 69 => { + __reduce69(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 70 => { + __reduce70(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 71 => { + __reduce71(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 72 => { + __reduce72(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 73 => { + __reduce73(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 74 => { + __reduce74(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 75 => { + __reduce75(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 76 => { + __reduce76(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 77 => { + __reduce77(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 78 => { + __reduce78(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 79 => { + __reduce79(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 80 => { + __reduce80(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 81 => { + __reduce81(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 82 => { + __reduce82(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 83 => { + __reduce83(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 84 => { + __reduce84(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 85 => { + __reduce85(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 86 => { + __reduce86(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 87 => { + __reduce87(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 88 => { + __reduce88(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 89 => { + __reduce89(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 90 => { + __reduce90(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 91 => { + __reduce91(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 92 => { + __reduce92(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 93 => { + __reduce93(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 94 => { + __reduce94(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 95 => { + __reduce95(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 96 => { + __reduce96(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 97 => { + __reduce97(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 98 => { + __reduce98(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 99 => { + __reduce99(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 100 => { + __reduce100(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 101 => { + __reduce101(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 102 => { + __reduce102(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 103 => { + __reduce103(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 104 => { + __reduce104(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 105 => { + __reduce105(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 106 => { + __reduce106(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 107 => { + __reduce107(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 108 => { + __reduce108(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 109 => { + __reduce109(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 110 => { + __reduce110(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 111 => { + __reduce111(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 112 => { + __reduce112(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 113 => { + __reduce113(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 114 => { + __reduce114(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 115 => { + __reduce115(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 116 => { + // __AssertBlock = AssertBlock => ActionFn(9); + let __sym0 = __pop_Variant8(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action9::<>(input, __sym0); + return Some(Ok(__nt)); + } + 117 => { + __reduce117(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 118 => { + __reduce118(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 119 => { + __reduce119(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 120 => { + __reduce120(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 121 => { + __reduce121(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 122 => { + __reduce122(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 123 => { + __reduce123(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 124 => { + __reduce124(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 125 => { + __reduce125(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 126 => { + __reduce126(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + _ => panic!("invalid action code {}", __action) + }; + let __states_len = __states.len(); + __states.truncate(__states_len - __pop_states); + let __state = *__states.last().unwrap(); + let __next_state = __goto(__state, __nonterminal); + __states.push(__next_state); + None + } + #[inline(never)] + fn __symbol_type_mismatch() -> ! { + panic!("symbol type mismatch") + } + fn __pop_Variant18< + 'input, + >( + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> + ) -> (usize, (Expr, Expr), usize) + { + match __symbols.pop() { + Some((__l, __Symbol::Variant18(__v), __r)) => (__l, __v, __r), + _ => __symbol_type_mismatch() + } + } + fn __pop_Variant1< + 'input, + >( + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> + ) -> (usize, BoundVar, usize) + { + match __symbols.pop() { + Some((__l, __Symbol::Variant1(__v), __r)) => (__l, __v, __r), + _ => __symbol_type_mismatch() + } + } + fn __pop_Variant3< + 'input, + >( + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> + ) -> (usize, Box, usize) + { + match __symbols.pop() { + Some((__l, __Symbol::Variant3(__v), __r)) => (__l, __v, __r), + _ => __symbol_type_mismatch() + } + } + fn __pop_Variant24< + 'input, + >( + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> + ) -> (usize, Box, usize) + { + match __symbols.pop() { + Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r), + _ => __symbol_type_mismatch() + } + } + fn __pop_Variant11< + 'input, + >( + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> + ) -> (usize, Const, usize) + { + match __symbols.pop() { + Some((__l, __Symbol::Variant11(__v), __r)) => (__l, __v, __r), + _ => __symbol_type_mismatch() + } + } + fn __pop_Variant13< + 'input, + >( + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> + ) -> (usize, Function, usize) + { + match __symbols.pop() { + Some((__l, __Symbol::Variant13(__v), __r)) => (__l, __v, __r), + _ => __symbol_type_mismatch() + } + } + fn __pop_Variant14< + 'input, + >( + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> + ) -> (usize, FunctionApplication, usize) + { + match __symbols.pop() { + Some((__l, __Symbol::Variant14(__v), __r)) => (__l, __v, __r), + _ => __symbol_type_mismatch() + } + } + fn __pop_Variant15< + 'input, + >( + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> + ) -> (usize, FunctionType, usize) + { + match __symbols.pop() { + Some((__l, __Symbol::Variant15(__v), __r)) => (__l, __v, __r), + _ => __symbol_type_mismatch() + } + } + fn __pop_Variant16< + 'input, + >( + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> + ) -> (usize, String, usize) + { + match __symbols.pop() { + Some((__l, __Symbol::Variant16(__v), __r)) => (__l, __v, __r), + _ => __symbol_type_mismatch() + } + } + fn __pop_Variant20< + 'input, + >( + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> + ) -> (usize, TermAnnotation, usize) + { + match __symbols.pop() { + Some((__l, __Symbol::Variant20(__v), __r)) => (__l, __v, __r), + _ => __symbol_type_mismatch() + } + } + fn __pop_Variant21< + 'input, + >( + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> + ) -> (usize, TermSignature, usize) + { + match __symbols.pop() { + Some((__l, __Symbol::Variant21(__v), __r)) => (__l, __v, __r), + _ => __symbol_type_mismatch() + } + } + fn __pop_Variant5< + 'input, + >( + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> + ) -> (usize, Type, usize) + { + match __symbols.pop() { + Some((__l, __Symbol::Variant5(__v), __r)) => (__l, __v, __r), + _ => __symbol_type_mismatch() + } + } + fn __pop_Variant7< + 'input, + >( + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match __symbols.pop() { + Some((__l, __Symbol::Variant7(__v), __r)) => (__l, __v, __r), + _ => __symbol_type_mismatch() + } + } + fn __pop_Variant8< + 'input, + >( + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> + ) -> (usize, Vec>, usize) + { + match __symbols.pop() { + Some((__l, __Symbol::Variant8(__v), __r)) => (__l, __v, __r), + _ => __symbol_type_mismatch() + } + } + fn __pop_Variant10< + 'input, + >( + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match __symbols.pop() { + Some((__l, __Symbol::Variant10(__v), __r)) => (__l, __v, __r), + _ => __symbol_type_mismatch() + } + } + fn __pop_Variant19< + 'input, + >( + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> + ) -> (usize, alloc::vec::Vec<(Expr, Expr)>, usize) + { + match __symbols.pop() { + Some((__l, __Symbol::Variant19(__v), __r)) => (__l, __v, __r), + _ => __symbol_type_mismatch() + } + } + fn __pop_Variant2< + 'input, + >( + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> + ) -> (usize, alloc::vec::Vec, usize) + { + match __symbols.pop() { + Some((__l, __Symbol::Variant2(__v), __r)) => (__l, __v, __r), + _ => __symbol_type_mismatch() + } + } + fn __pop_Variant4< + 'input, + >( + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> + ) -> (usize, alloc::vec::Vec>, usize) + { + match __symbols.pop() { + Some((__l, __Symbol::Variant4(__v), __r)) => (__l, __v, __r), + _ => __symbol_type_mismatch() + } + } + fn __pop_Variant6< + 'input, + >( + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> + ) -> (usize, alloc::vec::Vec, usize) + { + match __symbols.pop() { + Some((__l, __Symbol::Variant6(__v), __r)) => (__l, __v, __r), + _ => __symbol_type_mismatch() + } + } + fn __pop_Variant9< + 'input, + >( + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> + ) -> (usize, core::option::Option, usize) + { + match __symbols.pop() { + Some((__l, __Symbol::Variant9(__v), __r)) => (__l, __v, __r), + _ => __symbol_type_mismatch() + } + } + fn __pop_Variant12< + 'input, + >( + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> + ) -> (usize, core::option::Option>, usize) + { + match __symbols.pop() { + Some((__l, __Symbol::Variant12(__v), __r)) => (__l, __v, __r), + _ => __symbol_type_mismatch() + } + } + fn __pop_Variant22< + 'input, + >( + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> + ) -> (usize, core::option::Option, usize) + { + match __symbols.pop() { + Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r), + _ => __symbol_type_mismatch() + } + } + fn __pop_Variant17< + 'input, + >( + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> + ) -> (usize, i128, usize) + { + match __symbols.pop() { + Some((__l, __Symbol::Variant17(__v), __r)) => (__l, __v, __r), + _ => __symbol_type_mismatch() + } + } + fn __pop_Variant23< + 'input, + >( + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> + ) -> (usize, usize, usize) + { + match __symbols.pop() { + Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r), + _ => __symbol_type_mismatch() + } + } + fn __pop_Variant0< + 'input, + >( + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> + ) -> (usize, &'input str, usize) + { + match __symbols.pop() { + Some((__l, __Symbol::Variant0(__v), __r)) => (__l, __v, __r), + _ => __symbol_type_mismatch() + } + } + pub(crate) fn __reduce0< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // ( ",") = BoundVar, "," => ActionFn(101); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant1(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym1.2.clone(); + let __nt = super::__action101::<>(input, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant1(__nt), __end)); + (2, 0) + } + pub(crate) fn __reduce1< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // ( ",")* = => ActionFn(99); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action99::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant2(__nt), __end)); + (0, 1) + } + pub(crate) fn __reduce2< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // ( ",")* = ( ",")+ => ActionFn(100); + let __sym0 = __pop_Variant2(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action100::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant2(__nt), __end)); + (1, 1) + } + pub(crate) fn __reduce3< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // ( ",")+ = BoundVar, "," => ActionFn(118); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant1(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym1.2.clone(); + let __nt = super::__action118::<>(input, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant2(__nt), __end)); + (2, 2) + } + pub(crate) fn __reduce4< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // ( ",")+ = ( ",")+, BoundVar, "," => ActionFn(119); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant1(__symbols); + let __sym0 = __pop_Variant2(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym2.2.clone(); + let __nt = super::__action119::<>(input, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant2(__nt), __end)); + (3, 2) + } + pub(crate) fn __reduce5< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // ( ",") = Expr, "," => ActionFn(111); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant3(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym1.2.clone(); + let __nt = super::__action111::<>(input, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (2, 3) + } + pub(crate) fn __reduce6< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // ( ",")* = => ActionFn(109); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action109::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant4(__nt), __end)); + (0, 4) + } + pub(crate) fn __reduce7< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // ( ",")* = ( ",")+ => ActionFn(110); + let __sym0 = __pop_Variant4(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action110::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant4(__nt), __end)); + (1, 4) + } + pub(crate) fn __reduce8< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // ( ",")+ = Expr, "," => ActionFn(122); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant3(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym1.2.clone(); + let __nt = super::__action122::<>(input, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant4(__nt), __end)); + (2, 5) + } + pub(crate) fn __reduce9< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // ( ",")+ = ( ",")+, Expr, "," => ActionFn(123); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant3(__symbols); + let __sym0 = __pop_Variant4(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym2.2.clone(); + let __nt = super::__action123::<>(input, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant4(__nt), __end)); + (3, 5) + } + pub(crate) fn __reduce10< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // ( ",") = Type, "," => ActionFn(106); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant5(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym1.2.clone(); + let __nt = super::__action106::<>(input, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant5(__nt), __end)); + (2, 6) + } + pub(crate) fn __reduce11< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // ( ",")* = => ActionFn(104); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action104::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant6(__nt), __end)); + (0, 7) + } + pub(crate) fn __reduce12< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // ( ",")* = ( ",")+ => ActionFn(105); + let __sym0 = __pop_Variant6(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action105::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant6(__nt), __end)); + (1, 7) + } + pub(crate) fn __reduce13< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // ( ",")+ = Type, "," => ActionFn(126); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant5(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym1.2.clone(); + let __nt = super::__action126::<>(input, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant6(__nt), __end)); + (2, 8) + } + pub(crate) fn __reduce14< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // ( ",")+ = ( ",")+, Type, "," => ActionFn(127); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant5(__symbols); + let __sym0 = __pop_Variant6(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym2.2.clone(); + let __nt = super::__action127::<>(input, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant6(__nt), __end)); + (3, 8) + } + pub(crate) fn __reduce15< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // ArgList = Comma => ActionFn(22); + let __sym0 = __pop_Variant7(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action22::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant7(__nt), __end)); + (1, 9) + } + pub(crate) fn __reduce16< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Args = "(args", ArgList, ")" => ActionFn(23); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant7(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym2.2.clone(); + let __nt = super::__action23::<>(input, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant7(__nt), __end)); + (3, 10) + } + pub(crate) fn __reduce17< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // AssertBlock = "(", "assert", ExprList, ")" => ActionFn(89); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant8(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action89::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (4, 11) + } + pub(crate) fn __reduce18< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // BoundVar = Ident => ActionFn(20); + let __sym0 = __pop_Variant16(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action20::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant1(__nt), __end)); + (1, 12) + } + pub(crate) fn __reduce19< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // BoundVar = Ident, ":", Type => ActionFn(21); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant5(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant16(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym2.2.clone(); + let __nt = super::__action21::<>(input, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant1(__nt), __end)); + (3, 12) + } + pub(crate) fn __reduce20< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // BoundVar? = BoundVar => ActionFn(97); + let __sym0 = __pop_Variant1(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action97::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (1, 13) + } + pub(crate) fn __reduce21< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // BoundVar? = => ActionFn(98); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action98::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (0, 13) + } + pub(crate) fn __reduce22< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Comma = BoundVar => ActionFn(130); + let __sym0 = __pop_Variant1(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action130::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant7(__nt), __end)); + (1, 14) + } + pub(crate) fn __reduce23< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Comma = => ActionFn(131); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action131::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant7(__nt), __end)); + (0, 14) + } + pub(crate) fn __reduce24< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Comma = ( ",")+, BoundVar => ActionFn(132); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant1(__symbols); + let __sym0 = __pop_Variant2(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym1.2.clone(); + let __nt = super::__action132::<>(input, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant7(__nt), __end)); + (2, 14) + } + pub(crate) fn __reduce25< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Comma = ( ",")+ => ActionFn(133); + let __sym0 = __pop_Variant2(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action133::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant7(__nt), __end)); + (1, 14) + } + pub(crate) fn __reduce26< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Comma = Expr => ActionFn(134); + let __sym0 = __pop_Variant3(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action134::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 15) + } + pub(crate) fn __reduce27< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Comma = => ActionFn(135); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action135::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (0, 15) + } + pub(crate) fn __reduce28< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Comma = ( ",")+, Expr => ActionFn(136); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant3(__symbols); + let __sym0 = __pop_Variant4(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym1.2.clone(); + let __nt = super::__action136::<>(input, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (2, 15) + } + pub(crate) fn __reduce29< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Comma = ( ",")+ => ActionFn(137); + let __sym0 = __pop_Variant4(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action137::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 15) + } + pub(crate) fn __reduce30< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Comma = Type => ActionFn(138); + let __sym0 = __pop_Variant5(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action138::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant10(__nt), __end)); + (1, 16) + } + pub(crate) fn __reduce31< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Comma = => ActionFn(139); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action139::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant10(__nt), __end)); + (0, 16) + } + pub(crate) fn __reduce32< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Comma = ( ",")+, Type => ActionFn(140); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant5(__symbols); + let __sym0 = __pop_Variant6(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym1.2.clone(); + let __nt = super::__action140::<>(input, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant10(__nt), __end)); + (2, 16) + } + pub(crate) fn __reduce33< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Comma = ( ",")+ => ActionFn(141); + let __sym0 = __pop_Variant6(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action141::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant10(__nt), __end)); + (1, 16) + } + pub(crate) fn __reduce34< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Const = Num, UNum, ":", Type => ActionFn(29); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant5(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant23(__symbols); + let __sym0 = __pop_Variant17(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action29::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant11(__nt), __end)); + (4, 17) + } + pub(crate) fn __reduce35< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", Ident, ")" => ActionFn(34); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant16(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym2.2.clone(); + let __nt = super::__action34::<>(input, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (3, 18) + } + pub(crate) fn __reduce36< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", Const, ")" => ActionFn(35); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant11(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym2.2.clone(); + let __nt = super::__action35::<>(input, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (3, 18) + } + pub(crate) fn __reduce37< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "true", ")" => ActionFn(36); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym2.2.clone(); + let __nt = super::__action36::<>(input, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (3, 18) + } + pub(crate) fn __reduce38< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "false", ")" => ActionFn(37); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym2.2.clone(); + let __nt = super::__action37::<>(input, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (3, 18) + } + pub(crate) fn __reduce39< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "!", Expr, ")" => ActionFn(38); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action38::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (4, 18) + } + pub(crate) fn __reduce40< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "&&", Expr, Expr, ")" => ActionFn(39); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action39::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce41< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "||", Expr, Expr, ")" => ActionFn(40); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action40::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce42< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "=>", Expr, Expr, ")" => ActionFn(41); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action41::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce43< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "=", Expr, Expr, ")" => ActionFn(42); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action42::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce44< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "<=", Expr, Expr, ")" => ActionFn(43); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action43::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce45< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "<", Expr, Expr, ")" => ActionFn(44); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action44::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce46< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "sgt", Expr, Expr, ")" => ActionFn(45); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action45::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce47< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "sgte", Expr, Expr, ")" => ActionFn(46); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action46::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce48< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "slt", Expr, Expr, ")" => ActionFn(47); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action47::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce49< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "slte", Expr, Expr, ")" => ActionFn(48); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action48::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce50< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "ugt", Expr, Expr, ")" => ActionFn(49); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action49::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce51< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "ugte", Expr, Expr, ")" => ActionFn(50); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action50::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce52< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "ult", Expr, Expr, ")" => ActionFn(51); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action51::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce53< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "ulte", Expr, Expr, ")" => ActionFn(52); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action52::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce54< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "-", Expr, ")" => ActionFn(53); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action53::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (4, 18) + } + pub(crate) fn __reduce55< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "~", Expr, ")" => ActionFn(54); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action54::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (4, 18) + } + pub(crate) fn __reduce56< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "clz", Expr, ")" => ActionFn(55); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action55::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (4, 18) + } + pub(crate) fn __reduce57< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "a64clz", Expr, Expr, ")" => ActionFn(56); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action56::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce58< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "cls", Expr, ")" => ActionFn(57); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action57::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (4, 18) + } + pub(crate) fn __reduce59< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "a64cls", Expr, Expr, ")" => ActionFn(58); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action58::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce60< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "rev", Expr, ")" => ActionFn(59); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action59::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (4, 18) + } + pub(crate) fn __reduce61< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "a64rev", Expr, Expr, ")" => ActionFn(60); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action60::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce62< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "subs", Expr, Expr, Expr, ")" => ActionFn(61); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant3(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym5.2.clone(); + let __nt = super::__action61::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (6, 18) + } + pub(crate) fn __reduce63< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "*", Expr, Expr, ")" => ActionFn(62); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action62::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce64< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "/", Expr, Expr, ")" => ActionFn(63); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action63::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce65< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "sdiv", Expr, Expr, ")" => ActionFn(64); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action64::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce66< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "+", Expr, Expr, ")" => ActionFn(65); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action65::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce67< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "-", Expr, Expr, ")" => ActionFn(66); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action66::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce68< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "urem", Expr, Expr, ")" => ActionFn(67); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action67::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce69< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "srem", Expr, Expr, ")" => ActionFn(68); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action68::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce70< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "&", Expr, Expr, ")" => ActionFn(69); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action69::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce71< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "|", Expr, Expr, ")" => ActionFn(70); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action70::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce72< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "xor", Expr, Expr, ")" => ActionFn(71); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action71::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce73< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "rotl", Expr, Expr, ")" => ActionFn(72); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action72::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce74< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "rotr", Expr, Expr, ")" => ActionFn(73); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action73::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce75< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "shl", Expr, Expr, ")" => ActionFn(74); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action74::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce76< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "shr", Expr, Expr, ")" => ActionFn(75); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action75::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce77< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "ashr", Expr, Expr, ")" => ActionFn(76); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action76::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce78< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "zero_ext", Width, Expr, ")" => ActionFn(77); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant24(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action77::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce79< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "zero_ext", Expr, Expr, ")" => ActionFn(78); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action78::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce80< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "sign_ext", Width, Expr, ")" => ActionFn(79); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant24(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action79::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce81< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "sign_ext", Expr, Expr, ")" => ActionFn(80); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action80::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce82< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "extract", UNum, UNum, Expr, ")" => ActionFn(81); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant3(__symbols); + let __sym3 = __pop_Variant23(__symbols); + let __sym2 = __pop_Variant23(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym5.2.clone(); + let __nt = super::__action81::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (6, 18) + } + pub(crate) fn __reduce83< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "conv_to", Width, Expr, ")" => ActionFn(82); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant24(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action82::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce84< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "conv_to", Expr, Expr, ")" => ActionFn(83); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action83::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce85< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "if", Expr, Expr, Expr, ")" => ActionFn(84); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant3(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym5.2.clone(); + let __nt = super::__action84::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (6, 18) + } + pub(crate) fn __reduce86< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "switch", Expr, Pair+, ")" => ActionFn(85); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant19(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action85::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce87< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "int2bv", UNum, Expr, ")" => ActionFn(86); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant23(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action86::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce88< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "bv2int", Expr, ")" => ActionFn(87); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action87::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (4, 18) + } + pub(crate) fn __reduce89< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "widthof", Expr, ")" => ActionFn(88); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action88::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (4, 18) + } + pub(crate) fn __reduce90< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr? = Expr => ActionFn(107); + let __sym0 = __pop_Variant3(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action107::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant12(__nt), __end)); + (1, 19) + } + pub(crate) fn __reduce91< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr? = => ActionFn(108); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action108::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant12(__nt), __end)); + (0, 19) + } + pub(crate) fn __reduce92< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // ExprList = Comma => ActionFn(25); + let __sym0 = __pop_Variant8(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action25::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 20) + } + pub(crate) fn __reduce93< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Function = Ident, "(", ArgList, ")", "(", Type, ")", "{", Expr, "}" => ActionFn(30); + assert!(__symbols.len() >= 10); + let __sym9 = __pop_Variant0(__symbols); + let __sym8 = __pop_Variant3(__symbols); + let __sym7 = __pop_Variant0(__symbols); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant5(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant7(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant16(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym9.2.clone(); + let __nt = super::__action30::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); + __symbols.push((__start, __Symbol::Variant13(__nt), __end)); + (10, 21) + } + pub(crate) fn __reduce94< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // FunctionApplication = Expr, "(", ExprList, ")" => ActionFn(31); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant8(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant3(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action31::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (4, 22) + } + pub(crate) fn __reduce95< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // FunctionType = "func", "(", TypeList, ")", "(", Type, ")" => ActionFn(28); + assert!(__symbols.len() >= 7); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant5(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant10(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym6.2.clone(); + let __nt = super::__action28::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + __symbols.push((__start, __Symbol::Variant15(__nt), __end)); + (7, 23) + } + pub(crate) fn __reduce96< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Ident = r#"[A-Za-z]"# => ActionFn(13); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action13::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant16(__nt), __end)); + (1, 24) + } + pub(crate) fn __reduce97< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Ident = r#"[A-Zac-z][\\.\\w]+"# => ActionFn(14); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action14::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant16(__nt), __end)); + (1, 24) + } + pub(crate) fn __reduce98< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Ident = r#"b[\\w&&[^v]][\\.\\w]*"# => ActionFn(15); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action15::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant16(__nt), __end)); + (1, 24) + } + pub(crate) fn __reduce99< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Num = r#"-?[0-9]+i"# => ActionFn(12); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action12::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant17(__nt), __end)); + (1, 25) + } + pub(crate) fn __reduce100< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Pair = "(", Expr, Expr, ")" => ActionFn(26); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant3(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action26::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant18(__nt), __end)); + (4, 26) + } + pub(crate) fn __reduce101< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Pair+ = Pair => ActionFn(92); + let __sym0 = __pop_Variant18(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action92::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant19(__nt), __end)); + (1, 27) + } + pub(crate) fn __reduce102< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Pair+ = Pair+, Pair => ActionFn(93); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant18(__symbols); + let __sym0 = __pop_Variant19(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym1.2.clone(); + let __nt = super::__action93::<>(input, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant19(__nt), __end)); + (2, 27) + } + pub(crate) fn __reduce103< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // TermAnnotation = "(", "spec", TermSignature, "(", "assume", ExprList, ")", "(", "assert", ExprList, ")", ")" => ActionFn(90); + assert!(__symbols.len() >= 12); + let __sym11 = __pop_Variant0(__symbols); + let __sym10 = __pop_Variant0(__symbols); + let __sym9 = __pop_Variant8(__symbols); + let __sym8 = __pop_Variant0(__symbols); + let __sym7 = __pop_Variant0(__symbols); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant8(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant21(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym11.2.clone(); + let __nt = super::__action90::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9, __sym10, __sym11); + __symbols.push((__start, __Symbol::Variant20(__nt), __end)); + (12, 28) + } + pub(crate) fn __reduce104< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // TermAnnotation = "(", "spec", TermSignature, "(", "assume", ExprList, ")", ")" => ActionFn(91); + assert!(__symbols.len() >= 8); + let __sym7 = __pop_Variant0(__symbols); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant8(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant21(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym7.2.clone(); + let __nt = super::__action91::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); + __symbols.push((__start, __Symbol::Variant20(__nt), __end)); + (8, 28) + } + pub(crate) fn __reduce105< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // TermSignature = "(", "sig", Args, "(", BoundVar, ")", ")" => ActionFn(27); + assert!(__symbols.len() >= 7); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant1(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant7(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym6.2.clone(); + let __nt = super::__action27::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + __symbols.push((__start, __Symbol::Variant21(__nt), __end)); + (7, 29) + } + pub(crate) fn __reduce106< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Type = "bv" => ActionFn(16); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action16::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant5(__nt), __end)); + (1, 30) + } + pub(crate) fn __reduce107< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Type = "bv", UNum => ActionFn(17); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant23(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym1.2.clone(); + let __nt = super::__action17::<>(input, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant5(__nt), __end)); + (2, 30) + } + pub(crate) fn __reduce108< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Type = "isleType" => ActionFn(18); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action18::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant5(__nt), __end)); + (1, 30) + } + pub(crate) fn __reduce109< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Type = "bool" => ActionFn(19); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action19::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant5(__nt), __end)); + (1, 30) + } + pub(crate) fn __reduce110< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Type? = Type => ActionFn(102); + let __sym0 = __pop_Variant5(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action102::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant22(__nt), __end)); + (1, 31) + } + pub(crate) fn __reduce111< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Type? = => ActionFn(103); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action103::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant22(__nt), __end)); + (0, 31) + } + pub(crate) fn __reduce112< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // TypeList = Comma => ActionFn(24); + let __sym0 = __pop_Variant10(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action24::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant10(__nt), __end)); + (1, 32) + } + pub(crate) fn __reduce113< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // UNum = r#"[0-9]+"# => ActionFn(11); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action11::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant23(__nt), __end)); + (1, 33) + } + pub(crate) fn __reduce114< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Width = "(", "regwidth", ")" => ActionFn(32); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym2.2.clone(); + let __nt = super::__action32::<>(input, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant24(__nt), __end)); + (3, 34) + } + pub(crate) fn __reduce115< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Width = "(", UNum, ")" => ActionFn(33); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant23(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym2.2.clone(); + let __nt = super::__action33::<>(input, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant24(__nt), __end)); + (3, 34) + } + pub(crate) fn __reduce117< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // __BoundVar = BoundVar => ActionFn(1); + let __sym0 = __pop_Variant1(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action1::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant1(__nt), __end)); + (1, 36) + } + pub(crate) fn __reduce118< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // __Const = Const => ActionFn(4); + let __sym0 = __pop_Variant11(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action4::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant11(__nt), __end)); + (1, 37) + } + pub(crate) fn __reduce119< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // __Expr = Expr => ActionFn(8); + let __sym0 = __pop_Variant3(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action8::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (1, 38) + } + pub(crate) fn __reduce120< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // __Function = Function => ActionFn(5); + let __sym0 = __pop_Variant13(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action5::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant13(__nt), __end)); + (1, 39) + } + pub(crate) fn __reduce121< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // __FunctionApplication = FunctionApplication => ActionFn(6); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action6::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 40) + } + pub(crate) fn __reduce122< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // __FunctionType = FunctionType => ActionFn(3); + let __sym0 = __pop_Variant15(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action3::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant15(__nt), __end)); + (1, 41) + } + pub(crate) fn __reduce123< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // __TermAnnotation = TermAnnotation => ActionFn(10); + let __sym0 = __pop_Variant20(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action10::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant20(__nt), __end)); + (1, 42) + } + pub(crate) fn __reduce124< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // __TermSignature = TermSignature => ActionFn(2); + let __sym0 = __pop_Variant21(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action2::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant21(__nt), __end)); + (1, 43) + } + pub(crate) fn __reduce125< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // __Type = Type => ActionFn(0); + let __sym0 = __pop_Variant5(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action0::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant5(__nt), __end)); + (1, 44) + } + pub(crate) fn __reduce126< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // __Width = Width => ActionFn(7); + let __sym0 = __pop_Variant24(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action7::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant24(__nt), __end)); + (1, 45) + } +} +pub use self::__parse__AssertBlock::AssertBlockParser; + #[cfg_attr(rustfmt, rustfmt_skip)] mod __parse__BoundVar { #![allow(non_snake_case, non_camel_case_types, unused_mut, unused_variables, unused_imports, unused_parens, clippy::all)] @@ -35,8 +4662,8 @@ mod __parse__BoundVar { Variant5(Type), Variant6(alloc::vec::Vec), Variant7(Vec), - Variant8(core::option::Option), - Variant9(Vec>), + Variant8(Vec>), + Variant9(core::option::Option), Variant10(Vec), Variant11(Const), Variant12(core::option::Option>), @@ -55,34 +4682,34 @@ mod __parse__BoundVar { } const __ACTION: &[i8] = &[ // State 0 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 8, // State 1 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 2 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, // State 3 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 4 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 5 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 6 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 7 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 8 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 9 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 10 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 11 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 12 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]; fn __action(state: i8, integer: usize) -> i8 { - __ACTION[(state as usize) * 69 + integer] + __ACTION[(state as usize) * 70 + integer] } const __EOF_ACTION: &[i8] = &[ // State 0 @@ -90,34 +4717,34 @@ mod __parse__BoundVar { // State 1 0, // State 2 - -105, + -107, // State 3 - -115, + -118, // State 4 - -18, + -19, // State 5 - -96, - // State 6 -97, - // State 7 + // State 6 -98, + // State 7 + -99, // State 8 - -19, + -20, // State 9 - -108, + -110, // State 10 - -107, + -109, // State 11 - -106, + -108, // State 12 - -112, + -114, ]; fn __goto(state: i8, nt: usize) -> i8 { match nt { - 11 => 3, - 23 => 4, - 29 => 8, - 32 => 11, + 12 => 3, + 24 => 4, + 30 => 8, + 33 => 11, _ => 0, } } @@ -143,7 +4770,8 @@ mod __parse__BoundVar { r###""a64clz""###, r###""a64rev""###, r###""ashr""###, - r###""assertions""###, + r###""assert""###, + r###""assume""###, r###""bool""###, r###""bv""###, r###""bv2int""###, @@ -244,7 +4872,7 @@ mod __parse__BoundVar { #[inline] fn error_action(&self, state: i8) -> i8 { - __action(state, 69 - 1) + __action(state, 70 - 1) } #[inline] @@ -371,11 +4999,12 @@ mod __parse__BoundVar { Token(66, _) if true => Some(61), Token(67, _) if true => Some(62), Token(68, _) if true => Some(63), - Token(0, _) if true => Some(64), - Token(1, _) if true => Some(65), - Token(2, _) if true => Some(66), - Token(3, _) if true => Some(67), - Token(4, _) if true => Some(68), + Token(69, _) if true => Some(64), + Token(0, _) if true => Some(65), + Token(1, _) if true => Some(66), + Token(2, _) if true => Some(67), + Token(3, _) if true => Some(68), + Token(4, _) if true => Some(69), _ => None, } } @@ -388,8 +5017,8 @@ mod __parse__BoundVar { ) -> __Symbol<'input> { match __token_index { - 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 => match __token { - Token(5, __tok0) | Token(6, __tok0) | Token(7, __tok0) | Token(8, __tok0) | Token(9, __tok0) | Token(10, __tok0) | Token(11, __tok0) | Token(12, __tok0) | Token(13, __tok0) | Token(14, __tok0) | Token(15, __tok0) | Token(16, __tok0) | Token(17, __tok0) | Token(18, __tok0) | Token(19, __tok0) | Token(20, __tok0) | Token(21, __tok0) | Token(22, __tok0) | Token(23, __tok0) | Token(24, __tok0) | Token(25, __tok0) | Token(26, __tok0) | Token(27, __tok0) | Token(28, __tok0) | Token(29, __tok0) | Token(30, __tok0) | Token(31, __tok0) | Token(32, __tok0) | Token(33, __tok0) | Token(34, __tok0) | Token(35, __tok0) | Token(36, __tok0) | Token(37, __tok0) | Token(38, __tok0) | Token(39, __tok0) | Token(40, __tok0) | Token(41, __tok0) | Token(42, __tok0) | Token(43, __tok0) | Token(44, __tok0) | Token(45, __tok0) | Token(46, __tok0) | Token(47, __tok0) | Token(48, __tok0) | Token(49, __tok0) | Token(50, __tok0) | Token(51, __tok0) | Token(52, __tok0) | Token(53, __tok0) | Token(54, __tok0) | Token(55, __tok0) | Token(56, __tok0) | Token(57, __tok0) | Token(58, __tok0) | Token(59, __tok0) | Token(60, __tok0) | Token(61, __tok0) | Token(62, __tok0) | Token(63, __tok0) | Token(64, __tok0) | Token(65, __tok0) | Token(66, __tok0) | Token(67, __tok0) | Token(68, __tok0) | Token(0, __tok0) | Token(1, __tok0) | Token(2, __tok0) | Token(3, __tok0) | Token(4, __tok0) if true => __Symbol::Variant0(__tok0), + 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 => match __token { + Token(5, __tok0) | Token(6, __tok0) | Token(7, __tok0) | Token(8, __tok0) | Token(9, __tok0) | Token(10, __tok0) | Token(11, __tok0) | Token(12, __tok0) | Token(13, __tok0) | Token(14, __tok0) | Token(15, __tok0) | Token(16, __tok0) | Token(17, __tok0) | Token(18, __tok0) | Token(19, __tok0) | Token(20, __tok0) | Token(21, __tok0) | Token(22, __tok0) | Token(23, __tok0) | Token(24, __tok0) | Token(25, __tok0) | Token(26, __tok0) | Token(27, __tok0) | Token(28, __tok0) | Token(29, __tok0) | Token(30, __tok0) | Token(31, __tok0) | Token(32, __tok0) | Token(33, __tok0) | Token(34, __tok0) | Token(35, __tok0) | Token(36, __tok0) | Token(37, __tok0) | Token(38, __tok0) | Token(39, __tok0) | Token(40, __tok0) | Token(41, __tok0) | Token(42, __tok0) | Token(43, __tok0) | Token(44, __tok0) | Token(45, __tok0) | Token(46, __tok0) | Token(47, __tok0) | Token(48, __tok0) | Token(49, __tok0) | Token(50, __tok0) | Token(51, __tok0) | Token(52, __tok0) | Token(53, __tok0) | Token(54, __tok0) | Token(55, __tok0) | Token(56, __tok0) | Token(57, __tok0) | Token(58, __tok0) | Token(59, __tok0) | Token(60, __tok0) | Token(61, __tok0) | Token(62, __tok0) | Token(63, __tok0) | Token(64, __tok0) | Token(65, __tok0) | Token(66, __tok0) | Token(67, __tok0) | Token(68, __tok0) | Token(69, __tok0) | Token(0, __tok0) | Token(1, __tok0) | Token(2, __tok0) | Token(3, __tok0) | Token(4, __tok0) if true => __Symbol::Variant0(__tok0), _ => unreachable!(), }, _ => unreachable!(), @@ -782,12 +5411,7 @@ mod __parse__BoundVar { __reduce113(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } 114 => { - // __BoundVar = BoundVar => ActionFn(1); - let __sym0 = __pop_Variant1(__symbols); - let __start = __sym0.0.clone(); - let __end = __sym0.2.clone(); - let __nt = super::__action1::<>(input, __sym0); - return Some(Ok(__nt)); + __reduce114(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } 115 => { __reduce115(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) @@ -796,7 +5420,12 @@ mod __parse__BoundVar { __reduce116(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } 117 => { - __reduce117(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + // __BoundVar = BoundVar => ActionFn(1); + let __sym0 = __pop_Variant1(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action1::<>(input, __sym0); + return Some(Ok(__nt)); } 118 => { __reduce118(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) @@ -816,6 +5445,15 @@ mod __parse__BoundVar { 123 => { __reduce123(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } + 124 => { + __reduce124(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 125 => { + __reduce125(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 126 => { + __reduce126(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } _ => panic!("invalid action code {}", __action) }; let __states_len = __states.len(); @@ -972,14 +5610,14 @@ mod __parse__BoundVar { _ => __symbol_type_mismatch() } } - fn __pop_Variant9< + fn __pop_Variant8< 'input, >( __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, Vec>, usize) { match __symbols.pop() { - Some((__l, __Symbol::Variant9(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant8(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -1038,14 +5676,14 @@ mod __parse__BoundVar { _ => __symbol_type_mismatch() } } - fn __pop_Variant8< + fn __pop_Variant9< 'input, >( __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, core::option::Option, usize) { match __symbols.pop() { - Some((__l, __Symbol::Variant8(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant9(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -1113,13 +5751,13 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = BoundVar, "," => ActionFn(98); + // ( ",") = BoundVar, "," => ActionFn(101); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action98::<>(input, __sym0, __sym1); + let __nt = super::__action101::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (2, 0) } @@ -1132,10 +5770,10 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(96); + // ( ",")* = => ActionFn(99); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action96::<>(input, &__start, &__end); + let __nt = super::__action99::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (0, 1) } @@ -1148,11 +5786,11 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(97); + // ( ",")* = ( ",")+ => ActionFn(100); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action97::<>(input, __sym0); + let __nt = super::__action100::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (1, 1) } @@ -1165,13 +5803,13 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = BoundVar, "," => ActionFn(115); + // ( ",")+ = BoundVar, "," => ActionFn(118); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action115::<>(input, __sym0, __sym1); + let __nt = super::__action118::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (2, 2) } @@ -1184,14 +5822,14 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, BoundVar, "," => ActionFn(116); + // ( ",")+ = ( ",")+, BoundVar, "," => ActionFn(119); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant1(__symbols); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action116::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action119::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (3, 2) } @@ -1204,13 +5842,13 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = Expr, "," => ActionFn(108); + // ( ",") = Expr, "," => ActionFn(111); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action108::<>(input, __sym0, __sym1); + let __nt = super::__action111::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); (2, 3) } @@ -1223,10 +5861,10 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(106); + // ( ",")* = => ActionFn(109); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action106::<>(input, &__start, &__end); + let __nt = super::__action109::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (0, 4) } @@ -1239,11 +5877,11 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(107); + // ( ",")* = ( ",")+ => ActionFn(110); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action107::<>(input, __sym0); + let __nt = super::__action110::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 4) } @@ -1256,13 +5894,13 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Expr, "," => ActionFn(119); + // ( ",")+ = Expr, "," => ActionFn(122); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action119::<>(input, __sym0, __sym1); + let __nt = super::__action122::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (2, 5) } @@ -1275,14 +5913,14 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Expr, "," => ActionFn(120); + // ( ",")+ = ( ",")+, Expr, "," => ActionFn(123); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant3(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action120::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action123::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 5) } @@ -1295,13 +5933,13 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = Type, "," => ActionFn(103); + // ( ",") = Type, "," => ActionFn(106); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action103::<>(input, __sym0, __sym1); + let __nt = super::__action106::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (2, 6) } @@ -1314,10 +5952,10 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(101); + // ( ",")* = => ActionFn(104); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action101::<>(input, &__start, &__end); + let __nt = super::__action104::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (0, 7) } @@ -1330,11 +5968,11 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(102); + // ( ",")* = ( ",")+ => ActionFn(105); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action102::<>(input, __sym0); + let __nt = super::__action105::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (1, 7) } @@ -1347,13 +5985,13 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Type, "," => ActionFn(123); + // ( ",")+ = Type, "," => ActionFn(126); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action123::<>(input, __sym0, __sym1); + let __nt = super::__action126::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (2, 8) } @@ -1366,14 +6004,14 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Type, "," => ActionFn(124); + // ( ",")+ = ( ",")+, Type, "," => ActionFn(127); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant5(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action124::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action127::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (3, 8) } @@ -1386,11 +6024,11 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ArgList = Comma => ActionFn(21); + // ArgList = Comma => ActionFn(22); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action21::<>(input, __sym0); + let __nt = super::__action22::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (1, 9) } @@ -1403,14 +6041,14 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Args = "(args", ArgList, ")" => ActionFn(22); + // Args = "(args", ArgList, ")" => ActionFn(23); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant7(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action22::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action23::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (3, 10) } @@ -1423,15 +6061,36 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar = Ident => ActionFn(19); + // AssertBlock = "(", "assert", ExprList, ")" => ActionFn(89); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant8(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action89::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (4, 11) + } + pub(crate) fn __reduce18< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // BoundVar = Ident => ActionFn(20); let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action19::<>(input, __sym0); + let __nt = super::__action20::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); - (1, 11) + (1, 12) } - pub(crate) fn __reduce18< + pub(crate) fn __reduce19< 'input, >( input: &'input str, @@ -1440,18 +6099,18 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar = Ident, ":", Type => ActionFn(20); + // BoundVar = Ident, ":", Type => ActionFn(21); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant5(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action20::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action21::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); - (3, 11) + (3, 12) } - pub(crate) fn __reduce19< + pub(crate) fn __reduce20< 'input, >( input: &'input str, @@ -1460,15 +6119,15 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar? = BoundVar => ActionFn(94); + // BoundVar? = BoundVar => ActionFn(97); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action94::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (1, 12) + let __nt = super::__action97::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (1, 13) } - pub(crate) fn __reduce20< + pub(crate) fn __reduce21< 'input, >( input: &'input str, @@ -1477,14 +6136,14 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar? = => ActionFn(95); + // BoundVar? = => ActionFn(98); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action95::<>(input, &__start, &__end); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (0, 12) + let __nt = super::__action98::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (0, 13) } - pub(crate) fn __reduce21< + pub(crate) fn __reduce22< 'input, >( input: &'input str, @@ -1493,15 +6152,15 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = BoundVar => ActionFn(127); + // Comma = BoundVar => ActionFn(130); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action127::<>(input, __sym0); + let __nt = super::__action130::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (1, 13) + (1, 14) } - pub(crate) fn __reduce22< + pub(crate) fn __reduce23< 'input, >( input: &'input str, @@ -1510,14 +6169,14 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(128); + // Comma = => ActionFn(131); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action128::<>(input, &__start, &__end); + let __nt = super::__action131::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (0, 13) + (0, 14) } - pub(crate) fn __reduce23< + pub(crate) fn __reduce24< 'input, >( input: &'input str, @@ -1526,17 +6185,17 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, BoundVar => ActionFn(129); + // Comma = ( ",")+, BoundVar => ActionFn(132); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant1(__symbols); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action129::<>(input, __sym0, __sym1); + let __nt = super::__action132::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (2, 13) + (2, 14) } - pub(crate) fn __reduce24< + pub(crate) fn __reduce25< 'input, >( input: &'input str, @@ -1545,15 +6204,15 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(130); + // Comma = ( ",")+ => ActionFn(133); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action130::<>(input, __sym0); + let __nt = super::__action133::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (1, 13) + (1, 14) } - pub(crate) fn __reduce25< + pub(crate) fn __reduce26< 'input, >( input: &'input str, @@ -1562,15 +6221,15 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Expr => ActionFn(131); + // Comma = Expr => ActionFn(134); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action131::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 14) + let __nt = super::__action134::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 15) } - pub(crate) fn __reduce26< + pub(crate) fn __reduce27< 'input, >( input: &'input str, @@ -1579,14 +6238,14 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(132); + // Comma = => ActionFn(135); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action132::<>(input, &__start, &__end); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (0, 14) + let __nt = super::__action135::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (0, 15) } - pub(crate) fn __reduce27< + pub(crate) fn __reduce28< 'input, >( input: &'input str, @@ -1595,17 +6254,17 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Expr => ActionFn(133); + // Comma = ( ",")+, Expr => ActionFn(136); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant3(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action133::<>(input, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (2, 14) + let __nt = super::__action136::<>(input, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (2, 15) } - pub(crate) fn __reduce28< + pub(crate) fn __reduce29< 'input, >( input: &'input str, @@ -1614,15 +6273,15 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(134); + // Comma = ( ",")+ => ActionFn(137); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action134::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 14) + let __nt = super::__action137::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 15) } - pub(crate) fn __reduce29< + pub(crate) fn __reduce30< 'input, >( input: &'input str, @@ -1631,15 +6290,15 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Type => ActionFn(135); + // Comma = Type => ActionFn(138); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action135::<>(input, __sym0); + let __nt = super::__action138::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 15) + (1, 16) } - pub(crate) fn __reduce30< + pub(crate) fn __reduce31< 'input, >( input: &'input str, @@ -1648,14 +6307,14 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(136); + // Comma = => ActionFn(139); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action136::<>(input, &__start, &__end); + let __nt = super::__action139::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (0, 15) + (0, 16) } - pub(crate) fn __reduce31< + pub(crate) fn __reduce32< 'input, >( input: &'input str, @@ -1664,17 +6323,17 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Type => ActionFn(137); + // Comma = ( ",")+, Type => ActionFn(140); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant5(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action137::<>(input, __sym0, __sym1); + let __nt = super::__action140::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (2, 15) + (2, 16) } - pub(crate) fn __reduce32< + pub(crate) fn __reduce33< 'input, >( input: &'input str, @@ -1683,15 +6342,15 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(138); + // Comma = ( ",")+ => ActionFn(141); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action138::<>(input, __sym0); + let __nt = super::__action141::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 15) + (1, 16) } - pub(crate) fn __reduce33< + pub(crate) fn __reduce34< 'input, >( input: &'input str, @@ -1700,7 +6359,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Const = Num, UNum, ":", Type => ActionFn(28); + // Const = Num, UNum, ":", Type => ActionFn(29); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant5(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -1708,29 +6367,9 @@ mod __parse__BoundVar { let __sym0 = __pop_Variant17(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action28::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action29::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); - (4, 16) - } - pub(crate) fn __reduce34< - 'input, - >( - input: &'input str, - __lookahead_start: Option<&usize>, - __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, - _: core::marker::PhantomData<(&'input ())>, - ) -> (usize, usize) - { - // Expr = "(", Ident, ")" => ActionFn(33); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant16(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0.clone(); - let __end = __sym2.2.clone(); - let __nt = super::__action33::<>(input, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (4, 17) } pub(crate) fn __reduce35< 'input, @@ -1741,16 +6380,16 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", Const, ")" => ActionFn(34); + // Expr = "(", Ident, ")" => ActionFn(34); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant11(__symbols); + let __sym1 = __pop_Variant16(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); let __nt = super::__action34::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (3, 18) } pub(crate) fn __reduce36< 'input, @@ -1761,16 +6400,16 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "true", ")" => ActionFn(35); + // Expr = "(", Const, ")" => ActionFn(35); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant11(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); let __nt = super::__action35::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (3, 18) } pub(crate) fn __reduce37< 'input, @@ -1781,7 +6420,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "false", ")" => ActionFn(36); + // Expr = "(", "true", ")" => ActionFn(36); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); @@ -1790,7 +6429,7 @@ mod __parse__BoundVar { let __end = __sym2.2.clone(); let __nt = super::__action36::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (3, 18) } pub(crate) fn __reduce38< 'input, @@ -1801,17 +6440,16 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "!", Expr, ")" => ActionFn(37); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant3(__symbols); + // Expr = "(", "false", ")" => ActionFn(37); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym3.2.clone(); - let __nt = super::__action37::<>(input, __sym0, __sym1, __sym2, __sym3); + let __end = __sym2.2.clone(); + let __nt = super::__action37::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (3, 18) } pub(crate) fn __reduce39< 'input, @@ -1822,18 +6460,17 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "&&", Expr, Expr, ")" => ActionFn(38); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant3(__symbols); + // Expr = "(", "!", Expr, ")" => ActionFn(38); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym4.2.clone(); - let __nt = super::__action38::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __end = __sym3.2.clone(); + let __nt = super::__action38::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (4, 18) } pub(crate) fn __reduce40< 'input, @@ -1844,7 +6481,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "||", Expr, Expr, ")" => ActionFn(39); + // Expr = "(", "&&", Expr, Expr, ")" => ActionFn(39); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -1855,7 +6492,7 @@ mod __parse__BoundVar { let __end = __sym4.2.clone(); let __nt = super::__action39::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce41< 'input, @@ -1866,7 +6503,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "=>", Expr, Expr, ")" => ActionFn(40); + // Expr = "(", "||", Expr, Expr, ")" => ActionFn(40); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -1877,7 +6514,7 @@ mod __parse__BoundVar { let __end = __sym4.2.clone(); let __nt = super::__action40::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce42< 'input, @@ -1888,7 +6525,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "=", Expr, Expr, ")" => ActionFn(41); + // Expr = "(", "=>", Expr, Expr, ")" => ActionFn(41); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -1899,7 +6536,7 @@ mod __parse__BoundVar { let __end = __sym4.2.clone(); let __nt = super::__action41::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce43< 'input, @@ -1910,7 +6547,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "<=", Expr, Expr, ")" => ActionFn(42); + // Expr = "(", "=", Expr, Expr, ")" => ActionFn(42); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -1921,7 +6558,7 @@ mod __parse__BoundVar { let __end = __sym4.2.clone(); let __nt = super::__action42::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce44< 'input, @@ -1932,7 +6569,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "<", Expr, Expr, ")" => ActionFn(43); + // Expr = "(", "<=", Expr, Expr, ")" => ActionFn(43); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -1943,7 +6580,7 @@ mod __parse__BoundVar { let __end = __sym4.2.clone(); let __nt = super::__action43::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce45< 'input, @@ -1954,7 +6591,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sgt", Expr, Expr, ")" => ActionFn(44); + // Expr = "(", "<", Expr, Expr, ")" => ActionFn(44); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -1965,7 +6602,7 @@ mod __parse__BoundVar { let __end = __sym4.2.clone(); let __nt = super::__action44::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce46< 'input, @@ -1976,7 +6613,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sgte", Expr, Expr, ")" => ActionFn(45); + // Expr = "(", "sgt", Expr, Expr, ")" => ActionFn(45); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -1987,7 +6624,7 @@ mod __parse__BoundVar { let __end = __sym4.2.clone(); let __nt = super::__action45::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce47< 'input, @@ -1998,7 +6635,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "slt", Expr, Expr, ")" => ActionFn(46); + // Expr = "(", "sgte", Expr, Expr, ")" => ActionFn(46); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -2009,7 +6646,7 @@ mod __parse__BoundVar { let __end = __sym4.2.clone(); let __nt = super::__action46::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce48< 'input, @@ -2020,7 +6657,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "slte", Expr, Expr, ")" => ActionFn(47); + // Expr = "(", "slt", Expr, Expr, ")" => ActionFn(47); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -2031,7 +6668,7 @@ mod __parse__BoundVar { let __end = __sym4.2.clone(); let __nt = super::__action47::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce49< 'input, @@ -2042,7 +6679,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ugt", Expr, Expr, ")" => ActionFn(48); + // Expr = "(", "slte", Expr, Expr, ")" => ActionFn(48); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -2053,7 +6690,7 @@ mod __parse__BoundVar { let __end = __sym4.2.clone(); let __nt = super::__action48::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce50< 'input, @@ -2064,7 +6701,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ugte", Expr, Expr, ")" => ActionFn(49); + // Expr = "(", "ugt", Expr, Expr, ")" => ActionFn(49); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -2075,7 +6712,7 @@ mod __parse__BoundVar { let __end = __sym4.2.clone(); let __nt = super::__action49::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce51< 'input, @@ -2086,7 +6723,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ult", Expr, Expr, ")" => ActionFn(50); + // Expr = "(", "ugte", Expr, Expr, ")" => ActionFn(50); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -2097,7 +6734,7 @@ mod __parse__BoundVar { let __end = __sym4.2.clone(); let __nt = super::__action50::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce52< 'input, @@ -2108,7 +6745,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ulte", Expr, Expr, ")" => ActionFn(51); + // Expr = "(", "ult", Expr, Expr, ")" => ActionFn(51); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -2119,7 +6756,7 @@ mod __parse__BoundVar { let __end = __sym4.2.clone(); let __nt = super::__action51::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce53< 'input, @@ -2130,17 +6767,18 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "-", Expr, ")" => ActionFn(52); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); + // Expr = "(", "ulte", Expr, Expr, ")" => ActionFn(52); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym3.2.clone(); - let __nt = super::__action52::<>(input, __sym0, __sym1, __sym2, __sym3); + let __end = __sym4.2.clone(); + let __nt = super::__action52::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (5, 18) } pub(crate) fn __reduce54< 'input, @@ -2151,7 +6789,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "~", Expr, ")" => ActionFn(53); + // Expr = "(", "-", Expr, ")" => ActionFn(53); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -2161,7 +6799,7 @@ mod __parse__BoundVar { let __end = __sym3.2.clone(); let __nt = super::__action53::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } pub(crate) fn __reduce55< 'input, @@ -2172,7 +6810,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "clz", Expr, ")" => ActionFn(54); + // Expr = "(", "~", Expr, ")" => ActionFn(54); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -2182,7 +6820,7 @@ mod __parse__BoundVar { let __end = __sym3.2.clone(); let __nt = super::__action54::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } pub(crate) fn __reduce56< 'input, @@ -2193,7 +6831,28 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "a64clz", Expr, Expr, ")" => ActionFn(55); + // Expr = "(", "clz", Expr, ")" => ActionFn(55); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action55::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (4, 18) + } + pub(crate) fn __reduce57< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "a64clz", Expr, Expr, ")" => ActionFn(56); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -2202,11 +6861,11 @@ mod __parse__BoundVar { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action55::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action56::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce57< + pub(crate) fn __reduce58< 'input, >( input: &'input str, @@ -2215,7 +6874,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "cls", Expr, ")" => ActionFn(56); + // Expr = "(", "cls", Expr, ")" => ActionFn(57); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -2223,11 +6882,11 @@ mod __parse__BoundVar { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action56::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action57::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce58< + pub(crate) fn __reduce59< 'input, >( input: &'input str, @@ -2236,7 +6895,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "a64cls", Expr, Expr, ")" => ActionFn(57); + // Expr = "(", "a64cls", Expr, Expr, ")" => ActionFn(58); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -2245,11 +6904,11 @@ mod __parse__BoundVar { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action57::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action58::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce59< + pub(crate) fn __reduce60< 'input, >( input: &'input str, @@ -2258,7 +6917,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "rev", Expr, ")" => ActionFn(58); + // Expr = "(", "rev", Expr, ")" => ActionFn(59); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -2266,11 +6925,11 @@ mod __parse__BoundVar { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action58::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action59::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce60< + pub(crate) fn __reduce61< 'input, >( input: &'input str, @@ -2279,7 +6938,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "a64rev", Expr, Expr, ")" => ActionFn(59); + // Expr = "(", "a64rev", Expr, Expr, ")" => ActionFn(60); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -2288,11 +6947,11 @@ mod __parse__BoundVar { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action59::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action60::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce61< + pub(crate) fn __reduce62< 'input, >( input: &'input str, @@ -2301,7 +6960,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "subs", Expr, Expr, Expr, ")" => ActionFn(60); + // Expr = "(", "subs", Expr, Expr, Expr, ")" => ActionFn(61); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant3(__symbols); @@ -2311,31 +6970,9 @@ mod __parse__BoundVar { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym5.2.clone(); - let __nt = super::__action60::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action61::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (6, 17) - } - pub(crate) fn __reduce62< - 'input, - >( - input: &'input str, - __lookahead_start: Option<&usize>, - __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, - _: core::marker::PhantomData<(&'input ())>, - ) -> (usize, usize) - { - // Expr = "(", "*", Expr, Expr, ")" => ActionFn(61); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant3(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0.clone(); - let __end = __sym4.2.clone(); - let __nt = super::__action61::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); - __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (6, 18) } pub(crate) fn __reduce63< 'input, @@ -2346,7 +6983,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "/", Expr, Expr, ")" => ActionFn(62); + // Expr = "(", "*", Expr, Expr, ")" => ActionFn(62); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -2357,7 +6994,7 @@ mod __parse__BoundVar { let __end = __sym4.2.clone(); let __nt = super::__action62::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce64< 'input, @@ -2368,7 +7005,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sdiv", Expr, Expr, ")" => ActionFn(63); + // Expr = "(", "/", Expr, Expr, ")" => ActionFn(63); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -2379,7 +7016,7 @@ mod __parse__BoundVar { let __end = __sym4.2.clone(); let __nt = super::__action63::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce65< 'input, @@ -2390,7 +7027,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "+", Expr, Expr, ")" => ActionFn(64); + // Expr = "(", "sdiv", Expr, Expr, ")" => ActionFn(64); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -2401,7 +7038,7 @@ mod __parse__BoundVar { let __end = __sym4.2.clone(); let __nt = super::__action64::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce66< 'input, @@ -2412,7 +7049,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "-", Expr, Expr, ")" => ActionFn(65); + // Expr = "(", "+", Expr, Expr, ")" => ActionFn(65); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -2423,7 +7060,7 @@ mod __parse__BoundVar { let __end = __sym4.2.clone(); let __nt = super::__action65::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce67< 'input, @@ -2434,7 +7071,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "urem", Expr, Expr, ")" => ActionFn(66); + // Expr = "(", "-", Expr, Expr, ")" => ActionFn(66); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -2445,7 +7082,7 @@ mod __parse__BoundVar { let __end = __sym4.2.clone(); let __nt = super::__action66::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce68< 'input, @@ -2456,7 +7093,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "srem", Expr, Expr, ")" => ActionFn(67); + // Expr = "(", "urem", Expr, Expr, ")" => ActionFn(67); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -2467,7 +7104,7 @@ mod __parse__BoundVar { let __end = __sym4.2.clone(); let __nt = super::__action67::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce69< 'input, @@ -2478,7 +7115,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "&", Expr, Expr, ")" => ActionFn(68); + // Expr = "(", "srem", Expr, Expr, ")" => ActionFn(68); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -2489,7 +7126,7 @@ mod __parse__BoundVar { let __end = __sym4.2.clone(); let __nt = super::__action68::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce70< 'input, @@ -2500,7 +7137,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "|", Expr, Expr, ")" => ActionFn(69); + // Expr = "(", "&", Expr, Expr, ")" => ActionFn(69); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -2511,7 +7148,7 @@ mod __parse__BoundVar { let __end = __sym4.2.clone(); let __nt = super::__action69::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce71< 'input, @@ -2522,7 +7159,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "xor", Expr, Expr, ")" => ActionFn(70); + // Expr = "(", "|", Expr, Expr, ")" => ActionFn(70); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -2533,7 +7170,7 @@ mod __parse__BoundVar { let __end = __sym4.2.clone(); let __nt = super::__action70::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce72< 'input, @@ -2544,7 +7181,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "rotl", Expr, Expr, ")" => ActionFn(71); + // Expr = "(", "xor", Expr, Expr, ")" => ActionFn(71); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -2555,7 +7192,7 @@ mod __parse__BoundVar { let __end = __sym4.2.clone(); let __nt = super::__action71::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce73< 'input, @@ -2566,7 +7203,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "rotr", Expr, Expr, ")" => ActionFn(72); + // Expr = "(", "rotl", Expr, Expr, ")" => ActionFn(72); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -2577,7 +7214,7 @@ mod __parse__BoundVar { let __end = __sym4.2.clone(); let __nt = super::__action72::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce74< 'input, @@ -2588,7 +7225,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "shl", Expr, Expr, ")" => ActionFn(73); + // Expr = "(", "rotr", Expr, Expr, ")" => ActionFn(73); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -2599,7 +7236,7 @@ mod __parse__BoundVar { let __end = __sym4.2.clone(); let __nt = super::__action73::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce75< 'input, @@ -2610,7 +7247,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "shr", Expr, Expr, ")" => ActionFn(74); + // Expr = "(", "shl", Expr, Expr, ")" => ActionFn(74); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -2621,7 +7258,7 @@ mod __parse__BoundVar { let __end = __sym4.2.clone(); let __nt = super::__action74::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce76< 'input, @@ -2632,7 +7269,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ashr", Expr, Expr, ")" => ActionFn(75); + // Expr = "(", "shr", Expr, Expr, ")" => ActionFn(75); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -2643,7 +7280,7 @@ mod __parse__BoundVar { let __end = __sym4.2.clone(); let __nt = super::__action75::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce77< 'input, @@ -2654,18 +7291,18 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "zero_ext", Width, Expr, ")" => ActionFn(76); + // Expr = "(", "ashr", Expr, Expr, ")" => ActionFn(76); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant24(__symbols); + let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action76::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce78< 'input, @@ -2676,18 +7313,18 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "zero_ext", Expr, Expr, ")" => ActionFn(77); + // Expr = "(", "zero_ext", Width, Expr, ")" => ActionFn(77); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant24(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action77::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce79< 'input, @@ -2698,18 +7335,18 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sign_ext", Width, Expr, ")" => ActionFn(78); + // Expr = "(", "zero_ext", Expr, Expr, ")" => ActionFn(78); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant24(__symbols); + let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action78::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce80< 'input, @@ -2720,18 +7357,18 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sign_ext", Expr, Expr, ")" => ActionFn(79); + // Expr = "(", "sign_ext", Width, Expr, ")" => ActionFn(79); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant24(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action79::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce81< 'input, @@ -2742,7 +7379,29 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "extract", UNum, UNum, Expr, ")" => ActionFn(80); + // Expr = "(", "sign_ext", Expr, Expr, ")" => ActionFn(80); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action80::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce82< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "extract", UNum, UNum, Expr, ")" => ActionFn(81); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant3(__symbols); @@ -2752,11 +7411,11 @@ mod __parse__BoundVar { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym5.2.clone(); - let __nt = super::__action80::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action81::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (6, 17) + (6, 18) } - pub(crate) fn __reduce82< + pub(crate) fn __reduce83< 'input, >( input: &'input str, @@ -2765,7 +7424,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "conv_to", Width, Expr, ")" => ActionFn(81); + // Expr = "(", "conv_to", Width, Expr, ")" => ActionFn(82); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -2774,11 +7433,11 @@ mod __parse__BoundVar { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action81::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action82::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce83< + pub(crate) fn __reduce84< 'input, >( input: &'input str, @@ -2787,7 +7446,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "conv_to", Expr, Expr, ")" => ActionFn(82); + // Expr = "(", "conv_to", Expr, Expr, ")" => ActionFn(83); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -2796,11 +7455,11 @@ mod __parse__BoundVar { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action82::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action83::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce84< + pub(crate) fn __reduce85< 'input, >( input: &'input str, @@ -2809,7 +7468,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "if", Expr, Expr, Expr, ")" => ActionFn(83); + // Expr = "(", "if", Expr, Expr, Expr, ")" => ActionFn(84); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant3(__symbols); @@ -2819,11 +7478,11 @@ mod __parse__BoundVar { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym5.2.clone(); - let __nt = super::__action83::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action84::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (6, 17) + (6, 18) } - pub(crate) fn __reduce85< + pub(crate) fn __reduce86< 'input, >( input: &'input str, @@ -2832,7 +7491,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "switch", Expr, Pair+, ")" => ActionFn(84); + // Expr = "(", "switch", Expr, Pair+, ")" => ActionFn(85); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant19(__symbols); @@ -2841,11 +7500,11 @@ mod __parse__BoundVar { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action84::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action85::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce86< + pub(crate) fn __reduce87< 'input, >( input: &'input str, @@ -2854,7 +7513,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "int2bv", UNum, Expr, ")" => ActionFn(85); + // Expr = "(", "int2bv", UNum, Expr, ")" => ActionFn(86); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -2863,11 +7522,11 @@ mod __parse__BoundVar { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action85::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action86::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce87< + pub(crate) fn __reduce88< 'input, >( input: &'input str, @@ -2876,7 +7535,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "bv2int", Expr, ")" => ActionFn(86); + // Expr = "(", "bv2int", Expr, ")" => ActionFn(87); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -2884,11 +7543,11 @@ mod __parse__BoundVar { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action86::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action87::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce88< + pub(crate) fn __reduce89< 'input, >( input: &'input str, @@ -2897,7 +7556,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "widthof", Expr, ")" => ActionFn(87); + // Expr = "(", "widthof", Expr, ")" => ActionFn(88); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -2905,11 +7564,11 @@ mod __parse__BoundVar { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action87::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action88::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce89< + pub(crate) fn __reduce90< 'input, >( input: &'input str, @@ -2918,15 +7577,15 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr? = Expr => ActionFn(104); + // Expr? = Expr => ActionFn(107); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action104::<>(input, __sym0); + let __nt = super::__action107::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (1, 18) + (1, 19) } - pub(crate) fn __reduce90< + pub(crate) fn __reduce91< 'input, >( input: &'input str, @@ -2935,14 +7594,14 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr? = => ActionFn(105); + // Expr? = => ActionFn(108); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action105::<>(input, &__start, &__end); + let __nt = super::__action108::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (0, 18) + (0, 19) } - pub(crate) fn __reduce91< + pub(crate) fn __reduce92< 'input, >( input: &'input str, @@ -2951,15 +7610,15 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprList = Comma => ActionFn(24); - let __sym0 = __pop_Variant9(__symbols); + // ExprList = Comma => ActionFn(25); + let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action24::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 19) + let __nt = super::__action25::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 20) } - pub(crate) fn __reduce92< + pub(crate) fn __reduce93< 'input, >( input: &'input str, @@ -2968,7 +7627,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Function = Ident, "(", ArgList, ")", "(", Type, ")", "{", Expr, "}" => ActionFn(29); + // Function = Ident, "(", ArgList, ")", "(", Type, ")", "{", Expr, "}" => ActionFn(30); assert!(__symbols.len() >= 10); let __sym9 = __pop_Variant0(__symbols); let __sym8 = __pop_Variant3(__symbols); @@ -2982,11 +7641,11 @@ mod __parse__BoundVar { let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0.clone(); let __end = __sym9.2.clone(); - let __nt = super::__action29::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); + let __nt = super::__action30::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); - (10, 20) + (10, 21) } - pub(crate) fn __reduce93< + pub(crate) fn __reduce94< 'input, >( input: &'input str, @@ -2995,19 +7654,19 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // FunctionApplication = Expr, "(", ExprList, ")" => ActionFn(30); + // FunctionApplication = Expr, "(", ExprList, ")" => ActionFn(31); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant9(__symbols); + let __sym2 = __pop_Variant8(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action30::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action31::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (4, 21) + (4, 22) } - pub(crate) fn __reduce94< + pub(crate) fn __reduce95< 'input, >( input: &'input str, @@ -3016,7 +7675,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // FunctionType = "func", "(", TypeList, ")", "(", Type, ")" => ActionFn(27); + // FunctionType = "func", "(", TypeList, ")", "(", Type, ")" => ActionFn(28); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant5(__symbols); @@ -3027,11 +7686,11 @@ mod __parse__BoundVar { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym6.2.clone(); - let __nt = super::__action27::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action28::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (7, 22) + (7, 23) } - pub(crate) fn __reduce95< + pub(crate) fn __reduce96< 'input, >( input: &'input str, @@ -3040,15 +7699,15 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"[A-Za-z]"# => ActionFn(12); + // Ident = r#"[A-Za-z]"# => ActionFn(13); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action12::<>(input, __sym0); + let __nt = super::__action13::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 23) + (1, 24) } - pub(crate) fn __reduce96< + pub(crate) fn __reduce97< 'input, >( input: &'input str, @@ -3057,15 +7716,15 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"[A-Zac-z][\\.\\w]+"# => ActionFn(13); + // Ident = r#"[A-Zac-z][\\.\\w]+"# => ActionFn(14); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action13::<>(input, __sym0); + let __nt = super::__action14::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 23) + (1, 24) } - pub(crate) fn __reduce97< + pub(crate) fn __reduce98< 'input, >( input: &'input str, @@ -3074,15 +7733,15 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"b[\\w&&[^v]][\\.\\w]*"# => ActionFn(14); + // Ident = r#"b[\\w&&[^v]][\\.\\w]*"# => ActionFn(15); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action14::<>(input, __sym0); + let __nt = super::__action15::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 23) + (1, 24) } - pub(crate) fn __reduce98< + pub(crate) fn __reduce99< 'input, >( input: &'input str, @@ -3091,15 +7750,15 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Num = r#"-?[0-9]+i"# => ActionFn(11); + // Num = r#"-?[0-9]+i"# => ActionFn(12); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action11::<>(input, __sym0); + let __nt = super::__action12::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant17(__nt), __end)); - (1, 24) + (1, 25) } - pub(crate) fn __reduce99< + pub(crate) fn __reduce100< 'input, >( input: &'input str, @@ -3108,7 +7767,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Pair = "(", Expr, Expr, ")" => ActionFn(25); + // Pair = "(", Expr, Expr, ")" => ActionFn(26); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -3116,11 +7775,11 @@ mod __parse__BoundVar { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action25::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action26::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant18(__nt), __end)); - (4, 25) + (4, 26) } - pub(crate) fn __reduce100< + pub(crate) fn __reduce101< 'input, >( input: &'input str, @@ -3129,15 +7788,15 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Pair+ = Pair => ActionFn(89); + // Pair+ = Pair => ActionFn(92); let __sym0 = __pop_Variant18(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action89::<>(input, __sym0); + let __nt = super::__action92::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant19(__nt), __end)); - (1, 26) + (1, 27) } - pub(crate) fn __reduce101< + pub(crate) fn __reduce102< 'input, >( input: &'input str, @@ -3146,17 +7805,17 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Pair+ = Pair+, Pair => ActionFn(90); + // Pair+ = Pair+, Pair => ActionFn(93); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant18(__symbols); let __sym0 = __pop_Variant19(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action90::<>(input, __sym0, __sym1); + let __nt = super::__action93::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant19(__nt), __end)); - (2, 26) + (2, 27) } - pub(crate) fn __reduce102< + pub(crate) fn __reduce103< 'input, >( input: &'input str, @@ -3165,11 +7824,40 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // TermAnnotation = "(", "spec", TermSignature, "(", "assertions", ExprList, ")", ")" => ActionFn(88); + // TermAnnotation = "(", "spec", TermSignature, "(", "assume", ExprList, ")", "(", "assert", ExprList, ")", ")" => ActionFn(90); + assert!(__symbols.len() >= 12); + let __sym11 = __pop_Variant0(__symbols); + let __sym10 = __pop_Variant0(__symbols); + let __sym9 = __pop_Variant8(__symbols); + let __sym8 = __pop_Variant0(__symbols); + let __sym7 = __pop_Variant0(__symbols); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant8(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant21(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym11.2.clone(); + let __nt = super::__action90::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9, __sym10, __sym11); + __symbols.push((__start, __Symbol::Variant20(__nt), __end)); + (12, 28) + } + pub(crate) fn __reduce104< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // TermAnnotation = "(", "spec", TermSignature, "(", "assume", ExprList, ")", ")" => ActionFn(91); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant9(__symbols); + let __sym5 = __pop_Variant8(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant21(__symbols); @@ -3177,11 +7865,11 @@ mod __parse__BoundVar { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym7.2.clone(); - let __nt = super::__action88::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); + let __nt = super::__action91::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant20(__nt), __end)); - (8, 27) + (8, 28) } - pub(crate) fn __reduce103< + pub(crate) fn __reduce105< 'input, >( input: &'input str, @@ -3190,7 +7878,7 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // TermSignature = "(", "sig", Args, "(", BoundVar, ")", ")" => ActionFn(26); + // TermSignature = "(", "sig", Args, "(", BoundVar, ")", ")" => ActionFn(27); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -3201,11 +7889,11 @@ mod __parse__BoundVar { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym6.2.clone(); - let __nt = super::__action26::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action27::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant21(__nt), __end)); - (7, 28) + (7, 29) } - pub(crate) fn __reduce104< + pub(crate) fn __reduce106< 'input, >( input: &'input str, @@ -3214,15 +7902,15 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "bv" => ActionFn(15); + // Type = "bv" => ActionFn(16); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action15::<>(input, __sym0); + let __nt = super::__action16::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 29) + (1, 30) } - pub(crate) fn __reduce105< + pub(crate) fn __reduce107< 'input, >( input: &'input str, @@ -3231,17 +7919,17 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "bv", UNum => ActionFn(16); + // Type = "bv", UNum => ActionFn(17); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant23(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action16::<>(input, __sym0, __sym1); + let __nt = super::__action17::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (2, 29) + (2, 30) } - pub(crate) fn __reduce106< + pub(crate) fn __reduce108< 'input, >( input: &'input str, @@ -3250,15 +7938,15 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "isleType" => ActionFn(17); + // Type = "isleType" => ActionFn(18); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action17::<>(input, __sym0); + let __nt = super::__action18::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 29) + (1, 30) } - pub(crate) fn __reduce107< + pub(crate) fn __reduce109< 'input, >( input: &'input str, @@ -3267,15 +7955,15 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "bool" => ActionFn(18); + // Type = "bool" => ActionFn(19); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action18::<>(input, __sym0); + let __nt = super::__action19::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 29) + (1, 30) } - pub(crate) fn __reduce108< + pub(crate) fn __reduce110< 'input, >( input: &'input str, @@ -3284,15 +7972,15 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type? = Type => ActionFn(99); + // Type? = Type => ActionFn(102); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action99::<>(input, __sym0); + let __nt = super::__action102::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant22(__nt), __end)); - (1, 30) + (1, 31) } - pub(crate) fn __reduce109< + pub(crate) fn __reduce111< 'input, >( input: &'input str, @@ -3301,14 +7989,14 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type? = => ActionFn(100); + // Type? = => ActionFn(103); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action100::<>(input, &__start, &__end); + let __nt = super::__action103::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant22(__nt), __end)); - (0, 30) + (0, 31) } - pub(crate) fn __reduce110< + pub(crate) fn __reduce112< 'input, >( input: &'input str, @@ -3317,15 +8005,15 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // TypeList = Comma => ActionFn(23); + // TypeList = Comma => ActionFn(24); let __sym0 = __pop_Variant10(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action23::<>(input, __sym0); + let __nt = super::__action24::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 31) + (1, 32) } - pub(crate) fn __reduce111< + pub(crate) fn __reduce113< 'input, >( input: &'input str, @@ -3334,15 +8022,15 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // UNum = r#"[0-9]+"# => ActionFn(10); + // UNum = r#"[0-9]+"# => ActionFn(11); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action10::<>(input, __sym0); + let __nt = super::__action11::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant23(__nt), __end)); - (1, 32) + (1, 33) } - pub(crate) fn __reduce112< + pub(crate) fn __reduce114< 'input, >( input: &'input str, @@ -3351,18 +8039,18 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Width = "(", "regwidth", ")" => ActionFn(31); + // Width = "(", "regwidth", ")" => ActionFn(32); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action31::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action32::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (3, 33) + (3, 34) } - pub(crate) fn __reduce113< + pub(crate) fn __reduce115< 'input, >( input: &'input str, @@ -3371,18 +8059,35 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Width = "(", UNum, ")" => ActionFn(32); + // Width = "(", UNum, ")" => ActionFn(33); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant23(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action32::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action33::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (3, 33) + (3, 34) } - pub(crate) fn __reduce115< + pub(crate) fn __reduce116< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // __AssertBlock = AssertBlock => ActionFn(9); + let __sym0 = __pop_Variant8(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action9::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 35) + } + pub(crate) fn __reduce118< 'input, >( input: &'input str, @@ -3397,9 +8102,9 @@ mod __parse__BoundVar { let __end = __sym0.2.clone(); let __nt = super::__action4::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); - (1, 35) + (1, 37) } - pub(crate) fn __reduce116< + pub(crate) fn __reduce119< 'input, >( input: &'input str, @@ -3414,9 +8119,9 @@ mod __parse__BoundVar { let __end = __sym0.2.clone(); let __nt = super::__action8::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (1, 36) + (1, 38) } - pub(crate) fn __reduce117< + pub(crate) fn __reduce120< 'input, >( input: &'input str, @@ -3431,9 +8136,9 @@ mod __parse__BoundVar { let __end = __sym0.2.clone(); let __nt = super::__action5::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); - (1, 37) + (1, 39) } - pub(crate) fn __reduce118< + pub(crate) fn __reduce121< 'input, >( input: &'input str, @@ -3448,9 +8153,9 @@ mod __parse__BoundVar { let __end = __sym0.2.clone(); let __nt = super::__action6::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 38) + (1, 40) } - pub(crate) fn __reduce119< + pub(crate) fn __reduce122< 'input, >( input: &'input str, @@ -3465,9 +8170,9 @@ mod __parse__BoundVar { let __end = __sym0.2.clone(); let __nt = super::__action3::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 39) + (1, 41) } - pub(crate) fn __reduce120< + pub(crate) fn __reduce123< 'input, >( input: &'input str, @@ -3476,15 +8181,15 @@ mod __parse__BoundVar { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // __TermAnnotation = TermAnnotation => ActionFn(9); + // __TermAnnotation = TermAnnotation => ActionFn(10); let __sym0 = __pop_Variant20(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action9::<>(input, __sym0); + let __nt = super::__action10::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant20(__nt), __end)); - (1, 40) + (1, 42) } - pub(crate) fn __reduce121< + pub(crate) fn __reduce124< 'input, >( input: &'input str, @@ -3499,9 +8204,9 @@ mod __parse__BoundVar { let __end = __sym0.2.clone(); let __nt = super::__action2::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant21(__nt), __end)); - (1, 41) + (1, 43) } - pub(crate) fn __reduce122< + pub(crate) fn __reduce125< 'input, >( input: &'input str, @@ -3516,9 +8221,9 @@ mod __parse__BoundVar { let __end = __sym0.2.clone(); let __nt = super::__action0::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 42) + (1, 44) } - pub(crate) fn __reduce123< + pub(crate) fn __reduce126< 'input, >( input: &'input str, @@ -3533,7 +8238,7 @@ mod __parse__BoundVar { let __end = __sym0.2.clone(); let __nt = super::__action7::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (1, 43) + (1, 45) } } pub use self::__parse__BoundVar::BoundVarParser; @@ -3563,8 +8268,8 @@ mod __parse__Const { Variant5(Type), Variant6(alloc::vec::Vec), Variant7(Vec), - Variant8(core::option::Option), - Variant9(Vec>), + Variant8(Vec>), + Variant9(core::option::Option), Variant10(Vec), Variant11(Const), Variant12(core::option::Option>), @@ -3583,32 +8288,32 @@ mod __parse__Const { } const __ACTION: &[i8] = &[ // State 0 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, // State 1 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, // State 2 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 3 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, // State 4 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 5 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0, 0, 0, // State 6 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 7 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 8 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 9 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 10 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 11 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]; fn __action(state: i8, integer: usize) -> i8 { - __ACTION[(state as usize) * 69 + integer] + __ACTION[(state as usize) * 70 + integer] } const __EOF_ACTION: &[i8] = &[ // State 0 @@ -3618,30 +8323,30 @@ mod __parse__Const { // State 2 0, // State 3 - -105, + -107, // State 4 - -116, + -119, // State 5 0, // State 6 0, // State 7 - -112, + -114, // State 8 - -34, + -35, // State 9 - -108, + -110, // State 10 - -107, + -109, // State 11 - -106, + -108, ]; fn __goto(state: i8, nt: usize) -> i8 { match nt { - 16 => 4, - 24 => 1, - 29 => 8, - 32 => match state { + 17 => 4, + 25 => 1, + 30 => 8, + 33 => match state { 3 => 11, _ => 6, }, @@ -3670,7 +8375,8 @@ mod __parse__Const { r###""a64clz""###, r###""a64rev""###, r###""ashr""###, - r###""assertions""###, + r###""assert""###, + r###""assume""###, r###""bool""###, r###""bv""###, r###""bv2int""###, @@ -3771,7 +8477,7 @@ mod __parse__Const { #[inline] fn error_action(&self, state: i8) -> i8 { - __action(state, 69 - 1) + __action(state, 70 - 1) } #[inline] @@ -3898,11 +8604,12 @@ mod __parse__Const { Token(66, _) if true => Some(61), Token(67, _) if true => Some(62), Token(68, _) if true => Some(63), - Token(0, _) if true => Some(64), - Token(1, _) if true => Some(65), - Token(2, _) if true => Some(66), - Token(3, _) if true => Some(67), - Token(4, _) if true => Some(68), + Token(69, _) if true => Some(64), + Token(0, _) if true => Some(65), + Token(1, _) if true => Some(66), + Token(2, _) if true => Some(67), + Token(3, _) if true => Some(68), + Token(4, _) if true => Some(69), _ => None, } } @@ -3915,8 +8622,8 @@ mod __parse__Const { ) -> __Symbol<'input> { match __token_index { - 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 => match __token { - Token(5, __tok0) | Token(6, __tok0) | Token(7, __tok0) | Token(8, __tok0) | Token(9, __tok0) | Token(10, __tok0) | Token(11, __tok0) | Token(12, __tok0) | Token(13, __tok0) | Token(14, __tok0) | Token(15, __tok0) | Token(16, __tok0) | Token(17, __tok0) | Token(18, __tok0) | Token(19, __tok0) | Token(20, __tok0) | Token(21, __tok0) | Token(22, __tok0) | Token(23, __tok0) | Token(24, __tok0) | Token(25, __tok0) | Token(26, __tok0) | Token(27, __tok0) | Token(28, __tok0) | Token(29, __tok0) | Token(30, __tok0) | Token(31, __tok0) | Token(32, __tok0) | Token(33, __tok0) | Token(34, __tok0) | Token(35, __tok0) | Token(36, __tok0) | Token(37, __tok0) | Token(38, __tok0) | Token(39, __tok0) | Token(40, __tok0) | Token(41, __tok0) | Token(42, __tok0) | Token(43, __tok0) | Token(44, __tok0) | Token(45, __tok0) | Token(46, __tok0) | Token(47, __tok0) | Token(48, __tok0) | Token(49, __tok0) | Token(50, __tok0) | Token(51, __tok0) | Token(52, __tok0) | Token(53, __tok0) | Token(54, __tok0) | Token(55, __tok0) | Token(56, __tok0) | Token(57, __tok0) | Token(58, __tok0) | Token(59, __tok0) | Token(60, __tok0) | Token(61, __tok0) | Token(62, __tok0) | Token(63, __tok0) | Token(64, __tok0) | Token(65, __tok0) | Token(66, __tok0) | Token(67, __tok0) | Token(68, __tok0) | Token(0, __tok0) | Token(1, __tok0) | Token(2, __tok0) | Token(3, __tok0) | Token(4, __tok0) if true => __Symbol::Variant0(__tok0), + 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 => match __token { + Token(5, __tok0) | Token(6, __tok0) | Token(7, __tok0) | Token(8, __tok0) | Token(9, __tok0) | Token(10, __tok0) | Token(11, __tok0) | Token(12, __tok0) | Token(13, __tok0) | Token(14, __tok0) | Token(15, __tok0) | Token(16, __tok0) | Token(17, __tok0) | Token(18, __tok0) | Token(19, __tok0) | Token(20, __tok0) | Token(21, __tok0) | Token(22, __tok0) | Token(23, __tok0) | Token(24, __tok0) | Token(25, __tok0) | Token(26, __tok0) | Token(27, __tok0) | Token(28, __tok0) | Token(29, __tok0) | Token(30, __tok0) | Token(31, __tok0) | Token(32, __tok0) | Token(33, __tok0) | Token(34, __tok0) | Token(35, __tok0) | Token(36, __tok0) | Token(37, __tok0) | Token(38, __tok0) | Token(39, __tok0) | Token(40, __tok0) | Token(41, __tok0) | Token(42, __tok0) | Token(43, __tok0) | Token(44, __tok0) | Token(45, __tok0) | Token(46, __tok0) | Token(47, __tok0) | Token(48, __tok0) | Token(49, __tok0) | Token(50, __tok0) | Token(51, __tok0) | Token(52, __tok0) | Token(53, __tok0) | Token(54, __tok0) | Token(55, __tok0) | Token(56, __tok0) | Token(57, __tok0) | Token(58, __tok0) | Token(59, __tok0) | Token(60, __tok0) | Token(61, __tok0) | Token(62, __tok0) | Token(63, __tok0) | Token(64, __tok0) | Token(65, __tok0) | Token(66, __tok0) | Token(67, __tok0) | Token(68, __tok0) | Token(69, __tok0) | Token(0, __tok0) | Token(1, __tok0) | Token(2, __tok0) | Token(3, __tok0) | Token(4, __tok0) if true => __Symbol::Variant0(__tok0), _ => unreachable!(), }, _ => unreachable!(), @@ -4312,12 +9019,7 @@ mod __parse__Const { __reduce114(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } 115 => { - // __Const = Const => ActionFn(4); - let __sym0 = __pop_Variant11(__symbols); - let __start = __sym0.0.clone(); - let __end = __sym0.2.clone(); - let __nt = super::__action4::<>(input, __sym0); - return Some(Ok(__nt)); + __reduce115(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } 116 => { __reduce116(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) @@ -4326,7 +9028,12 @@ mod __parse__Const { __reduce117(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } 118 => { - __reduce118(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + // __Const = Const => ActionFn(4); + let __sym0 = __pop_Variant11(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action4::<>(input, __sym0); + return Some(Ok(__nt)); } 119 => { __reduce119(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) @@ -4343,6 +9050,15 @@ mod __parse__Const { 123 => { __reduce123(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } + 124 => { + __reduce124(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 125 => { + __reduce125(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 126 => { + __reduce126(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } _ => panic!("invalid action code {}", __action) }; let __states_len = __states.len(); @@ -4499,14 +9215,14 @@ mod __parse__Const { _ => __symbol_type_mismatch() } } - fn __pop_Variant9< + fn __pop_Variant8< 'input, >( __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, Vec>, usize) { match __symbols.pop() { - Some((__l, __Symbol::Variant9(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant8(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -4565,14 +9281,14 @@ mod __parse__Const { _ => __symbol_type_mismatch() } } - fn __pop_Variant8< + fn __pop_Variant9< 'input, >( __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, core::option::Option, usize) { match __symbols.pop() { - Some((__l, __Symbol::Variant8(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant9(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -4640,13 +9356,13 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = BoundVar, "," => ActionFn(98); + // ( ",") = BoundVar, "," => ActionFn(101); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action98::<>(input, __sym0, __sym1); + let __nt = super::__action101::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (2, 0) } @@ -4659,10 +9375,10 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(96); + // ( ",")* = => ActionFn(99); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action96::<>(input, &__start, &__end); + let __nt = super::__action99::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (0, 1) } @@ -4675,11 +9391,11 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(97); + // ( ",")* = ( ",")+ => ActionFn(100); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action97::<>(input, __sym0); + let __nt = super::__action100::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (1, 1) } @@ -4692,13 +9408,13 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = BoundVar, "," => ActionFn(115); + // ( ",")+ = BoundVar, "," => ActionFn(118); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action115::<>(input, __sym0, __sym1); + let __nt = super::__action118::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (2, 2) } @@ -4711,14 +9427,14 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, BoundVar, "," => ActionFn(116); + // ( ",")+ = ( ",")+, BoundVar, "," => ActionFn(119); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant1(__symbols); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action116::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action119::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (3, 2) } @@ -4731,13 +9447,13 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = Expr, "," => ActionFn(108); + // ( ",") = Expr, "," => ActionFn(111); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action108::<>(input, __sym0, __sym1); + let __nt = super::__action111::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); (2, 3) } @@ -4750,10 +9466,10 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(106); + // ( ",")* = => ActionFn(109); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action106::<>(input, &__start, &__end); + let __nt = super::__action109::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (0, 4) } @@ -4766,11 +9482,11 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(107); + // ( ",")* = ( ",")+ => ActionFn(110); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action107::<>(input, __sym0); + let __nt = super::__action110::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 4) } @@ -4783,13 +9499,13 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Expr, "," => ActionFn(119); + // ( ",")+ = Expr, "," => ActionFn(122); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action119::<>(input, __sym0, __sym1); + let __nt = super::__action122::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (2, 5) } @@ -4802,14 +9518,14 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Expr, "," => ActionFn(120); + // ( ",")+ = ( ",")+, Expr, "," => ActionFn(123); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant3(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action120::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action123::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 5) } @@ -4822,13 +9538,13 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = Type, "," => ActionFn(103); + // ( ",") = Type, "," => ActionFn(106); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action103::<>(input, __sym0, __sym1); + let __nt = super::__action106::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (2, 6) } @@ -4841,10 +9557,10 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(101); + // ( ",")* = => ActionFn(104); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action101::<>(input, &__start, &__end); + let __nt = super::__action104::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (0, 7) } @@ -4857,11 +9573,11 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(102); + // ( ",")* = ( ",")+ => ActionFn(105); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action102::<>(input, __sym0); + let __nt = super::__action105::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (1, 7) } @@ -4874,13 +9590,13 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Type, "," => ActionFn(123); + // ( ",")+ = Type, "," => ActionFn(126); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action123::<>(input, __sym0, __sym1); + let __nt = super::__action126::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (2, 8) } @@ -4893,14 +9609,14 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Type, "," => ActionFn(124); + // ( ",")+ = ( ",")+, Type, "," => ActionFn(127); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant5(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action124::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action127::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (3, 8) } @@ -4913,11 +9629,11 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ArgList = Comma => ActionFn(21); + // ArgList = Comma => ActionFn(22); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action21::<>(input, __sym0); + let __nt = super::__action22::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (1, 9) } @@ -4930,14 +9646,14 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Args = "(args", ArgList, ")" => ActionFn(22); + // Args = "(args", ArgList, ")" => ActionFn(23); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant7(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action22::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action23::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (3, 10) } @@ -4950,15 +9666,36 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar = Ident => ActionFn(19); + // AssertBlock = "(", "assert", ExprList, ")" => ActionFn(89); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant8(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action89::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (4, 11) + } + pub(crate) fn __reduce18< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // BoundVar = Ident => ActionFn(20); let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action19::<>(input, __sym0); + let __nt = super::__action20::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); - (1, 11) + (1, 12) } - pub(crate) fn __reduce18< + pub(crate) fn __reduce19< 'input, >( input: &'input str, @@ -4967,18 +9704,18 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar = Ident, ":", Type => ActionFn(20); + // BoundVar = Ident, ":", Type => ActionFn(21); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant5(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action20::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action21::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); - (3, 11) + (3, 12) } - pub(crate) fn __reduce19< + pub(crate) fn __reduce20< 'input, >( input: &'input str, @@ -4987,15 +9724,15 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar? = BoundVar => ActionFn(94); + // BoundVar? = BoundVar => ActionFn(97); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action94::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (1, 12) + let __nt = super::__action97::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (1, 13) } - pub(crate) fn __reduce20< + pub(crate) fn __reduce21< 'input, >( input: &'input str, @@ -5004,14 +9741,14 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar? = => ActionFn(95); + // BoundVar? = => ActionFn(98); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action95::<>(input, &__start, &__end); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (0, 12) + let __nt = super::__action98::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (0, 13) } - pub(crate) fn __reduce21< + pub(crate) fn __reduce22< 'input, >( input: &'input str, @@ -5020,15 +9757,15 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = BoundVar => ActionFn(127); + // Comma = BoundVar => ActionFn(130); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action127::<>(input, __sym0); + let __nt = super::__action130::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (1, 13) + (1, 14) } - pub(crate) fn __reduce22< + pub(crate) fn __reduce23< 'input, >( input: &'input str, @@ -5037,14 +9774,14 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(128); + // Comma = => ActionFn(131); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action128::<>(input, &__start, &__end); + let __nt = super::__action131::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (0, 13) + (0, 14) } - pub(crate) fn __reduce23< + pub(crate) fn __reduce24< 'input, >( input: &'input str, @@ -5053,17 +9790,17 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, BoundVar => ActionFn(129); + // Comma = ( ",")+, BoundVar => ActionFn(132); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant1(__symbols); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action129::<>(input, __sym0, __sym1); + let __nt = super::__action132::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (2, 13) + (2, 14) } - pub(crate) fn __reduce24< + pub(crate) fn __reduce25< 'input, >( input: &'input str, @@ -5072,15 +9809,15 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(130); + // Comma = ( ",")+ => ActionFn(133); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action130::<>(input, __sym0); + let __nt = super::__action133::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (1, 13) + (1, 14) } - pub(crate) fn __reduce25< + pub(crate) fn __reduce26< 'input, >( input: &'input str, @@ -5089,15 +9826,15 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Expr => ActionFn(131); + // Comma = Expr => ActionFn(134); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action131::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 14) + let __nt = super::__action134::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 15) } - pub(crate) fn __reduce26< + pub(crate) fn __reduce27< 'input, >( input: &'input str, @@ -5106,14 +9843,14 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(132); + // Comma = => ActionFn(135); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action132::<>(input, &__start, &__end); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (0, 14) + let __nt = super::__action135::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (0, 15) } - pub(crate) fn __reduce27< + pub(crate) fn __reduce28< 'input, >( input: &'input str, @@ -5122,17 +9859,17 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Expr => ActionFn(133); + // Comma = ( ",")+, Expr => ActionFn(136); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant3(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action133::<>(input, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (2, 14) + let __nt = super::__action136::<>(input, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (2, 15) } - pub(crate) fn __reduce28< + pub(crate) fn __reduce29< 'input, >( input: &'input str, @@ -5141,15 +9878,15 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(134); + // Comma = ( ",")+ => ActionFn(137); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action134::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 14) + let __nt = super::__action137::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 15) } - pub(crate) fn __reduce29< + pub(crate) fn __reduce30< 'input, >( input: &'input str, @@ -5158,15 +9895,15 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Type => ActionFn(135); + // Comma = Type => ActionFn(138); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action135::<>(input, __sym0); + let __nt = super::__action138::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 15) + (1, 16) } - pub(crate) fn __reduce30< + pub(crate) fn __reduce31< 'input, >( input: &'input str, @@ -5175,14 +9912,14 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(136); + // Comma = => ActionFn(139); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action136::<>(input, &__start, &__end); + let __nt = super::__action139::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (0, 15) + (0, 16) } - pub(crate) fn __reduce31< + pub(crate) fn __reduce32< 'input, >( input: &'input str, @@ -5191,17 +9928,17 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Type => ActionFn(137); + // Comma = ( ",")+, Type => ActionFn(140); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant5(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action137::<>(input, __sym0, __sym1); + let __nt = super::__action140::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (2, 15) + (2, 16) } - pub(crate) fn __reduce32< + pub(crate) fn __reduce33< 'input, >( input: &'input str, @@ -5210,15 +9947,15 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(138); + // Comma = ( ",")+ => ActionFn(141); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action138::<>(input, __sym0); + let __nt = super::__action141::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 15) + (1, 16) } - pub(crate) fn __reduce33< + pub(crate) fn __reduce34< 'input, >( input: &'input str, @@ -5227,7 +9964,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Const = Num, UNum, ":", Type => ActionFn(28); + // Const = Num, UNum, ":", Type => ActionFn(29); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant5(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -5235,29 +9972,9 @@ mod __parse__Const { let __sym0 = __pop_Variant17(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action28::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action29::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); - (4, 16) - } - pub(crate) fn __reduce34< - 'input, - >( - input: &'input str, - __lookahead_start: Option<&usize>, - __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, - _: core::marker::PhantomData<(&'input ())>, - ) -> (usize, usize) - { - // Expr = "(", Ident, ")" => ActionFn(33); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant16(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0.clone(); - let __end = __sym2.2.clone(); - let __nt = super::__action33::<>(input, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (4, 17) } pub(crate) fn __reduce35< 'input, @@ -5268,16 +9985,16 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", Const, ")" => ActionFn(34); + // Expr = "(", Ident, ")" => ActionFn(34); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant11(__symbols); + let __sym1 = __pop_Variant16(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); let __nt = super::__action34::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (3, 18) } pub(crate) fn __reduce36< 'input, @@ -5288,16 +10005,16 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "true", ")" => ActionFn(35); + // Expr = "(", Const, ")" => ActionFn(35); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant11(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); let __nt = super::__action35::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (3, 18) } pub(crate) fn __reduce37< 'input, @@ -5308,7 +10025,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "false", ")" => ActionFn(36); + // Expr = "(", "true", ")" => ActionFn(36); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); @@ -5317,7 +10034,7 @@ mod __parse__Const { let __end = __sym2.2.clone(); let __nt = super::__action36::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (3, 18) } pub(crate) fn __reduce38< 'input, @@ -5328,17 +10045,16 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "!", Expr, ")" => ActionFn(37); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant3(__symbols); + // Expr = "(", "false", ")" => ActionFn(37); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym3.2.clone(); - let __nt = super::__action37::<>(input, __sym0, __sym1, __sym2, __sym3); + let __end = __sym2.2.clone(); + let __nt = super::__action37::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (3, 18) } pub(crate) fn __reduce39< 'input, @@ -5349,18 +10065,17 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "&&", Expr, Expr, ")" => ActionFn(38); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant3(__symbols); + // Expr = "(", "!", Expr, ")" => ActionFn(38); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym4.2.clone(); - let __nt = super::__action38::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __end = __sym3.2.clone(); + let __nt = super::__action38::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (4, 18) } pub(crate) fn __reduce40< 'input, @@ -5371,7 +10086,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "||", Expr, Expr, ")" => ActionFn(39); + // Expr = "(", "&&", Expr, Expr, ")" => ActionFn(39); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -5382,7 +10097,7 @@ mod __parse__Const { let __end = __sym4.2.clone(); let __nt = super::__action39::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce41< 'input, @@ -5393,7 +10108,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "=>", Expr, Expr, ")" => ActionFn(40); + // Expr = "(", "||", Expr, Expr, ")" => ActionFn(40); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -5404,7 +10119,7 @@ mod __parse__Const { let __end = __sym4.2.clone(); let __nt = super::__action40::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce42< 'input, @@ -5415,7 +10130,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "=", Expr, Expr, ")" => ActionFn(41); + // Expr = "(", "=>", Expr, Expr, ")" => ActionFn(41); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -5426,7 +10141,7 @@ mod __parse__Const { let __end = __sym4.2.clone(); let __nt = super::__action41::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce43< 'input, @@ -5437,7 +10152,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "<=", Expr, Expr, ")" => ActionFn(42); + // Expr = "(", "=", Expr, Expr, ")" => ActionFn(42); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -5448,7 +10163,7 @@ mod __parse__Const { let __end = __sym4.2.clone(); let __nt = super::__action42::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce44< 'input, @@ -5459,7 +10174,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "<", Expr, Expr, ")" => ActionFn(43); + // Expr = "(", "<=", Expr, Expr, ")" => ActionFn(43); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -5470,7 +10185,7 @@ mod __parse__Const { let __end = __sym4.2.clone(); let __nt = super::__action43::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce45< 'input, @@ -5481,7 +10196,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sgt", Expr, Expr, ")" => ActionFn(44); + // Expr = "(", "<", Expr, Expr, ")" => ActionFn(44); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -5492,7 +10207,7 @@ mod __parse__Const { let __end = __sym4.2.clone(); let __nt = super::__action44::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce46< 'input, @@ -5503,7 +10218,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sgte", Expr, Expr, ")" => ActionFn(45); + // Expr = "(", "sgt", Expr, Expr, ")" => ActionFn(45); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -5514,7 +10229,7 @@ mod __parse__Const { let __end = __sym4.2.clone(); let __nt = super::__action45::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce47< 'input, @@ -5525,7 +10240,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "slt", Expr, Expr, ")" => ActionFn(46); + // Expr = "(", "sgte", Expr, Expr, ")" => ActionFn(46); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -5536,7 +10251,7 @@ mod __parse__Const { let __end = __sym4.2.clone(); let __nt = super::__action46::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce48< 'input, @@ -5547,7 +10262,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "slte", Expr, Expr, ")" => ActionFn(47); + // Expr = "(", "slt", Expr, Expr, ")" => ActionFn(47); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -5558,7 +10273,7 @@ mod __parse__Const { let __end = __sym4.2.clone(); let __nt = super::__action47::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce49< 'input, @@ -5569,7 +10284,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ugt", Expr, Expr, ")" => ActionFn(48); + // Expr = "(", "slte", Expr, Expr, ")" => ActionFn(48); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -5580,7 +10295,7 @@ mod __parse__Const { let __end = __sym4.2.clone(); let __nt = super::__action48::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce50< 'input, @@ -5591,7 +10306,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ugte", Expr, Expr, ")" => ActionFn(49); + // Expr = "(", "ugt", Expr, Expr, ")" => ActionFn(49); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -5602,7 +10317,7 @@ mod __parse__Const { let __end = __sym4.2.clone(); let __nt = super::__action49::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce51< 'input, @@ -5613,7 +10328,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ult", Expr, Expr, ")" => ActionFn(50); + // Expr = "(", "ugte", Expr, Expr, ")" => ActionFn(50); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -5624,7 +10339,7 @@ mod __parse__Const { let __end = __sym4.2.clone(); let __nt = super::__action50::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce52< 'input, @@ -5635,7 +10350,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ulte", Expr, Expr, ")" => ActionFn(51); + // Expr = "(", "ult", Expr, Expr, ")" => ActionFn(51); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -5646,7 +10361,7 @@ mod __parse__Const { let __end = __sym4.2.clone(); let __nt = super::__action51::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce53< 'input, @@ -5657,17 +10372,18 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "-", Expr, ")" => ActionFn(52); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); + // Expr = "(", "ulte", Expr, Expr, ")" => ActionFn(52); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym3.2.clone(); - let __nt = super::__action52::<>(input, __sym0, __sym1, __sym2, __sym3); + let __end = __sym4.2.clone(); + let __nt = super::__action52::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (5, 18) } pub(crate) fn __reduce54< 'input, @@ -5678,7 +10394,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "~", Expr, ")" => ActionFn(53); + // Expr = "(", "-", Expr, ")" => ActionFn(53); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -5688,7 +10404,7 @@ mod __parse__Const { let __end = __sym3.2.clone(); let __nt = super::__action53::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } pub(crate) fn __reduce55< 'input, @@ -5699,7 +10415,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "clz", Expr, ")" => ActionFn(54); + // Expr = "(", "~", Expr, ")" => ActionFn(54); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -5709,7 +10425,7 @@ mod __parse__Const { let __end = __sym3.2.clone(); let __nt = super::__action54::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } pub(crate) fn __reduce56< 'input, @@ -5720,7 +10436,28 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "a64clz", Expr, Expr, ")" => ActionFn(55); + // Expr = "(", "clz", Expr, ")" => ActionFn(55); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action55::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (4, 18) + } + pub(crate) fn __reduce57< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "a64clz", Expr, Expr, ")" => ActionFn(56); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -5729,11 +10466,11 @@ mod __parse__Const { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action55::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action56::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce57< + pub(crate) fn __reduce58< 'input, >( input: &'input str, @@ -5742,7 +10479,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "cls", Expr, ")" => ActionFn(56); + // Expr = "(", "cls", Expr, ")" => ActionFn(57); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -5750,11 +10487,11 @@ mod __parse__Const { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action56::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action57::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce58< + pub(crate) fn __reduce59< 'input, >( input: &'input str, @@ -5763,7 +10500,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "a64cls", Expr, Expr, ")" => ActionFn(57); + // Expr = "(", "a64cls", Expr, Expr, ")" => ActionFn(58); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -5772,11 +10509,11 @@ mod __parse__Const { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action57::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action58::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce59< + pub(crate) fn __reduce60< 'input, >( input: &'input str, @@ -5785,7 +10522,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "rev", Expr, ")" => ActionFn(58); + // Expr = "(", "rev", Expr, ")" => ActionFn(59); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -5793,11 +10530,11 @@ mod __parse__Const { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action58::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action59::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce60< + pub(crate) fn __reduce61< 'input, >( input: &'input str, @@ -5806,7 +10543,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "a64rev", Expr, Expr, ")" => ActionFn(59); + // Expr = "(", "a64rev", Expr, Expr, ")" => ActionFn(60); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -5815,11 +10552,11 @@ mod __parse__Const { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action59::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action60::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce61< + pub(crate) fn __reduce62< 'input, >( input: &'input str, @@ -5828,7 +10565,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "subs", Expr, Expr, Expr, ")" => ActionFn(60); + // Expr = "(", "subs", Expr, Expr, Expr, ")" => ActionFn(61); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant3(__symbols); @@ -5838,31 +10575,9 @@ mod __parse__Const { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym5.2.clone(); - let __nt = super::__action60::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action61::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (6, 17) - } - pub(crate) fn __reduce62< - 'input, - >( - input: &'input str, - __lookahead_start: Option<&usize>, - __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, - _: core::marker::PhantomData<(&'input ())>, - ) -> (usize, usize) - { - // Expr = "(", "*", Expr, Expr, ")" => ActionFn(61); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant3(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0.clone(); - let __end = __sym4.2.clone(); - let __nt = super::__action61::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); - __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (6, 18) } pub(crate) fn __reduce63< 'input, @@ -5873,7 +10588,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "/", Expr, Expr, ")" => ActionFn(62); + // Expr = "(", "*", Expr, Expr, ")" => ActionFn(62); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -5884,7 +10599,7 @@ mod __parse__Const { let __end = __sym4.2.clone(); let __nt = super::__action62::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce64< 'input, @@ -5895,7 +10610,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sdiv", Expr, Expr, ")" => ActionFn(63); + // Expr = "(", "/", Expr, Expr, ")" => ActionFn(63); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -5906,7 +10621,7 @@ mod __parse__Const { let __end = __sym4.2.clone(); let __nt = super::__action63::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce65< 'input, @@ -5917,7 +10632,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "+", Expr, Expr, ")" => ActionFn(64); + // Expr = "(", "sdiv", Expr, Expr, ")" => ActionFn(64); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -5928,7 +10643,7 @@ mod __parse__Const { let __end = __sym4.2.clone(); let __nt = super::__action64::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce66< 'input, @@ -5939,7 +10654,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "-", Expr, Expr, ")" => ActionFn(65); + // Expr = "(", "+", Expr, Expr, ")" => ActionFn(65); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -5950,7 +10665,7 @@ mod __parse__Const { let __end = __sym4.2.clone(); let __nt = super::__action65::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce67< 'input, @@ -5961,7 +10676,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "urem", Expr, Expr, ")" => ActionFn(66); + // Expr = "(", "-", Expr, Expr, ")" => ActionFn(66); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -5972,7 +10687,7 @@ mod __parse__Const { let __end = __sym4.2.clone(); let __nt = super::__action66::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce68< 'input, @@ -5983,7 +10698,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "srem", Expr, Expr, ")" => ActionFn(67); + // Expr = "(", "urem", Expr, Expr, ")" => ActionFn(67); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -5994,7 +10709,7 @@ mod __parse__Const { let __end = __sym4.2.clone(); let __nt = super::__action67::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce69< 'input, @@ -6005,7 +10720,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "&", Expr, Expr, ")" => ActionFn(68); + // Expr = "(", "srem", Expr, Expr, ")" => ActionFn(68); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -6016,7 +10731,7 @@ mod __parse__Const { let __end = __sym4.2.clone(); let __nt = super::__action68::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce70< 'input, @@ -6027,7 +10742,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "|", Expr, Expr, ")" => ActionFn(69); + // Expr = "(", "&", Expr, Expr, ")" => ActionFn(69); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -6038,7 +10753,7 @@ mod __parse__Const { let __end = __sym4.2.clone(); let __nt = super::__action69::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce71< 'input, @@ -6049,7 +10764,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "xor", Expr, Expr, ")" => ActionFn(70); + // Expr = "(", "|", Expr, Expr, ")" => ActionFn(70); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -6060,7 +10775,7 @@ mod __parse__Const { let __end = __sym4.2.clone(); let __nt = super::__action70::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce72< 'input, @@ -6071,7 +10786,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "rotl", Expr, Expr, ")" => ActionFn(71); + // Expr = "(", "xor", Expr, Expr, ")" => ActionFn(71); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -6082,7 +10797,7 @@ mod __parse__Const { let __end = __sym4.2.clone(); let __nt = super::__action71::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce73< 'input, @@ -6093,7 +10808,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "rotr", Expr, Expr, ")" => ActionFn(72); + // Expr = "(", "rotl", Expr, Expr, ")" => ActionFn(72); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -6104,7 +10819,7 @@ mod __parse__Const { let __end = __sym4.2.clone(); let __nt = super::__action72::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce74< 'input, @@ -6115,7 +10830,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "shl", Expr, Expr, ")" => ActionFn(73); + // Expr = "(", "rotr", Expr, Expr, ")" => ActionFn(73); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -6126,7 +10841,7 @@ mod __parse__Const { let __end = __sym4.2.clone(); let __nt = super::__action73::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce75< 'input, @@ -6137,7 +10852,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "shr", Expr, Expr, ")" => ActionFn(74); + // Expr = "(", "shl", Expr, Expr, ")" => ActionFn(74); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -6148,7 +10863,7 @@ mod __parse__Const { let __end = __sym4.2.clone(); let __nt = super::__action74::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce76< 'input, @@ -6159,7 +10874,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ashr", Expr, Expr, ")" => ActionFn(75); + // Expr = "(", "shr", Expr, Expr, ")" => ActionFn(75); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -6170,7 +10885,7 @@ mod __parse__Const { let __end = __sym4.2.clone(); let __nt = super::__action75::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce77< 'input, @@ -6181,18 +10896,18 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "zero_ext", Width, Expr, ")" => ActionFn(76); + // Expr = "(", "ashr", Expr, Expr, ")" => ActionFn(76); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant24(__symbols); + let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action76::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce78< 'input, @@ -6203,18 +10918,18 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "zero_ext", Expr, Expr, ")" => ActionFn(77); + // Expr = "(", "zero_ext", Width, Expr, ")" => ActionFn(77); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant24(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action77::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce79< 'input, @@ -6225,18 +10940,18 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sign_ext", Width, Expr, ")" => ActionFn(78); + // Expr = "(", "zero_ext", Expr, Expr, ")" => ActionFn(78); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant24(__symbols); + let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action78::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce80< 'input, @@ -6247,18 +10962,18 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sign_ext", Expr, Expr, ")" => ActionFn(79); + // Expr = "(", "sign_ext", Width, Expr, ")" => ActionFn(79); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant24(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action79::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce81< 'input, @@ -6269,7 +10984,29 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "extract", UNum, UNum, Expr, ")" => ActionFn(80); + // Expr = "(", "sign_ext", Expr, Expr, ")" => ActionFn(80); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action80::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce82< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "extract", UNum, UNum, Expr, ")" => ActionFn(81); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant3(__symbols); @@ -6279,11 +11016,11 @@ mod __parse__Const { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym5.2.clone(); - let __nt = super::__action80::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action81::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (6, 17) + (6, 18) } - pub(crate) fn __reduce82< + pub(crate) fn __reduce83< 'input, >( input: &'input str, @@ -6292,7 +11029,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "conv_to", Width, Expr, ")" => ActionFn(81); + // Expr = "(", "conv_to", Width, Expr, ")" => ActionFn(82); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -6301,11 +11038,11 @@ mod __parse__Const { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action81::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action82::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce83< + pub(crate) fn __reduce84< 'input, >( input: &'input str, @@ -6314,7 +11051,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "conv_to", Expr, Expr, ")" => ActionFn(82); + // Expr = "(", "conv_to", Expr, Expr, ")" => ActionFn(83); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -6323,11 +11060,11 @@ mod __parse__Const { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action82::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action83::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce84< + pub(crate) fn __reduce85< 'input, >( input: &'input str, @@ -6336,7 +11073,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "if", Expr, Expr, Expr, ")" => ActionFn(83); + // Expr = "(", "if", Expr, Expr, Expr, ")" => ActionFn(84); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant3(__symbols); @@ -6346,11 +11083,11 @@ mod __parse__Const { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym5.2.clone(); - let __nt = super::__action83::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action84::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (6, 17) + (6, 18) } - pub(crate) fn __reduce85< + pub(crate) fn __reduce86< 'input, >( input: &'input str, @@ -6359,7 +11096,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "switch", Expr, Pair+, ")" => ActionFn(84); + // Expr = "(", "switch", Expr, Pair+, ")" => ActionFn(85); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant19(__symbols); @@ -6368,11 +11105,11 @@ mod __parse__Const { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action84::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action85::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce86< + pub(crate) fn __reduce87< 'input, >( input: &'input str, @@ -6381,7 +11118,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "int2bv", UNum, Expr, ")" => ActionFn(85); + // Expr = "(", "int2bv", UNum, Expr, ")" => ActionFn(86); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -6390,11 +11127,11 @@ mod __parse__Const { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action85::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action86::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce87< + pub(crate) fn __reduce88< 'input, >( input: &'input str, @@ -6403,7 +11140,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "bv2int", Expr, ")" => ActionFn(86); + // Expr = "(", "bv2int", Expr, ")" => ActionFn(87); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -6411,11 +11148,11 @@ mod __parse__Const { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action86::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action87::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce88< + pub(crate) fn __reduce89< 'input, >( input: &'input str, @@ -6424,7 +11161,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "widthof", Expr, ")" => ActionFn(87); + // Expr = "(", "widthof", Expr, ")" => ActionFn(88); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -6432,11 +11169,11 @@ mod __parse__Const { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action87::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action88::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce89< + pub(crate) fn __reduce90< 'input, >( input: &'input str, @@ -6445,15 +11182,15 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr? = Expr => ActionFn(104); + // Expr? = Expr => ActionFn(107); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action104::<>(input, __sym0); + let __nt = super::__action107::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (1, 18) + (1, 19) } - pub(crate) fn __reduce90< + pub(crate) fn __reduce91< 'input, >( input: &'input str, @@ -6462,14 +11199,14 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr? = => ActionFn(105); + // Expr? = => ActionFn(108); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action105::<>(input, &__start, &__end); + let __nt = super::__action108::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (0, 18) + (0, 19) } - pub(crate) fn __reduce91< + pub(crate) fn __reduce92< 'input, >( input: &'input str, @@ -6478,15 +11215,15 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprList = Comma => ActionFn(24); - let __sym0 = __pop_Variant9(__symbols); + // ExprList = Comma => ActionFn(25); + let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action24::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 19) + let __nt = super::__action25::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 20) } - pub(crate) fn __reduce92< + pub(crate) fn __reduce93< 'input, >( input: &'input str, @@ -6495,7 +11232,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Function = Ident, "(", ArgList, ")", "(", Type, ")", "{", Expr, "}" => ActionFn(29); + // Function = Ident, "(", ArgList, ")", "(", Type, ")", "{", Expr, "}" => ActionFn(30); assert!(__symbols.len() >= 10); let __sym9 = __pop_Variant0(__symbols); let __sym8 = __pop_Variant3(__symbols); @@ -6509,11 +11246,11 @@ mod __parse__Const { let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0.clone(); let __end = __sym9.2.clone(); - let __nt = super::__action29::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); + let __nt = super::__action30::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); - (10, 20) + (10, 21) } - pub(crate) fn __reduce93< + pub(crate) fn __reduce94< 'input, >( input: &'input str, @@ -6522,19 +11259,19 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // FunctionApplication = Expr, "(", ExprList, ")" => ActionFn(30); + // FunctionApplication = Expr, "(", ExprList, ")" => ActionFn(31); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant9(__symbols); + let __sym2 = __pop_Variant8(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action30::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action31::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (4, 21) + (4, 22) } - pub(crate) fn __reduce94< + pub(crate) fn __reduce95< 'input, >( input: &'input str, @@ -6543,7 +11280,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // FunctionType = "func", "(", TypeList, ")", "(", Type, ")" => ActionFn(27); + // FunctionType = "func", "(", TypeList, ")", "(", Type, ")" => ActionFn(28); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant5(__symbols); @@ -6554,11 +11291,11 @@ mod __parse__Const { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym6.2.clone(); - let __nt = super::__action27::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action28::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (7, 22) + (7, 23) } - pub(crate) fn __reduce95< + pub(crate) fn __reduce96< 'input, >( input: &'input str, @@ -6567,15 +11304,15 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"[A-Za-z]"# => ActionFn(12); + // Ident = r#"[A-Za-z]"# => ActionFn(13); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action12::<>(input, __sym0); + let __nt = super::__action13::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 23) + (1, 24) } - pub(crate) fn __reduce96< + pub(crate) fn __reduce97< 'input, >( input: &'input str, @@ -6584,15 +11321,15 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"[A-Zac-z][\\.\\w]+"# => ActionFn(13); + // Ident = r#"[A-Zac-z][\\.\\w]+"# => ActionFn(14); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action13::<>(input, __sym0); + let __nt = super::__action14::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 23) + (1, 24) } - pub(crate) fn __reduce97< + pub(crate) fn __reduce98< 'input, >( input: &'input str, @@ -6601,15 +11338,15 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"b[\\w&&[^v]][\\.\\w]*"# => ActionFn(14); + // Ident = r#"b[\\w&&[^v]][\\.\\w]*"# => ActionFn(15); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action14::<>(input, __sym0); + let __nt = super::__action15::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 23) + (1, 24) } - pub(crate) fn __reduce98< + pub(crate) fn __reduce99< 'input, >( input: &'input str, @@ -6618,15 +11355,15 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Num = r#"-?[0-9]+i"# => ActionFn(11); + // Num = r#"-?[0-9]+i"# => ActionFn(12); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action11::<>(input, __sym0); + let __nt = super::__action12::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant17(__nt), __end)); - (1, 24) + (1, 25) } - pub(crate) fn __reduce99< + pub(crate) fn __reduce100< 'input, >( input: &'input str, @@ -6635,7 +11372,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Pair = "(", Expr, Expr, ")" => ActionFn(25); + // Pair = "(", Expr, Expr, ")" => ActionFn(26); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -6643,11 +11380,11 @@ mod __parse__Const { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action25::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action26::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant18(__nt), __end)); - (4, 25) + (4, 26) } - pub(crate) fn __reduce100< + pub(crate) fn __reduce101< 'input, >( input: &'input str, @@ -6656,15 +11393,15 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Pair+ = Pair => ActionFn(89); + // Pair+ = Pair => ActionFn(92); let __sym0 = __pop_Variant18(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action89::<>(input, __sym0); + let __nt = super::__action92::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant19(__nt), __end)); - (1, 26) + (1, 27) } - pub(crate) fn __reduce101< + pub(crate) fn __reduce102< 'input, >( input: &'input str, @@ -6673,17 +11410,17 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Pair+ = Pair+, Pair => ActionFn(90); + // Pair+ = Pair+, Pair => ActionFn(93); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant18(__symbols); let __sym0 = __pop_Variant19(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action90::<>(input, __sym0, __sym1); + let __nt = super::__action93::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant19(__nt), __end)); - (2, 26) + (2, 27) } - pub(crate) fn __reduce102< + pub(crate) fn __reduce103< 'input, >( input: &'input str, @@ -6692,11 +11429,40 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // TermAnnotation = "(", "spec", TermSignature, "(", "assertions", ExprList, ")", ")" => ActionFn(88); + // TermAnnotation = "(", "spec", TermSignature, "(", "assume", ExprList, ")", "(", "assert", ExprList, ")", ")" => ActionFn(90); + assert!(__symbols.len() >= 12); + let __sym11 = __pop_Variant0(__symbols); + let __sym10 = __pop_Variant0(__symbols); + let __sym9 = __pop_Variant8(__symbols); + let __sym8 = __pop_Variant0(__symbols); + let __sym7 = __pop_Variant0(__symbols); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant8(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant21(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym11.2.clone(); + let __nt = super::__action90::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9, __sym10, __sym11); + __symbols.push((__start, __Symbol::Variant20(__nt), __end)); + (12, 28) + } + pub(crate) fn __reduce104< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // TermAnnotation = "(", "spec", TermSignature, "(", "assume", ExprList, ")", ")" => ActionFn(91); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant9(__symbols); + let __sym5 = __pop_Variant8(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant21(__symbols); @@ -6704,11 +11470,11 @@ mod __parse__Const { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym7.2.clone(); - let __nt = super::__action88::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); + let __nt = super::__action91::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant20(__nt), __end)); - (8, 27) + (8, 28) } - pub(crate) fn __reduce103< + pub(crate) fn __reduce105< 'input, >( input: &'input str, @@ -6717,7 +11483,7 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // TermSignature = "(", "sig", Args, "(", BoundVar, ")", ")" => ActionFn(26); + // TermSignature = "(", "sig", Args, "(", BoundVar, ")", ")" => ActionFn(27); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -6728,11 +11494,11 @@ mod __parse__Const { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym6.2.clone(); - let __nt = super::__action26::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action27::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant21(__nt), __end)); - (7, 28) + (7, 29) } - pub(crate) fn __reduce104< + pub(crate) fn __reduce106< 'input, >( input: &'input str, @@ -6741,15 +11507,15 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "bv" => ActionFn(15); + // Type = "bv" => ActionFn(16); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action15::<>(input, __sym0); + let __nt = super::__action16::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 29) + (1, 30) } - pub(crate) fn __reduce105< + pub(crate) fn __reduce107< 'input, >( input: &'input str, @@ -6758,17 +11524,17 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "bv", UNum => ActionFn(16); + // Type = "bv", UNum => ActionFn(17); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant23(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action16::<>(input, __sym0, __sym1); + let __nt = super::__action17::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (2, 29) + (2, 30) } - pub(crate) fn __reduce106< + pub(crate) fn __reduce108< 'input, >( input: &'input str, @@ -6777,15 +11543,15 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "isleType" => ActionFn(17); + // Type = "isleType" => ActionFn(18); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action17::<>(input, __sym0); + let __nt = super::__action18::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 29) + (1, 30) } - pub(crate) fn __reduce107< + pub(crate) fn __reduce109< 'input, >( input: &'input str, @@ -6794,15 +11560,15 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "bool" => ActionFn(18); + // Type = "bool" => ActionFn(19); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action18::<>(input, __sym0); + let __nt = super::__action19::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 29) + (1, 30) } - pub(crate) fn __reduce108< + pub(crate) fn __reduce110< 'input, >( input: &'input str, @@ -6811,15 +11577,15 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type? = Type => ActionFn(99); + // Type? = Type => ActionFn(102); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action99::<>(input, __sym0); + let __nt = super::__action102::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant22(__nt), __end)); - (1, 30) + (1, 31) } - pub(crate) fn __reduce109< + pub(crate) fn __reduce111< 'input, >( input: &'input str, @@ -6828,14 +11594,14 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type? = => ActionFn(100); + // Type? = => ActionFn(103); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action100::<>(input, &__start, &__end); + let __nt = super::__action103::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant22(__nt), __end)); - (0, 30) + (0, 31) } - pub(crate) fn __reduce110< + pub(crate) fn __reduce112< 'input, >( input: &'input str, @@ -6844,15 +11610,15 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // TypeList = Comma => ActionFn(23); + // TypeList = Comma => ActionFn(24); let __sym0 = __pop_Variant10(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action23::<>(input, __sym0); + let __nt = super::__action24::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 31) + (1, 32) } - pub(crate) fn __reduce111< + pub(crate) fn __reduce113< 'input, >( input: &'input str, @@ -6861,15 +11627,15 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // UNum = r#"[0-9]+"# => ActionFn(10); + // UNum = r#"[0-9]+"# => ActionFn(11); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action10::<>(input, __sym0); + let __nt = super::__action11::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant23(__nt), __end)); - (1, 32) + (1, 33) } - pub(crate) fn __reduce112< + pub(crate) fn __reduce114< 'input, >( input: &'input str, @@ -6878,18 +11644,18 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Width = "(", "regwidth", ")" => ActionFn(31); + // Width = "(", "regwidth", ")" => ActionFn(32); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action31::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action32::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (3, 33) + (3, 34) } - pub(crate) fn __reduce113< + pub(crate) fn __reduce115< 'input, >( input: &'input str, @@ -6898,18 +11664,35 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Width = "(", UNum, ")" => ActionFn(32); + // Width = "(", UNum, ")" => ActionFn(33); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant23(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action32::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action33::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (3, 33) + (3, 34) } - pub(crate) fn __reduce114< + pub(crate) fn __reduce116< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // __AssertBlock = AssertBlock => ActionFn(9); + let __sym0 = __pop_Variant8(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action9::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 35) + } + pub(crate) fn __reduce117< 'input, >( input: &'input str, @@ -6924,9 +11707,9 @@ mod __parse__Const { let __end = __sym0.2.clone(); let __nt = super::__action1::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); - (1, 34) + (1, 36) } - pub(crate) fn __reduce116< + pub(crate) fn __reduce119< 'input, >( input: &'input str, @@ -6941,9 +11724,9 @@ mod __parse__Const { let __end = __sym0.2.clone(); let __nt = super::__action8::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (1, 36) + (1, 38) } - pub(crate) fn __reduce117< + pub(crate) fn __reduce120< 'input, >( input: &'input str, @@ -6958,9 +11741,9 @@ mod __parse__Const { let __end = __sym0.2.clone(); let __nt = super::__action5::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); - (1, 37) + (1, 39) } - pub(crate) fn __reduce118< + pub(crate) fn __reduce121< 'input, >( input: &'input str, @@ -6975,9 +11758,9 @@ mod __parse__Const { let __end = __sym0.2.clone(); let __nt = super::__action6::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 38) + (1, 40) } - pub(crate) fn __reduce119< + pub(crate) fn __reduce122< 'input, >( input: &'input str, @@ -6992,9 +11775,9 @@ mod __parse__Const { let __end = __sym0.2.clone(); let __nt = super::__action3::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 39) + (1, 41) } - pub(crate) fn __reduce120< + pub(crate) fn __reduce123< 'input, >( input: &'input str, @@ -7003,15 +11786,15 @@ mod __parse__Const { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // __TermAnnotation = TermAnnotation => ActionFn(9); + // __TermAnnotation = TermAnnotation => ActionFn(10); let __sym0 = __pop_Variant20(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action9::<>(input, __sym0); + let __nt = super::__action10::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant20(__nt), __end)); - (1, 40) + (1, 42) } - pub(crate) fn __reduce121< + pub(crate) fn __reduce124< 'input, >( input: &'input str, @@ -7026,9 +11809,9 @@ mod __parse__Const { let __end = __sym0.2.clone(); let __nt = super::__action2::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant21(__nt), __end)); - (1, 41) + (1, 43) } - pub(crate) fn __reduce122< + pub(crate) fn __reduce125< 'input, >( input: &'input str, @@ -7043,9 +11826,9 @@ mod __parse__Const { let __end = __sym0.2.clone(); let __nt = super::__action0::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 42) + (1, 44) } - pub(crate) fn __reduce123< + pub(crate) fn __reduce126< 'input, >( input: &'input str, @@ -7060,7 +11843,7 @@ mod __parse__Const { let __end = __sym0.2.clone(); let __nt = super::__action7::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (1, 43) + (1, 45) } } pub use self::__parse__Const::ConstParser; @@ -7090,8 +11873,8 @@ mod __parse__Expr { Variant5(Type), Variant6(alloc::vec::Vec), Variant7(Vec), - Variant8(core::option::Option), - Variant9(Vec>), + Variant8(Vec>), + Variant9(core::option::Option), Variant10(Vec), Variant11(Const), Variant12(core::option::Option>), @@ -7110,466 +11893,466 @@ mod __parse__Expr { } const __ACTION: &[i16] = &[ // State 0 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1 - 4, 5, 6, 0, 0, 0, 7, 8, 0, 9, 10, 0, 11, 12, 13, 14, 15, 16, 17, 18, 0, 0, 0, 19, 20, 21, 22, 23, 106, 0, 24, 25, 0, 0, 26, 27, 28, 29, 30, 31, 32, 33, 0, 34, 35, 36, 0, 37, 38, 39, 107, 40, 41, 42, 43, 44, 45, 46, 47, 0, 48, 49, 0, 50, 108, 0, 109, 110, 111, + 4, 5, 6, 0, 0, 0, 7, 8, 0, 9, 10, 0, 11, 12, 13, 14, 15, 16, 17, 18, 0, 0, 0, 0, 19, 20, 21, 22, 23, 106, 0, 24, 25, 0, 0, 26, 27, 28, 29, 30, 31, 32, 33, 0, 34, 35, 36, 0, 37, 38, 39, 107, 40, 41, 42, 43, 44, 45, 46, 47, 0, 48, 49, 0, 50, 108, 0, 109, 110, 111, // State 2 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, // State 3 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 4 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 5 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 6 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 7 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 8 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 9 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 10 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 11 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 12 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 13 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 14 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 15 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 16 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 17 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 18 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 19 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 20 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 21 - 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 22 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, // State 23 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 24 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, // State 25 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 26 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 27 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 28 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 29 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 30 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 31 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 32 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 33 - 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 34 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 35 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 36 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 37 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 38 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 39 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 40 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 41 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 42 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 43 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 44 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 45 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 46 - 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 47 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 48 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 49 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 50 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 51 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 52 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 53 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 54 - 0, 0, 0, 2, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 55 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 56 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 57 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 58 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 59 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 60 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 61 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 62 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 63 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 64 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 65 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 66 - 4, 5, 6, 0, 0, 0, 7, 8, 0, 9, 10, 0, 11, 12, 13, 14, 15, 16, 17, 18, 0, 0, 0, 19, 20, 21, 22, 23, 106, 0, 24, 25, 0, 147, 26, 27, 28, 29, 30, 31, 32, 33, 0, 34, 35, 36, 0, 37, 38, 39, 107, 40, 41, 42, 43, 44, 45, 46, 47, 0, 48, 49, 0, 50, 108, 115, 109, 110, 111, + 4, 5, 6, 0, 0, 0, 7, 8, 0, 9, 10, 0, 11, 12, 13, 14, 15, 16, 17, 18, 0, 0, 0, 0, 19, 20, 21, 22, 23, 106, 0, 24, 25, 0, 147, 26, 27, 28, 29, 30, 31, 32, 33, 0, 34, 35, 36, 0, 37, 38, 39, 107, 40, 41, 42, 43, 44, 45, 46, 47, 0, 48, 49, 0, 50, 108, 115, 109, 110, 111, // State 67 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, // State 68 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 69 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 70 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 71 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 72 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 73 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 74 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 75 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 76 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 77 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 78 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 79 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 80 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 81 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 82 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 83 - 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 84 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 85 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 86 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 87 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 88 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 89 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 90 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 91 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 92 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 93 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 94 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 95 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 96 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 97 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 98 - 0, 0, 0, 100, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 100, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 99 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 100 - 0, 0, 0, 0, 0, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, + 0, 0, 0, 0, 0, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, // State 101 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 102 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 103 - 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 104 - 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 105 - 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 106 - 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 107 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0, 0, 0, // State 108 - 0, 0, 0, 0, 0, -96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 109 - 0, 0, 0, 0, 0, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 110 - 0, 0, 0, 0, 0, -98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 111 - 0, 0, 0, -36, 0, -36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -37, 0, -37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 112 - 0, 0, 0, -35, 0, -35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -36, 0, -36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 113 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 114 - 0, 0, 0, -112, 0, -112, 0, 0, 0, 0, 0, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, 0, 0, 0, + 0, 0, 0, -114, 0, -114, 0, 0, 0, 0, 0, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, 0, 0, 0, // State 115 - 0, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 116 - 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 117 - 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 118 - 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 119 - 0, 0, 0, -38, 0, -38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -39, 0, -39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 120 - 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 121 - 0, 0, 0, -37, 0, -37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -38, 0, -38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 122 - 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 123 - 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 124 - 0, 0, 0, -39, 0, -39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -40, 0, -40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 125 - 0, 0, 0, 0, 0, 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 126 - 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 127 - 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 128 - 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 129 - 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 130 - 0, 0, 0, -54, 0, -54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -55, 0, -55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 131 - 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 132 - 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 133 - 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 134 - 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 135 - 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 136 - 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 137 - 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 138 - 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 139 - 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 140 - 0, 0, 0, -88, 0, -88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -89, 0, -89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 141 - 0, 0, 0, -58, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -59, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 142 - 0, 0, 0, -56, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -57, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 143 - 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 144 - 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 145 - 0, 0, 0, 0, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 146 - 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 147 - 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 148 - 0, 0, 0, -60, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -61, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 149 - 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 150 - 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 151 - 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 152 - 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 153 - 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 154 - 0, 0, 0, 0, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 155 - 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 156 - 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 157 - 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 158 - 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 159 - 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 160 - 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 161 - 0, 0, 0, -101, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -102, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 162 - 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 163 - 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 164 - 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 165 - 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 166 - 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 167 - 0, 0, 0, -89, 0, -89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -90, 0, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 168 - 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 169 - 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 170 - 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 171 - 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 172 - 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 173 - 0, 0, 0, -55, 0, -55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -56, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 174 - 0, 0, 0, 0, 0, -34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 175 - 0, 0, 0, 0, 0, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 176 - 0, 0, 0, 0, 0, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 177 - 0, 0, 0, -70, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -71, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 178 - 0, 0, 0, -40, 0, -40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -41, 0, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 179 - 0, 0, 0, -63, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -64, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 180 - 0, 0, 0, -66, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -67, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 181 - 0, 0, 0, -67, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -68, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 182 - 0, 0, 0, -64, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -65, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 183 - 0, 0, 0, -45, 0, -45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -46, 0, -46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 184 - 0, 0, 0, -44, 0, -44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -45, 0, -45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 185 - 0, 0, 0, -43, 0, -43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -44, 0, -44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 186 - 0, 0, 0, -42, 0, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -43, 0, -43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 187 - 0, 0, 0, -59, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -60, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 188 - 0, 0, 0, -57, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -58, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 189 - 0, 0, 0, -61, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -62, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 190 - 0, 0, 0, -77, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -78, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 191 - 0, 0, 0, -84, 0, -84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -85, 0, -85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 192 - 0, 0, 0, -83, 0, -83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -84, 0, -84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 193 - 0, 0, 0, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 194 - 0, 0, 0, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 195 - 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 196 - 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 197 - 0, 0, 0, -87, 0, -87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -88, 0, -88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 198 - 0, 0, 0, -73, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -74, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 199 - 0, 0, 0, -74, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -75, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 200 - 0, 0, 0, -65, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -66, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 201 - 0, 0, 0, -46, 0, -46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -47, 0, -47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 202 - 0, 0, 0, -47, 0, -47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -48, 0, -48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 203 - 0, 0, 0, -75, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -76, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 204 - 0, 0, 0, -76, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -77, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 205 - 0, 0, 0, -81, 0, -81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -82, 0, -82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 206 - 0, 0, 0, -80, 0, -80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -81, 0, -81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 207 - 0, 0, 0, -48, 0, -48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -49, 0, -49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 208 - 0, 0, 0, -49, 0, -49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -50, 0, -50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 209 - 0, 0, 0, -69, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -70, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 210 - 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 211 - 0, 0, 0, -102, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -103, 0, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 212 - 0, 0, 0, -86, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -87, 0, -87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 213 - 0, 0, 0, -50, 0, -50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -51, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 214 - 0, 0, 0, -51, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -52, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 215 - 0, 0, 0, -52, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -53, 0, -53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 216 - 0, 0, 0, -53, 0, -53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -54, 0, -54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 217 - 0, 0, 0, -68, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -69, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 218 - 0, 0, 0, -72, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -73, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 219 - 0, 0, 0, -79, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -80, 0, -80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 220 - 0, 0, 0, -78, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -79, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 221 - 0, 0, 0, -71, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -72, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 222 - 0, 0, 0, -41, 0, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -42, 0, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 223 - 0, 0, 0, 0, 0, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 224 - 0, 0, 0, -82, 0, -82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -83, 0, -83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 225 - 0, 0, 0, -85, 0, -85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -86, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 226 - 0, 0, 0, -62, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -63, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 227 - 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 228 - 0, 0, 0, -100, 0, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -101, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]; fn __action(state: i16, integer: usize) -> i16 { - __ACTION[(state as usize) * 69 + integer] + __ACTION[(state as usize) * 70 + integer] } const __EOF_ACTION: &[i16] = &[ // State 0 @@ -7777,7 +12560,7 @@ mod __parse__Expr { // State 101 0, // State 102 - -117, + -120, // State 103 0, // State 104 @@ -7795,9 +12578,9 @@ mod __parse__Expr { // State 110 0, // State 111 - -36, + -37, // State 112 - -35, + -36, // State 113 0, // State 114 @@ -7811,17 +12594,17 @@ mod __parse__Expr { // State 118 0, // State 119 - -38, + -39, // State 120 0, // State 121 - -37, + -38, // State 122 0, // State 123 0, // State 124 - -39, + -40, // State 125 0, // State 126 @@ -7833,7 +12616,7 @@ mod __parse__Expr { // State 129 0, // State 130 - -54, + -55, // State 131 0, // State 132 @@ -7853,11 +12636,11 @@ mod __parse__Expr { // State 139 0, // State 140 - -88, + -89, // State 141 - -58, + -59, // State 142 - -56, + -57, // State 143 0, // State 144 @@ -7869,7 +12652,7 @@ mod __parse__Expr { // State 147 0, // State 148 - -60, + -61, // State 149 0, // State 150 @@ -7907,7 +12690,7 @@ mod __parse__Expr { // State 166 0, // State 167 - -89, + -90, // State 168 0, // State 169 @@ -7919,7 +12702,7 @@ mod __parse__Expr { // State 172 0, // State 173 - -55, + -56, // State 174 0, // State 175 @@ -7927,37 +12710,37 @@ mod __parse__Expr { // State 176 0, // State 177 - -70, + -71, // State 178 - -40, + -41, // State 179 - -63, + -64, // State 180 - -66, - // State 181 -67, + // State 181 + -68, // State 182 - -64, + -65, // State 183 - -45, + -46, // State 184 - -44, + -45, // State 185 - -43, + -44, // State 186 - -42, + -43, // State 187 - -59, + -60, // State 188 - -57, + -58, // State 189 - -61, + -62, // State 190 - -77, + -78, // State 191 - -84, + -85, // State 192 - -83, + -84, // State 193 0, // State 194 @@ -7967,65 +12750,65 @@ mod __parse__Expr { // State 196 0, // State 197 - -87, + -88, // State 198 - -73, - // State 199 -74, + // State 199 + -75, // State 200 - -65, + -66, // State 201 - -46, - // State 202 -47, + // State 202 + -48, // State 203 - -75, - // State 204 -76, + // State 204 + -77, // State 205 - -81, + -82, // State 206 - -80, + -81, // State 207 - -48, - // State 208 -49, + // State 208 + -50, // State 209 - -69, + -70, // State 210 0, // State 211 0, // State 212 - -86, + -87, // State 213 - -50, - // State 214 -51, - // State 215 + // State 214 -52, - // State 216 + // State 215 -53, + // State 216 + -54, // State 217 - -68, + -69, // State 218 - -72, + -73, // State 219 - -79, + -80, // State 220 - -78, + -79, // State 221 - -71, + -72, // State 222 - -41, + -42, // State 223 0, // State 224 - -82, + -83, // State 225 - -85, + -86, // State 226 - -62, + -63, // State 227 0, // State 228 @@ -8033,8 +12816,8 @@ mod __parse__Expr { ]; fn __goto(state: i16, nt: usize) -> i16 { match nt { - 16 => 103, - 17 => match state { + 17 => 103, + 18 => match state { 5 => 51, 6 => 52, 7 => 53, @@ -8128,15 +12911,15 @@ mod __parse__Expr { 101 => 227, _ => 50, }, - 23 => 104, - 24 => 2, - 25 => match state { + 24 => 104, + 25 => 2, + 26 => match state { 98 => 211, _ => 161, }, - 26 => 98, - 29 => 174, - 32 => match state { + 27 => 98, + 30 => 174, + 33 => match state { 24 => 69, 67 => 95, 2 => 113, @@ -8144,7 +12927,7 @@ mod __parse__Expr { 100 => 223, _ => 67, }, - 33 => match state { + 34 => match state { 33 => 78, 46 => 91, _ => 65, @@ -8174,7 +12957,8 @@ mod __parse__Expr { r###""a64clz""###, r###""a64rev""###, r###""ashr""###, - r###""assertions""###, + r###""assert""###, + r###""assume""###, r###""bool""###, r###""bv""###, r###""bv2int""###, @@ -8275,7 +13059,7 @@ mod __parse__Expr { #[inline] fn error_action(&self, state: i16) -> i16 { - __action(state, 69 - 1) + __action(state, 70 - 1) } #[inline] @@ -8402,11 +13186,12 @@ mod __parse__Expr { Token(66, _) if true => Some(61), Token(67, _) if true => Some(62), Token(68, _) if true => Some(63), - Token(0, _) if true => Some(64), - Token(1, _) if true => Some(65), - Token(2, _) if true => Some(66), - Token(3, _) if true => Some(67), - Token(4, _) if true => Some(68), + Token(69, _) if true => Some(64), + Token(0, _) if true => Some(65), + Token(1, _) if true => Some(66), + Token(2, _) if true => Some(67), + Token(3, _) if true => Some(68), + Token(4, _) if true => Some(69), _ => None, } } @@ -8419,8 +13204,8 @@ mod __parse__Expr { ) -> __Symbol<'input> { match __token_index { - 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 => match __token { - Token(5, __tok0) | Token(6, __tok0) | Token(7, __tok0) | Token(8, __tok0) | Token(9, __tok0) | Token(10, __tok0) | Token(11, __tok0) | Token(12, __tok0) | Token(13, __tok0) | Token(14, __tok0) | Token(15, __tok0) | Token(16, __tok0) | Token(17, __tok0) | Token(18, __tok0) | Token(19, __tok0) | Token(20, __tok0) | Token(21, __tok0) | Token(22, __tok0) | Token(23, __tok0) | Token(24, __tok0) | Token(25, __tok0) | Token(26, __tok0) | Token(27, __tok0) | Token(28, __tok0) | Token(29, __tok0) | Token(30, __tok0) | Token(31, __tok0) | Token(32, __tok0) | Token(33, __tok0) | Token(34, __tok0) | Token(35, __tok0) | Token(36, __tok0) | Token(37, __tok0) | Token(38, __tok0) | Token(39, __tok0) | Token(40, __tok0) | Token(41, __tok0) | Token(42, __tok0) | Token(43, __tok0) | Token(44, __tok0) | Token(45, __tok0) | Token(46, __tok0) | Token(47, __tok0) | Token(48, __tok0) | Token(49, __tok0) | Token(50, __tok0) | Token(51, __tok0) | Token(52, __tok0) | Token(53, __tok0) | Token(54, __tok0) | Token(55, __tok0) | Token(56, __tok0) | Token(57, __tok0) | Token(58, __tok0) | Token(59, __tok0) | Token(60, __tok0) | Token(61, __tok0) | Token(62, __tok0) | Token(63, __tok0) | Token(64, __tok0) | Token(65, __tok0) | Token(66, __tok0) | Token(67, __tok0) | Token(68, __tok0) | Token(0, __tok0) | Token(1, __tok0) | Token(2, __tok0) | Token(3, __tok0) | Token(4, __tok0) if true => __Symbol::Variant0(__tok0), + 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 => match __token { + Token(5, __tok0) | Token(6, __tok0) | Token(7, __tok0) | Token(8, __tok0) | Token(9, __tok0) | Token(10, __tok0) | Token(11, __tok0) | Token(12, __tok0) | Token(13, __tok0) | Token(14, __tok0) | Token(15, __tok0) | Token(16, __tok0) | Token(17, __tok0) | Token(18, __tok0) | Token(19, __tok0) | Token(20, __tok0) | Token(21, __tok0) | Token(22, __tok0) | Token(23, __tok0) | Token(24, __tok0) | Token(25, __tok0) | Token(26, __tok0) | Token(27, __tok0) | Token(28, __tok0) | Token(29, __tok0) | Token(30, __tok0) | Token(31, __tok0) | Token(32, __tok0) | Token(33, __tok0) | Token(34, __tok0) | Token(35, __tok0) | Token(36, __tok0) | Token(37, __tok0) | Token(38, __tok0) | Token(39, __tok0) | Token(40, __tok0) | Token(41, __tok0) | Token(42, __tok0) | Token(43, __tok0) | Token(44, __tok0) | Token(45, __tok0) | Token(46, __tok0) | Token(47, __tok0) | Token(48, __tok0) | Token(49, __tok0) | Token(50, __tok0) | Token(51, __tok0) | Token(52, __tok0) | Token(53, __tok0) | Token(54, __tok0) | Token(55, __tok0) | Token(56, __tok0) | Token(57, __tok0) | Token(58, __tok0) | Token(59, __tok0) | Token(60, __tok0) | Token(61, __tok0) | Token(62, __tok0) | Token(63, __tok0) | Token(64, __tok0) | Token(65, __tok0) | Token(66, __tok0) | Token(67, __tok0) | Token(68, __tok0) | Token(69, __tok0) | Token(0, __tok0) | Token(1, __tok0) | Token(2, __tok0) | Token(3, __tok0) | Token(4, __tok0) if true => __Symbol::Variant0(__tok0), _ => unreachable!(), }, _ => unreachable!(), @@ -8819,12 +13604,7 @@ mod __parse__Expr { __reduce115(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } 116 => { - // __Expr = Expr => ActionFn(8); - let __sym0 = __pop_Variant3(__symbols); - let __start = __sym0.0.clone(); - let __end = __sym0.2.clone(); - let __nt = super::__action8::<>(input, __sym0); - return Some(Ok(__nt)); + __reduce116(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } 117 => { __reduce117(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) @@ -8833,7 +13613,12 @@ mod __parse__Expr { __reduce118(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } 119 => { - __reduce119(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + // __Expr = Expr => ActionFn(8); + let __sym0 = __pop_Variant3(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action8::<>(input, __sym0); + return Some(Ok(__nt)); } 120 => { __reduce120(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) @@ -8847,6 +13632,15 @@ mod __parse__Expr { 123 => { __reduce123(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } + 124 => { + __reduce124(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 125 => { + __reduce125(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 126 => { + __reduce126(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } _ => panic!("invalid action code {}", __action) }; let __states_len = __states.len(); @@ -9003,14 +13797,14 @@ mod __parse__Expr { _ => __symbol_type_mismatch() } } - fn __pop_Variant9< + fn __pop_Variant8< 'input, >( __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, Vec>, usize) { match __symbols.pop() { - Some((__l, __Symbol::Variant9(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant8(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -9069,14 +13863,14 @@ mod __parse__Expr { _ => __symbol_type_mismatch() } } - fn __pop_Variant8< + fn __pop_Variant9< 'input, >( __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, core::option::Option, usize) { match __symbols.pop() { - Some((__l, __Symbol::Variant8(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant9(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -9144,13 +13938,13 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = BoundVar, "," => ActionFn(98); + // ( ",") = BoundVar, "," => ActionFn(101); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action98::<>(input, __sym0, __sym1); + let __nt = super::__action101::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (2, 0) } @@ -9163,10 +13957,10 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(96); + // ( ",")* = => ActionFn(99); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action96::<>(input, &__start, &__end); + let __nt = super::__action99::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (0, 1) } @@ -9179,11 +13973,11 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(97); + // ( ",")* = ( ",")+ => ActionFn(100); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action97::<>(input, __sym0); + let __nt = super::__action100::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (1, 1) } @@ -9196,13 +13990,13 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = BoundVar, "," => ActionFn(115); + // ( ",")+ = BoundVar, "," => ActionFn(118); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action115::<>(input, __sym0, __sym1); + let __nt = super::__action118::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (2, 2) } @@ -9215,14 +14009,14 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, BoundVar, "," => ActionFn(116); + // ( ",")+ = ( ",")+, BoundVar, "," => ActionFn(119); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant1(__symbols); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action116::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action119::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (3, 2) } @@ -9235,13 +14029,13 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = Expr, "," => ActionFn(108); + // ( ",") = Expr, "," => ActionFn(111); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action108::<>(input, __sym0, __sym1); + let __nt = super::__action111::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); (2, 3) } @@ -9254,10 +14048,10 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(106); + // ( ",")* = => ActionFn(109); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action106::<>(input, &__start, &__end); + let __nt = super::__action109::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (0, 4) } @@ -9270,11 +14064,11 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(107); + // ( ",")* = ( ",")+ => ActionFn(110); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action107::<>(input, __sym0); + let __nt = super::__action110::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 4) } @@ -9287,13 +14081,13 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Expr, "," => ActionFn(119); + // ( ",")+ = Expr, "," => ActionFn(122); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action119::<>(input, __sym0, __sym1); + let __nt = super::__action122::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (2, 5) } @@ -9306,14 +14100,14 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Expr, "," => ActionFn(120); + // ( ",")+ = ( ",")+, Expr, "," => ActionFn(123); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant3(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action120::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action123::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 5) } @@ -9326,13 +14120,13 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = Type, "," => ActionFn(103); + // ( ",") = Type, "," => ActionFn(106); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action103::<>(input, __sym0, __sym1); + let __nt = super::__action106::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (2, 6) } @@ -9345,10 +14139,10 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(101); + // ( ",")* = => ActionFn(104); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action101::<>(input, &__start, &__end); + let __nt = super::__action104::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (0, 7) } @@ -9361,11 +14155,11 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(102); + // ( ",")* = ( ",")+ => ActionFn(105); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action102::<>(input, __sym0); + let __nt = super::__action105::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (1, 7) } @@ -9378,13 +14172,13 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Type, "," => ActionFn(123); + // ( ",")+ = Type, "," => ActionFn(126); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action123::<>(input, __sym0, __sym1); + let __nt = super::__action126::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (2, 8) } @@ -9397,14 +14191,14 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Type, "," => ActionFn(124); + // ( ",")+ = ( ",")+, Type, "," => ActionFn(127); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant5(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action124::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action127::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (3, 8) } @@ -9417,11 +14211,11 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ArgList = Comma => ActionFn(21); + // ArgList = Comma => ActionFn(22); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action21::<>(input, __sym0); + let __nt = super::__action22::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (1, 9) } @@ -9434,14 +14228,14 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Args = "(args", ArgList, ")" => ActionFn(22); + // Args = "(args", ArgList, ")" => ActionFn(23); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant7(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action22::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action23::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (3, 10) } @@ -9454,15 +14248,36 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar = Ident => ActionFn(19); + // AssertBlock = "(", "assert", ExprList, ")" => ActionFn(89); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant8(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action89::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (4, 11) + } + pub(crate) fn __reduce18< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // BoundVar = Ident => ActionFn(20); let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action19::<>(input, __sym0); + let __nt = super::__action20::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); - (1, 11) + (1, 12) } - pub(crate) fn __reduce18< + pub(crate) fn __reduce19< 'input, >( input: &'input str, @@ -9471,18 +14286,18 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar = Ident, ":", Type => ActionFn(20); + // BoundVar = Ident, ":", Type => ActionFn(21); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant5(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action20::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action21::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); - (3, 11) + (3, 12) } - pub(crate) fn __reduce19< + pub(crate) fn __reduce20< 'input, >( input: &'input str, @@ -9491,15 +14306,15 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar? = BoundVar => ActionFn(94); + // BoundVar? = BoundVar => ActionFn(97); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action94::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (1, 12) + let __nt = super::__action97::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (1, 13) } - pub(crate) fn __reduce20< + pub(crate) fn __reduce21< 'input, >( input: &'input str, @@ -9508,14 +14323,14 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar? = => ActionFn(95); + // BoundVar? = => ActionFn(98); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action95::<>(input, &__start, &__end); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (0, 12) + let __nt = super::__action98::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (0, 13) } - pub(crate) fn __reduce21< + pub(crate) fn __reduce22< 'input, >( input: &'input str, @@ -9524,15 +14339,15 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = BoundVar => ActionFn(127); + // Comma = BoundVar => ActionFn(130); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action127::<>(input, __sym0); + let __nt = super::__action130::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (1, 13) + (1, 14) } - pub(crate) fn __reduce22< + pub(crate) fn __reduce23< 'input, >( input: &'input str, @@ -9541,14 +14356,14 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(128); + // Comma = => ActionFn(131); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action128::<>(input, &__start, &__end); + let __nt = super::__action131::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (0, 13) + (0, 14) } - pub(crate) fn __reduce23< + pub(crate) fn __reduce24< 'input, >( input: &'input str, @@ -9557,17 +14372,17 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, BoundVar => ActionFn(129); + // Comma = ( ",")+, BoundVar => ActionFn(132); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant1(__symbols); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action129::<>(input, __sym0, __sym1); + let __nt = super::__action132::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (2, 13) + (2, 14) } - pub(crate) fn __reduce24< + pub(crate) fn __reduce25< 'input, >( input: &'input str, @@ -9576,15 +14391,15 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(130); + // Comma = ( ",")+ => ActionFn(133); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action130::<>(input, __sym0); + let __nt = super::__action133::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (1, 13) + (1, 14) } - pub(crate) fn __reduce25< + pub(crate) fn __reduce26< 'input, >( input: &'input str, @@ -9593,15 +14408,15 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Expr => ActionFn(131); + // Comma = Expr => ActionFn(134); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action131::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 14) + let __nt = super::__action134::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 15) } - pub(crate) fn __reduce26< + pub(crate) fn __reduce27< 'input, >( input: &'input str, @@ -9610,14 +14425,14 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(132); + // Comma = => ActionFn(135); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action132::<>(input, &__start, &__end); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (0, 14) + let __nt = super::__action135::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (0, 15) } - pub(crate) fn __reduce27< + pub(crate) fn __reduce28< 'input, >( input: &'input str, @@ -9626,17 +14441,17 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Expr => ActionFn(133); + // Comma = ( ",")+, Expr => ActionFn(136); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant3(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action133::<>(input, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (2, 14) + let __nt = super::__action136::<>(input, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (2, 15) } - pub(crate) fn __reduce28< + pub(crate) fn __reduce29< 'input, >( input: &'input str, @@ -9645,15 +14460,15 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(134); + // Comma = ( ",")+ => ActionFn(137); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action134::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 14) + let __nt = super::__action137::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 15) } - pub(crate) fn __reduce29< + pub(crate) fn __reduce30< 'input, >( input: &'input str, @@ -9662,15 +14477,15 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Type => ActionFn(135); + // Comma = Type => ActionFn(138); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action135::<>(input, __sym0); + let __nt = super::__action138::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 15) + (1, 16) } - pub(crate) fn __reduce30< + pub(crate) fn __reduce31< 'input, >( input: &'input str, @@ -9679,14 +14494,14 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(136); + // Comma = => ActionFn(139); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action136::<>(input, &__start, &__end); + let __nt = super::__action139::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (0, 15) + (0, 16) } - pub(crate) fn __reduce31< + pub(crate) fn __reduce32< 'input, >( input: &'input str, @@ -9695,17 +14510,17 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Type => ActionFn(137); + // Comma = ( ",")+, Type => ActionFn(140); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant5(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action137::<>(input, __sym0, __sym1); + let __nt = super::__action140::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (2, 15) + (2, 16) } - pub(crate) fn __reduce32< + pub(crate) fn __reduce33< 'input, >( input: &'input str, @@ -9714,15 +14529,15 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(138); + // Comma = ( ",")+ => ActionFn(141); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action138::<>(input, __sym0); + let __nt = super::__action141::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 15) + (1, 16) } - pub(crate) fn __reduce33< + pub(crate) fn __reduce34< 'input, >( input: &'input str, @@ -9731,7 +14546,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Const = Num, UNum, ":", Type => ActionFn(28); + // Const = Num, UNum, ":", Type => ActionFn(29); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant5(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -9739,29 +14554,9 @@ mod __parse__Expr { let __sym0 = __pop_Variant17(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action28::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action29::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); - (4, 16) - } - pub(crate) fn __reduce34< - 'input, - >( - input: &'input str, - __lookahead_start: Option<&usize>, - __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, - _: core::marker::PhantomData<(&'input ())>, - ) -> (usize, usize) - { - // Expr = "(", Ident, ")" => ActionFn(33); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant16(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0.clone(); - let __end = __sym2.2.clone(); - let __nt = super::__action33::<>(input, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (4, 17) } pub(crate) fn __reduce35< 'input, @@ -9772,16 +14567,16 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", Const, ")" => ActionFn(34); + // Expr = "(", Ident, ")" => ActionFn(34); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant11(__symbols); + let __sym1 = __pop_Variant16(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); let __nt = super::__action34::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (3, 18) } pub(crate) fn __reduce36< 'input, @@ -9792,16 +14587,16 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "true", ")" => ActionFn(35); + // Expr = "(", Const, ")" => ActionFn(35); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant11(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); let __nt = super::__action35::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (3, 18) } pub(crate) fn __reduce37< 'input, @@ -9812,7 +14607,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "false", ")" => ActionFn(36); + // Expr = "(", "true", ")" => ActionFn(36); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); @@ -9821,7 +14616,7 @@ mod __parse__Expr { let __end = __sym2.2.clone(); let __nt = super::__action36::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (3, 18) } pub(crate) fn __reduce38< 'input, @@ -9832,17 +14627,16 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "!", Expr, ")" => ActionFn(37); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant3(__symbols); + // Expr = "(", "false", ")" => ActionFn(37); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym3.2.clone(); - let __nt = super::__action37::<>(input, __sym0, __sym1, __sym2, __sym3); + let __end = __sym2.2.clone(); + let __nt = super::__action37::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (3, 18) } pub(crate) fn __reduce39< 'input, @@ -9853,18 +14647,17 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "&&", Expr, Expr, ")" => ActionFn(38); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant3(__symbols); + // Expr = "(", "!", Expr, ")" => ActionFn(38); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym4.2.clone(); - let __nt = super::__action38::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __end = __sym3.2.clone(); + let __nt = super::__action38::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (4, 18) } pub(crate) fn __reduce40< 'input, @@ -9875,7 +14668,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "||", Expr, Expr, ")" => ActionFn(39); + // Expr = "(", "&&", Expr, Expr, ")" => ActionFn(39); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -9886,7 +14679,7 @@ mod __parse__Expr { let __end = __sym4.2.clone(); let __nt = super::__action39::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce41< 'input, @@ -9897,7 +14690,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "=>", Expr, Expr, ")" => ActionFn(40); + // Expr = "(", "||", Expr, Expr, ")" => ActionFn(40); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -9908,7 +14701,7 @@ mod __parse__Expr { let __end = __sym4.2.clone(); let __nt = super::__action40::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce42< 'input, @@ -9919,7 +14712,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "=", Expr, Expr, ")" => ActionFn(41); + // Expr = "(", "=>", Expr, Expr, ")" => ActionFn(41); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -9930,7 +14723,7 @@ mod __parse__Expr { let __end = __sym4.2.clone(); let __nt = super::__action41::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce43< 'input, @@ -9941,7 +14734,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "<=", Expr, Expr, ")" => ActionFn(42); + // Expr = "(", "=", Expr, Expr, ")" => ActionFn(42); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -9952,7 +14745,7 @@ mod __parse__Expr { let __end = __sym4.2.clone(); let __nt = super::__action42::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce44< 'input, @@ -9963,7 +14756,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "<", Expr, Expr, ")" => ActionFn(43); + // Expr = "(", "<=", Expr, Expr, ")" => ActionFn(43); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -9974,7 +14767,7 @@ mod __parse__Expr { let __end = __sym4.2.clone(); let __nt = super::__action43::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce45< 'input, @@ -9985,7 +14778,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sgt", Expr, Expr, ")" => ActionFn(44); + // Expr = "(", "<", Expr, Expr, ")" => ActionFn(44); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -9996,7 +14789,7 @@ mod __parse__Expr { let __end = __sym4.2.clone(); let __nt = super::__action44::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce46< 'input, @@ -10007,7 +14800,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sgte", Expr, Expr, ")" => ActionFn(45); + // Expr = "(", "sgt", Expr, Expr, ")" => ActionFn(45); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -10018,7 +14811,7 @@ mod __parse__Expr { let __end = __sym4.2.clone(); let __nt = super::__action45::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce47< 'input, @@ -10029,7 +14822,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "slt", Expr, Expr, ")" => ActionFn(46); + // Expr = "(", "sgte", Expr, Expr, ")" => ActionFn(46); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -10040,7 +14833,7 @@ mod __parse__Expr { let __end = __sym4.2.clone(); let __nt = super::__action46::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce48< 'input, @@ -10051,7 +14844,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "slte", Expr, Expr, ")" => ActionFn(47); + // Expr = "(", "slt", Expr, Expr, ")" => ActionFn(47); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -10062,7 +14855,7 @@ mod __parse__Expr { let __end = __sym4.2.clone(); let __nt = super::__action47::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce49< 'input, @@ -10073,7 +14866,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ugt", Expr, Expr, ")" => ActionFn(48); + // Expr = "(", "slte", Expr, Expr, ")" => ActionFn(48); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -10084,7 +14877,7 @@ mod __parse__Expr { let __end = __sym4.2.clone(); let __nt = super::__action48::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce50< 'input, @@ -10095,7 +14888,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ugte", Expr, Expr, ")" => ActionFn(49); + // Expr = "(", "ugt", Expr, Expr, ")" => ActionFn(49); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -10106,7 +14899,7 @@ mod __parse__Expr { let __end = __sym4.2.clone(); let __nt = super::__action49::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce51< 'input, @@ -10117,7 +14910,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ult", Expr, Expr, ")" => ActionFn(50); + // Expr = "(", "ugte", Expr, Expr, ")" => ActionFn(50); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -10128,7 +14921,7 @@ mod __parse__Expr { let __end = __sym4.2.clone(); let __nt = super::__action50::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce52< 'input, @@ -10139,7 +14932,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ulte", Expr, Expr, ")" => ActionFn(51); + // Expr = "(", "ult", Expr, Expr, ")" => ActionFn(51); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -10150,7 +14943,7 @@ mod __parse__Expr { let __end = __sym4.2.clone(); let __nt = super::__action51::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce53< 'input, @@ -10161,17 +14954,18 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "-", Expr, ")" => ActionFn(52); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); + // Expr = "(", "ulte", Expr, Expr, ")" => ActionFn(52); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym3.2.clone(); - let __nt = super::__action52::<>(input, __sym0, __sym1, __sym2, __sym3); + let __end = __sym4.2.clone(); + let __nt = super::__action52::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (5, 18) } pub(crate) fn __reduce54< 'input, @@ -10182,7 +14976,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "~", Expr, ")" => ActionFn(53); + // Expr = "(", "-", Expr, ")" => ActionFn(53); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -10192,7 +14986,7 @@ mod __parse__Expr { let __end = __sym3.2.clone(); let __nt = super::__action53::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } pub(crate) fn __reduce55< 'input, @@ -10203,7 +14997,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "clz", Expr, ")" => ActionFn(54); + // Expr = "(", "~", Expr, ")" => ActionFn(54); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -10213,7 +15007,7 @@ mod __parse__Expr { let __end = __sym3.2.clone(); let __nt = super::__action54::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } pub(crate) fn __reduce56< 'input, @@ -10224,7 +15018,28 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "a64clz", Expr, Expr, ")" => ActionFn(55); + // Expr = "(", "clz", Expr, ")" => ActionFn(55); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action55::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (4, 18) + } + pub(crate) fn __reduce57< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "a64clz", Expr, Expr, ")" => ActionFn(56); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -10233,11 +15048,11 @@ mod __parse__Expr { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action55::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action56::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce57< + pub(crate) fn __reduce58< 'input, >( input: &'input str, @@ -10246,7 +15061,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "cls", Expr, ")" => ActionFn(56); + // Expr = "(", "cls", Expr, ")" => ActionFn(57); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -10254,11 +15069,11 @@ mod __parse__Expr { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action56::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action57::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce58< + pub(crate) fn __reduce59< 'input, >( input: &'input str, @@ -10267,7 +15082,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "a64cls", Expr, Expr, ")" => ActionFn(57); + // Expr = "(", "a64cls", Expr, Expr, ")" => ActionFn(58); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -10276,11 +15091,11 @@ mod __parse__Expr { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action57::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action58::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce59< + pub(crate) fn __reduce60< 'input, >( input: &'input str, @@ -10289,7 +15104,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "rev", Expr, ")" => ActionFn(58); + // Expr = "(", "rev", Expr, ")" => ActionFn(59); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -10297,11 +15112,11 @@ mod __parse__Expr { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action58::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action59::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce60< + pub(crate) fn __reduce61< 'input, >( input: &'input str, @@ -10310,7 +15125,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "a64rev", Expr, Expr, ")" => ActionFn(59); + // Expr = "(", "a64rev", Expr, Expr, ")" => ActionFn(60); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -10319,11 +15134,11 @@ mod __parse__Expr { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action59::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action60::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce61< + pub(crate) fn __reduce62< 'input, >( input: &'input str, @@ -10332,7 +15147,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "subs", Expr, Expr, Expr, ")" => ActionFn(60); + // Expr = "(", "subs", Expr, Expr, Expr, ")" => ActionFn(61); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant3(__symbols); @@ -10342,31 +15157,9 @@ mod __parse__Expr { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym5.2.clone(); - let __nt = super::__action60::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action61::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (6, 17) - } - pub(crate) fn __reduce62< - 'input, - >( - input: &'input str, - __lookahead_start: Option<&usize>, - __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, - _: core::marker::PhantomData<(&'input ())>, - ) -> (usize, usize) - { - // Expr = "(", "*", Expr, Expr, ")" => ActionFn(61); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant3(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0.clone(); - let __end = __sym4.2.clone(); - let __nt = super::__action61::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); - __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (6, 18) } pub(crate) fn __reduce63< 'input, @@ -10377,7 +15170,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "/", Expr, Expr, ")" => ActionFn(62); + // Expr = "(", "*", Expr, Expr, ")" => ActionFn(62); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -10388,7 +15181,7 @@ mod __parse__Expr { let __end = __sym4.2.clone(); let __nt = super::__action62::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce64< 'input, @@ -10399,7 +15192,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sdiv", Expr, Expr, ")" => ActionFn(63); + // Expr = "(", "/", Expr, Expr, ")" => ActionFn(63); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -10410,7 +15203,7 @@ mod __parse__Expr { let __end = __sym4.2.clone(); let __nt = super::__action63::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce65< 'input, @@ -10421,7 +15214,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "+", Expr, Expr, ")" => ActionFn(64); + // Expr = "(", "sdiv", Expr, Expr, ")" => ActionFn(64); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -10432,7 +15225,7 @@ mod __parse__Expr { let __end = __sym4.2.clone(); let __nt = super::__action64::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce66< 'input, @@ -10443,7 +15236,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "-", Expr, Expr, ")" => ActionFn(65); + // Expr = "(", "+", Expr, Expr, ")" => ActionFn(65); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -10454,7 +15247,7 @@ mod __parse__Expr { let __end = __sym4.2.clone(); let __nt = super::__action65::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce67< 'input, @@ -10465,7 +15258,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "urem", Expr, Expr, ")" => ActionFn(66); + // Expr = "(", "-", Expr, Expr, ")" => ActionFn(66); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -10476,7 +15269,7 @@ mod __parse__Expr { let __end = __sym4.2.clone(); let __nt = super::__action66::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce68< 'input, @@ -10487,7 +15280,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "srem", Expr, Expr, ")" => ActionFn(67); + // Expr = "(", "urem", Expr, Expr, ")" => ActionFn(67); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -10498,7 +15291,7 @@ mod __parse__Expr { let __end = __sym4.2.clone(); let __nt = super::__action67::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce69< 'input, @@ -10509,7 +15302,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "&", Expr, Expr, ")" => ActionFn(68); + // Expr = "(", "srem", Expr, Expr, ")" => ActionFn(68); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -10520,7 +15313,7 @@ mod __parse__Expr { let __end = __sym4.2.clone(); let __nt = super::__action68::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce70< 'input, @@ -10531,7 +15324,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "|", Expr, Expr, ")" => ActionFn(69); + // Expr = "(", "&", Expr, Expr, ")" => ActionFn(69); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -10542,7 +15335,7 @@ mod __parse__Expr { let __end = __sym4.2.clone(); let __nt = super::__action69::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce71< 'input, @@ -10553,7 +15346,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "xor", Expr, Expr, ")" => ActionFn(70); + // Expr = "(", "|", Expr, Expr, ")" => ActionFn(70); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -10564,7 +15357,7 @@ mod __parse__Expr { let __end = __sym4.2.clone(); let __nt = super::__action70::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce72< 'input, @@ -10575,7 +15368,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "rotl", Expr, Expr, ")" => ActionFn(71); + // Expr = "(", "xor", Expr, Expr, ")" => ActionFn(71); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -10586,7 +15379,7 @@ mod __parse__Expr { let __end = __sym4.2.clone(); let __nt = super::__action71::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce73< 'input, @@ -10597,7 +15390,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "rotr", Expr, Expr, ")" => ActionFn(72); + // Expr = "(", "rotl", Expr, Expr, ")" => ActionFn(72); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -10608,7 +15401,7 @@ mod __parse__Expr { let __end = __sym4.2.clone(); let __nt = super::__action72::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce74< 'input, @@ -10619,7 +15412,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "shl", Expr, Expr, ")" => ActionFn(73); + // Expr = "(", "rotr", Expr, Expr, ")" => ActionFn(73); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -10630,7 +15423,7 @@ mod __parse__Expr { let __end = __sym4.2.clone(); let __nt = super::__action73::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce75< 'input, @@ -10641,7 +15434,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "shr", Expr, Expr, ")" => ActionFn(74); + // Expr = "(", "shl", Expr, Expr, ")" => ActionFn(74); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -10652,7 +15445,7 @@ mod __parse__Expr { let __end = __sym4.2.clone(); let __nt = super::__action74::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce76< 'input, @@ -10663,7 +15456,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ashr", Expr, Expr, ")" => ActionFn(75); + // Expr = "(", "shr", Expr, Expr, ")" => ActionFn(75); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -10674,7 +15467,7 @@ mod __parse__Expr { let __end = __sym4.2.clone(); let __nt = super::__action75::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce77< 'input, @@ -10685,18 +15478,18 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "zero_ext", Width, Expr, ")" => ActionFn(76); + // Expr = "(", "ashr", Expr, Expr, ")" => ActionFn(76); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant24(__symbols); + let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action76::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce78< 'input, @@ -10707,18 +15500,18 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "zero_ext", Expr, Expr, ")" => ActionFn(77); + // Expr = "(", "zero_ext", Width, Expr, ")" => ActionFn(77); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant24(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action77::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce79< 'input, @@ -10729,18 +15522,18 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sign_ext", Width, Expr, ")" => ActionFn(78); + // Expr = "(", "zero_ext", Expr, Expr, ")" => ActionFn(78); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant24(__symbols); + let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action78::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce80< 'input, @@ -10751,18 +15544,18 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sign_ext", Expr, Expr, ")" => ActionFn(79); + // Expr = "(", "sign_ext", Width, Expr, ")" => ActionFn(79); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant24(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action79::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce81< 'input, @@ -10773,7 +15566,29 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "extract", UNum, UNum, Expr, ")" => ActionFn(80); + // Expr = "(", "sign_ext", Expr, Expr, ")" => ActionFn(80); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action80::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce82< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "extract", UNum, UNum, Expr, ")" => ActionFn(81); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant3(__symbols); @@ -10783,11 +15598,11 @@ mod __parse__Expr { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym5.2.clone(); - let __nt = super::__action80::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action81::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (6, 17) + (6, 18) } - pub(crate) fn __reduce82< + pub(crate) fn __reduce83< 'input, >( input: &'input str, @@ -10796,7 +15611,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "conv_to", Width, Expr, ")" => ActionFn(81); + // Expr = "(", "conv_to", Width, Expr, ")" => ActionFn(82); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -10805,11 +15620,11 @@ mod __parse__Expr { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action81::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action82::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce83< + pub(crate) fn __reduce84< 'input, >( input: &'input str, @@ -10818,7 +15633,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "conv_to", Expr, Expr, ")" => ActionFn(82); + // Expr = "(", "conv_to", Expr, Expr, ")" => ActionFn(83); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -10827,11 +15642,11 @@ mod __parse__Expr { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action82::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action83::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce84< + pub(crate) fn __reduce85< 'input, >( input: &'input str, @@ -10840,7 +15655,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "if", Expr, Expr, Expr, ")" => ActionFn(83); + // Expr = "(", "if", Expr, Expr, Expr, ")" => ActionFn(84); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant3(__symbols); @@ -10850,11 +15665,11 @@ mod __parse__Expr { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym5.2.clone(); - let __nt = super::__action83::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action84::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (6, 17) + (6, 18) } - pub(crate) fn __reduce85< + pub(crate) fn __reduce86< 'input, >( input: &'input str, @@ -10863,7 +15678,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "switch", Expr, Pair+, ")" => ActionFn(84); + // Expr = "(", "switch", Expr, Pair+, ")" => ActionFn(85); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant19(__symbols); @@ -10872,11 +15687,11 @@ mod __parse__Expr { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action84::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action85::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce86< + pub(crate) fn __reduce87< 'input, >( input: &'input str, @@ -10885,7 +15700,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "int2bv", UNum, Expr, ")" => ActionFn(85); + // Expr = "(", "int2bv", UNum, Expr, ")" => ActionFn(86); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -10894,11 +15709,11 @@ mod __parse__Expr { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action85::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action86::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce87< + pub(crate) fn __reduce88< 'input, >( input: &'input str, @@ -10907,7 +15722,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "bv2int", Expr, ")" => ActionFn(86); + // Expr = "(", "bv2int", Expr, ")" => ActionFn(87); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -10915,11 +15730,11 @@ mod __parse__Expr { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action86::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action87::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce88< + pub(crate) fn __reduce89< 'input, >( input: &'input str, @@ -10928,7 +15743,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "widthof", Expr, ")" => ActionFn(87); + // Expr = "(", "widthof", Expr, ")" => ActionFn(88); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -10936,11 +15751,11 @@ mod __parse__Expr { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action87::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action88::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce89< + pub(crate) fn __reduce90< 'input, >( input: &'input str, @@ -10949,15 +15764,15 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr? = Expr => ActionFn(104); + // Expr? = Expr => ActionFn(107); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action104::<>(input, __sym0); + let __nt = super::__action107::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (1, 18) + (1, 19) } - pub(crate) fn __reduce90< + pub(crate) fn __reduce91< 'input, >( input: &'input str, @@ -10966,14 +15781,14 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr? = => ActionFn(105); + // Expr? = => ActionFn(108); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action105::<>(input, &__start, &__end); + let __nt = super::__action108::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (0, 18) + (0, 19) } - pub(crate) fn __reduce91< + pub(crate) fn __reduce92< 'input, >( input: &'input str, @@ -10982,15 +15797,15 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprList = Comma => ActionFn(24); - let __sym0 = __pop_Variant9(__symbols); + // ExprList = Comma => ActionFn(25); + let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action24::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 19) + let __nt = super::__action25::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 20) } - pub(crate) fn __reduce92< + pub(crate) fn __reduce93< 'input, >( input: &'input str, @@ -10999,7 +15814,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Function = Ident, "(", ArgList, ")", "(", Type, ")", "{", Expr, "}" => ActionFn(29); + // Function = Ident, "(", ArgList, ")", "(", Type, ")", "{", Expr, "}" => ActionFn(30); assert!(__symbols.len() >= 10); let __sym9 = __pop_Variant0(__symbols); let __sym8 = __pop_Variant3(__symbols); @@ -11013,11 +15828,11 @@ mod __parse__Expr { let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0.clone(); let __end = __sym9.2.clone(); - let __nt = super::__action29::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); + let __nt = super::__action30::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); - (10, 20) + (10, 21) } - pub(crate) fn __reduce93< + pub(crate) fn __reduce94< 'input, >( input: &'input str, @@ -11026,19 +15841,19 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // FunctionApplication = Expr, "(", ExprList, ")" => ActionFn(30); + // FunctionApplication = Expr, "(", ExprList, ")" => ActionFn(31); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant9(__symbols); + let __sym2 = __pop_Variant8(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action30::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action31::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (4, 21) + (4, 22) } - pub(crate) fn __reduce94< + pub(crate) fn __reduce95< 'input, >( input: &'input str, @@ -11047,7 +15862,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // FunctionType = "func", "(", TypeList, ")", "(", Type, ")" => ActionFn(27); + // FunctionType = "func", "(", TypeList, ")", "(", Type, ")" => ActionFn(28); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant5(__symbols); @@ -11058,11 +15873,11 @@ mod __parse__Expr { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym6.2.clone(); - let __nt = super::__action27::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action28::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (7, 22) + (7, 23) } - pub(crate) fn __reduce95< + pub(crate) fn __reduce96< 'input, >( input: &'input str, @@ -11071,15 +15886,15 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"[A-Za-z]"# => ActionFn(12); + // Ident = r#"[A-Za-z]"# => ActionFn(13); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action12::<>(input, __sym0); + let __nt = super::__action13::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 23) + (1, 24) } - pub(crate) fn __reduce96< + pub(crate) fn __reduce97< 'input, >( input: &'input str, @@ -11088,15 +15903,15 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"[A-Zac-z][\\.\\w]+"# => ActionFn(13); + // Ident = r#"[A-Zac-z][\\.\\w]+"# => ActionFn(14); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action13::<>(input, __sym0); + let __nt = super::__action14::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 23) + (1, 24) } - pub(crate) fn __reduce97< + pub(crate) fn __reduce98< 'input, >( input: &'input str, @@ -11105,15 +15920,15 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"b[\\w&&[^v]][\\.\\w]*"# => ActionFn(14); + // Ident = r#"b[\\w&&[^v]][\\.\\w]*"# => ActionFn(15); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action14::<>(input, __sym0); + let __nt = super::__action15::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 23) + (1, 24) } - pub(crate) fn __reduce98< + pub(crate) fn __reduce99< 'input, >( input: &'input str, @@ -11122,15 +15937,15 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Num = r#"-?[0-9]+i"# => ActionFn(11); + // Num = r#"-?[0-9]+i"# => ActionFn(12); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action11::<>(input, __sym0); + let __nt = super::__action12::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant17(__nt), __end)); - (1, 24) + (1, 25) } - pub(crate) fn __reduce99< + pub(crate) fn __reduce100< 'input, >( input: &'input str, @@ -11139,7 +15954,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Pair = "(", Expr, Expr, ")" => ActionFn(25); + // Pair = "(", Expr, Expr, ")" => ActionFn(26); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -11147,11 +15962,11 @@ mod __parse__Expr { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action25::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action26::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant18(__nt), __end)); - (4, 25) + (4, 26) } - pub(crate) fn __reduce100< + pub(crate) fn __reduce101< 'input, >( input: &'input str, @@ -11160,15 +15975,15 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Pair+ = Pair => ActionFn(89); + // Pair+ = Pair => ActionFn(92); let __sym0 = __pop_Variant18(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action89::<>(input, __sym0); + let __nt = super::__action92::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant19(__nt), __end)); - (1, 26) + (1, 27) } - pub(crate) fn __reduce101< + pub(crate) fn __reduce102< 'input, >( input: &'input str, @@ -11177,17 +15992,17 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Pair+ = Pair+, Pair => ActionFn(90); + // Pair+ = Pair+, Pair => ActionFn(93); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant18(__symbols); let __sym0 = __pop_Variant19(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action90::<>(input, __sym0, __sym1); + let __nt = super::__action93::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant19(__nt), __end)); - (2, 26) + (2, 27) } - pub(crate) fn __reduce102< + pub(crate) fn __reduce103< 'input, >( input: &'input str, @@ -11196,11 +16011,40 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // TermAnnotation = "(", "spec", TermSignature, "(", "assertions", ExprList, ")", ")" => ActionFn(88); + // TermAnnotation = "(", "spec", TermSignature, "(", "assume", ExprList, ")", "(", "assert", ExprList, ")", ")" => ActionFn(90); + assert!(__symbols.len() >= 12); + let __sym11 = __pop_Variant0(__symbols); + let __sym10 = __pop_Variant0(__symbols); + let __sym9 = __pop_Variant8(__symbols); + let __sym8 = __pop_Variant0(__symbols); + let __sym7 = __pop_Variant0(__symbols); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant8(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant21(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym11.2.clone(); + let __nt = super::__action90::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9, __sym10, __sym11); + __symbols.push((__start, __Symbol::Variant20(__nt), __end)); + (12, 28) + } + pub(crate) fn __reduce104< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // TermAnnotation = "(", "spec", TermSignature, "(", "assume", ExprList, ")", ")" => ActionFn(91); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant9(__symbols); + let __sym5 = __pop_Variant8(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant21(__symbols); @@ -11208,11 +16052,11 @@ mod __parse__Expr { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym7.2.clone(); - let __nt = super::__action88::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); + let __nt = super::__action91::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant20(__nt), __end)); - (8, 27) + (8, 28) } - pub(crate) fn __reduce103< + pub(crate) fn __reduce105< 'input, >( input: &'input str, @@ -11221,7 +16065,7 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // TermSignature = "(", "sig", Args, "(", BoundVar, ")", ")" => ActionFn(26); + // TermSignature = "(", "sig", Args, "(", BoundVar, ")", ")" => ActionFn(27); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -11232,11 +16076,11 @@ mod __parse__Expr { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym6.2.clone(); - let __nt = super::__action26::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action27::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant21(__nt), __end)); - (7, 28) + (7, 29) } - pub(crate) fn __reduce104< + pub(crate) fn __reduce106< 'input, >( input: &'input str, @@ -11245,15 +16089,15 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "bv" => ActionFn(15); + // Type = "bv" => ActionFn(16); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action15::<>(input, __sym0); + let __nt = super::__action16::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 29) + (1, 30) } - pub(crate) fn __reduce105< + pub(crate) fn __reduce107< 'input, >( input: &'input str, @@ -11262,17 +16106,17 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "bv", UNum => ActionFn(16); + // Type = "bv", UNum => ActionFn(17); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant23(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action16::<>(input, __sym0, __sym1); + let __nt = super::__action17::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (2, 29) + (2, 30) } - pub(crate) fn __reduce106< + pub(crate) fn __reduce108< 'input, >( input: &'input str, @@ -11281,15 +16125,15 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "isleType" => ActionFn(17); + // Type = "isleType" => ActionFn(18); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action17::<>(input, __sym0); + let __nt = super::__action18::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 29) + (1, 30) } - pub(crate) fn __reduce107< + pub(crate) fn __reduce109< 'input, >( input: &'input str, @@ -11298,15 +16142,15 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "bool" => ActionFn(18); + // Type = "bool" => ActionFn(19); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action18::<>(input, __sym0); + let __nt = super::__action19::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 29) + (1, 30) } - pub(crate) fn __reduce108< + pub(crate) fn __reduce110< 'input, >( input: &'input str, @@ -11315,15 +16159,15 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type? = Type => ActionFn(99); + // Type? = Type => ActionFn(102); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action99::<>(input, __sym0); + let __nt = super::__action102::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant22(__nt), __end)); - (1, 30) + (1, 31) } - pub(crate) fn __reduce109< + pub(crate) fn __reduce111< 'input, >( input: &'input str, @@ -11332,14 +16176,14 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type? = => ActionFn(100); + // Type? = => ActionFn(103); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action100::<>(input, &__start, &__end); + let __nt = super::__action103::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant22(__nt), __end)); - (0, 30) + (0, 31) } - pub(crate) fn __reduce110< + pub(crate) fn __reduce112< 'input, >( input: &'input str, @@ -11348,15 +16192,15 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // TypeList = Comma => ActionFn(23); + // TypeList = Comma => ActionFn(24); let __sym0 = __pop_Variant10(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action23::<>(input, __sym0); + let __nt = super::__action24::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 31) + (1, 32) } - pub(crate) fn __reduce111< + pub(crate) fn __reduce113< 'input, >( input: &'input str, @@ -11365,15 +16209,15 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // UNum = r#"[0-9]+"# => ActionFn(10); + // UNum = r#"[0-9]+"# => ActionFn(11); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action10::<>(input, __sym0); + let __nt = super::__action11::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant23(__nt), __end)); - (1, 32) + (1, 33) } - pub(crate) fn __reduce112< + pub(crate) fn __reduce114< 'input, >( input: &'input str, @@ -11382,18 +16226,18 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Width = "(", "regwidth", ")" => ActionFn(31); + // Width = "(", "regwidth", ")" => ActionFn(32); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action31::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action32::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (3, 33) + (3, 34) } - pub(crate) fn __reduce113< + pub(crate) fn __reduce115< 'input, >( input: &'input str, @@ -11402,18 +16246,35 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Width = "(", UNum, ")" => ActionFn(32); + // Width = "(", UNum, ")" => ActionFn(33); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant23(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action32::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action33::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (3, 33) + (3, 34) } - pub(crate) fn __reduce114< + pub(crate) fn __reduce116< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // __AssertBlock = AssertBlock => ActionFn(9); + let __sym0 = __pop_Variant8(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action9::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 35) + } + pub(crate) fn __reduce117< 'input, >( input: &'input str, @@ -11428,9 +16289,9 @@ mod __parse__Expr { let __end = __sym0.2.clone(); let __nt = super::__action1::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); - (1, 34) + (1, 36) } - pub(crate) fn __reduce115< + pub(crate) fn __reduce118< 'input, >( input: &'input str, @@ -11445,9 +16306,9 @@ mod __parse__Expr { let __end = __sym0.2.clone(); let __nt = super::__action4::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); - (1, 35) + (1, 37) } - pub(crate) fn __reduce117< + pub(crate) fn __reduce120< 'input, >( input: &'input str, @@ -11462,9 +16323,9 @@ mod __parse__Expr { let __end = __sym0.2.clone(); let __nt = super::__action5::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); - (1, 37) + (1, 39) } - pub(crate) fn __reduce118< + pub(crate) fn __reduce121< 'input, >( input: &'input str, @@ -11479,9 +16340,9 @@ mod __parse__Expr { let __end = __sym0.2.clone(); let __nt = super::__action6::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 38) + (1, 40) } - pub(crate) fn __reduce119< + pub(crate) fn __reduce122< 'input, >( input: &'input str, @@ -11496,9 +16357,9 @@ mod __parse__Expr { let __end = __sym0.2.clone(); let __nt = super::__action3::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 39) + (1, 41) } - pub(crate) fn __reduce120< + pub(crate) fn __reduce123< 'input, >( input: &'input str, @@ -11507,15 +16368,15 @@ mod __parse__Expr { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // __TermAnnotation = TermAnnotation => ActionFn(9); + // __TermAnnotation = TermAnnotation => ActionFn(10); let __sym0 = __pop_Variant20(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action9::<>(input, __sym0); + let __nt = super::__action10::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant20(__nt), __end)); - (1, 40) + (1, 42) } - pub(crate) fn __reduce121< + pub(crate) fn __reduce124< 'input, >( input: &'input str, @@ -11530,9 +16391,9 @@ mod __parse__Expr { let __end = __sym0.2.clone(); let __nt = super::__action2::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant21(__nt), __end)); - (1, 41) + (1, 43) } - pub(crate) fn __reduce122< + pub(crate) fn __reduce125< 'input, >( input: &'input str, @@ -11547,9 +16408,9 @@ mod __parse__Expr { let __end = __sym0.2.clone(); let __nt = super::__action0::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 42) + (1, 44) } - pub(crate) fn __reduce123< + pub(crate) fn __reduce126< 'input, >( input: &'input str, @@ -11564,7 +16425,7 @@ mod __parse__Expr { let __end = __sym0.2.clone(); let __nt = super::__action7::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (1, 43) + (1, 45) } } pub use self::__parse__Expr::ExprParser; @@ -11594,8 +16455,8 @@ mod __parse__Function { Variant5(Type), Variant6(alloc::vec::Vec), Variant7(Vec), - Variant8(core::option::Option), - Variant9(Vec>), + Variant8(Vec>), + Variant9(core::option::Option), Variant10(Vec), Variant11(Const), Variant12(core::option::Option>), @@ -11614,504 +16475,504 @@ mod __parse__Function { } const __ACTION: &[i16] = &[ // State 0 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 111, 112, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 111, 112, // State 1 - 0, 0, 0, 0, 0, -23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 111, 112, + 0, 0, 0, 0, 0, -24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 111, 112, // State 2 - 0, 0, 0, 0, 0, -25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 111, 112, + 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 111, 112, // State 3 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 4 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 5 - 0, 0, 0, 0, 0, -105, 0, 0, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, + 0, 0, 0, 0, 0, -107, 0, 0, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, // State 6 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 7 - 10, 11, 12, 0, 0, 0, 13, 14, 0, 15, 16, 0, 17, 18, 19, 20, 21, 22, 23, 24, 0, 0, 0, 25, 26, 27, 28, 29, 132, 0, 30, 31, 0, 0, 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, 43, 44, 45, 133, 46, 47, 48, 49, 50, 51, 52, 53, 0, 54, 55, 0, 56, 134, 0, 110, 111, 112, + 10, 11, 12, 0, 0, 0, 13, 14, 0, 15, 16, 0, 17, 18, 19, 20, 21, 22, 23, 24, 0, 0, 0, 0, 25, 26, 27, 28, 29, 132, 0, 30, 31, 0, 0, 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, 43, 44, 45, 133, 46, 47, 48, 49, 50, 51, 52, 53, 0, 54, 55, 0, 56, 134, 0, 110, 111, 112, // State 8 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, // State 9 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 10 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 11 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 12 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 13 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 14 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 15 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 16 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 17 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 18 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 19 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 20 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 21 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 22 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 23 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 24 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 25 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 26 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 27 - 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 28 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, // State 29 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 30 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, // State 31 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 32 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 33 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 34 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 35 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 36 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 37 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 38 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 39 - 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 40 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 41 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 42 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 43 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 44 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 45 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 46 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 47 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 48 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 49 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 50 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 51 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 52 - 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 53 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 54 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 55 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 56 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 57 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 58 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 59 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 60 - 0, 0, 0, 8, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 61 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 62 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 63 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 64 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 65 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 66 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 67 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 68 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 69 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 70 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 71 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 72 - 10, 11, 12, 0, 0, 0, 13, 14, 0, 15, 16, 0, 17, 18, 19, 20, 21, 22, 23, 24, 0, 0, 0, 25, 26, 27, 28, 29, 132, 0, 30, 31, 0, 169, 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, 43, 44, 45, 133, 46, 47, 48, 49, 50, 51, 52, 53, 0, 54, 55, 0, 56, 134, 126, 110, 111, 112, + 10, 11, 12, 0, 0, 0, 13, 14, 0, 15, 16, 0, 17, 18, 19, 20, 21, 22, 23, 24, 0, 0, 0, 0, 25, 26, 27, 28, 29, 132, 0, 30, 31, 0, 169, 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, 43, 44, 45, 133, 46, 47, 48, 49, 50, 51, 52, 53, 0, 54, 55, 0, 56, 134, 126, 110, 111, 112, // State 73 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, // State 74 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 75 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 76 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 77 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 78 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 79 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 80 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 81 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 82 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 83 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 84 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 85 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 86 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 87 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 88 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 89 - 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 90 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 91 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 92 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 93 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 94 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 95 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 96 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 97 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 98 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 99 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 100 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 101 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 102 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 103 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 104 - 0, 0, 0, 106, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 106, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 105 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 106 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 107 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 108 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 109 - 0, 0, 0, -96, 0, -96, 0, 0, -96, 0, 0, -96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -97, 0, -97, 0, 0, -97, 0, 0, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 110 - 0, 0, 0, -97, 0, -97, 0, 0, -97, 0, 0, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -98, 0, -98, 0, 0, -98, 0, 0, -98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 111 - 0, 0, 0, -98, 0, -98, 0, 0, -98, 0, 0, -98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -99, 0, -99, 0, 0, -99, 0, 0, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 112 - 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 113 - 0, 0, 0, 0, 0, -22, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -23, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 114 - 0, 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 115 - 0, 0, 0, 0, 0, -18, 0, 0, -18, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -19, 0, 0, -19, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 116 - 0, 0, 0, 0, 0, -24, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -25, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 117 - 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 118 - 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, -4, -4, + 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, -4, -4, // State 119 - 0, 0, 0, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -5, -5, -5, + 0, 0, 0, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -5, -5, -5, // State 120 - 0, 0, 0, 0, 0, -19, 0, 0, -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -20, 0, 0, -20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 121 - 0, 0, 0, 0, 0, -108, 0, 0, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -110, 0, 0, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 122 - 0, 0, 0, 0, 0, -107, 0, 0, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -109, 0, 0, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 123 - 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 124 - 0, 0, 0, 0, 0, -106, 0, 0, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -108, 0, 0, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 125 - 0, 0, 0, -112, 0, -112, 0, 0, -112, 0, 0, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, 0, 0, 0, + 0, 0, 0, -114, 0, -114, 0, 0, -114, 0, 0, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, 0, 0, 0, // State 126 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 127 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, // State 128 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 129 - 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 130 - 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 131 - 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 132 - 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 133 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0, 0, 0, // State 134 - 0, 0, 0, -36, 0, -36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -36, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -37, 0, -37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -37, 0, 0, 0, 0, 0, 0, // State 135 - 0, 0, 0, -35, 0, -35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -35, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -36, 0, -36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -36, 0, 0, 0, 0, 0, 0, // State 136 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 137 - 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 138 - 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 139 - 0, 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 140 - 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 141 - 0, 0, 0, -38, 0, -38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -38, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -39, 0, -39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -39, 0, 0, 0, 0, 0, 0, // State 142 - 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 143 - 0, 0, 0, -37, 0, -37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -37, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -38, 0, -38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -38, 0, 0, 0, 0, 0, 0, // State 144 - 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 145 - 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 146 - 0, 0, 0, -39, 0, -39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -39, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -40, 0, -40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -40, 0, 0, 0, 0, 0, 0, // State 147 - 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 148 - 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 149 - 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 150 - 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 151 - 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 152 - 0, 0, 0, -54, 0, -54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -54, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -55, 0, -55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -55, 0, 0, 0, 0, 0, 0, // State 153 - 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 154 - 0, 0, 0, 0, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 155 - 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 156 - 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 157 - 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 158 - 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 159 - 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 160 - 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 161 - 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 162 - 0, 0, 0, -88, 0, -88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -88, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -89, 0, -89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -89, 0, 0, 0, 0, 0, 0, // State 163 - 0, 0, 0, -58, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -59, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, // State 164 - 0, 0, 0, -56, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -57, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, // State 165 - 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 166 - 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 167 - 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 168 - 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 169 - 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 170 - 0, 0, 0, -60, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -61, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, // State 171 - 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 172 - 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 173 - 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 174 - 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 175 - 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 176 - 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 177 - 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 178 - 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 179 - 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 180 - 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 181 - 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 182 - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 183 - 0, 0, 0, -101, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -102, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 184 - 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 185 - 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 186 - 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 187 - 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 188 - 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 189 - 0, 0, 0, -89, 0, -89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -89, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -90, 0, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -90, 0, 0, 0, 0, 0, 0, // State 190 - 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 191 - 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 192 - 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 193 - 0, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 194 - 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 195 - 0, 0, 0, -55, 0, -55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -55, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -56, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, // State 196 - 0, 0, 0, 0, 0, -34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 197 - 0, 0, 0, -70, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -71, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, // State 198 - 0, 0, 0, -40, 0, -40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -40, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -41, 0, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -41, 0, 0, 0, 0, 0, 0, // State 199 - 0, 0, 0, -63, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -64, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, // State 200 - 0, 0, 0, -66, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -67, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, // State 201 - 0, 0, 0, -67, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -68, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, // State 202 - 0, 0, 0, -64, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -65, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, // State 203 - 0, 0, 0, -45, 0, -45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -45, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -46, 0, -46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -46, 0, 0, 0, 0, 0, 0, // State 204 - 0, 0, 0, -44, 0, -44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -44, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -45, 0, -45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -45, 0, 0, 0, 0, 0, 0, // State 205 - 0, 0, 0, -43, 0, -43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -43, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -44, 0, -44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -44, 0, 0, 0, 0, 0, 0, // State 206 - 0, 0, 0, -42, 0, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -42, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -43, 0, -43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -43, 0, 0, 0, 0, 0, 0, // State 207 - 0, 0, 0, -59, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -60, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, // State 208 - 0, 0, 0, -57, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -58, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, // State 209 - 0, 0, 0, -61, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -62, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, // State 210 - 0, 0, 0, -77, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -78, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, // State 211 - 0, 0, 0, -84, 0, -84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -84, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -85, 0, -85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -85, 0, 0, 0, 0, 0, 0, // State 212 - 0, 0, 0, -83, 0, -83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -83, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -84, 0, -84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -84, 0, 0, 0, 0, 0, 0, // State 213 - 0, 0, 0, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 214 - 0, 0, 0, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 215 - 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 216 - 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 217 - 0, 0, 0, -87, 0, -87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -87, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -88, 0, -88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -88, 0, 0, 0, 0, 0, 0, // State 218 - 0, 0, 0, -73, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -74, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, // State 219 - 0, 0, 0, -74, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -75, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, // State 220 - 0, 0, 0, -65, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -66, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, // State 221 - 0, 0, 0, -46, 0, -46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -46, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -47, 0, -47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -47, 0, 0, 0, 0, 0, 0, // State 222 - 0, 0, 0, -47, 0, -47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -47, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -48, 0, -48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -48, 0, 0, 0, 0, 0, 0, // State 223 - 0, 0, 0, -75, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -76, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, // State 224 - 0, 0, 0, -76, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -77, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, // State 225 - 0, 0, 0, -81, 0, -81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -81, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -82, 0, -82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -82, 0, 0, 0, 0, 0, 0, // State 226 - 0, 0, 0, -80, 0, -80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -80, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -81, 0, -81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -81, 0, 0, 0, 0, 0, 0, // State 227 - 0, 0, 0, -48, 0, -48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -48, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -49, 0, -49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -49, 0, 0, 0, 0, 0, 0, // State 228 - 0, 0, 0, -49, 0, -49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -49, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -50, 0, -50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -50, 0, 0, 0, 0, 0, 0, // State 229 - 0, 0, 0, -69, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -70, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, // State 230 - 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 231 - 0, 0, 0, -102, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -103, 0, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 232 - 0, 0, 0, -86, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -86, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -87, 0, -87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -87, 0, 0, 0, 0, 0, 0, // State 233 - 0, 0, 0, -50, 0, -50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -50, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -51, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, // State 234 - 0, 0, 0, -51, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -52, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, // State 235 - 0, 0, 0, -52, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -53, 0, -53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -53, 0, 0, 0, 0, 0, 0, // State 236 - 0, 0, 0, -53, 0, -53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -53, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -54, 0, -54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -54, 0, 0, 0, 0, 0, 0, // State 237 - 0, 0, 0, -68, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -69, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, // State 238 - 0, 0, 0, -72, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -73, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, // State 239 - 0, 0, 0, -79, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -80, 0, -80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -80, 0, 0, 0, 0, 0, 0, // State 240 - 0, 0, 0, -78, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -79, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, // State 241 - 0, 0, 0, -71, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -72, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, // State 242 - 0, 0, 0, -41, 0, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -41, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -42, 0, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -42, 0, 0, 0, 0, 0, 0, // State 243 - 0, 0, 0, -82, 0, -82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -82, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -83, 0, -83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -83, 0, 0, 0, 0, 0, 0, // State 244 - 0, 0, 0, -85, 0, -85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -85, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -86, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -86, 0, 0, 0, 0, 0, 0, // State 245 - 0, 0, 0, -62, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -63, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, // State 246 - 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 247 - 0, 0, 0, -100, 0, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -101, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]; fn __action(state: i16, integer: usize) -> i16 { - __ACTION[(state as usize) * 69 + integer] + __ACTION[(state as usize) * 70 + integer] } const __EOF_ACTION: &[i16] = &[ // State 0 @@ -12329,7 +17190,7 @@ mod __parse__Function { // State 106 0, // State 107 - -118, + -121, // State 108 0, // State 109 @@ -12371,7 +17232,7 @@ mod __parse__Function { // State 127 0, // State 128 - -93, + -94, // State 129 0, // State 130 @@ -12615,13 +17476,13 @@ mod __parse__Function { match nt { 2 => 2, 9 => 112, - 11 => match state { + 12 => match state { 2 => 116, _ => 113, }, - 13 => 114, - 16 => 129, - 17 => match state { + 14 => 114, + 17 => 129, + 18 => match state { 11 => 57, 12 => 58, 13 => 59, @@ -12715,24 +17576,24 @@ mod __parse__Function { 106 => 246, _ => 56, }, - 20 => 107, - 23 => match state { + 21 => 107, + 24 => match state { 0 => 108, 1..=2 => 115, _ => 130, }, - 24 => 8, - 25 => match state { + 25 => 8, + 26 => match state { 104 => 231, _ => 183, }, - 26 => 104, - 29 => match state { + 27 => 104, + 30 => match state { 4 => 123, 100 => 196, _ => 120, }, - 32 => match state { + 33 => match state { 30 => 75, 73 => 101, 5 => 124, @@ -12740,7 +17601,7 @@ mod __parse__Function { 72 => 167, _ => 73, }, - 33 => match state { + 34 => match state { 39 => 84, 52 => 97, _ => 71, @@ -12770,7 +17631,8 @@ mod __parse__Function { r###""a64clz""###, r###""a64rev""###, r###""ashr""###, - r###""assertions""###, + r###""assert""###, + r###""assume""###, r###""bool""###, r###""bv""###, r###""bv2int""###, @@ -12871,7 +17733,7 @@ mod __parse__Function { #[inline] fn error_action(&self, state: i16) -> i16 { - __action(state, 69 - 1) + __action(state, 70 - 1) } #[inline] @@ -12998,11 +17860,12 @@ mod __parse__Function { Token(66, _) if true => Some(61), Token(67, _) if true => Some(62), Token(68, _) if true => Some(63), - Token(0, _) if true => Some(64), - Token(1, _) if true => Some(65), - Token(2, _) if true => Some(66), - Token(3, _) if true => Some(67), - Token(4, _) if true => Some(68), + Token(69, _) if true => Some(64), + Token(0, _) if true => Some(65), + Token(1, _) if true => Some(66), + Token(2, _) if true => Some(67), + Token(3, _) if true => Some(68), + Token(4, _) if true => Some(69), _ => None, } } @@ -13015,8 +17878,8 @@ mod __parse__Function { ) -> __Symbol<'input> { match __token_index { - 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 => match __token { - Token(5, __tok0) | Token(6, __tok0) | Token(7, __tok0) | Token(8, __tok0) | Token(9, __tok0) | Token(10, __tok0) | Token(11, __tok0) | Token(12, __tok0) | Token(13, __tok0) | Token(14, __tok0) | Token(15, __tok0) | Token(16, __tok0) | Token(17, __tok0) | Token(18, __tok0) | Token(19, __tok0) | Token(20, __tok0) | Token(21, __tok0) | Token(22, __tok0) | Token(23, __tok0) | Token(24, __tok0) | Token(25, __tok0) | Token(26, __tok0) | Token(27, __tok0) | Token(28, __tok0) | Token(29, __tok0) | Token(30, __tok0) | Token(31, __tok0) | Token(32, __tok0) | Token(33, __tok0) | Token(34, __tok0) | Token(35, __tok0) | Token(36, __tok0) | Token(37, __tok0) | Token(38, __tok0) | Token(39, __tok0) | Token(40, __tok0) | Token(41, __tok0) | Token(42, __tok0) | Token(43, __tok0) | Token(44, __tok0) | Token(45, __tok0) | Token(46, __tok0) | Token(47, __tok0) | Token(48, __tok0) | Token(49, __tok0) | Token(50, __tok0) | Token(51, __tok0) | Token(52, __tok0) | Token(53, __tok0) | Token(54, __tok0) | Token(55, __tok0) | Token(56, __tok0) | Token(57, __tok0) | Token(58, __tok0) | Token(59, __tok0) | Token(60, __tok0) | Token(61, __tok0) | Token(62, __tok0) | Token(63, __tok0) | Token(64, __tok0) | Token(65, __tok0) | Token(66, __tok0) | Token(67, __tok0) | Token(68, __tok0) | Token(0, __tok0) | Token(1, __tok0) | Token(2, __tok0) | Token(3, __tok0) | Token(4, __tok0) if true => __Symbol::Variant0(__tok0), + 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 => match __token { + Token(5, __tok0) | Token(6, __tok0) | Token(7, __tok0) | Token(8, __tok0) | Token(9, __tok0) | Token(10, __tok0) | Token(11, __tok0) | Token(12, __tok0) | Token(13, __tok0) | Token(14, __tok0) | Token(15, __tok0) | Token(16, __tok0) | Token(17, __tok0) | Token(18, __tok0) | Token(19, __tok0) | Token(20, __tok0) | Token(21, __tok0) | Token(22, __tok0) | Token(23, __tok0) | Token(24, __tok0) | Token(25, __tok0) | Token(26, __tok0) | Token(27, __tok0) | Token(28, __tok0) | Token(29, __tok0) | Token(30, __tok0) | Token(31, __tok0) | Token(32, __tok0) | Token(33, __tok0) | Token(34, __tok0) | Token(35, __tok0) | Token(36, __tok0) | Token(37, __tok0) | Token(38, __tok0) | Token(39, __tok0) | Token(40, __tok0) | Token(41, __tok0) | Token(42, __tok0) | Token(43, __tok0) | Token(44, __tok0) | Token(45, __tok0) | Token(46, __tok0) | Token(47, __tok0) | Token(48, __tok0) | Token(49, __tok0) | Token(50, __tok0) | Token(51, __tok0) | Token(52, __tok0) | Token(53, __tok0) | Token(54, __tok0) | Token(55, __tok0) | Token(56, __tok0) | Token(57, __tok0) | Token(58, __tok0) | Token(59, __tok0) | Token(60, __tok0) | Token(61, __tok0) | Token(62, __tok0) | Token(63, __tok0) | Token(64, __tok0) | Token(65, __tok0) | Token(66, __tok0) | Token(67, __tok0) | Token(68, __tok0) | Token(69, __tok0) | Token(0, __tok0) | Token(1, __tok0) | Token(2, __tok0) | Token(3, __tok0) | Token(4, __tok0) if true => __Symbol::Variant0(__tok0), _ => unreachable!(), }, _ => unreachable!(), @@ -13418,12 +18281,7 @@ mod __parse__Function { __reduce116(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } 117 => { - // __Function = Function => ActionFn(5); - let __sym0 = __pop_Variant13(__symbols); - let __start = __sym0.0.clone(); - let __end = __sym0.2.clone(); - let __nt = super::__action5::<>(input, __sym0); - return Some(Ok(__nt)); + __reduce117(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } 118 => { __reduce118(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) @@ -13432,7 +18290,12 @@ mod __parse__Function { __reduce119(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } 120 => { - __reduce120(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + // __Function = Function => ActionFn(5); + let __sym0 = __pop_Variant13(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action5::<>(input, __sym0); + return Some(Ok(__nt)); } 121 => { __reduce121(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) @@ -13443,6 +18306,15 @@ mod __parse__Function { 123 => { __reduce123(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } + 124 => { + __reduce124(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 125 => { + __reduce125(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 126 => { + __reduce126(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } _ => panic!("invalid action code {}", __action) }; let __states_len = __states.len(); @@ -13599,14 +18471,14 @@ mod __parse__Function { _ => __symbol_type_mismatch() } } - fn __pop_Variant9< + fn __pop_Variant8< 'input, >( __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, Vec>, usize) { match __symbols.pop() { - Some((__l, __Symbol::Variant9(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant8(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -13665,14 +18537,14 @@ mod __parse__Function { _ => __symbol_type_mismatch() } } - fn __pop_Variant8< + fn __pop_Variant9< 'input, >( __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, core::option::Option, usize) { match __symbols.pop() { - Some((__l, __Symbol::Variant8(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant9(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -13740,13 +18612,13 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = BoundVar, "," => ActionFn(98); + // ( ",") = BoundVar, "," => ActionFn(101); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action98::<>(input, __sym0, __sym1); + let __nt = super::__action101::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (2, 0) } @@ -13759,10 +18631,10 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(96); + // ( ",")* = => ActionFn(99); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action96::<>(input, &__start, &__end); + let __nt = super::__action99::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (0, 1) } @@ -13775,11 +18647,11 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(97); + // ( ",")* = ( ",")+ => ActionFn(100); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action97::<>(input, __sym0); + let __nt = super::__action100::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (1, 1) } @@ -13792,13 +18664,13 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = BoundVar, "," => ActionFn(115); + // ( ",")+ = BoundVar, "," => ActionFn(118); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action115::<>(input, __sym0, __sym1); + let __nt = super::__action118::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (2, 2) } @@ -13811,14 +18683,14 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, BoundVar, "," => ActionFn(116); + // ( ",")+ = ( ",")+, BoundVar, "," => ActionFn(119); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant1(__symbols); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action116::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action119::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (3, 2) } @@ -13831,13 +18703,13 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = Expr, "," => ActionFn(108); + // ( ",") = Expr, "," => ActionFn(111); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action108::<>(input, __sym0, __sym1); + let __nt = super::__action111::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); (2, 3) } @@ -13850,10 +18722,10 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(106); + // ( ",")* = => ActionFn(109); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action106::<>(input, &__start, &__end); + let __nt = super::__action109::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (0, 4) } @@ -13866,11 +18738,11 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(107); + // ( ",")* = ( ",")+ => ActionFn(110); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action107::<>(input, __sym0); + let __nt = super::__action110::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 4) } @@ -13883,13 +18755,13 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Expr, "," => ActionFn(119); + // ( ",")+ = Expr, "," => ActionFn(122); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action119::<>(input, __sym0, __sym1); + let __nt = super::__action122::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (2, 5) } @@ -13902,14 +18774,14 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Expr, "," => ActionFn(120); + // ( ",")+ = ( ",")+, Expr, "," => ActionFn(123); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant3(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action120::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action123::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 5) } @@ -13922,13 +18794,13 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = Type, "," => ActionFn(103); + // ( ",") = Type, "," => ActionFn(106); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action103::<>(input, __sym0, __sym1); + let __nt = super::__action106::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (2, 6) } @@ -13941,10 +18813,10 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(101); + // ( ",")* = => ActionFn(104); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action101::<>(input, &__start, &__end); + let __nt = super::__action104::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (0, 7) } @@ -13957,11 +18829,11 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(102); + // ( ",")* = ( ",")+ => ActionFn(105); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action102::<>(input, __sym0); + let __nt = super::__action105::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (1, 7) } @@ -13974,13 +18846,13 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Type, "," => ActionFn(123); + // ( ",")+ = Type, "," => ActionFn(126); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action123::<>(input, __sym0, __sym1); + let __nt = super::__action126::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (2, 8) } @@ -13993,14 +18865,14 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Type, "," => ActionFn(124); + // ( ",")+ = ( ",")+, Type, "," => ActionFn(127); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant5(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action124::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action127::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (3, 8) } @@ -14013,11 +18885,11 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ArgList = Comma => ActionFn(21); + // ArgList = Comma => ActionFn(22); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action21::<>(input, __sym0); + let __nt = super::__action22::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (1, 9) } @@ -14030,14 +18902,14 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Args = "(args", ArgList, ")" => ActionFn(22); + // Args = "(args", ArgList, ")" => ActionFn(23); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant7(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action22::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action23::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (3, 10) } @@ -14050,15 +18922,36 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar = Ident => ActionFn(19); + // AssertBlock = "(", "assert", ExprList, ")" => ActionFn(89); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant8(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action89::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (4, 11) + } + pub(crate) fn __reduce18< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // BoundVar = Ident => ActionFn(20); let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action19::<>(input, __sym0); + let __nt = super::__action20::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); - (1, 11) + (1, 12) } - pub(crate) fn __reduce18< + pub(crate) fn __reduce19< 'input, >( input: &'input str, @@ -14067,18 +18960,18 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar = Ident, ":", Type => ActionFn(20); + // BoundVar = Ident, ":", Type => ActionFn(21); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant5(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action20::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action21::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); - (3, 11) + (3, 12) } - pub(crate) fn __reduce19< + pub(crate) fn __reduce20< 'input, >( input: &'input str, @@ -14087,15 +18980,15 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar? = BoundVar => ActionFn(94); + // BoundVar? = BoundVar => ActionFn(97); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action94::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (1, 12) + let __nt = super::__action97::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (1, 13) } - pub(crate) fn __reduce20< + pub(crate) fn __reduce21< 'input, >( input: &'input str, @@ -14104,14 +18997,14 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar? = => ActionFn(95); + // BoundVar? = => ActionFn(98); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action95::<>(input, &__start, &__end); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (0, 12) + let __nt = super::__action98::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (0, 13) } - pub(crate) fn __reduce21< + pub(crate) fn __reduce22< 'input, >( input: &'input str, @@ -14120,15 +19013,15 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = BoundVar => ActionFn(127); + // Comma = BoundVar => ActionFn(130); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action127::<>(input, __sym0); + let __nt = super::__action130::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (1, 13) + (1, 14) } - pub(crate) fn __reduce22< + pub(crate) fn __reduce23< 'input, >( input: &'input str, @@ -14137,14 +19030,14 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(128); + // Comma = => ActionFn(131); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action128::<>(input, &__start, &__end); + let __nt = super::__action131::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (0, 13) + (0, 14) } - pub(crate) fn __reduce23< + pub(crate) fn __reduce24< 'input, >( input: &'input str, @@ -14153,17 +19046,17 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, BoundVar => ActionFn(129); + // Comma = ( ",")+, BoundVar => ActionFn(132); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant1(__symbols); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action129::<>(input, __sym0, __sym1); + let __nt = super::__action132::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (2, 13) + (2, 14) } - pub(crate) fn __reduce24< + pub(crate) fn __reduce25< 'input, >( input: &'input str, @@ -14172,15 +19065,15 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(130); + // Comma = ( ",")+ => ActionFn(133); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action130::<>(input, __sym0); + let __nt = super::__action133::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (1, 13) + (1, 14) } - pub(crate) fn __reduce25< + pub(crate) fn __reduce26< 'input, >( input: &'input str, @@ -14189,15 +19082,15 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Expr => ActionFn(131); + // Comma = Expr => ActionFn(134); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action131::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 14) + let __nt = super::__action134::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 15) } - pub(crate) fn __reduce26< + pub(crate) fn __reduce27< 'input, >( input: &'input str, @@ -14206,14 +19099,14 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(132); + // Comma = => ActionFn(135); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action132::<>(input, &__start, &__end); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (0, 14) + let __nt = super::__action135::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (0, 15) } - pub(crate) fn __reduce27< + pub(crate) fn __reduce28< 'input, >( input: &'input str, @@ -14222,17 +19115,17 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Expr => ActionFn(133); + // Comma = ( ",")+, Expr => ActionFn(136); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant3(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action133::<>(input, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (2, 14) + let __nt = super::__action136::<>(input, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (2, 15) } - pub(crate) fn __reduce28< + pub(crate) fn __reduce29< 'input, >( input: &'input str, @@ -14241,15 +19134,15 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(134); + // Comma = ( ",")+ => ActionFn(137); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action134::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 14) + let __nt = super::__action137::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 15) } - pub(crate) fn __reduce29< + pub(crate) fn __reduce30< 'input, >( input: &'input str, @@ -14258,15 +19151,15 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Type => ActionFn(135); + // Comma = Type => ActionFn(138); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action135::<>(input, __sym0); + let __nt = super::__action138::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 15) + (1, 16) } - pub(crate) fn __reduce30< + pub(crate) fn __reduce31< 'input, >( input: &'input str, @@ -14275,14 +19168,14 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(136); + // Comma = => ActionFn(139); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action136::<>(input, &__start, &__end); + let __nt = super::__action139::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (0, 15) + (0, 16) } - pub(crate) fn __reduce31< + pub(crate) fn __reduce32< 'input, >( input: &'input str, @@ -14291,17 +19184,17 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Type => ActionFn(137); + // Comma = ( ",")+, Type => ActionFn(140); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant5(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action137::<>(input, __sym0, __sym1); + let __nt = super::__action140::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (2, 15) + (2, 16) } - pub(crate) fn __reduce32< + pub(crate) fn __reduce33< 'input, >( input: &'input str, @@ -14310,15 +19203,15 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(138); + // Comma = ( ",")+ => ActionFn(141); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action138::<>(input, __sym0); + let __nt = super::__action141::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 15) + (1, 16) } - pub(crate) fn __reduce33< + pub(crate) fn __reduce34< 'input, >( input: &'input str, @@ -14327,7 +19220,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Const = Num, UNum, ":", Type => ActionFn(28); + // Const = Num, UNum, ":", Type => ActionFn(29); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant5(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -14335,29 +19228,9 @@ mod __parse__Function { let __sym0 = __pop_Variant17(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action28::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action29::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); - (4, 16) - } - pub(crate) fn __reduce34< - 'input, - >( - input: &'input str, - __lookahead_start: Option<&usize>, - __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, - _: core::marker::PhantomData<(&'input ())>, - ) -> (usize, usize) - { - // Expr = "(", Ident, ")" => ActionFn(33); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant16(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0.clone(); - let __end = __sym2.2.clone(); - let __nt = super::__action33::<>(input, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (4, 17) } pub(crate) fn __reduce35< 'input, @@ -14368,16 +19241,16 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", Const, ")" => ActionFn(34); + // Expr = "(", Ident, ")" => ActionFn(34); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant11(__symbols); + let __sym1 = __pop_Variant16(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); let __nt = super::__action34::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (3, 18) } pub(crate) fn __reduce36< 'input, @@ -14388,16 +19261,16 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "true", ")" => ActionFn(35); + // Expr = "(", Const, ")" => ActionFn(35); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant11(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); let __nt = super::__action35::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (3, 18) } pub(crate) fn __reduce37< 'input, @@ -14408,7 +19281,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "false", ")" => ActionFn(36); + // Expr = "(", "true", ")" => ActionFn(36); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); @@ -14417,7 +19290,7 @@ mod __parse__Function { let __end = __sym2.2.clone(); let __nt = super::__action36::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (3, 18) } pub(crate) fn __reduce38< 'input, @@ -14428,17 +19301,16 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "!", Expr, ")" => ActionFn(37); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant3(__symbols); + // Expr = "(", "false", ")" => ActionFn(37); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym3.2.clone(); - let __nt = super::__action37::<>(input, __sym0, __sym1, __sym2, __sym3); + let __end = __sym2.2.clone(); + let __nt = super::__action37::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (3, 18) } pub(crate) fn __reduce39< 'input, @@ -14449,18 +19321,17 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "&&", Expr, Expr, ")" => ActionFn(38); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant3(__symbols); + // Expr = "(", "!", Expr, ")" => ActionFn(38); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym4.2.clone(); - let __nt = super::__action38::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __end = __sym3.2.clone(); + let __nt = super::__action38::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (4, 18) } pub(crate) fn __reduce40< 'input, @@ -14471,7 +19342,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "||", Expr, Expr, ")" => ActionFn(39); + // Expr = "(", "&&", Expr, Expr, ")" => ActionFn(39); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -14482,7 +19353,7 @@ mod __parse__Function { let __end = __sym4.2.clone(); let __nt = super::__action39::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce41< 'input, @@ -14493,7 +19364,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "=>", Expr, Expr, ")" => ActionFn(40); + // Expr = "(", "||", Expr, Expr, ")" => ActionFn(40); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -14504,7 +19375,7 @@ mod __parse__Function { let __end = __sym4.2.clone(); let __nt = super::__action40::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce42< 'input, @@ -14515,7 +19386,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "=", Expr, Expr, ")" => ActionFn(41); + // Expr = "(", "=>", Expr, Expr, ")" => ActionFn(41); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -14526,7 +19397,7 @@ mod __parse__Function { let __end = __sym4.2.clone(); let __nt = super::__action41::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce43< 'input, @@ -14537,7 +19408,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "<=", Expr, Expr, ")" => ActionFn(42); + // Expr = "(", "=", Expr, Expr, ")" => ActionFn(42); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -14548,7 +19419,7 @@ mod __parse__Function { let __end = __sym4.2.clone(); let __nt = super::__action42::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce44< 'input, @@ -14559,7 +19430,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "<", Expr, Expr, ")" => ActionFn(43); + // Expr = "(", "<=", Expr, Expr, ")" => ActionFn(43); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -14570,7 +19441,7 @@ mod __parse__Function { let __end = __sym4.2.clone(); let __nt = super::__action43::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce45< 'input, @@ -14581,7 +19452,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sgt", Expr, Expr, ")" => ActionFn(44); + // Expr = "(", "<", Expr, Expr, ")" => ActionFn(44); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -14592,7 +19463,7 @@ mod __parse__Function { let __end = __sym4.2.clone(); let __nt = super::__action44::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce46< 'input, @@ -14603,7 +19474,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sgte", Expr, Expr, ")" => ActionFn(45); + // Expr = "(", "sgt", Expr, Expr, ")" => ActionFn(45); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -14614,7 +19485,7 @@ mod __parse__Function { let __end = __sym4.2.clone(); let __nt = super::__action45::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce47< 'input, @@ -14625,7 +19496,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "slt", Expr, Expr, ")" => ActionFn(46); + // Expr = "(", "sgte", Expr, Expr, ")" => ActionFn(46); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -14636,7 +19507,7 @@ mod __parse__Function { let __end = __sym4.2.clone(); let __nt = super::__action46::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce48< 'input, @@ -14647,7 +19518,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "slte", Expr, Expr, ")" => ActionFn(47); + // Expr = "(", "slt", Expr, Expr, ")" => ActionFn(47); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -14658,7 +19529,7 @@ mod __parse__Function { let __end = __sym4.2.clone(); let __nt = super::__action47::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce49< 'input, @@ -14669,7 +19540,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ugt", Expr, Expr, ")" => ActionFn(48); + // Expr = "(", "slte", Expr, Expr, ")" => ActionFn(48); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -14680,7 +19551,7 @@ mod __parse__Function { let __end = __sym4.2.clone(); let __nt = super::__action48::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce50< 'input, @@ -14691,7 +19562,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ugte", Expr, Expr, ")" => ActionFn(49); + // Expr = "(", "ugt", Expr, Expr, ")" => ActionFn(49); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -14702,7 +19573,7 @@ mod __parse__Function { let __end = __sym4.2.clone(); let __nt = super::__action49::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce51< 'input, @@ -14713,7 +19584,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ult", Expr, Expr, ")" => ActionFn(50); + // Expr = "(", "ugte", Expr, Expr, ")" => ActionFn(50); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -14724,7 +19595,7 @@ mod __parse__Function { let __end = __sym4.2.clone(); let __nt = super::__action50::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce52< 'input, @@ -14735,7 +19606,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ulte", Expr, Expr, ")" => ActionFn(51); + // Expr = "(", "ult", Expr, Expr, ")" => ActionFn(51); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -14746,7 +19617,7 @@ mod __parse__Function { let __end = __sym4.2.clone(); let __nt = super::__action51::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce53< 'input, @@ -14757,17 +19628,18 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "-", Expr, ")" => ActionFn(52); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); + // Expr = "(", "ulte", Expr, Expr, ")" => ActionFn(52); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym3.2.clone(); - let __nt = super::__action52::<>(input, __sym0, __sym1, __sym2, __sym3); + let __end = __sym4.2.clone(); + let __nt = super::__action52::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (5, 18) } pub(crate) fn __reduce54< 'input, @@ -14778,7 +19650,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "~", Expr, ")" => ActionFn(53); + // Expr = "(", "-", Expr, ")" => ActionFn(53); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -14788,7 +19660,7 @@ mod __parse__Function { let __end = __sym3.2.clone(); let __nt = super::__action53::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } pub(crate) fn __reduce55< 'input, @@ -14799,7 +19671,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "clz", Expr, ")" => ActionFn(54); + // Expr = "(", "~", Expr, ")" => ActionFn(54); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -14809,7 +19681,7 @@ mod __parse__Function { let __end = __sym3.2.clone(); let __nt = super::__action54::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } pub(crate) fn __reduce56< 'input, @@ -14820,7 +19692,28 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "a64clz", Expr, Expr, ")" => ActionFn(55); + // Expr = "(", "clz", Expr, ")" => ActionFn(55); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action55::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (4, 18) + } + pub(crate) fn __reduce57< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "a64clz", Expr, Expr, ")" => ActionFn(56); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -14829,11 +19722,11 @@ mod __parse__Function { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action55::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action56::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce57< + pub(crate) fn __reduce58< 'input, >( input: &'input str, @@ -14842,7 +19735,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "cls", Expr, ")" => ActionFn(56); + // Expr = "(", "cls", Expr, ")" => ActionFn(57); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -14850,11 +19743,11 @@ mod __parse__Function { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action56::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action57::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce58< + pub(crate) fn __reduce59< 'input, >( input: &'input str, @@ -14863,7 +19756,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "a64cls", Expr, Expr, ")" => ActionFn(57); + // Expr = "(", "a64cls", Expr, Expr, ")" => ActionFn(58); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -14872,11 +19765,11 @@ mod __parse__Function { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action57::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action58::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce59< + pub(crate) fn __reduce60< 'input, >( input: &'input str, @@ -14885,7 +19778,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "rev", Expr, ")" => ActionFn(58); + // Expr = "(", "rev", Expr, ")" => ActionFn(59); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -14893,11 +19786,11 @@ mod __parse__Function { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action58::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action59::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce60< + pub(crate) fn __reduce61< 'input, >( input: &'input str, @@ -14906,7 +19799,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "a64rev", Expr, Expr, ")" => ActionFn(59); + // Expr = "(", "a64rev", Expr, Expr, ")" => ActionFn(60); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -14915,11 +19808,11 @@ mod __parse__Function { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action59::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action60::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce61< + pub(crate) fn __reduce62< 'input, >( input: &'input str, @@ -14928,7 +19821,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "subs", Expr, Expr, Expr, ")" => ActionFn(60); + // Expr = "(", "subs", Expr, Expr, Expr, ")" => ActionFn(61); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant3(__symbols); @@ -14938,31 +19831,9 @@ mod __parse__Function { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym5.2.clone(); - let __nt = super::__action60::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); - __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (6, 17) - } - pub(crate) fn __reduce62< - 'input, - >( - input: &'input str, - __lookahead_start: Option<&usize>, - __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, - _: core::marker::PhantomData<(&'input ())>, - ) -> (usize, usize) - { - // Expr = "(", "*", Expr, Expr, ")" => ActionFn(61); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant3(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0.clone(); - let __end = __sym4.2.clone(); - let __nt = super::__action61::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action61::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (6, 18) } pub(crate) fn __reduce63< 'input, @@ -14973,7 +19844,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "/", Expr, Expr, ")" => ActionFn(62); + // Expr = "(", "*", Expr, Expr, ")" => ActionFn(62); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -14984,7 +19855,7 @@ mod __parse__Function { let __end = __sym4.2.clone(); let __nt = super::__action62::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce64< 'input, @@ -14995,7 +19866,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sdiv", Expr, Expr, ")" => ActionFn(63); + // Expr = "(", "/", Expr, Expr, ")" => ActionFn(63); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -15006,7 +19877,7 @@ mod __parse__Function { let __end = __sym4.2.clone(); let __nt = super::__action63::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce65< 'input, @@ -15017,7 +19888,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "+", Expr, Expr, ")" => ActionFn(64); + // Expr = "(", "sdiv", Expr, Expr, ")" => ActionFn(64); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -15028,7 +19899,7 @@ mod __parse__Function { let __end = __sym4.2.clone(); let __nt = super::__action64::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce66< 'input, @@ -15039,7 +19910,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "-", Expr, Expr, ")" => ActionFn(65); + // Expr = "(", "+", Expr, Expr, ")" => ActionFn(65); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -15050,7 +19921,7 @@ mod __parse__Function { let __end = __sym4.2.clone(); let __nt = super::__action65::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce67< 'input, @@ -15061,7 +19932,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "urem", Expr, Expr, ")" => ActionFn(66); + // Expr = "(", "-", Expr, Expr, ")" => ActionFn(66); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -15072,7 +19943,7 @@ mod __parse__Function { let __end = __sym4.2.clone(); let __nt = super::__action66::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce68< 'input, @@ -15083,7 +19954,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "srem", Expr, Expr, ")" => ActionFn(67); + // Expr = "(", "urem", Expr, Expr, ")" => ActionFn(67); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -15094,7 +19965,7 @@ mod __parse__Function { let __end = __sym4.2.clone(); let __nt = super::__action67::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce69< 'input, @@ -15105,7 +19976,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "&", Expr, Expr, ")" => ActionFn(68); + // Expr = "(", "srem", Expr, Expr, ")" => ActionFn(68); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -15116,7 +19987,7 @@ mod __parse__Function { let __end = __sym4.2.clone(); let __nt = super::__action68::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce70< 'input, @@ -15127,7 +19998,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "|", Expr, Expr, ")" => ActionFn(69); + // Expr = "(", "&", Expr, Expr, ")" => ActionFn(69); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -15138,7 +20009,7 @@ mod __parse__Function { let __end = __sym4.2.clone(); let __nt = super::__action69::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce71< 'input, @@ -15149,7 +20020,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "xor", Expr, Expr, ")" => ActionFn(70); + // Expr = "(", "|", Expr, Expr, ")" => ActionFn(70); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -15160,7 +20031,7 @@ mod __parse__Function { let __end = __sym4.2.clone(); let __nt = super::__action70::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce72< 'input, @@ -15171,7 +20042,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "rotl", Expr, Expr, ")" => ActionFn(71); + // Expr = "(", "xor", Expr, Expr, ")" => ActionFn(71); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -15182,7 +20053,7 @@ mod __parse__Function { let __end = __sym4.2.clone(); let __nt = super::__action71::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce73< 'input, @@ -15193,7 +20064,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "rotr", Expr, Expr, ")" => ActionFn(72); + // Expr = "(", "rotl", Expr, Expr, ")" => ActionFn(72); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -15204,7 +20075,7 @@ mod __parse__Function { let __end = __sym4.2.clone(); let __nt = super::__action72::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce74< 'input, @@ -15215,7 +20086,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "shl", Expr, Expr, ")" => ActionFn(73); + // Expr = "(", "rotr", Expr, Expr, ")" => ActionFn(73); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -15226,7 +20097,7 @@ mod __parse__Function { let __end = __sym4.2.clone(); let __nt = super::__action73::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce75< 'input, @@ -15237,7 +20108,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "shr", Expr, Expr, ")" => ActionFn(74); + // Expr = "(", "shl", Expr, Expr, ")" => ActionFn(74); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -15248,7 +20119,7 @@ mod __parse__Function { let __end = __sym4.2.clone(); let __nt = super::__action74::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce76< 'input, @@ -15259,7 +20130,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ashr", Expr, Expr, ")" => ActionFn(75); + // Expr = "(", "shr", Expr, Expr, ")" => ActionFn(75); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -15270,7 +20141,7 @@ mod __parse__Function { let __end = __sym4.2.clone(); let __nt = super::__action75::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce77< 'input, @@ -15281,18 +20152,18 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "zero_ext", Width, Expr, ")" => ActionFn(76); + // Expr = "(", "ashr", Expr, Expr, ")" => ActionFn(76); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant24(__symbols); + let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action76::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce78< 'input, @@ -15303,18 +20174,18 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "zero_ext", Expr, Expr, ")" => ActionFn(77); + // Expr = "(", "zero_ext", Width, Expr, ")" => ActionFn(77); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant24(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action77::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce79< 'input, @@ -15325,18 +20196,18 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sign_ext", Width, Expr, ")" => ActionFn(78); + // Expr = "(", "zero_ext", Expr, Expr, ")" => ActionFn(78); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant24(__symbols); + let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action78::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce80< 'input, @@ -15347,18 +20218,18 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sign_ext", Expr, Expr, ")" => ActionFn(79); + // Expr = "(", "sign_ext", Width, Expr, ")" => ActionFn(79); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant24(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action79::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce81< 'input, @@ -15369,7 +20240,29 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "extract", UNum, UNum, Expr, ")" => ActionFn(80); + // Expr = "(", "sign_ext", Expr, Expr, ")" => ActionFn(80); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action80::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce82< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "extract", UNum, UNum, Expr, ")" => ActionFn(81); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant3(__symbols); @@ -15379,11 +20272,11 @@ mod __parse__Function { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym5.2.clone(); - let __nt = super::__action80::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action81::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (6, 17) + (6, 18) } - pub(crate) fn __reduce82< + pub(crate) fn __reduce83< 'input, >( input: &'input str, @@ -15392,7 +20285,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "conv_to", Width, Expr, ")" => ActionFn(81); + // Expr = "(", "conv_to", Width, Expr, ")" => ActionFn(82); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -15401,11 +20294,11 @@ mod __parse__Function { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action81::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action82::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce83< + pub(crate) fn __reduce84< 'input, >( input: &'input str, @@ -15414,7 +20307,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "conv_to", Expr, Expr, ")" => ActionFn(82); + // Expr = "(", "conv_to", Expr, Expr, ")" => ActionFn(83); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -15423,11 +20316,11 @@ mod __parse__Function { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action82::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action83::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce84< + pub(crate) fn __reduce85< 'input, >( input: &'input str, @@ -15436,7 +20329,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "if", Expr, Expr, Expr, ")" => ActionFn(83); + // Expr = "(", "if", Expr, Expr, Expr, ")" => ActionFn(84); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant3(__symbols); @@ -15446,11 +20339,11 @@ mod __parse__Function { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym5.2.clone(); - let __nt = super::__action83::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action84::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (6, 17) + (6, 18) } - pub(crate) fn __reduce85< + pub(crate) fn __reduce86< 'input, >( input: &'input str, @@ -15459,7 +20352,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "switch", Expr, Pair+, ")" => ActionFn(84); + // Expr = "(", "switch", Expr, Pair+, ")" => ActionFn(85); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant19(__symbols); @@ -15468,11 +20361,11 @@ mod __parse__Function { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action84::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action85::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce86< + pub(crate) fn __reduce87< 'input, >( input: &'input str, @@ -15481,7 +20374,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "int2bv", UNum, Expr, ")" => ActionFn(85); + // Expr = "(", "int2bv", UNum, Expr, ")" => ActionFn(86); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -15490,11 +20383,11 @@ mod __parse__Function { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action85::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action86::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce87< + pub(crate) fn __reduce88< 'input, >( input: &'input str, @@ -15503,7 +20396,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "bv2int", Expr, ")" => ActionFn(86); + // Expr = "(", "bv2int", Expr, ")" => ActionFn(87); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -15511,11 +20404,11 @@ mod __parse__Function { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action86::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action87::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce88< + pub(crate) fn __reduce89< 'input, >( input: &'input str, @@ -15524,7 +20417,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "widthof", Expr, ")" => ActionFn(87); + // Expr = "(", "widthof", Expr, ")" => ActionFn(88); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -15532,11 +20425,11 @@ mod __parse__Function { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action87::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action88::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce89< + pub(crate) fn __reduce90< 'input, >( input: &'input str, @@ -15545,15 +20438,15 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr? = Expr => ActionFn(104); + // Expr? = Expr => ActionFn(107); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action104::<>(input, __sym0); + let __nt = super::__action107::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (1, 18) + (1, 19) } - pub(crate) fn __reduce90< + pub(crate) fn __reduce91< 'input, >( input: &'input str, @@ -15562,14 +20455,14 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr? = => ActionFn(105); + // Expr? = => ActionFn(108); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action105::<>(input, &__start, &__end); + let __nt = super::__action108::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (0, 18) + (0, 19) } - pub(crate) fn __reduce91< + pub(crate) fn __reduce92< 'input, >( input: &'input str, @@ -15578,15 +20471,15 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprList = Comma => ActionFn(24); - let __sym0 = __pop_Variant9(__symbols); + // ExprList = Comma => ActionFn(25); + let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action24::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 19) + let __nt = super::__action25::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 20) } - pub(crate) fn __reduce92< + pub(crate) fn __reduce93< 'input, >( input: &'input str, @@ -15595,7 +20488,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Function = Ident, "(", ArgList, ")", "(", Type, ")", "{", Expr, "}" => ActionFn(29); + // Function = Ident, "(", ArgList, ")", "(", Type, ")", "{", Expr, "}" => ActionFn(30); assert!(__symbols.len() >= 10); let __sym9 = __pop_Variant0(__symbols); let __sym8 = __pop_Variant3(__symbols); @@ -15609,11 +20502,11 @@ mod __parse__Function { let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0.clone(); let __end = __sym9.2.clone(); - let __nt = super::__action29::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); + let __nt = super::__action30::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); - (10, 20) + (10, 21) } - pub(crate) fn __reduce93< + pub(crate) fn __reduce94< 'input, >( input: &'input str, @@ -15622,19 +20515,19 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // FunctionApplication = Expr, "(", ExprList, ")" => ActionFn(30); + // FunctionApplication = Expr, "(", ExprList, ")" => ActionFn(31); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant9(__symbols); + let __sym2 = __pop_Variant8(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action30::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action31::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (4, 21) + (4, 22) } - pub(crate) fn __reduce94< + pub(crate) fn __reduce95< 'input, >( input: &'input str, @@ -15643,7 +20536,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // FunctionType = "func", "(", TypeList, ")", "(", Type, ")" => ActionFn(27); + // FunctionType = "func", "(", TypeList, ")", "(", Type, ")" => ActionFn(28); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant5(__symbols); @@ -15654,11 +20547,11 @@ mod __parse__Function { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym6.2.clone(); - let __nt = super::__action27::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action28::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (7, 22) + (7, 23) } - pub(crate) fn __reduce95< + pub(crate) fn __reduce96< 'input, >( input: &'input str, @@ -15667,15 +20560,15 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"[A-Za-z]"# => ActionFn(12); + // Ident = r#"[A-Za-z]"# => ActionFn(13); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action12::<>(input, __sym0); + let __nt = super::__action13::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 23) + (1, 24) } - pub(crate) fn __reduce96< + pub(crate) fn __reduce97< 'input, >( input: &'input str, @@ -15684,15 +20577,15 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"[A-Zac-z][\\.\\w]+"# => ActionFn(13); + // Ident = r#"[A-Zac-z][\\.\\w]+"# => ActionFn(14); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action13::<>(input, __sym0); + let __nt = super::__action14::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 23) + (1, 24) } - pub(crate) fn __reduce97< + pub(crate) fn __reduce98< 'input, >( input: &'input str, @@ -15701,15 +20594,15 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"b[\\w&&[^v]][\\.\\w]*"# => ActionFn(14); + // Ident = r#"b[\\w&&[^v]][\\.\\w]*"# => ActionFn(15); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action14::<>(input, __sym0); + let __nt = super::__action15::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 23) + (1, 24) } - pub(crate) fn __reduce98< + pub(crate) fn __reduce99< 'input, >( input: &'input str, @@ -15718,15 +20611,15 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Num = r#"-?[0-9]+i"# => ActionFn(11); + // Num = r#"-?[0-9]+i"# => ActionFn(12); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action11::<>(input, __sym0); + let __nt = super::__action12::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant17(__nt), __end)); - (1, 24) + (1, 25) } - pub(crate) fn __reduce99< + pub(crate) fn __reduce100< 'input, >( input: &'input str, @@ -15735,7 +20628,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Pair = "(", Expr, Expr, ")" => ActionFn(25); + // Pair = "(", Expr, Expr, ")" => ActionFn(26); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -15743,11 +20636,11 @@ mod __parse__Function { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action25::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action26::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant18(__nt), __end)); - (4, 25) + (4, 26) } - pub(crate) fn __reduce100< + pub(crate) fn __reduce101< 'input, >( input: &'input str, @@ -15756,15 +20649,15 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Pair+ = Pair => ActionFn(89); + // Pair+ = Pair => ActionFn(92); let __sym0 = __pop_Variant18(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action89::<>(input, __sym0); + let __nt = super::__action92::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant19(__nt), __end)); - (1, 26) + (1, 27) } - pub(crate) fn __reduce101< + pub(crate) fn __reduce102< 'input, >( input: &'input str, @@ -15773,17 +20666,17 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Pair+ = Pair+, Pair => ActionFn(90); + // Pair+ = Pair+, Pair => ActionFn(93); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant18(__symbols); let __sym0 = __pop_Variant19(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action90::<>(input, __sym0, __sym1); + let __nt = super::__action93::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant19(__nt), __end)); - (2, 26) + (2, 27) } - pub(crate) fn __reduce102< + pub(crate) fn __reduce103< 'input, >( input: &'input str, @@ -15792,11 +20685,40 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // TermAnnotation = "(", "spec", TermSignature, "(", "assertions", ExprList, ")", ")" => ActionFn(88); + // TermAnnotation = "(", "spec", TermSignature, "(", "assume", ExprList, ")", "(", "assert", ExprList, ")", ")" => ActionFn(90); + assert!(__symbols.len() >= 12); + let __sym11 = __pop_Variant0(__symbols); + let __sym10 = __pop_Variant0(__symbols); + let __sym9 = __pop_Variant8(__symbols); + let __sym8 = __pop_Variant0(__symbols); + let __sym7 = __pop_Variant0(__symbols); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant8(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant21(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym11.2.clone(); + let __nt = super::__action90::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9, __sym10, __sym11); + __symbols.push((__start, __Symbol::Variant20(__nt), __end)); + (12, 28) + } + pub(crate) fn __reduce104< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // TermAnnotation = "(", "spec", TermSignature, "(", "assume", ExprList, ")", ")" => ActionFn(91); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant9(__symbols); + let __sym5 = __pop_Variant8(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant21(__symbols); @@ -15804,11 +20726,11 @@ mod __parse__Function { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym7.2.clone(); - let __nt = super::__action88::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); + let __nt = super::__action91::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant20(__nt), __end)); - (8, 27) + (8, 28) } - pub(crate) fn __reduce103< + pub(crate) fn __reduce105< 'input, >( input: &'input str, @@ -15817,7 +20739,7 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // TermSignature = "(", "sig", Args, "(", BoundVar, ")", ")" => ActionFn(26); + // TermSignature = "(", "sig", Args, "(", BoundVar, ")", ")" => ActionFn(27); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -15828,11 +20750,11 @@ mod __parse__Function { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym6.2.clone(); - let __nt = super::__action26::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action27::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant21(__nt), __end)); - (7, 28) + (7, 29) } - pub(crate) fn __reduce104< + pub(crate) fn __reduce106< 'input, >( input: &'input str, @@ -15841,15 +20763,15 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "bv" => ActionFn(15); + // Type = "bv" => ActionFn(16); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action15::<>(input, __sym0); + let __nt = super::__action16::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 29) + (1, 30) } - pub(crate) fn __reduce105< + pub(crate) fn __reduce107< 'input, >( input: &'input str, @@ -15858,17 +20780,17 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "bv", UNum => ActionFn(16); + // Type = "bv", UNum => ActionFn(17); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant23(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action16::<>(input, __sym0, __sym1); + let __nt = super::__action17::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (2, 29) + (2, 30) } - pub(crate) fn __reduce106< + pub(crate) fn __reduce108< 'input, >( input: &'input str, @@ -15877,15 +20799,15 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "isleType" => ActionFn(17); + // Type = "isleType" => ActionFn(18); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action17::<>(input, __sym0); + let __nt = super::__action18::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 29) + (1, 30) } - pub(crate) fn __reduce107< + pub(crate) fn __reduce109< 'input, >( input: &'input str, @@ -15894,15 +20816,15 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "bool" => ActionFn(18); + // Type = "bool" => ActionFn(19); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action18::<>(input, __sym0); + let __nt = super::__action19::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 29) + (1, 30) } - pub(crate) fn __reduce108< + pub(crate) fn __reduce110< 'input, >( input: &'input str, @@ -15911,15 +20833,15 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type? = Type => ActionFn(99); + // Type? = Type => ActionFn(102); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action99::<>(input, __sym0); + let __nt = super::__action102::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant22(__nt), __end)); - (1, 30) + (1, 31) } - pub(crate) fn __reduce109< + pub(crate) fn __reduce111< 'input, >( input: &'input str, @@ -15928,14 +20850,14 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type? = => ActionFn(100); + // Type? = => ActionFn(103); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action100::<>(input, &__start, &__end); + let __nt = super::__action103::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant22(__nt), __end)); - (0, 30) + (0, 31) } - pub(crate) fn __reduce110< + pub(crate) fn __reduce112< 'input, >( input: &'input str, @@ -15944,15 +20866,15 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // TypeList = Comma => ActionFn(23); + // TypeList = Comma => ActionFn(24); let __sym0 = __pop_Variant10(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action23::<>(input, __sym0); + let __nt = super::__action24::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 31) + (1, 32) } - pub(crate) fn __reduce111< + pub(crate) fn __reduce113< 'input, >( input: &'input str, @@ -15961,15 +20883,15 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // UNum = r#"[0-9]+"# => ActionFn(10); + // UNum = r#"[0-9]+"# => ActionFn(11); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action10::<>(input, __sym0); + let __nt = super::__action11::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant23(__nt), __end)); - (1, 32) + (1, 33) } - pub(crate) fn __reduce112< + pub(crate) fn __reduce114< 'input, >( input: &'input str, @@ -15978,18 +20900,18 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Width = "(", "regwidth", ")" => ActionFn(31); + // Width = "(", "regwidth", ")" => ActionFn(32); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action31::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action32::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (3, 33) + (3, 34) } - pub(crate) fn __reduce113< + pub(crate) fn __reduce115< 'input, >( input: &'input str, @@ -15998,18 +20920,35 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Width = "(", UNum, ")" => ActionFn(32); + // Width = "(", UNum, ")" => ActionFn(33); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant23(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action32::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action33::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (3, 33) + (3, 34) } - pub(crate) fn __reduce114< + pub(crate) fn __reduce116< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // __AssertBlock = AssertBlock => ActionFn(9); + let __sym0 = __pop_Variant8(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action9::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 35) + } + pub(crate) fn __reduce117< 'input, >( input: &'input str, @@ -16024,9 +20963,9 @@ mod __parse__Function { let __end = __sym0.2.clone(); let __nt = super::__action1::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); - (1, 34) + (1, 36) } - pub(crate) fn __reduce115< + pub(crate) fn __reduce118< 'input, >( input: &'input str, @@ -16041,9 +20980,9 @@ mod __parse__Function { let __end = __sym0.2.clone(); let __nt = super::__action4::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); - (1, 35) + (1, 37) } - pub(crate) fn __reduce116< + pub(crate) fn __reduce119< 'input, >( input: &'input str, @@ -16058,9 +20997,9 @@ mod __parse__Function { let __end = __sym0.2.clone(); let __nt = super::__action8::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (1, 36) + (1, 38) } - pub(crate) fn __reduce118< + pub(crate) fn __reduce121< 'input, >( input: &'input str, @@ -16075,9 +21014,9 @@ mod __parse__Function { let __end = __sym0.2.clone(); let __nt = super::__action6::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 38) + (1, 40) } - pub(crate) fn __reduce119< + pub(crate) fn __reduce122< 'input, >( input: &'input str, @@ -16092,9 +21031,9 @@ mod __parse__Function { let __end = __sym0.2.clone(); let __nt = super::__action3::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 39) + (1, 41) } - pub(crate) fn __reduce120< + pub(crate) fn __reduce123< 'input, >( input: &'input str, @@ -16103,15 +21042,15 @@ mod __parse__Function { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // __TermAnnotation = TermAnnotation => ActionFn(9); + // __TermAnnotation = TermAnnotation => ActionFn(10); let __sym0 = __pop_Variant20(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action9::<>(input, __sym0); + let __nt = super::__action10::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant20(__nt), __end)); - (1, 40) + (1, 42) } - pub(crate) fn __reduce121< + pub(crate) fn __reduce124< 'input, >( input: &'input str, @@ -16126,9 +21065,9 @@ mod __parse__Function { let __end = __sym0.2.clone(); let __nt = super::__action2::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant21(__nt), __end)); - (1, 41) + (1, 43) } - pub(crate) fn __reduce122< + pub(crate) fn __reduce125< 'input, >( input: &'input str, @@ -16143,9 +21082,9 @@ mod __parse__Function { let __end = __sym0.2.clone(); let __nt = super::__action0::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 42) + (1, 44) } - pub(crate) fn __reduce123< + pub(crate) fn __reduce126< 'input, >( input: &'input str, @@ -16160,7 +21099,7 @@ mod __parse__Function { let __end = __sym0.2.clone(); let __nt = super::__action7::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (1, 43) + (1, 45) } } pub use self::__parse__Function::FunctionParser; @@ -16190,8 +21129,8 @@ mod __parse__FunctionApplication { Variant5(Type), Variant6(alloc::vec::Vec), Variant7(Vec), - Variant8(core::option::Option), - Variant9(Vec>), + Variant8(Vec>), + Variant9(core::option::Option), Variant10(Vec), Variant11(Const), Variant12(core::option::Option>), @@ -16210,486 +21149,486 @@ mod __parse__FunctionApplication { } const __ACTION: &[i16] = &[ // State 0 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1 - 5, 6, 7, 0, 0, 0, 8, 9, 0, 10, 11, 0, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 20, 21, 22, 23, 24, 109, 0, 25, 26, 0, 0, 27, 28, 29, 30, 31, 32, 33, 34, 0, 35, 36, 37, 0, 38, 39, 40, 110, 41, 42, 43, 44, 45, 46, 47, 48, 0, 49, 50, 0, 51, 111, 0, 112, 113, 114, + 5, 6, 7, 0, 0, 0, 8, 9, 0, 10, 11, 0, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 20, 21, 22, 23, 24, 109, 0, 25, 26, 0, 0, 27, 28, 29, 30, 31, 32, 33, 34, 0, 35, 36, 37, 0, 38, 39, 40, 110, 41, 42, 43, 44, 45, 46, 47, 48, 0, 49, 50, 0, 51, 111, 0, 112, 113, 114, // State 2 - 0, 0, 0, 2, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, -28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 3 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, // State 4 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 5 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 6 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 7 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 8 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 9 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 10 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 11 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 12 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 13 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 14 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 15 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 16 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 17 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 18 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 19 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 20 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 21 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 22 - 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 23 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, // State 24 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 25 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, // State 26 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 27 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 28 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 29 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 30 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 31 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 32 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 33 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 34 - 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 35 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 36 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 37 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 38 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 39 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 40 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 41 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 42 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 43 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 44 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 45 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 46 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 47 - 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 48 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 49 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 50 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 51 - 0, 0, 0, 2, 0, -29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, -30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 52 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 53 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 54 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 55 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 56 - 0, 0, 0, 2, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 57 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 58 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 59 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 60 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 61 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 62 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 63 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 64 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 65 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 66 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 67 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 68 - 5, 6, 7, 0, 0, 0, 8, 9, 0, 10, 11, 0, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 20, 21, 22, 23, 24, 109, 0, 25, 26, 0, 156, 27, 28, 29, 30, 31, 32, 33, 34, 0, 35, 36, 37, 0, 38, 39, 40, 110, 41, 42, 43, 44, 45, 46, 47, 48, 0, 49, 50, 0, 51, 111, 121, 112, 113, 114, + 5, 6, 7, 0, 0, 0, 8, 9, 0, 10, 11, 0, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 20, 21, 22, 23, 24, 109, 0, 25, 26, 0, 156, 27, 28, 29, 30, 31, 32, 33, 34, 0, 35, 36, 37, 0, 38, 39, 40, 110, 41, 42, 43, 44, 45, 46, 47, 48, 0, 49, 50, 0, 51, 111, 121, 112, 113, 114, // State 69 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, // State 70 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 71 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 72 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 73 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 74 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 75 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 76 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 77 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 78 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 79 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 80 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 81 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 82 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 83 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 84 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 85 - 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 86 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 87 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 88 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 89 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 90 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 91 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 92 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 93 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 94 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 95 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 96 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 97 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 98 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 99 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 100 - 0, 0, 0, 102, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 102, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 101 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 102 - 0, 0, 0, 0, 0, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, + 0, 0, 0, 0, 0, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, // State 103 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 104 - 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 105 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 106 - 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 107 - 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 108 - 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 109 - 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 110 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0, 0, 0, // State 111 - 0, 0, 0, 0, 0, -96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 112 - 0, 0, 0, 0, 0, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 113 - 0, 0, 0, 0, 0, -98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 114 - 0, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 115 - 0, 0, 0, 0, 0, -26, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -27, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 116 - 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 117 - 0, 0, 0, -36, 0, -36, 0, 0, -36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -37, 0, -37, 0, 0, -37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 118 - 0, 0, 0, -35, 0, -35, 0, 0, -35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -36, 0, -36, 0, 0, -36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 119 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 120 - 0, 0, 0, -112, 0, -112, 0, 0, 0, 0, 0, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, 0, 0, 0, + 0, 0, 0, -114, 0, -114, 0, 0, 0, 0, 0, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, 0, 0, 0, // State 121 - 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 122 - 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 123 - 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 124 - 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 125 - 0, 0, 0, -38, 0, -38, 0, 0, -38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -39, 0, -39, 0, 0, -39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 126 - 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 127 - 0, 0, 0, -37, 0, -37, 0, 0, -37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -38, 0, -38, 0, 0, -38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 128 - 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 129 - 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 130 - 0, 0, 0, 0, 0, -28, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -29, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 131 - 0, 0, 0, -9, 0, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -9, 0, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 132 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 133 - 0, 0, 0, -39, 0, -39, 0, 0, -39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -40, 0, -40, 0, 0, -40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 134 - 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 135 - 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 136 - 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 137 - 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 138 - 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 139 - 0, 0, 0, -54, 0, -54, 0, 0, -54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -55, 0, -55, 0, 0, -55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 140 - 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 141 - 0, 0, 0, 0, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 142 - 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 143 - 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 144 - 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 145 - 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 146 - 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 147 - 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 148 - 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 149 - 0, 0, 0, -88, 0, -88, 0, 0, -88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -89, 0, -89, 0, 0, -89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 150 - 0, 0, 0, -58, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -59, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 151 - 0, 0, 0, -56, 0, -56, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -57, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 152 - 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 153 - 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 154 - 0, 0, 0, 0, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 155 - 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 156 - 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 157 - 0, 0, 0, -60, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -61, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 158 - 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 159 - 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 160 - 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 161 - 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 162 - 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 163 - 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 164 - 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 165 - 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 166 - 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 167 - 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 168 - 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 169 - 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 170 - 0, 0, 0, -101, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -102, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 171 - 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 172 - 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 173 - 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 174 - 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 175 - 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 176 - 0, 0, 0, -89, 0, -89, 0, 0, -89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -90, 0, -90, 0, 0, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 177 - 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 178 - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 179 - 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 180 - 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 181 - 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 182 - 0, 0, 0, -55, 0, -55, 0, 0, -55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -56, 0, -56, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 183 - 0, 0, 0, -10, 0, -10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -10, 0, -10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 184 - 0, 0, 0, 0, 0, -34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 185 - 0, 0, 0, 0, 0, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 186 - 0, 0, 0, 0, 0, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 187 - 0, 0, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 188 - 0, 0, 0, -40, 0, -40, 0, 0, -40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -41, 0, -41, 0, 0, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 189 - 0, 0, 0, -63, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 190 - 0, 0, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 191 - 0, 0, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 192 - 0, 0, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 193 - 0, 0, 0, -45, 0, -45, 0, 0, -45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -46, 0, -46, 0, 0, -46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 194 - 0, 0, 0, -44, 0, -44, 0, 0, -44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -45, 0, -45, 0, 0, -45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 195 - 0, 0, 0, -43, 0, -43, 0, 0, -43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -44, 0, -44, 0, 0, -44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 196 - 0, 0, 0, -42, 0, -42, 0, 0, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -43, 0, -43, 0, 0, -43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 197 - 0, 0, 0, -59, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -60, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 198 - 0, 0, 0, -57, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -58, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 199 - 0, 0, 0, -61, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -62, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 200 - 0, 0, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 201 - 0, 0, 0, -84, 0, -84, 0, 0, -84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -85, 0, -85, 0, 0, -85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 202 - 0, 0, 0, -83, 0, -83, 0, 0, -83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -84, 0, -84, 0, 0, -84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 203 - 0, 0, 0, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 204 - 0, 0, 0, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 205 - 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 206 - 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 207 - 0, 0, 0, -87, 0, -87, 0, 0, -87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -88, 0, -88, 0, 0, -88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 208 - 0, 0, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 209 - 0, 0, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 210 - 0, 0, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 211 - 0, 0, 0, -46, 0, -46, 0, 0, -46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -47, 0, -47, 0, 0, -47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 212 - 0, 0, 0, -47, 0, -47, 0, 0, -47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -48, 0, -48, 0, 0, -48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 213 - 0, 0, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 214 - 0, 0, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 215 - 0, 0, 0, -81, 0, -81, 0, 0, -81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -82, 0, -82, 0, 0, -82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 216 - 0, 0, 0, -80, 0, -80, 0, 0, -80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -81, 0, -81, 0, 0, -81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 217 - 0, 0, 0, -48, 0, -48, 0, 0, -48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -49, 0, -49, 0, 0, -49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 218 - 0, 0, 0, -49, 0, -49, 0, 0, -49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -50, 0, -50, 0, 0, -50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 219 - 0, 0, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 220 - 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 221 - 0, 0, 0, -102, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -103, 0, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 222 - 0, 0, 0, -86, 0, -86, 0, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -87, 0, -87, 0, 0, -87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 223 - 0, 0, 0, -50, 0, -50, 0, 0, -50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -51, 0, -51, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 224 - 0, 0, 0, -51, 0, -51, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -52, 0, -52, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 225 - 0, 0, 0, -52, 0, -52, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -53, 0, -53, 0, 0, -53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 226 - 0, 0, 0, -53, 0, -53, 0, 0, -53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -54, 0, -54, 0, 0, -54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 227 - 0, 0, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 228 - 0, 0, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 229 - 0, 0, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -80, 0, -80, 0, 0, -80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 230 - 0, 0, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 231 - 0, 0, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 232 - 0, 0, 0, -41, 0, -41, 0, 0, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -42, 0, -42, 0, 0, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 233 - 0, 0, 0, 0, 0, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 234 - 0, 0, 0, -82, 0, -82, 0, 0, -82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -83, 0, -83, 0, 0, -83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 235 - 0, 0, 0, -85, 0, -85, 0, 0, -85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -86, 0, -86, 0, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 236 - 0, 0, 0, -62, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -63, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 237 - 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 238 - 0, 0, 0, -100, 0, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -101, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]; fn __action(state: i16, integer: usize) -> i16 { - __ACTION[(state as usize) * 69 + integer] + __ACTION[(state as usize) * 70 + integer] } const __EOF_ACTION: &[i16] = &[ // State 0 @@ -16903,7 +21842,7 @@ mod __parse__FunctionApplication { // State 104 0, // State 105 - -119, + -122, // State 106 0, // State 107 @@ -16957,7 +21896,7 @@ mod __parse__FunctionApplication { // State 131 0, // State 132 - -94, + -95, // State 133 0, // State 134 @@ -17174,9 +22113,9 @@ mod __parse__FunctionApplication { fn __goto(state: i16, nt: usize) -> i16 { match nt { 5 => 51, - 14 => 114, - 16 => 106, - 17 => match state { + 15 => 114, + 17 => 106, + 18 => match state { 6 => 53, 7 => 54, 8 => 55, @@ -17272,17 +22211,17 @@ mod __parse__FunctionApplication { 103 => 237, _ => 52, }, - 19 => 116, - 21 => 105, - 23 => 107, - 24 => 3, - 25 => match state { + 20 => 116, + 22 => 105, + 24 => 107, + 25 => 3, + 26 => match state { 100 => 221, _ => 170, }, - 26 => 100, - 29 => 184, - 32 => match state { + 27 => 100, + 30 => 184, + 33 => match state { 25 => 71, 69 => 97, 3 => 119, @@ -17290,7 +22229,7 @@ mod __parse__FunctionApplication { 102 => 233, _ => 69, }, - 33 => match state { + 34 => match state { 34 => 80, 47 => 93, _ => 67, @@ -17320,7 +22259,8 @@ mod __parse__FunctionApplication { r###""a64clz""###, r###""a64rev""###, r###""ashr""###, - r###""assertions""###, + r###""assert""###, + r###""assume""###, r###""bool""###, r###""bv""###, r###""bv2int""###, @@ -17421,7 +22361,7 @@ mod __parse__FunctionApplication { #[inline] fn error_action(&self, state: i16) -> i16 { - __action(state, 69 - 1) + __action(state, 70 - 1) } #[inline] @@ -17548,11 +22488,12 @@ mod __parse__FunctionApplication { Token(66, _) if true => Some(61), Token(67, _) if true => Some(62), Token(68, _) if true => Some(63), - Token(0, _) if true => Some(64), - Token(1, _) if true => Some(65), - Token(2, _) if true => Some(66), - Token(3, _) if true => Some(67), - Token(4, _) if true => Some(68), + Token(69, _) if true => Some(64), + Token(0, _) if true => Some(65), + Token(1, _) if true => Some(66), + Token(2, _) if true => Some(67), + Token(3, _) if true => Some(68), + Token(4, _) if true => Some(69), _ => None, } } @@ -17565,8 +22506,8 @@ mod __parse__FunctionApplication { ) -> __Symbol<'input> { match __token_index { - 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 => match __token { - Token(5, __tok0) | Token(6, __tok0) | Token(7, __tok0) | Token(8, __tok0) | Token(9, __tok0) | Token(10, __tok0) | Token(11, __tok0) | Token(12, __tok0) | Token(13, __tok0) | Token(14, __tok0) | Token(15, __tok0) | Token(16, __tok0) | Token(17, __tok0) | Token(18, __tok0) | Token(19, __tok0) | Token(20, __tok0) | Token(21, __tok0) | Token(22, __tok0) | Token(23, __tok0) | Token(24, __tok0) | Token(25, __tok0) | Token(26, __tok0) | Token(27, __tok0) | Token(28, __tok0) | Token(29, __tok0) | Token(30, __tok0) | Token(31, __tok0) | Token(32, __tok0) | Token(33, __tok0) | Token(34, __tok0) | Token(35, __tok0) | Token(36, __tok0) | Token(37, __tok0) | Token(38, __tok0) | Token(39, __tok0) | Token(40, __tok0) | Token(41, __tok0) | Token(42, __tok0) | Token(43, __tok0) | Token(44, __tok0) | Token(45, __tok0) | Token(46, __tok0) | Token(47, __tok0) | Token(48, __tok0) | Token(49, __tok0) | Token(50, __tok0) | Token(51, __tok0) | Token(52, __tok0) | Token(53, __tok0) | Token(54, __tok0) | Token(55, __tok0) | Token(56, __tok0) | Token(57, __tok0) | Token(58, __tok0) | Token(59, __tok0) | Token(60, __tok0) | Token(61, __tok0) | Token(62, __tok0) | Token(63, __tok0) | Token(64, __tok0) | Token(65, __tok0) | Token(66, __tok0) | Token(67, __tok0) | Token(68, __tok0) | Token(0, __tok0) | Token(1, __tok0) | Token(2, __tok0) | Token(3, __tok0) | Token(4, __tok0) if true => __Symbol::Variant0(__tok0), + 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 => match __token { + Token(5, __tok0) | Token(6, __tok0) | Token(7, __tok0) | Token(8, __tok0) | Token(9, __tok0) | Token(10, __tok0) | Token(11, __tok0) | Token(12, __tok0) | Token(13, __tok0) | Token(14, __tok0) | Token(15, __tok0) | Token(16, __tok0) | Token(17, __tok0) | Token(18, __tok0) | Token(19, __tok0) | Token(20, __tok0) | Token(21, __tok0) | Token(22, __tok0) | Token(23, __tok0) | Token(24, __tok0) | Token(25, __tok0) | Token(26, __tok0) | Token(27, __tok0) | Token(28, __tok0) | Token(29, __tok0) | Token(30, __tok0) | Token(31, __tok0) | Token(32, __tok0) | Token(33, __tok0) | Token(34, __tok0) | Token(35, __tok0) | Token(36, __tok0) | Token(37, __tok0) | Token(38, __tok0) | Token(39, __tok0) | Token(40, __tok0) | Token(41, __tok0) | Token(42, __tok0) | Token(43, __tok0) | Token(44, __tok0) | Token(45, __tok0) | Token(46, __tok0) | Token(47, __tok0) | Token(48, __tok0) | Token(49, __tok0) | Token(50, __tok0) | Token(51, __tok0) | Token(52, __tok0) | Token(53, __tok0) | Token(54, __tok0) | Token(55, __tok0) | Token(56, __tok0) | Token(57, __tok0) | Token(58, __tok0) | Token(59, __tok0) | Token(60, __tok0) | Token(61, __tok0) | Token(62, __tok0) | Token(63, __tok0) | Token(64, __tok0) | Token(65, __tok0) | Token(66, __tok0) | Token(67, __tok0) | Token(68, __tok0) | Token(69, __tok0) | Token(0, __tok0) | Token(1, __tok0) | Token(2, __tok0) | Token(3, __tok0) | Token(4, __tok0) if true => __Symbol::Variant0(__tok0), _ => unreachable!(), }, _ => unreachable!(), @@ -17971,12 +22912,7 @@ mod __parse__FunctionApplication { __reduce117(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } 118 => { - // __FunctionApplication = FunctionApplication => ActionFn(6); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0.clone(); - let __end = __sym0.2.clone(); - let __nt = super::__action6::<>(input, __sym0); - return Some(Ok(__nt)); + __reduce118(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } 119 => { __reduce119(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) @@ -17985,7 +22921,12 @@ mod __parse__FunctionApplication { __reduce120(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } 121 => { - __reduce121(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + // __FunctionApplication = FunctionApplication => ActionFn(6); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action6::<>(input, __sym0); + return Some(Ok(__nt)); } 122 => { __reduce122(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) @@ -17993,6 +22934,15 @@ mod __parse__FunctionApplication { 123 => { __reduce123(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } + 124 => { + __reduce124(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 125 => { + __reduce125(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 126 => { + __reduce126(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } _ => panic!("invalid action code {}", __action) }; let __states_len = __states.len(); @@ -18149,14 +23099,14 @@ mod __parse__FunctionApplication { _ => __symbol_type_mismatch() } } - fn __pop_Variant9< + fn __pop_Variant8< 'input, >( __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, Vec>, usize) { match __symbols.pop() { - Some((__l, __Symbol::Variant9(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant8(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -18215,14 +23165,14 @@ mod __parse__FunctionApplication { _ => __symbol_type_mismatch() } } - fn __pop_Variant8< + fn __pop_Variant9< 'input, >( __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, core::option::Option, usize) { match __symbols.pop() { - Some((__l, __Symbol::Variant8(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant9(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -18290,13 +23240,13 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = BoundVar, "," => ActionFn(98); + // ( ",") = BoundVar, "," => ActionFn(101); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action98::<>(input, __sym0, __sym1); + let __nt = super::__action101::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (2, 0) } @@ -18309,10 +23259,10 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(96); + // ( ",")* = => ActionFn(99); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action96::<>(input, &__start, &__end); + let __nt = super::__action99::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (0, 1) } @@ -18325,11 +23275,11 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(97); + // ( ",")* = ( ",")+ => ActionFn(100); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action97::<>(input, __sym0); + let __nt = super::__action100::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (1, 1) } @@ -18342,13 +23292,13 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = BoundVar, "," => ActionFn(115); + // ( ",")+ = BoundVar, "," => ActionFn(118); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action115::<>(input, __sym0, __sym1); + let __nt = super::__action118::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (2, 2) } @@ -18361,14 +23311,14 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, BoundVar, "," => ActionFn(116); + // ( ",")+ = ( ",")+, BoundVar, "," => ActionFn(119); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant1(__symbols); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action116::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action119::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (3, 2) } @@ -18381,13 +23331,13 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = Expr, "," => ActionFn(108); + // ( ",") = Expr, "," => ActionFn(111); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action108::<>(input, __sym0, __sym1); + let __nt = super::__action111::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); (2, 3) } @@ -18400,10 +23350,10 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(106); + // ( ",")* = => ActionFn(109); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action106::<>(input, &__start, &__end); + let __nt = super::__action109::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (0, 4) } @@ -18416,11 +23366,11 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(107); + // ( ",")* = ( ",")+ => ActionFn(110); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action107::<>(input, __sym0); + let __nt = super::__action110::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 4) } @@ -18433,13 +23383,13 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Expr, "," => ActionFn(119); + // ( ",")+ = Expr, "," => ActionFn(122); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action119::<>(input, __sym0, __sym1); + let __nt = super::__action122::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (2, 5) } @@ -18452,14 +23402,14 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Expr, "," => ActionFn(120); + // ( ",")+ = ( ",")+, Expr, "," => ActionFn(123); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant3(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action120::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action123::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 5) } @@ -18472,13 +23422,13 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = Type, "," => ActionFn(103); + // ( ",") = Type, "," => ActionFn(106); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action103::<>(input, __sym0, __sym1); + let __nt = super::__action106::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (2, 6) } @@ -18491,10 +23441,10 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(101); + // ( ",")* = => ActionFn(104); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action101::<>(input, &__start, &__end); + let __nt = super::__action104::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (0, 7) } @@ -18507,11 +23457,11 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(102); + // ( ",")* = ( ",")+ => ActionFn(105); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action102::<>(input, __sym0); + let __nt = super::__action105::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (1, 7) } @@ -18524,13 +23474,13 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Type, "," => ActionFn(123); + // ( ",")+ = Type, "," => ActionFn(126); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action123::<>(input, __sym0, __sym1); + let __nt = super::__action126::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (2, 8) } @@ -18543,14 +23493,14 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Type, "," => ActionFn(124); + // ( ",")+ = ( ",")+, Type, "," => ActionFn(127); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant5(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action124::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action127::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (3, 8) } @@ -18563,11 +23513,11 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ArgList = Comma => ActionFn(21); + // ArgList = Comma => ActionFn(22); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action21::<>(input, __sym0); + let __nt = super::__action22::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (1, 9) } @@ -18580,14 +23530,14 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Args = "(args", ArgList, ")" => ActionFn(22); + // Args = "(args", ArgList, ")" => ActionFn(23); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant7(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action22::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action23::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (3, 10) } @@ -18600,15 +23550,36 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar = Ident => ActionFn(19); + // AssertBlock = "(", "assert", ExprList, ")" => ActionFn(89); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant8(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action89::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (4, 11) + } + pub(crate) fn __reduce18< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // BoundVar = Ident => ActionFn(20); let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action19::<>(input, __sym0); + let __nt = super::__action20::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); - (1, 11) + (1, 12) } - pub(crate) fn __reduce18< + pub(crate) fn __reduce19< 'input, >( input: &'input str, @@ -18617,18 +23588,18 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar = Ident, ":", Type => ActionFn(20); + // BoundVar = Ident, ":", Type => ActionFn(21); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant5(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action20::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action21::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); - (3, 11) + (3, 12) } - pub(crate) fn __reduce19< + pub(crate) fn __reduce20< 'input, >( input: &'input str, @@ -18637,15 +23608,15 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar? = BoundVar => ActionFn(94); + // BoundVar? = BoundVar => ActionFn(97); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action94::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (1, 12) + let __nt = super::__action97::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (1, 13) } - pub(crate) fn __reduce20< + pub(crate) fn __reduce21< 'input, >( input: &'input str, @@ -18654,14 +23625,14 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar? = => ActionFn(95); + // BoundVar? = => ActionFn(98); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action95::<>(input, &__start, &__end); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (0, 12) + let __nt = super::__action98::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (0, 13) } - pub(crate) fn __reduce21< + pub(crate) fn __reduce22< 'input, >( input: &'input str, @@ -18670,15 +23641,15 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = BoundVar => ActionFn(127); + // Comma = BoundVar => ActionFn(130); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action127::<>(input, __sym0); + let __nt = super::__action130::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (1, 13) + (1, 14) } - pub(crate) fn __reduce22< + pub(crate) fn __reduce23< 'input, >( input: &'input str, @@ -18687,14 +23658,14 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(128); + // Comma = => ActionFn(131); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action128::<>(input, &__start, &__end); + let __nt = super::__action131::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (0, 13) + (0, 14) } - pub(crate) fn __reduce23< + pub(crate) fn __reduce24< 'input, >( input: &'input str, @@ -18703,17 +23674,17 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, BoundVar => ActionFn(129); + // Comma = ( ",")+, BoundVar => ActionFn(132); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant1(__symbols); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action129::<>(input, __sym0, __sym1); + let __nt = super::__action132::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (2, 13) + (2, 14) } - pub(crate) fn __reduce24< + pub(crate) fn __reduce25< 'input, >( input: &'input str, @@ -18722,15 +23693,15 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(130); + // Comma = ( ",")+ => ActionFn(133); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action130::<>(input, __sym0); + let __nt = super::__action133::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (1, 13) + (1, 14) } - pub(crate) fn __reduce25< + pub(crate) fn __reduce26< 'input, >( input: &'input str, @@ -18739,15 +23710,15 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Expr => ActionFn(131); + // Comma = Expr => ActionFn(134); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action131::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 14) + let __nt = super::__action134::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 15) } - pub(crate) fn __reduce26< + pub(crate) fn __reduce27< 'input, >( input: &'input str, @@ -18756,14 +23727,14 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(132); + // Comma = => ActionFn(135); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action132::<>(input, &__start, &__end); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (0, 14) + let __nt = super::__action135::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (0, 15) } - pub(crate) fn __reduce27< + pub(crate) fn __reduce28< 'input, >( input: &'input str, @@ -18772,17 +23743,17 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Expr => ActionFn(133); + // Comma = ( ",")+, Expr => ActionFn(136); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant3(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action133::<>(input, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (2, 14) + let __nt = super::__action136::<>(input, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (2, 15) } - pub(crate) fn __reduce28< + pub(crate) fn __reduce29< 'input, >( input: &'input str, @@ -18791,15 +23762,15 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(134); + // Comma = ( ",")+ => ActionFn(137); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action134::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 14) + let __nt = super::__action137::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 15) } - pub(crate) fn __reduce29< + pub(crate) fn __reduce30< 'input, >( input: &'input str, @@ -18808,15 +23779,15 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Type => ActionFn(135); + // Comma = Type => ActionFn(138); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action135::<>(input, __sym0); + let __nt = super::__action138::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 15) + (1, 16) } - pub(crate) fn __reduce30< + pub(crate) fn __reduce31< 'input, >( input: &'input str, @@ -18825,14 +23796,14 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(136); + // Comma = => ActionFn(139); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action136::<>(input, &__start, &__end); + let __nt = super::__action139::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (0, 15) + (0, 16) } - pub(crate) fn __reduce31< + pub(crate) fn __reduce32< 'input, >( input: &'input str, @@ -18841,17 +23812,17 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Type => ActionFn(137); + // Comma = ( ",")+, Type => ActionFn(140); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant5(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action137::<>(input, __sym0, __sym1); + let __nt = super::__action140::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (2, 15) + (2, 16) } - pub(crate) fn __reduce32< + pub(crate) fn __reduce33< 'input, >( input: &'input str, @@ -18860,15 +23831,15 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(138); + // Comma = ( ",")+ => ActionFn(141); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action138::<>(input, __sym0); + let __nt = super::__action141::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 15) + (1, 16) } - pub(crate) fn __reduce33< + pub(crate) fn __reduce34< 'input, >( input: &'input str, @@ -18877,7 +23848,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Const = Num, UNum, ":", Type => ActionFn(28); + // Const = Num, UNum, ":", Type => ActionFn(29); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant5(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -18885,29 +23856,9 @@ mod __parse__FunctionApplication { let __sym0 = __pop_Variant17(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action28::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action29::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); - (4, 16) - } - pub(crate) fn __reduce34< - 'input, - >( - input: &'input str, - __lookahead_start: Option<&usize>, - __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, - _: core::marker::PhantomData<(&'input ())>, - ) -> (usize, usize) - { - // Expr = "(", Ident, ")" => ActionFn(33); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant16(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0.clone(); - let __end = __sym2.2.clone(); - let __nt = super::__action33::<>(input, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (4, 17) } pub(crate) fn __reduce35< 'input, @@ -18918,16 +23869,16 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", Const, ")" => ActionFn(34); + // Expr = "(", Ident, ")" => ActionFn(34); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant11(__symbols); + let __sym1 = __pop_Variant16(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); let __nt = super::__action34::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (3, 18) } pub(crate) fn __reduce36< 'input, @@ -18938,16 +23889,16 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "true", ")" => ActionFn(35); + // Expr = "(", Const, ")" => ActionFn(35); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant11(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); let __nt = super::__action35::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (3, 18) } pub(crate) fn __reduce37< 'input, @@ -18958,7 +23909,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "false", ")" => ActionFn(36); + // Expr = "(", "true", ")" => ActionFn(36); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); @@ -18967,7 +23918,7 @@ mod __parse__FunctionApplication { let __end = __sym2.2.clone(); let __nt = super::__action36::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (3, 18) } pub(crate) fn __reduce38< 'input, @@ -18978,17 +23929,16 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "!", Expr, ")" => ActionFn(37); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant3(__symbols); + // Expr = "(", "false", ")" => ActionFn(37); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym3.2.clone(); - let __nt = super::__action37::<>(input, __sym0, __sym1, __sym2, __sym3); + let __end = __sym2.2.clone(); + let __nt = super::__action37::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (3, 18) } pub(crate) fn __reduce39< 'input, @@ -18999,18 +23949,17 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "&&", Expr, Expr, ")" => ActionFn(38); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant3(__symbols); + // Expr = "(", "!", Expr, ")" => ActionFn(38); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym4.2.clone(); - let __nt = super::__action38::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __end = __sym3.2.clone(); + let __nt = super::__action38::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (4, 18) } pub(crate) fn __reduce40< 'input, @@ -19021,7 +23970,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "||", Expr, Expr, ")" => ActionFn(39); + // Expr = "(", "&&", Expr, Expr, ")" => ActionFn(39); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19032,7 +23981,7 @@ mod __parse__FunctionApplication { let __end = __sym4.2.clone(); let __nt = super::__action39::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce41< 'input, @@ -19043,7 +23992,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "=>", Expr, Expr, ")" => ActionFn(40); + // Expr = "(", "||", Expr, Expr, ")" => ActionFn(40); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19054,7 +24003,7 @@ mod __parse__FunctionApplication { let __end = __sym4.2.clone(); let __nt = super::__action40::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce42< 'input, @@ -19065,7 +24014,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "=", Expr, Expr, ")" => ActionFn(41); + // Expr = "(", "=>", Expr, Expr, ")" => ActionFn(41); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19076,7 +24025,7 @@ mod __parse__FunctionApplication { let __end = __sym4.2.clone(); let __nt = super::__action41::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce43< 'input, @@ -19087,7 +24036,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "<=", Expr, Expr, ")" => ActionFn(42); + // Expr = "(", "=", Expr, Expr, ")" => ActionFn(42); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19098,7 +24047,7 @@ mod __parse__FunctionApplication { let __end = __sym4.2.clone(); let __nt = super::__action42::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce44< 'input, @@ -19109,7 +24058,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "<", Expr, Expr, ")" => ActionFn(43); + // Expr = "(", "<=", Expr, Expr, ")" => ActionFn(43); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19120,7 +24069,7 @@ mod __parse__FunctionApplication { let __end = __sym4.2.clone(); let __nt = super::__action43::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce45< 'input, @@ -19131,7 +24080,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sgt", Expr, Expr, ")" => ActionFn(44); + // Expr = "(", "<", Expr, Expr, ")" => ActionFn(44); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19142,7 +24091,7 @@ mod __parse__FunctionApplication { let __end = __sym4.2.clone(); let __nt = super::__action44::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce46< 'input, @@ -19153,7 +24102,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sgte", Expr, Expr, ")" => ActionFn(45); + // Expr = "(", "sgt", Expr, Expr, ")" => ActionFn(45); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19164,7 +24113,7 @@ mod __parse__FunctionApplication { let __end = __sym4.2.clone(); let __nt = super::__action45::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce47< 'input, @@ -19175,7 +24124,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "slt", Expr, Expr, ")" => ActionFn(46); + // Expr = "(", "sgte", Expr, Expr, ")" => ActionFn(46); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19186,7 +24135,7 @@ mod __parse__FunctionApplication { let __end = __sym4.2.clone(); let __nt = super::__action46::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce48< 'input, @@ -19197,7 +24146,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "slte", Expr, Expr, ")" => ActionFn(47); + // Expr = "(", "slt", Expr, Expr, ")" => ActionFn(47); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19208,7 +24157,7 @@ mod __parse__FunctionApplication { let __end = __sym4.2.clone(); let __nt = super::__action47::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce49< 'input, @@ -19219,7 +24168,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ugt", Expr, Expr, ")" => ActionFn(48); + // Expr = "(", "slte", Expr, Expr, ")" => ActionFn(48); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19230,7 +24179,7 @@ mod __parse__FunctionApplication { let __end = __sym4.2.clone(); let __nt = super::__action48::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce50< 'input, @@ -19241,7 +24190,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ugte", Expr, Expr, ")" => ActionFn(49); + // Expr = "(", "ugt", Expr, Expr, ")" => ActionFn(49); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19252,7 +24201,7 @@ mod __parse__FunctionApplication { let __end = __sym4.2.clone(); let __nt = super::__action49::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce51< 'input, @@ -19263,7 +24212,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ult", Expr, Expr, ")" => ActionFn(50); + // Expr = "(", "ugte", Expr, Expr, ")" => ActionFn(50); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19274,7 +24223,7 @@ mod __parse__FunctionApplication { let __end = __sym4.2.clone(); let __nt = super::__action50::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce52< 'input, @@ -19285,7 +24234,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ulte", Expr, Expr, ")" => ActionFn(51); + // Expr = "(", "ult", Expr, Expr, ")" => ActionFn(51); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19296,7 +24245,7 @@ mod __parse__FunctionApplication { let __end = __sym4.2.clone(); let __nt = super::__action51::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce53< 'input, @@ -19307,17 +24256,18 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "-", Expr, ")" => ActionFn(52); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); + // Expr = "(", "ulte", Expr, Expr, ")" => ActionFn(52); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym3.2.clone(); - let __nt = super::__action52::<>(input, __sym0, __sym1, __sym2, __sym3); + let __end = __sym4.2.clone(); + let __nt = super::__action52::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (5, 18) } pub(crate) fn __reduce54< 'input, @@ -19328,7 +24278,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "~", Expr, ")" => ActionFn(53); + // Expr = "(", "-", Expr, ")" => ActionFn(53); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -19338,7 +24288,7 @@ mod __parse__FunctionApplication { let __end = __sym3.2.clone(); let __nt = super::__action53::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } pub(crate) fn __reduce55< 'input, @@ -19349,7 +24299,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "clz", Expr, ")" => ActionFn(54); + // Expr = "(", "~", Expr, ")" => ActionFn(54); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -19359,7 +24309,7 @@ mod __parse__FunctionApplication { let __end = __sym3.2.clone(); let __nt = super::__action54::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } pub(crate) fn __reduce56< 'input, @@ -19370,7 +24320,28 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "a64clz", Expr, Expr, ")" => ActionFn(55); + // Expr = "(", "clz", Expr, ")" => ActionFn(55); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action55::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (4, 18) + } + pub(crate) fn __reduce57< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "a64clz", Expr, Expr, ")" => ActionFn(56); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19379,11 +24350,11 @@ mod __parse__FunctionApplication { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action55::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action56::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce57< + pub(crate) fn __reduce58< 'input, >( input: &'input str, @@ -19392,7 +24363,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "cls", Expr, ")" => ActionFn(56); + // Expr = "(", "cls", Expr, ")" => ActionFn(57); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -19400,11 +24371,11 @@ mod __parse__FunctionApplication { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action56::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action57::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce58< + pub(crate) fn __reduce59< 'input, >( input: &'input str, @@ -19413,7 +24384,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "a64cls", Expr, Expr, ")" => ActionFn(57); + // Expr = "(", "a64cls", Expr, Expr, ")" => ActionFn(58); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19422,11 +24393,11 @@ mod __parse__FunctionApplication { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action57::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action58::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce59< + pub(crate) fn __reduce60< 'input, >( input: &'input str, @@ -19435,7 +24406,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "rev", Expr, ")" => ActionFn(58); + // Expr = "(", "rev", Expr, ")" => ActionFn(59); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -19443,11 +24414,11 @@ mod __parse__FunctionApplication { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action58::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action59::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce60< + pub(crate) fn __reduce61< 'input, >( input: &'input str, @@ -19456,7 +24427,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "a64rev", Expr, Expr, ")" => ActionFn(59); + // Expr = "(", "a64rev", Expr, Expr, ")" => ActionFn(60); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19465,11 +24436,11 @@ mod __parse__FunctionApplication { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action59::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action60::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce61< + pub(crate) fn __reduce62< 'input, >( input: &'input str, @@ -19478,7 +24449,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "subs", Expr, Expr, Expr, ")" => ActionFn(60); + // Expr = "(", "subs", Expr, Expr, Expr, ")" => ActionFn(61); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant3(__symbols); @@ -19488,31 +24459,9 @@ mod __parse__FunctionApplication { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym5.2.clone(); - let __nt = super::__action60::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action61::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (6, 17) - } - pub(crate) fn __reduce62< - 'input, - >( - input: &'input str, - __lookahead_start: Option<&usize>, - __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, - _: core::marker::PhantomData<(&'input ())>, - ) -> (usize, usize) - { - // Expr = "(", "*", Expr, Expr, ")" => ActionFn(61); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant3(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0.clone(); - let __end = __sym4.2.clone(); - let __nt = super::__action61::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); - __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (6, 18) } pub(crate) fn __reduce63< 'input, @@ -19523,7 +24472,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "/", Expr, Expr, ")" => ActionFn(62); + // Expr = "(", "*", Expr, Expr, ")" => ActionFn(62); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19534,7 +24483,7 @@ mod __parse__FunctionApplication { let __end = __sym4.2.clone(); let __nt = super::__action62::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce64< 'input, @@ -19545,7 +24494,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sdiv", Expr, Expr, ")" => ActionFn(63); + // Expr = "(", "/", Expr, Expr, ")" => ActionFn(63); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19556,7 +24505,7 @@ mod __parse__FunctionApplication { let __end = __sym4.2.clone(); let __nt = super::__action63::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce65< 'input, @@ -19567,7 +24516,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "+", Expr, Expr, ")" => ActionFn(64); + // Expr = "(", "sdiv", Expr, Expr, ")" => ActionFn(64); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19578,7 +24527,7 @@ mod __parse__FunctionApplication { let __end = __sym4.2.clone(); let __nt = super::__action64::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce66< 'input, @@ -19589,7 +24538,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "-", Expr, Expr, ")" => ActionFn(65); + // Expr = "(", "+", Expr, Expr, ")" => ActionFn(65); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19600,7 +24549,7 @@ mod __parse__FunctionApplication { let __end = __sym4.2.clone(); let __nt = super::__action65::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce67< 'input, @@ -19611,7 +24560,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "urem", Expr, Expr, ")" => ActionFn(66); + // Expr = "(", "-", Expr, Expr, ")" => ActionFn(66); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19622,7 +24571,7 @@ mod __parse__FunctionApplication { let __end = __sym4.2.clone(); let __nt = super::__action66::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce68< 'input, @@ -19633,7 +24582,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "srem", Expr, Expr, ")" => ActionFn(67); + // Expr = "(", "urem", Expr, Expr, ")" => ActionFn(67); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19644,7 +24593,7 @@ mod __parse__FunctionApplication { let __end = __sym4.2.clone(); let __nt = super::__action67::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce69< 'input, @@ -19655,7 +24604,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "&", Expr, Expr, ")" => ActionFn(68); + // Expr = "(", "srem", Expr, Expr, ")" => ActionFn(68); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19666,7 +24615,7 @@ mod __parse__FunctionApplication { let __end = __sym4.2.clone(); let __nt = super::__action68::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce70< 'input, @@ -19677,7 +24626,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "|", Expr, Expr, ")" => ActionFn(69); + // Expr = "(", "&", Expr, Expr, ")" => ActionFn(69); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19688,7 +24637,7 @@ mod __parse__FunctionApplication { let __end = __sym4.2.clone(); let __nt = super::__action69::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce71< 'input, @@ -19699,7 +24648,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "xor", Expr, Expr, ")" => ActionFn(70); + // Expr = "(", "|", Expr, Expr, ")" => ActionFn(70); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19710,7 +24659,7 @@ mod __parse__FunctionApplication { let __end = __sym4.2.clone(); let __nt = super::__action70::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce72< 'input, @@ -19721,7 +24670,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "rotl", Expr, Expr, ")" => ActionFn(71); + // Expr = "(", "xor", Expr, Expr, ")" => ActionFn(71); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19732,7 +24681,7 @@ mod __parse__FunctionApplication { let __end = __sym4.2.clone(); let __nt = super::__action71::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce73< 'input, @@ -19743,7 +24692,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "rotr", Expr, Expr, ")" => ActionFn(72); + // Expr = "(", "rotl", Expr, Expr, ")" => ActionFn(72); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19754,7 +24703,7 @@ mod __parse__FunctionApplication { let __end = __sym4.2.clone(); let __nt = super::__action72::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce74< 'input, @@ -19765,7 +24714,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "shl", Expr, Expr, ")" => ActionFn(73); + // Expr = "(", "rotr", Expr, Expr, ")" => ActionFn(73); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19776,7 +24725,7 @@ mod __parse__FunctionApplication { let __end = __sym4.2.clone(); let __nt = super::__action73::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce75< 'input, @@ -19787,7 +24736,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "shr", Expr, Expr, ")" => ActionFn(74); + // Expr = "(", "shl", Expr, Expr, ")" => ActionFn(74); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19798,7 +24747,7 @@ mod __parse__FunctionApplication { let __end = __sym4.2.clone(); let __nt = super::__action74::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce76< 'input, @@ -19809,7 +24758,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ashr", Expr, Expr, ")" => ActionFn(75); + // Expr = "(", "shr", Expr, Expr, ")" => ActionFn(75); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19820,7 +24769,7 @@ mod __parse__FunctionApplication { let __end = __sym4.2.clone(); let __nt = super::__action75::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce77< 'input, @@ -19831,18 +24780,18 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "zero_ext", Width, Expr, ")" => ActionFn(76); + // Expr = "(", "ashr", Expr, Expr, ")" => ActionFn(76); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant24(__symbols); + let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action76::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce78< 'input, @@ -19853,18 +24802,18 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "zero_ext", Expr, Expr, ")" => ActionFn(77); + // Expr = "(", "zero_ext", Width, Expr, ")" => ActionFn(77); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant24(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action77::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce79< 'input, @@ -19875,18 +24824,18 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sign_ext", Width, Expr, ")" => ActionFn(78); + // Expr = "(", "zero_ext", Expr, Expr, ")" => ActionFn(78); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant24(__symbols); + let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action78::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce80< 'input, @@ -19897,18 +24846,18 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sign_ext", Expr, Expr, ")" => ActionFn(79); + // Expr = "(", "sign_ext", Width, Expr, ")" => ActionFn(79); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant24(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action79::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce81< 'input, @@ -19919,7 +24868,29 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "extract", UNum, UNum, Expr, ")" => ActionFn(80); + // Expr = "(", "sign_ext", Expr, Expr, ")" => ActionFn(80); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action80::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce82< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "extract", UNum, UNum, Expr, ")" => ActionFn(81); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant3(__symbols); @@ -19929,11 +24900,11 @@ mod __parse__FunctionApplication { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym5.2.clone(); - let __nt = super::__action80::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action81::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (6, 17) + (6, 18) } - pub(crate) fn __reduce82< + pub(crate) fn __reduce83< 'input, >( input: &'input str, @@ -19942,7 +24913,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "conv_to", Width, Expr, ")" => ActionFn(81); + // Expr = "(", "conv_to", Width, Expr, ")" => ActionFn(82); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19951,11 +24922,11 @@ mod __parse__FunctionApplication { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action81::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action82::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce83< + pub(crate) fn __reduce84< 'input, >( input: &'input str, @@ -19964,7 +24935,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "conv_to", Expr, Expr, ")" => ActionFn(82); + // Expr = "(", "conv_to", Expr, Expr, ")" => ActionFn(83); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -19973,11 +24944,11 @@ mod __parse__FunctionApplication { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action82::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action83::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce84< + pub(crate) fn __reduce85< 'input, >( input: &'input str, @@ -19986,7 +24957,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "if", Expr, Expr, Expr, ")" => ActionFn(83); + // Expr = "(", "if", Expr, Expr, Expr, ")" => ActionFn(84); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant3(__symbols); @@ -19996,11 +24967,11 @@ mod __parse__FunctionApplication { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym5.2.clone(); - let __nt = super::__action83::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action84::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (6, 17) + (6, 18) } - pub(crate) fn __reduce85< + pub(crate) fn __reduce86< 'input, >( input: &'input str, @@ -20009,7 +24980,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "switch", Expr, Pair+, ")" => ActionFn(84); + // Expr = "(", "switch", Expr, Pair+, ")" => ActionFn(85); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant19(__symbols); @@ -20018,11 +24989,11 @@ mod __parse__FunctionApplication { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action84::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action85::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce86< + pub(crate) fn __reduce87< 'input, >( input: &'input str, @@ -20031,7 +25002,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "int2bv", UNum, Expr, ")" => ActionFn(85); + // Expr = "(", "int2bv", UNum, Expr, ")" => ActionFn(86); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -20040,11 +25011,11 @@ mod __parse__FunctionApplication { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action85::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action86::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce87< + pub(crate) fn __reduce88< 'input, >( input: &'input str, @@ -20053,7 +25024,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "bv2int", Expr, ")" => ActionFn(86); + // Expr = "(", "bv2int", Expr, ")" => ActionFn(87); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -20061,11 +25032,11 @@ mod __parse__FunctionApplication { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action86::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action87::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce88< + pub(crate) fn __reduce89< 'input, >( input: &'input str, @@ -20074,7 +25045,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "widthof", Expr, ")" => ActionFn(87); + // Expr = "(", "widthof", Expr, ")" => ActionFn(88); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -20082,11 +25053,11 @@ mod __parse__FunctionApplication { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action87::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action88::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce89< + pub(crate) fn __reduce90< 'input, >( input: &'input str, @@ -20095,15 +25066,15 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr? = Expr => ActionFn(104); + // Expr? = Expr => ActionFn(107); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action104::<>(input, __sym0); + let __nt = super::__action107::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (1, 18) + (1, 19) } - pub(crate) fn __reduce90< + pub(crate) fn __reduce91< 'input, >( input: &'input str, @@ -20112,14 +25083,14 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr? = => ActionFn(105); + // Expr? = => ActionFn(108); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action105::<>(input, &__start, &__end); + let __nt = super::__action108::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (0, 18) + (0, 19) } - pub(crate) fn __reduce91< + pub(crate) fn __reduce92< 'input, >( input: &'input str, @@ -20128,15 +25099,15 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprList = Comma => ActionFn(24); - let __sym0 = __pop_Variant9(__symbols); + // ExprList = Comma => ActionFn(25); + let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action24::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 19) + let __nt = super::__action25::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 20) } - pub(crate) fn __reduce92< + pub(crate) fn __reduce93< 'input, >( input: &'input str, @@ -20145,7 +25116,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Function = Ident, "(", ArgList, ")", "(", Type, ")", "{", Expr, "}" => ActionFn(29); + // Function = Ident, "(", ArgList, ")", "(", Type, ")", "{", Expr, "}" => ActionFn(30); assert!(__symbols.len() >= 10); let __sym9 = __pop_Variant0(__symbols); let __sym8 = __pop_Variant3(__symbols); @@ -20159,11 +25130,11 @@ mod __parse__FunctionApplication { let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0.clone(); let __end = __sym9.2.clone(); - let __nt = super::__action29::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); + let __nt = super::__action30::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); - (10, 20) + (10, 21) } - pub(crate) fn __reduce93< + pub(crate) fn __reduce94< 'input, >( input: &'input str, @@ -20172,19 +25143,19 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // FunctionApplication = Expr, "(", ExprList, ")" => ActionFn(30); + // FunctionApplication = Expr, "(", ExprList, ")" => ActionFn(31); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant9(__symbols); + let __sym2 = __pop_Variant8(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action30::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action31::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (4, 21) + (4, 22) } - pub(crate) fn __reduce94< + pub(crate) fn __reduce95< 'input, >( input: &'input str, @@ -20193,7 +25164,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // FunctionType = "func", "(", TypeList, ")", "(", Type, ")" => ActionFn(27); + // FunctionType = "func", "(", TypeList, ")", "(", Type, ")" => ActionFn(28); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant5(__symbols); @@ -20204,11 +25175,11 @@ mod __parse__FunctionApplication { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym6.2.clone(); - let __nt = super::__action27::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action28::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (7, 22) + (7, 23) } - pub(crate) fn __reduce95< + pub(crate) fn __reduce96< 'input, >( input: &'input str, @@ -20217,15 +25188,15 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"[A-Za-z]"# => ActionFn(12); + // Ident = r#"[A-Za-z]"# => ActionFn(13); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action12::<>(input, __sym0); + let __nt = super::__action13::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 23) + (1, 24) } - pub(crate) fn __reduce96< + pub(crate) fn __reduce97< 'input, >( input: &'input str, @@ -20234,15 +25205,15 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"[A-Zac-z][\\.\\w]+"# => ActionFn(13); + // Ident = r#"[A-Zac-z][\\.\\w]+"# => ActionFn(14); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action13::<>(input, __sym0); + let __nt = super::__action14::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 23) + (1, 24) } - pub(crate) fn __reduce97< + pub(crate) fn __reduce98< 'input, >( input: &'input str, @@ -20251,15 +25222,15 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"b[\\w&&[^v]][\\.\\w]*"# => ActionFn(14); + // Ident = r#"b[\\w&&[^v]][\\.\\w]*"# => ActionFn(15); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action14::<>(input, __sym0); + let __nt = super::__action15::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 23) + (1, 24) } - pub(crate) fn __reduce98< + pub(crate) fn __reduce99< 'input, >( input: &'input str, @@ -20268,15 +25239,15 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Num = r#"-?[0-9]+i"# => ActionFn(11); + // Num = r#"-?[0-9]+i"# => ActionFn(12); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action11::<>(input, __sym0); + let __nt = super::__action12::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant17(__nt), __end)); - (1, 24) + (1, 25) } - pub(crate) fn __reduce99< + pub(crate) fn __reduce100< 'input, >( input: &'input str, @@ -20285,7 +25256,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Pair = "(", Expr, Expr, ")" => ActionFn(25); + // Pair = "(", Expr, Expr, ")" => ActionFn(26); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -20293,11 +25264,11 @@ mod __parse__FunctionApplication { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action25::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action26::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant18(__nt), __end)); - (4, 25) + (4, 26) } - pub(crate) fn __reduce100< + pub(crate) fn __reduce101< 'input, >( input: &'input str, @@ -20306,15 +25277,15 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Pair+ = Pair => ActionFn(89); + // Pair+ = Pair => ActionFn(92); let __sym0 = __pop_Variant18(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action89::<>(input, __sym0); + let __nt = super::__action92::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant19(__nt), __end)); - (1, 26) + (1, 27) } - pub(crate) fn __reduce101< + pub(crate) fn __reduce102< 'input, >( input: &'input str, @@ -20323,17 +25294,46 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Pair+ = Pair+, Pair => ActionFn(90); + // Pair+ = Pair+, Pair => ActionFn(93); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant18(__symbols); let __sym0 = __pop_Variant19(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action90::<>(input, __sym0, __sym1); + let __nt = super::__action93::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant19(__nt), __end)); - (2, 26) + (2, 27) } - pub(crate) fn __reduce102< + pub(crate) fn __reduce103< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // TermAnnotation = "(", "spec", TermSignature, "(", "assume", ExprList, ")", "(", "assert", ExprList, ")", ")" => ActionFn(90); + assert!(__symbols.len() >= 12); + let __sym11 = __pop_Variant0(__symbols); + let __sym10 = __pop_Variant0(__symbols); + let __sym9 = __pop_Variant8(__symbols); + let __sym8 = __pop_Variant0(__symbols); + let __sym7 = __pop_Variant0(__symbols); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant8(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant21(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym11.2.clone(); + let __nt = super::__action90::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9, __sym10, __sym11); + __symbols.push((__start, __Symbol::Variant20(__nt), __end)); + (12, 28) + } + pub(crate) fn __reduce104< 'input, >( input: &'input str, @@ -20342,11 +25342,11 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // TermAnnotation = "(", "spec", TermSignature, "(", "assertions", ExprList, ")", ")" => ActionFn(88); + // TermAnnotation = "(", "spec", TermSignature, "(", "assume", ExprList, ")", ")" => ActionFn(91); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant9(__symbols); + let __sym5 = __pop_Variant8(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant21(__symbols); @@ -20354,11 +25354,11 @@ mod __parse__FunctionApplication { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym7.2.clone(); - let __nt = super::__action88::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); + let __nt = super::__action91::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant20(__nt), __end)); - (8, 27) + (8, 28) } - pub(crate) fn __reduce103< + pub(crate) fn __reduce105< 'input, >( input: &'input str, @@ -20367,7 +25367,7 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // TermSignature = "(", "sig", Args, "(", BoundVar, ")", ")" => ActionFn(26); + // TermSignature = "(", "sig", Args, "(", BoundVar, ")", ")" => ActionFn(27); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -20378,11 +25378,11 @@ mod __parse__FunctionApplication { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym6.2.clone(); - let __nt = super::__action26::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action27::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant21(__nt), __end)); - (7, 28) + (7, 29) } - pub(crate) fn __reduce104< + pub(crate) fn __reduce106< 'input, >( input: &'input str, @@ -20391,15 +25391,15 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "bv" => ActionFn(15); + // Type = "bv" => ActionFn(16); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action15::<>(input, __sym0); + let __nt = super::__action16::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 29) + (1, 30) } - pub(crate) fn __reduce105< + pub(crate) fn __reduce107< 'input, >( input: &'input str, @@ -20408,17 +25408,17 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "bv", UNum => ActionFn(16); + // Type = "bv", UNum => ActionFn(17); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant23(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action16::<>(input, __sym0, __sym1); + let __nt = super::__action17::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (2, 29) + (2, 30) } - pub(crate) fn __reduce106< + pub(crate) fn __reduce108< 'input, >( input: &'input str, @@ -20427,15 +25427,15 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "isleType" => ActionFn(17); + // Type = "isleType" => ActionFn(18); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action17::<>(input, __sym0); + let __nt = super::__action18::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 29) + (1, 30) } - pub(crate) fn __reduce107< + pub(crate) fn __reduce109< 'input, >( input: &'input str, @@ -20444,15 +25444,15 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "bool" => ActionFn(18); + // Type = "bool" => ActionFn(19); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action18::<>(input, __sym0); + let __nt = super::__action19::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 29) + (1, 30) } - pub(crate) fn __reduce108< + pub(crate) fn __reduce110< 'input, >( input: &'input str, @@ -20461,15 +25461,15 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type? = Type => ActionFn(99); + // Type? = Type => ActionFn(102); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action99::<>(input, __sym0); + let __nt = super::__action102::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant22(__nt), __end)); - (1, 30) + (1, 31) } - pub(crate) fn __reduce109< + pub(crate) fn __reduce111< 'input, >( input: &'input str, @@ -20478,14 +25478,14 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type? = => ActionFn(100); + // Type? = => ActionFn(103); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action100::<>(input, &__start, &__end); + let __nt = super::__action103::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant22(__nt), __end)); - (0, 30) + (0, 31) } - pub(crate) fn __reduce110< + pub(crate) fn __reduce112< 'input, >( input: &'input str, @@ -20494,15 +25494,15 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // TypeList = Comma => ActionFn(23); + // TypeList = Comma => ActionFn(24); let __sym0 = __pop_Variant10(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action23::<>(input, __sym0); + let __nt = super::__action24::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 31) + (1, 32) } - pub(crate) fn __reduce111< + pub(crate) fn __reduce113< 'input, >( input: &'input str, @@ -20511,15 +25511,15 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // UNum = r#"[0-9]+"# => ActionFn(10); + // UNum = r#"[0-9]+"# => ActionFn(11); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action10::<>(input, __sym0); + let __nt = super::__action11::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant23(__nt), __end)); - (1, 32) + (1, 33) } - pub(crate) fn __reduce112< + pub(crate) fn __reduce114< 'input, >( input: &'input str, @@ -20528,18 +25528,18 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Width = "(", "regwidth", ")" => ActionFn(31); + // Width = "(", "regwidth", ")" => ActionFn(32); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action31::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action32::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (3, 33) + (3, 34) } - pub(crate) fn __reduce113< + pub(crate) fn __reduce115< 'input, >( input: &'input str, @@ -20548,18 +25548,35 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Width = "(", UNum, ")" => ActionFn(32); + // Width = "(", UNum, ")" => ActionFn(33); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant23(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action32::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action33::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (3, 33) + (3, 34) } - pub(crate) fn __reduce114< + pub(crate) fn __reduce116< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // __AssertBlock = AssertBlock => ActionFn(9); + let __sym0 = __pop_Variant8(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action9::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 35) + } + pub(crate) fn __reduce117< 'input, >( input: &'input str, @@ -20574,9 +25591,9 @@ mod __parse__FunctionApplication { let __end = __sym0.2.clone(); let __nt = super::__action1::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); - (1, 34) + (1, 36) } - pub(crate) fn __reduce115< + pub(crate) fn __reduce118< 'input, >( input: &'input str, @@ -20591,9 +25608,9 @@ mod __parse__FunctionApplication { let __end = __sym0.2.clone(); let __nt = super::__action4::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); - (1, 35) + (1, 37) } - pub(crate) fn __reduce116< + pub(crate) fn __reduce119< 'input, >( input: &'input str, @@ -20608,9 +25625,9 @@ mod __parse__FunctionApplication { let __end = __sym0.2.clone(); let __nt = super::__action8::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (1, 36) + (1, 38) } - pub(crate) fn __reduce117< + pub(crate) fn __reduce120< 'input, >( input: &'input str, @@ -20625,9 +25642,9 @@ mod __parse__FunctionApplication { let __end = __sym0.2.clone(); let __nt = super::__action5::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); - (1, 37) + (1, 39) } - pub(crate) fn __reduce119< + pub(crate) fn __reduce122< 'input, >( input: &'input str, @@ -20642,9 +25659,9 @@ mod __parse__FunctionApplication { let __end = __sym0.2.clone(); let __nt = super::__action3::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 39) + (1, 41) } - pub(crate) fn __reduce120< + pub(crate) fn __reduce123< 'input, >( input: &'input str, @@ -20653,15 +25670,15 @@ mod __parse__FunctionApplication { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // __TermAnnotation = TermAnnotation => ActionFn(9); + // __TermAnnotation = TermAnnotation => ActionFn(10); let __sym0 = __pop_Variant20(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action9::<>(input, __sym0); + let __nt = super::__action10::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant20(__nt), __end)); - (1, 40) + (1, 42) } - pub(crate) fn __reduce121< + pub(crate) fn __reduce124< 'input, >( input: &'input str, @@ -20676,9 +25693,9 @@ mod __parse__FunctionApplication { let __end = __sym0.2.clone(); let __nt = super::__action2::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant21(__nt), __end)); - (1, 41) + (1, 43) } - pub(crate) fn __reduce122< + pub(crate) fn __reduce125< 'input, >( input: &'input str, @@ -20693,9 +25710,9 @@ mod __parse__FunctionApplication { let __end = __sym0.2.clone(); let __nt = super::__action0::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 42) + (1, 44) } - pub(crate) fn __reduce123< + pub(crate) fn __reduce126< 'input, >( input: &'input str, @@ -20710,7 +25727,7 @@ mod __parse__FunctionApplication { let __end = __sym0.2.clone(); let __nt = super::__action7::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (1, 43) + (1, 45) } } pub use self::__parse__FunctionApplication::FunctionApplicationParser; @@ -20740,8 +25757,8 @@ mod __parse__FunctionType { Variant5(Type), Variant6(alloc::vec::Vec), Variant7(Vec), - Variant8(core::option::Option), - Variant9(Vec>), + Variant8(Vec>), + Variant9(core::option::Option), Variant10(Vec), Variant11(Const), Variant12(core::option::Option>), @@ -20760,48 +25777,48 @@ mod __parse__FunctionType { } const __ACTION: &[i8] = &[ // State 0 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1 - 0, 0, 0, 0, 0, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 2 - 0, 0, 0, 0, 0, -33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 3 - 0, 0, 0, 0, 0, -105, 0, 0, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0, 0, -107, 0, 0, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, // State 4 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 5 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 6 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 7 - 0, 0, 0, 0, 0, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 8 - 0, 0, 0, 0, 0, -30, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -31, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 9 - 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 10 - 0, 0, 0, 0, 0, -108, 0, 0, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -110, 0, 0, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 11 - 0, 0, 0, 0, 0, -107, 0, 0, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -109, 0, 0, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 12 - 0, 0, 0, 0, 0, -32, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -33, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 13 - 0, 0, 0, 0, 0, -14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -14, -14, 0, 0, 0, 0, 0, 0, 0, 0, 0, -14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -14, -14, 0, 0, 0, 0, 0, 0, 0, 0, 0, -14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 14 - 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 15 - 0, 0, 0, 0, 0, -106, 0, 0, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -108, 0, 0, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 16 - 0, 0, 0, 0, 0, -112, 0, 0, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -114, 0, 0, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 17 - 0, 0, 0, 0, 0, -15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15, -15, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15, -15, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 18 - 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 19 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]; fn __action(state: i8, integer: usize) -> i8 { - __ACTION[(state as usize) * 69 + integer] + __ACTION[(state as usize) * 70 + integer] } const __EOF_ACTION: &[i8] = &[ // State 0 @@ -20815,7 +25832,7 @@ mod __parse__FunctionType { // State 4 0, // State 5 - -120, + -123, // State 6 0, // State 7 @@ -20843,20 +25860,20 @@ mod __parse__FunctionType { // State 18 0, // State 19 - -95, + -96, ]; fn __goto(state: i8, nt: usize) -> i8 { match nt { 8 => 2, - 15 => 7, - 22 => 5, - 29 => match state { + 16 => 7, + 23 => 5, + 30 => match state { 2 => 12, 4 => 18, _ => 8, }, - 31 => 9, - 32 => 15, + 32 => 9, + 33 => 15, _ => 0, } } @@ -20882,7 +25899,8 @@ mod __parse__FunctionType { r###""a64clz""###, r###""a64rev""###, r###""ashr""###, - r###""assertions""###, + r###""assert""###, + r###""assume""###, r###""bool""###, r###""bv""###, r###""bv2int""###, @@ -20983,7 +26001,7 @@ mod __parse__FunctionType { #[inline] fn error_action(&self, state: i8) -> i8 { - __action(state, 69 - 1) + __action(state, 70 - 1) } #[inline] @@ -21110,11 +26128,12 @@ mod __parse__FunctionType { Token(66, _) if true => Some(61), Token(67, _) if true => Some(62), Token(68, _) if true => Some(63), - Token(0, _) if true => Some(64), - Token(1, _) if true => Some(65), - Token(2, _) if true => Some(66), - Token(3, _) if true => Some(67), - Token(4, _) if true => Some(68), + Token(69, _) if true => Some(64), + Token(0, _) if true => Some(65), + Token(1, _) if true => Some(66), + Token(2, _) if true => Some(67), + Token(3, _) if true => Some(68), + Token(4, _) if true => Some(69), _ => None, } } @@ -21127,8 +26146,8 @@ mod __parse__FunctionType { ) -> __Symbol<'input> { match __token_index { - 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 => match __token { - Token(5, __tok0) | Token(6, __tok0) | Token(7, __tok0) | Token(8, __tok0) | Token(9, __tok0) | Token(10, __tok0) | Token(11, __tok0) | Token(12, __tok0) | Token(13, __tok0) | Token(14, __tok0) | Token(15, __tok0) | Token(16, __tok0) | Token(17, __tok0) | Token(18, __tok0) | Token(19, __tok0) | Token(20, __tok0) | Token(21, __tok0) | Token(22, __tok0) | Token(23, __tok0) | Token(24, __tok0) | Token(25, __tok0) | Token(26, __tok0) | Token(27, __tok0) | Token(28, __tok0) | Token(29, __tok0) | Token(30, __tok0) | Token(31, __tok0) | Token(32, __tok0) | Token(33, __tok0) | Token(34, __tok0) | Token(35, __tok0) | Token(36, __tok0) | Token(37, __tok0) | Token(38, __tok0) | Token(39, __tok0) | Token(40, __tok0) | Token(41, __tok0) | Token(42, __tok0) | Token(43, __tok0) | Token(44, __tok0) | Token(45, __tok0) | Token(46, __tok0) | Token(47, __tok0) | Token(48, __tok0) | Token(49, __tok0) | Token(50, __tok0) | Token(51, __tok0) | Token(52, __tok0) | Token(53, __tok0) | Token(54, __tok0) | Token(55, __tok0) | Token(56, __tok0) | Token(57, __tok0) | Token(58, __tok0) | Token(59, __tok0) | Token(60, __tok0) | Token(61, __tok0) | Token(62, __tok0) | Token(63, __tok0) | Token(64, __tok0) | Token(65, __tok0) | Token(66, __tok0) | Token(67, __tok0) | Token(68, __tok0) | Token(0, __tok0) | Token(1, __tok0) | Token(2, __tok0) | Token(3, __tok0) | Token(4, __tok0) if true => __Symbol::Variant0(__tok0), + 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 => match __token { + Token(5, __tok0) | Token(6, __tok0) | Token(7, __tok0) | Token(8, __tok0) | Token(9, __tok0) | Token(10, __tok0) | Token(11, __tok0) | Token(12, __tok0) | Token(13, __tok0) | Token(14, __tok0) | Token(15, __tok0) | Token(16, __tok0) | Token(17, __tok0) | Token(18, __tok0) | Token(19, __tok0) | Token(20, __tok0) | Token(21, __tok0) | Token(22, __tok0) | Token(23, __tok0) | Token(24, __tok0) | Token(25, __tok0) | Token(26, __tok0) | Token(27, __tok0) | Token(28, __tok0) | Token(29, __tok0) | Token(30, __tok0) | Token(31, __tok0) | Token(32, __tok0) | Token(33, __tok0) | Token(34, __tok0) | Token(35, __tok0) | Token(36, __tok0) | Token(37, __tok0) | Token(38, __tok0) | Token(39, __tok0) | Token(40, __tok0) | Token(41, __tok0) | Token(42, __tok0) | Token(43, __tok0) | Token(44, __tok0) | Token(45, __tok0) | Token(46, __tok0) | Token(47, __tok0) | Token(48, __tok0) | Token(49, __tok0) | Token(50, __tok0) | Token(51, __tok0) | Token(52, __tok0) | Token(53, __tok0) | Token(54, __tok0) | Token(55, __tok0) | Token(56, __tok0) | Token(57, __tok0) | Token(58, __tok0) | Token(59, __tok0) | Token(60, __tok0) | Token(61, __tok0) | Token(62, __tok0) | Token(63, __tok0) | Token(64, __tok0) | Token(65, __tok0) | Token(66, __tok0) | Token(67, __tok0) | Token(68, __tok0) | Token(69, __tok0) | Token(0, __tok0) | Token(1, __tok0) | Token(2, __tok0) | Token(3, __tok0) | Token(4, __tok0) if true => __Symbol::Variant0(__tok0), _ => unreachable!(), }, _ => unreachable!(), @@ -21536,12 +26555,7 @@ mod __parse__FunctionType { __reduce118(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } 119 => { - // __FunctionType = FunctionType => ActionFn(3); - let __sym0 = __pop_Variant15(__symbols); - let __start = __sym0.0.clone(); - let __end = __sym0.2.clone(); - let __nt = super::__action3::<>(input, __sym0); - return Some(Ok(__nt)); + __reduce119(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } 120 => { __reduce120(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) @@ -21550,11 +26564,25 @@ mod __parse__FunctionType { __reduce121(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } 122 => { - __reduce122(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + // __FunctionType = FunctionType => ActionFn(3); + let __sym0 = __pop_Variant15(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action3::<>(input, __sym0); + return Some(Ok(__nt)); } 123 => { __reduce123(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } + 124 => { + __reduce124(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 125 => { + __reduce125(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 126 => { + __reduce126(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } _ => panic!("invalid action code {}", __action) }; let __states_len = __states.len(); @@ -21711,14 +26739,14 @@ mod __parse__FunctionType { _ => __symbol_type_mismatch() } } - fn __pop_Variant9< + fn __pop_Variant8< 'input, >( __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, Vec>, usize) { match __symbols.pop() { - Some((__l, __Symbol::Variant9(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant8(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -21777,14 +26805,14 @@ mod __parse__FunctionType { _ => __symbol_type_mismatch() } } - fn __pop_Variant8< + fn __pop_Variant9< 'input, >( __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, core::option::Option, usize) { match __symbols.pop() { - Some((__l, __Symbol::Variant8(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant9(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -21852,13 +26880,13 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = BoundVar, "," => ActionFn(98); + // ( ",") = BoundVar, "," => ActionFn(101); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action98::<>(input, __sym0, __sym1); + let __nt = super::__action101::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (2, 0) } @@ -21871,10 +26899,10 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(96); + // ( ",")* = => ActionFn(99); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action96::<>(input, &__start, &__end); + let __nt = super::__action99::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (0, 1) } @@ -21887,11 +26915,11 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(97); + // ( ",")* = ( ",")+ => ActionFn(100); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action97::<>(input, __sym0); + let __nt = super::__action100::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (1, 1) } @@ -21904,13 +26932,13 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = BoundVar, "," => ActionFn(115); + // ( ",")+ = BoundVar, "," => ActionFn(118); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action115::<>(input, __sym0, __sym1); + let __nt = super::__action118::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (2, 2) } @@ -21923,14 +26951,14 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, BoundVar, "," => ActionFn(116); + // ( ",")+ = ( ",")+, BoundVar, "," => ActionFn(119); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant1(__symbols); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action116::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action119::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (3, 2) } @@ -21943,13 +26971,13 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = Expr, "," => ActionFn(108); + // ( ",") = Expr, "," => ActionFn(111); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action108::<>(input, __sym0, __sym1); + let __nt = super::__action111::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); (2, 3) } @@ -21962,10 +26990,10 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(106); + // ( ",")* = => ActionFn(109); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action106::<>(input, &__start, &__end); + let __nt = super::__action109::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (0, 4) } @@ -21978,11 +27006,11 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(107); + // ( ",")* = ( ",")+ => ActionFn(110); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action107::<>(input, __sym0); + let __nt = super::__action110::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 4) } @@ -21995,13 +27023,13 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Expr, "," => ActionFn(119); + // ( ",")+ = Expr, "," => ActionFn(122); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action119::<>(input, __sym0, __sym1); + let __nt = super::__action122::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (2, 5) } @@ -22014,14 +27042,14 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Expr, "," => ActionFn(120); + // ( ",")+ = ( ",")+, Expr, "," => ActionFn(123); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant3(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action120::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action123::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 5) } @@ -22034,13 +27062,13 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = Type, "," => ActionFn(103); + // ( ",") = Type, "," => ActionFn(106); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action103::<>(input, __sym0, __sym1); + let __nt = super::__action106::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (2, 6) } @@ -22053,10 +27081,10 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(101); + // ( ",")* = => ActionFn(104); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action101::<>(input, &__start, &__end); + let __nt = super::__action104::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (0, 7) } @@ -22069,11 +27097,11 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(102); + // ( ",")* = ( ",")+ => ActionFn(105); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action102::<>(input, __sym0); + let __nt = super::__action105::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (1, 7) } @@ -22086,13 +27114,13 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Type, "," => ActionFn(123); + // ( ",")+ = Type, "," => ActionFn(126); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action123::<>(input, __sym0, __sym1); + let __nt = super::__action126::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (2, 8) } @@ -22105,14 +27133,14 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Type, "," => ActionFn(124); + // ( ",")+ = ( ",")+, Type, "," => ActionFn(127); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant5(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action124::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action127::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (3, 8) } @@ -22125,11 +27153,11 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ArgList = Comma => ActionFn(21); + // ArgList = Comma => ActionFn(22); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action21::<>(input, __sym0); + let __nt = super::__action22::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (1, 9) } @@ -22142,14 +27170,14 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Args = "(args", ArgList, ")" => ActionFn(22); + // Args = "(args", ArgList, ")" => ActionFn(23); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant7(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action22::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action23::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (3, 10) } @@ -22162,15 +27190,36 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar = Ident => ActionFn(19); + // AssertBlock = "(", "assert", ExprList, ")" => ActionFn(89); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant8(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action89::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (4, 11) + } + pub(crate) fn __reduce18< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // BoundVar = Ident => ActionFn(20); let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action19::<>(input, __sym0); + let __nt = super::__action20::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); - (1, 11) + (1, 12) } - pub(crate) fn __reduce18< + pub(crate) fn __reduce19< 'input, >( input: &'input str, @@ -22179,18 +27228,18 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar = Ident, ":", Type => ActionFn(20); + // BoundVar = Ident, ":", Type => ActionFn(21); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant5(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action20::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action21::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); - (3, 11) + (3, 12) } - pub(crate) fn __reduce19< + pub(crate) fn __reduce20< 'input, >( input: &'input str, @@ -22199,15 +27248,15 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar? = BoundVar => ActionFn(94); + // BoundVar? = BoundVar => ActionFn(97); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action94::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (1, 12) + let __nt = super::__action97::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (1, 13) } - pub(crate) fn __reduce20< + pub(crate) fn __reduce21< 'input, >( input: &'input str, @@ -22216,14 +27265,14 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar? = => ActionFn(95); + // BoundVar? = => ActionFn(98); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action95::<>(input, &__start, &__end); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (0, 12) + let __nt = super::__action98::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (0, 13) } - pub(crate) fn __reduce21< + pub(crate) fn __reduce22< 'input, >( input: &'input str, @@ -22232,15 +27281,15 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = BoundVar => ActionFn(127); + // Comma = BoundVar => ActionFn(130); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action127::<>(input, __sym0); + let __nt = super::__action130::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (1, 13) + (1, 14) } - pub(crate) fn __reduce22< + pub(crate) fn __reduce23< 'input, >( input: &'input str, @@ -22249,14 +27298,14 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(128); + // Comma = => ActionFn(131); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action128::<>(input, &__start, &__end); + let __nt = super::__action131::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (0, 13) + (0, 14) } - pub(crate) fn __reduce23< + pub(crate) fn __reduce24< 'input, >( input: &'input str, @@ -22265,17 +27314,17 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, BoundVar => ActionFn(129); + // Comma = ( ",")+, BoundVar => ActionFn(132); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant1(__symbols); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action129::<>(input, __sym0, __sym1); + let __nt = super::__action132::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (2, 13) + (2, 14) } - pub(crate) fn __reduce24< + pub(crate) fn __reduce25< 'input, >( input: &'input str, @@ -22284,15 +27333,15 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(130); + // Comma = ( ",")+ => ActionFn(133); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action130::<>(input, __sym0); + let __nt = super::__action133::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (1, 13) + (1, 14) } - pub(crate) fn __reduce25< + pub(crate) fn __reduce26< 'input, >( input: &'input str, @@ -22301,15 +27350,15 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Expr => ActionFn(131); + // Comma = Expr => ActionFn(134); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action131::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 14) + let __nt = super::__action134::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 15) } - pub(crate) fn __reduce26< + pub(crate) fn __reduce27< 'input, >( input: &'input str, @@ -22318,14 +27367,14 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(132); + // Comma = => ActionFn(135); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action132::<>(input, &__start, &__end); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (0, 14) + let __nt = super::__action135::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (0, 15) } - pub(crate) fn __reduce27< + pub(crate) fn __reduce28< 'input, >( input: &'input str, @@ -22334,17 +27383,17 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Expr => ActionFn(133); + // Comma = ( ",")+, Expr => ActionFn(136); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant3(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action133::<>(input, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (2, 14) + let __nt = super::__action136::<>(input, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (2, 15) } - pub(crate) fn __reduce28< + pub(crate) fn __reduce29< 'input, >( input: &'input str, @@ -22353,15 +27402,15 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(134); + // Comma = ( ",")+ => ActionFn(137); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action134::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 14) + let __nt = super::__action137::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 15) } - pub(crate) fn __reduce29< + pub(crate) fn __reduce30< 'input, >( input: &'input str, @@ -22370,15 +27419,15 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Type => ActionFn(135); + // Comma = Type => ActionFn(138); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action135::<>(input, __sym0); + let __nt = super::__action138::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 15) + (1, 16) } - pub(crate) fn __reduce30< + pub(crate) fn __reduce31< 'input, >( input: &'input str, @@ -22387,14 +27436,14 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(136); + // Comma = => ActionFn(139); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action136::<>(input, &__start, &__end); + let __nt = super::__action139::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (0, 15) + (0, 16) } - pub(crate) fn __reduce31< + pub(crate) fn __reduce32< 'input, >( input: &'input str, @@ -22403,17 +27452,17 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Type => ActionFn(137); + // Comma = ( ",")+, Type => ActionFn(140); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant5(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action137::<>(input, __sym0, __sym1); + let __nt = super::__action140::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (2, 15) + (2, 16) } - pub(crate) fn __reduce32< + pub(crate) fn __reduce33< 'input, >( input: &'input str, @@ -22422,15 +27471,15 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(138); + // Comma = ( ",")+ => ActionFn(141); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action138::<>(input, __sym0); + let __nt = super::__action141::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 15) + (1, 16) } - pub(crate) fn __reduce33< + pub(crate) fn __reduce34< 'input, >( input: &'input str, @@ -22439,7 +27488,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Const = Num, UNum, ":", Type => ActionFn(28); + // Const = Num, UNum, ":", Type => ActionFn(29); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant5(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -22447,29 +27496,9 @@ mod __parse__FunctionType { let __sym0 = __pop_Variant17(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action28::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action29::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); - (4, 16) - } - pub(crate) fn __reduce34< - 'input, - >( - input: &'input str, - __lookahead_start: Option<&usize>, - __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, - _: core::marker::PhantomData<(&'input ())>, - ) -> (usize, usize) - { - // Expr = "(", Ident, ")" => ActionFn(33); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant16(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0.clone(); - let __end = __sym2.2.clone(); - let __nt = super::__action33::<>(input, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (4, 17) } pub(crate) fn __reduce35< 'input, @@ -22480,16 +27509,16 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", Const, ")" => ActionFn(34); + // Expr = "(", Ident, ")" => ActionFn(34); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant11(__symbols); + let __sym1 = __pop_Variant16(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); let __nt = super::__action34::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (3, 18) } pub(crate) fn __reduce36< 'input, @@ -22500,16 +27529,16 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "true", ")" => ActionFn(35); + // Expr = "(", Const, ")" => ActionFn(35); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant11(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); let __nt = super::__action35::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (3, 18) } pub(crate) fn __reduce37< 'input, @@ -22520,7 +27549,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "false", ")" => ActionFn(36); + // Expr = "(", "true", ")" => ActionFn(36); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); @@ -22529,7 +27558,7 @@ mod __parse__FunctionType { let __end = __sym2.2.clone(); let __nt = super::__action36::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (3, 18) } pub(crate) fn __reduce38< 'input, @@ -22540,17 +27569,16 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "!", Expr, ")" => ActionFn(37); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant3(__symbols); + // Expr = "(", "false", ")" => ActionFn(37); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym3.2.clone(); - let __nt = super::__action37::<>(input, __sym0, __sym1, __sym2, __sym3); + let __end = __sym2.2.clone(); + let __nt = super::__action37::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (3, 18) } pub(crate) fn __reduce39< 'input, @@ -22561,18 +27589,17 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "&&", Expr, Expr, ")" => ActionFn(38); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant3(__symbols); + // Expr = "(", "!", Expr, ")" => ActionFn(38); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym4.2.clone(); - let __nt = super::__action38::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __end = __sym3.2.clone(); + let __nt = super::__action38::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (4, 18) } pub(crate) fn __reduce40< 'input, @@ -22583,7 +27610,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "||", Expr, Expr, ")" => ActionFn(39); + // Expr = "(", "&&", Expr, Expr, ")" => ActionFn(39); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -22594,7 +27621,7 @@ mod __parse__FunctionType { let __end = __sym4.2.clone(); let __nt = super::__action39::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce41< 'input, @@ -22605,7 +27632,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "=>", Expr, Expr, ")" => ActionFn(40); + // Expr = "(", "||", Expr, Expr, ")" => ActionFn(40); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -22616,7 +27643,7 @@ mod __parse__FunctionType { let __end = __sym4.2.clone(); let __nt = super::__action40::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce42< 'input, @@ -22627,7 +27654,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "=", Expr, Expr, ")" => ActionFn(41); + // Expr = "(", "=>", Expr, Expr, ")" => ActionFn(41); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -22638,7 +27665,7 @@ mod __parse__FunctionType { let __end = __sym4.2.clone(); let __nt = super::__action41::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce43< 'input, @@ -22649,7 +27676,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "<=", Expr, Expr, ")" => ActionFn(42); + // Expr = "(", "=", Expr, Expr, ")" => ActionFn(42); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -22660,7 +27687,7 @@ mod __parse__FunctionType { let __end = __sym4.2.clone(); let __nt = super::__action42::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce44< 'input, @@ -22671,7 +27698,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "<", Expr, Expr, ")" => ActionFn(43); + // Expr = "(", "<=", Expr, Expr, ")" => ActionFn(43); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -22682,7 +27709,7 @@ mod __parse__FunctionType { let __end = __sym4.2.clone(); let __nt = super::__action43::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce45< 'input, @@ -22693,7 +27720,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sgt", Expr, Expr, ")" => ActionFn(44); + // Expr = "(", "<", Expr, Expr, ")" => ActionFn(44); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -22704,7 +27731,7 @@ mod __parse__FunctionType { let __end = __sym4.2.clone(); let __nt = super::__action44::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce46< 'input, @@ -22715,7 +27742,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sgte", Expr, Expr, ")" => ActionFn(45); + // Expr = "(", "sgt", Expr, Expr, ")" => ActionFn(45); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -22726,7 +27753,7 @@ mod __parse__FunctionType { let __end = __sym4.2.clone(); let __nt = super::__action45::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce47< 'input, @@ -22737,7 +27764,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "slt", Expr, Expr, ")" => ActionFn(46); + // Expr = "(", "sgte", Expr, Expr, ")" => ActionFn(46); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -22748,7 +27775,7 @@ mod __parse__FunctionType { let __end = __sym4.2.clone(); let __nt = super::__action46::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce48< 'input, @@ -22759,7 +27786,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "slte", Expr, Expr, ")" => ActionFn(47); + // Expr = "(", "slt", Expr, Expr, ")" => ActionFn(47); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -22770,7 +27797,7 @@ mod __parse__FunctionType { let __end = __sym4.2.clone(); let __nt = super::__action47::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce49< 'input, @@ -22781,7 +27808,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ugt", Expr, Expr, ")" => ActionFn(48); + // Expr = "(", "slte", Expr, Expr, ")" => ActionFn(48); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -22792,7 +27819,7 @@ mod __parse__FunctionType { let __end = __sym4.2.clone(); let __nt = super::__action48::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce50< 'input, @@ -22803,7 +27830,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ugte", Expr, Expr, ")" => ActionFn(49); + // Expr = "(", "ugt", Expr, Expr, ")" => ActionFn(49); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -22814,7 +27841,7 @@ mod __parse__FunctionType { let __end = __sym4.2.clone(); let __nt = super::__action49::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce51< 'input, @@ -22825,7 +27852,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ult", Expr, Expr, ")" => ActionFn(50); + // Expr = "(", "ugte", Expr, Expr, ")" => ActionFn(50); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -22836,7 +27863,7 @@ mod __parse__FunctionType { let __end = __sym4.2.clone(); let __nt = super::__action50::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce52< 'input, @@ -22847,7 +27874,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ulte", Expr, Expr, ")" => ActionFn(51); + // Expr = "(", "ult", Expr, Expr, ")" => ActionFn(51); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -22858,7 +27885,7 @@ mod __parse__FunctionType { let __end = __sym4.2.clone(); let __nt = super::__action51::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce53< 'input, @@ -22869,17 +27896,18 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "-", Expr, ")" => ActionFn(52); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); + // Expr = "(", "ulte", Expr, Expr, ")" => ActionFn(52); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym3.2.clone(); - let __nt = super::__action52::<>(input, __sym0, __sym1, __sym2, __sym3); + let __end = __sym4.2.clone(); + let __nt = super::__action52::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (5, 18) } pub(crate) fn __reduce54< 'input, @@ -22890,7 +27918,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "~", Expr, ")" => ActionFn(53); + // Expr = "(", "-", Expr, ")" => ActionFn(53); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -22900,7 +27928,7 @@ mod __parse__FunctionType { let __end = __sym3.2.clone(); let __nt = super::__action53::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } pub(crate) fn __reduce55< 'input, @@ -22911,7 +27939,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "clz", Expr, ")" => ActionFn(54); + // Expr = "(", "~", Expr, ")" => ActionFn(54); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -22921,7 +27949,7 @@ mod __parse__FunctionType { let __end = __sym3.2.clone(); let __nt = super::__action54::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } pub(crate) fn __reduce56< 'input, @@ -22932,7 +27960,28 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "a64clz", Expr, Expr, ")" => ActionFn(55); + // Expr = "(", "clz", Expr, ")" => ActionFn(55); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action55::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (4, 18) + } + pub(crate) fn __reduce57< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "a64clz", Expr, Expr, ")" => ActionFn(56); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -22941,11 +27990,11 @@ mod __parse__FunctionType { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action55::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action56::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce57< + pub(crate) fn __reduce58< 'input, >( input: &'input str, @@ -22954,7 +28003,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "cls", Expr, ")" => ActionFn(56); + // Expr = "(", "cls", Expr, ")" => ActionFn(57); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -22962,11 +28011,11 @@ mod __parse__FunctionType { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action56::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action57::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce58< + pub(crate) fn __reduce59< 'input, >( input: &'input str, @@ -22975,7 +28024,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "a64cls", Expr, Expr, ")" => ActionFn(57); + // Expr = "(", "a64cls", Expr, Expr, ")" => ActionFn(58); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -22984,11 +28033,11 @@ mod __parse__FunctionType { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action57::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action58::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce59< + pub(crate) fn __reduce60< 'input, >( input: &'input str, @@ -22997,7 +28046,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "rev", Expr, ")" => ActionFn(58); + // Expr = "(", "rev", Expr, ")" => ActionFn(59); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -23005,11 +28054,11 @@ mod __parse__FunctionType { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action58::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action59::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce60< + pub(crate) fn __reduce61< 'input, >( input: &'input str, @@ -23018,7 +28067,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "a64rev", Expr, Expr, ")" => ActionFn(59); + // Expr = "(", "a64rev", Expr, Expr, ")" => ActionFn(60); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -23027,11 +28076,11 @@ mod __parse__FunctionType { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action59::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action60::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce61< + pub(crate) fn __reduce62< 'input, >( input: &'input str, @@ -23040,7 +28089,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "subs", Expr, Expr, Expr, ")" => ActionFn(60); + // Expr = "(", "subs", Expr, Expr, Expr, ")" => ActionFn(61); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant3(__symbols); @@ -23050,31 +28099,9 @@ mod __parse__FunctionType { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym5.2.clone(); - let __nt = super::__action60::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action61::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (6, 17) - } - pub(crate) fn __reduce62< - 'input, - >( - input: &'input str, - __lookahead_start: Option<&usize>, - __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, - _: core::marker::PhantomData<(&'input ())>, - ) -> (usize, usize) - { - // Expr = "(", "*", Expr, Expr, ")" => ActionFn(61); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant3(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0.clone(); - let __end = __sym4.2.clone(); - let __nt = super::__action61::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); - __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (6, 18) } pub(crate) fn __reduce63< 'input, @@ -23085,7 +28112,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "/", Expr, Expr, ")" => ActionFn(62); + // Expr = "(", "*", Expr, Expr, ")" => ActionFn(62); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -23096,7 +28123,7 @@ mod __parse__FunctionType { let __end = __sym4.2.clone(); let __nt = super::__action62::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce64< 'input, @@ -23107,7 +28134,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sdiv", Expr, Expr, ")" => ActionFn(63); + // Expr = "(", "/", Expr, Expr, ")" => ActionFn(63); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -23118,7 +28145,7 @@ mod __parse__FunctionType { let __end = __sym4.2.clone(); let __nt = super::__action63::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce65< 'input, @@ -23129,7 +28156,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "+", Expr, Expr, ")" => ActionFn(64); + // Expr = "(", "sdiv", Expr, Expr, ")" => ActionFn(64); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -23140,7 +28167,7 @@ mod __parse__FunctionType { let __end = __sym4.2.clone(); let __nt = super::__action64::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce66< 'input, @@ -23151,7 +28178,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "-", Expr, Expr, ")" => ActionFn(65); + // Expr = "(", "+", Expr, Expr, ")" => ActionFn(65); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -23162,7 +28189,7 @@ mod __parse__FunctionType { let __end = __sym4.2.clone(); let __nt = super::__action65::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce67< 'input, @@ -23173,7 +28200,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "urem", Expr, Expr, ")" => ActionFn(66); + // Expr = "(", "-", Expr, Expr, ")" => ActionFn(66); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -23184,7 +28211,7 @@ mod __parse__FunctionType { let __end = __sym4.2.clone(); let __nt = super::__action66::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce68< 'input, @@ -23195,7 +28222,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "srem", Expr, Expr, ")" => ActionFn(67); + // Expr = "(", "urem", Expr, Expr, ")" => ActionFn(67); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -23206,7 +28233,7 @@ mod __parse__FunctionType { let __end = __sym4.2.clone(); let __nt = super::__action67::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce69< 'input, @@ -23217,7 +28244,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "&", Expr, Expr, ")" => ActionFn(68); + // Expr = "(", "srem", Expr, Expr, ")" => ActionFn(68); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -23228,7 +28255,7 @@ mod __parse__FunctionType { let __end = __sym4.2.clone(); let __nt = super::__action68::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce70< 'input, @@ -23239,7 +28266,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "|", Expr, Expr, ")" => ActionFn(69); + // Expr = "(", "&", Expr, Expr, ")" => ActionFn(69); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -23250,7 +28277,7 @@ mod __parse__FunctionType { let __end = __sym4.2.clone(); let __nt = super::__action69::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce71< 'input, @@ -23261,7 +28288,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "xor", Expr, Expr, ")" => ActionFn(70); + // Expr = "(", "|", Expr, Expr, ")" => ActionFn(70); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -23272,7 +28299,7 @@ mod __parse__FunctionType { let __end = __sym4.2.clone(); let __nt = super::__action70::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce72< 'input, @@ -23283,7 +28310,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "rotl", Expr, Expr, ")" => ActionFn(71); + // Expr = "(", "xor", Expr, Expr, ")" => ActionFn(71); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -23294,7 +28321,7 @@ mod __parse__FunctionType { let __end = __sym4.2.clone(); let __nt = super::__action71::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce73< 'input, @@ -23305,7 +28332,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "rotr", Expr, Expr, ")" => ActionFn(72); + // Expr = "(", "rotl", Expr, Expr, ")" => ActionFn(72); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -23316,7 +28343,7 @@ mod __parse__FunctionType { let __end = __sym4.2.clone(); let __nt = super::__action72::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce74< 'input, @@ -23327,7 +28354,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "shl", Expr, Expr, ")" => ActionFn(73); + // Expr = "(", "rotr", Expr, Expr, ")" => ActionFn(73); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -23338,7 +28365,7 @@ mod __parse__FunctionType { let __end = __sym4.2.clone(); let __nt = super::__action73::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce75< 'input, @@ -23349,7 +28376,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "shr", Expr, Expr, ")" => ActionFn(74); + // Expr = "(", "shl", Expr, Expr, ")" => ActionFn(74); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -23360,7 +28387,7 @@ mod __parse__FunctionType { let __end = __sym4.2.clone(); let __nt = super::__action74::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce76< 'input, @@ -23371,7 +28398,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ashr", Expr, Expr, ")" => ActionFn(75); + // Expr = "(", "shr", Expr, Expr, ")" => ActionFn(75); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -23382,7 +28409,7 @@ mod __parse__FunctionType { let __end = __sym4.2.clone(); let __nt = super::__action75::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce77< 'input, @@ -23393,18 +28420,18 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "zero_ext", Width, Expr, ")" => ActionFn(76); + // Expr = "(", "ashr", Expr, Expr, ")" => ActionFn(76); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant24(__symbols); + let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action76::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce78< 'input, @@ -23415,18 +28442,18 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "zero_ext", Expr, Expr, ")" => ActionFn(77); + // Expr = "(", "zero_ext", Width, Expr, ")" => ActionFn(77); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant24(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action77::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce79< 'input, @@ -23437,18 +28464,18 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sign_ext", Width, Expr, ")" => ActionFn(78); + // Expr = "(", "zero_ext", Expr, Expr, ")" => ActionFn(78); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant24(__symbols); + let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action78::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce80< 'input, @@ -23459,18 +28486,18 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sign_ext", Expr, Expr, ")" => ActionFn(79); + // Expr = "(", "sign_ext", Width, Expr, ")" => ActionFn(79); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant24(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action79::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce81< 'input, @@ -23481,7 +28508,29 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "extract", UNum, UNum, Expr, ")" => ActionFn(80); + // Expr = "(", "sign_ext", Expr, Expr, ")" => ActionFn(80); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action80::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce82< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "extract", UNum, UNum, Expr, ")" => ActionFn(81); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant3(__symbols); @@ -23491,11 +28540,11 @@ mod __parse__FunctionType { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym5.2.clone(); - let __nt = super::__action80::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action81::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (6, 17) + (6, 18) } - pub(crate) fn __reduce82< + pub(crate) fn __reduce83< 'input, >( input: &'input str, @@ -23504,7 +28553,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "conv_to", Width, Expr, ")" => ActionFn(81); + // Expr = "(", "conv_to", Width, Expr, ")" => ActionFn(82); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -23513,11 +28562,11 @@ mod __parse__FunctionType { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action81::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action82::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce83< + pub(crate) fn __reduce84< 'input, >( input: &'input str, @@ -23526,7 +28575,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "conv_to", Expr, Expr, ")" => ActionFn(82); + // Expr = "(", "conv_to", Expr, Expr, ")" => ActionFn(83); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -23535,11 +28584,11 @@ mod __parse__FunctionType { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action82::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action83::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce84< + pub(crate) fn __reduce85< 'input, >( input: &'input str, @@ -23548,7 +28597,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "if", Expr, Expr, Expr, ")" => ActionFn(83); + // Expr = "(", "if", Expr, Expr, Expr, ")" => ActionFn(84); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant3(__symbols); @@ -23558,11 +28607,11 @@ mod __parse__FunctionType { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym5.2.clone(); - let __nt = super::__action83::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action84::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (6, 17) + (6, 18) } - pub(crate) fn __reduce85< + pub(crate) fn __reduce86< 'input, >( input: &'input str, @@ -23571,7 +28620,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "switch", Expr, Pair+, ")" => ActionFn(84); + // Expr = "(", "switch", Expr, Pair+, ")" => ActionFn(85); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant19(__symbols); @@ -23580,11 +28629,11 @@ mod __parse__FunctionType { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action84::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action85::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce86< + pub(crate) fn __reduce87< 'input, >( input: &'input str, @@ -23593,7 +28642,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "int2bv", UNum, Expr, ")" => ActionFn(85); + // Expr = "(", "int2bv", UNum, Expr, ")" => ActionFn(86); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -23602,11 +28651,11 @@ mod __parse__FunctionType { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action85::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action86::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce87< + pub(crate) fn __reduce88< 'input, >( input: &'input str, @@ -23615,7 +28664,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "bv2int", Expr, ")" => ActionFn(86); + // Expr = "(", "bv2int", Expr, ")" => ActionFn(87); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -23623,11 +28672,11 @@ mod __parse__FunctionType { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action86::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action87::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce88< + pub(crate) fn __reduce89< 'input, >( input: &'input str, @@ -23636,7 +28685,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "widthof", Expr, ")" => ActionFn(87); + // Expr = "(", "widthof", Expr, ")" => ActionFn(88); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -23644,11 +28693,11 @@ mod __parse__FunctionType { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action87::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action88::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce89< + pub(crate) fn __reduce90< 'input, >( input: &'input str, @@ -23657,15 +28706,15 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr? = Expr => ActionFn(104); + // Expr? = Expr => ActionFn(107); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action104::<>(input, __sym0); + let __nt = super::__action107::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (1, 18) + (1, 19) } - pub(crate) fn __reduce90< + pub(crate) fn __reduce91< 'input, >( input: &'input str, @@ -23674,14 +28723,14 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr? = => ActionFn(105); + // Expr? = => ActionFn(108); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action105::<>(input, &__start, &__end); + let __nt = super::__action108::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (0, 18) + (0, 19) } - pub(crate) fn __reduce91< + pub(crate) fn __reduce92< 'input, >( input: &'input str, @@ -23690,15 +28739,15 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprList = Comma => ActionFn(24); - let __sym0 = __pop_Variant9(__symbols); + // ExprList = Comma => ActionFn(25); + let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action24::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 19) + let __nt = super::__action25::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 20) } - pub(crate) fn __reduce92< + pub(crate) fn __reduce93< 'input, >( input: &'input str, @@ -23707,7 +28756,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Function = Ident, "(", ArgList, ")", "(", Type, ")", "{", Expr, "}" => ActionFn(29); + // Function = Ident, "(", ArgList, ")", "(", Type, ")", "{", Expr, "}" => ActionFn(30); assert!(__symbols.len() >= 10); let __sym9 = __pop_Variant0(__symbols); let __sym8 = __pop_Variant3(__symbols); @@ -23721,11 +28770,11 @@ mod __parse__FunctionType { let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0.clone(); let __end = __sym9.2.clone(); - let __nt = super::__action29::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); + let __nt = super::__action30::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); - (10, 20) + (10, 21) } - pub(crate) fn __reduce93< + pub(crate) fn __reduce94< 'input, >( input: &'input str, @@ -23734,19 +28783,19 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // FunctionApplication = Expr, "(", ExprList, ")" => ActionFn(30); + // FunctionApplication = Expr, "(", ExprList, ")" => ActionFn(31); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant9(__symbols); + let __sym2 = __pop_Variant8(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action30::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action31::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (4, 21) + (4, 22) } - pub(crate) fn __reduce94< + pub(crate) fn __reduce95< 'input, >( input: &'input str, @@ -23755,7 +28804,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // FunctionType = "func", "(", TypeList, ")", "(", Type, ")" => ActionFn(27); + // FunctionType = "func", "(", TypeList, ")", "(", Type, ")" => ActionFn(28); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant5(__symbols); @@ -23766,11 +28815,11 @@ mod __parse__FunctionType { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym6.2.clone(); - let __nt = super::__action27::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action28::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (7, 22) + (7, 23) } - pub(crate) fn __reduce95< + pub(crate) fn __reduce96< 'input, >( input: &'input str, @@ -23779,15 +28828,15 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"[A-Za-z]"# => ActionFn(12); + // Ident = r#"[A-Za-z]"# => ActionFn(13); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action12::<>(input, __sym0); + let __nt = super::__action13::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 23) + (1, 24) } - pub(crate) fn __reduce96< + pub(crate) fn __reduce97< 'input, >( input: &'input str, @@ -23796,15 +28845,15 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"[A-Zac-z][\\.\\w]+"# => ActionFn(13); + // Ident = r#"[A-Zac-z][\\.\\w]+"# => ActionFn(14); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action13::<>(input, __sym0); + let __nt = super::__action14::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 23) + (1, 24) } - pub(crate) fn __reduce97< + pub(crate) fn __reduce98< 'input, >( input: &'input str, @@ -23813,15 +28862,15 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"b[\\w&&[^v]][\\.\\w]*"# => ActionFn(14); + // Ident = r#"b[\\w&&[^v]][\\.\\w]*"# => ActionFn(15); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action14::<>(input, __sym0); + let __nt = super::__action15::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 23) + (1, 24) } - pub(crate) fn __reduce98< + pub(crate) fn __reduce99< 'input, >( input: &'input str, @@ -23830,15 +28879,15 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Num = r#"-?[0-9]+i"# => ActionFn(11); + // Num = r#"-?[0-9]+i"# => ActionFn(12); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action11::<>(input, __sym0); + let __nt = super::__action12::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant17(__nt), __end)); - (1, 24) + (1, 25) } - pub(crate) fn __reduce99< + pub(crate) fn __reduce100< 'input, >( input: &'input str, @@ -23847,7 +28896,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Pair = "(", Expr, Expr, ")" => ActionFn(25); + // Pair = "(", Expr, Expr, ")" => ActionFn(26); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -23855,11 +28904,11 @@ mod __parse__FunctionType { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action25::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action26::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant18(__nt), __end)); - (4, 25) + (4, 26) } - pub(crate) fn __reduce100< + pub(crate) fn __reduce101< 'input, >( input: &'input str, @@ -23868,15 +28917,15 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Pair+ = Pair => ActionFn(89); + // Pair+ = Pair => ActionFn(92); let __sym0 = __pop_Variant18(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action89::<>(input, __sym0); + let __nt = super::__action92::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant19(__nt), __end)); - (1, 26) + (1, 27) } - pub(crate) fn __reduce101< + pub(crate) fn __reduce102< 'input, >( input: &'input str, @@ -23885,17 +28934,46 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Pair+ = Pair+, Pair => ActionFn(90); + // Pair+ = Pair+, Pair => ActionFn(93); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant18(__symbols); let __sym0 = __pop_Variant19(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action90::<>(input, __sym0, __sym1); + let __nt = super::__action93::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant19(__nt), __end)); - (2, 26) + (2, 27) } - pub(crate) fn __reduce102< + pub(crate) fn __reduce103< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // TermAnnotation = "(", "spec", TermSignature, "(", "assume", ExprList, ")", "(", "assert", ExprList, ")", ")" => ActionFn(90); + assert!(__symbols.len() >= 12); + let __sym11 = __pop_Variant0(__symbols); + let __sym10 = __pop_Variant0(__symbols); + let __sym9 = __pop_Variant8(__symbols); + let __sym8 = __pop_Variant0(__symbols); + let __sym7 = __pop_Variant0(__symbols); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant8(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant21(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym11.2.clone(); + let __nt = super::__action90::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9, __sym10, __sym11); + __symbols.push((__start, __Symbol::Variant20(__nt), __end)); + (12, 28) + } + pub(crate) fn __reduce104< 'input, >( input: &'input str, @@ -23904,11 +28982,11 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // TermAnnotation = "(", "spec", TermSignature, "(", "assertions", ExprList, ")", ")" => ActionFn(88); + // TermAnnotation = "(", "spec", TermSignature, "(", "assume", ExprList, ")", ")" => ActionFn(91); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant9(__symbols); + let __sym5 = __pop_Variant8(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant21(__symbols); @@ -23916,11 +28994,11 @@ mod __parse__FunctionType { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym7.2.clone(); - let __nt = super::__action88::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); + let __nt = super::__action91::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant20(__nt), __end)); - (8, 27) + (8, 28) } - pub(crate) fn __reduce103< + pub(crate) fn __reduce105< 'input, >( input: &'input str, @@ -23929,7 +29007,7 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // TermSignature = "(", "sig", Args, "(", BoundVar, ")", ")" => ActionFn(26); + // TermSignature = "(", "sig", Args, "(", BoundVar, ")", ")" => ActionFn(27); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -23940,11 +29018,11 @@ mod __parse__FunctionType { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym6.2.clone(); - let __nt = super::__action26::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action27::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant21(__nt), __end)); - (7, 28) + (7, 29) } - pub(crate) fn __reduce104< + pub(crate) fn __reduce106< 'input, >( input: &'input str, @@ -23953,15 +29031,15 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "bv" => ActionFn(15); + // Type = "bv" => ActionFn(16); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action15::<>(input, __sym0); + let __nt = super::__action16::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 29) + (1, 30) } - pub(crate) fn __reduce105< + pub(crate) fn __reduce107< 'input, >( input: &'input str, @@ -23970,17 +29048,17 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "bv", UNum => ActionFn(16); + // Type = "bv", UNum => ActionFn(17); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant23(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action16::<>(input, __sym0, __sym1); + let __nt = super::__action17::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (2, 29) + (2, 30) } - pub(crate) fn __reduce106< + pub(crate) fn __reduce108< 'input, >( input: &'input str, @@ -23989,15 +29067,15 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "isleType" => ActionFn(17); + // Type = "isleType" => ActionFn(18); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action17::<>(input, __sym0); + let __nt = super::__action18::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 29) + (1, 30) } - pub(crate) fn __reduce107< + pub(crate) fn __reduce109< 'input, >( input: &'input str, @@ -24006,15 +29084,15 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "bool" => ActionFn(18); + // Type = "bool" => ActionFn(19); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action18::<>(input, __sym0); + let __nt = super::__action19::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 29) + (1, 30) } - pub(crate) fn __reduce108< + pub(crate) fn __reduce110< 'input, >( input: &'input str, @@ -24023,15 +29101,15 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type? = Type => ActionFn(99); + // Type? = Type => ActionFn(102); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action99::<>(input, __sym0); + let __nt = super::__action102::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant22(__nt), __end)); - (1, 30) + (1, 31) } - pub(crate) fn __reduce109< + pub(crate) fn __reduce111< 'input, >( input: &'input str, @@ -24040,14 +29118,14 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type? = => ActionFn(100); + // Type? = => ActionFn(103); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action100::<>(input, &__start, &__end); + let __nt = super::__action103::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant22(__nt), __end)); - (0, 30) + (0, 31) } - pub(crate) fn __reduce110< + pub(crate) fn __reduce112< 'input, >( input: &'input str, @@ -24056,15 +29134,15 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // TypeList = Comma => ActionFn(23); + // TypeList = Comma => ActionFn(24); let __sym0 = __pop_Variant10(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action23::<>(input, __sym0); + let __nt = super::__action24::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 31) + (1, 32) } - pub(crate) fn __reduce111< + pub(crate) fn __reduce113< 'input, >( input: &'input str, @@ -24073,15 +29151,15 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // UNum = r#"[0-9]+"# => ActionFn(10); + // UNum = r#"[0-9]+"# => ActionFn(11); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action10::<>(input, __sym0); + let __nt = super::__action11::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant23(__nt), __end)); - (1, 32) + (1, 33) } - pub(crate) fn __reduce112< + pub(crate) fn __reduce114< 'input, >( input: &'input str, @@ -24090,18 +29168,18 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Width = "(", "regwidth", ")" => ActionFn(31); + // Width = "(", "regwidth", ")" => ActionFn(32); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action31::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action32::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (3, 33) + (3, 34) } - pub(crate) fn __reduce113< + pub(crate) fn __reduce115< 'input, >( input: &'input str, @@ -24110,18 +29188,35 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Width = "(", UNum, ")" => ActionFn(32); + // Width = "(", UNum, ")" => ActionFn(33); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant23(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action32::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action33::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (3, 33) + (3, 34) } - pub(crate) fn __reduce114< + pub(crate) fn __reduce116< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // __AssertBlock = AssertBlock => ActionFn(9); + let __sym0 = __pop_Variant8(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action9::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 35) + } + pub(crate) fn __reduce117< 'input, >( input: &'input str, @@ -24136,9 +29231,9 @@ mod __parse__FunctionType { let __end = __sym0.2.clone(); let __nt = super::__action1::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); - (1, 34) + (1, 36) } - pub(crate) fn __reduce115< + pub(crate) fn __reduce118< 'input, >( input: &'input str, @@ -24153,9 +29248,9 @@ mod __parse__FunctionType { let __end = __sym0.2.clone(); let __nt = super::__action4::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); - (1, 35) + (1, 37) } - pub(crate) fn __reduce116< + pub(crate) fn __reduce119< 'input, >( input: &'input str, @@ -24170,9 +29265,9 @@ mod __parse__FunctionType { let __end = __sym0.2.clone(); let __nt = super::__action8::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (1, 36) + (1, 38) } - pub(crate) fn __reduce117< + pub(crate) fn __reduce120< 'input, >( input: &'input str, @@ -24187,9 +29282,9 @@ mod __parse__FunctionType { let __end = __sym0.2.clone(); let __nt = super::__action5::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); - (1, 37) + (1, 39) } - pub(crate) fn __reduce118< + pub(crate) fn __reduce121< 'input, >( input: &'input str, @@ -24204,9 +29299,9 @@ mod __parse__FunctionType { let __end = __sym0.2.clone(); let __nt = super::__action6::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 38) + (1, 40) } - pub(crate) fn __reduce120< + pub(crate) fn __reduce123< 'input, >( input: &'input str, @@ -24215,15 +29310,15 @@ mod __parse__FunctionType { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // __TermAnnotation = TermAnnotation => ActionFn(9); + // __TermAnnotation = TermAnnotation => ActionFn(10); let __sym0 = __pop_Variant20(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action9::<>(input, __sym0); + let __nt = super::__action10::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant20(__nt), __end)); - (1, 40) + (1, 42) } - pub(crate) fn __reduce121< + pub(crate) fn __reduce124< 'input, >( input: &'input str, @@ -24238,9 +29333,9 @@ mod __parse__FunctionType { let __end = __sym0.2.clone(); let __nt = super::__action2::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant21(__nt), __end)); - (1, 41) + (1, 43) } - pub(crate) fn __reduce122< + pub(crate) fn __reduce125< 'input, >( input: &'input str, @@ -24255,9 +29350,9 @@ mod __parse__FunctionType { let __end = __sym0.2.clone(); let __nt = super::__action0::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 42) + (1, 44) } - pub(crate) fn __reduce123< + pub(crate) fn __reduce126< 'input, >( input: &'input str, @@ -24272,7 +29367,7 @@ mod __parse__FunctionType { let __end = __sym0.2.clone(); let __nt = super::__action7::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (1, 43) + (1, 45) } } pub use self::__parse__FunctionType::FunctionTypeParser; @@ -24302,8 +29397,8 @@ mod __parse__TermAnnotation { Variant5(Type), Variant6(alloc::vec::Vec), Variant7(Vec), - Variant8(core::option::Option), - Variant9(Vec>), + Variant8(Vec>), + Variant9(core::option::Option), Variant10(Vec), Variant11(Const), Variant12(core::option::Option>), @@ -24322,532 +29417,542 @@ mod __parse__TermAnnotation { } const __ACTION: &[i16] = &[ // State 0 - 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1 - 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 2 - 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 3 - 0, 0, 0, 7, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, -28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 4 - 0, 0, 0, 0, 0, -23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 125, 126, + 0, 0, 0, 0, 0, -24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 126, 127, // State 5 - 0, 0, 0, 7, 0, -29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, -30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 6 - 11, 12, 13, 0, 0, 0, 14, 15, 0, 16, 17, 0, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 26, 27, 28, 29, 30, 132, 0, 31, 32, 0, 0, 33, 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, 0, 44, 45, 46, 133, 47, 48, 49, 50, 51, 52, 53, 54, 0, 55, 56, 0, 57, 134, 0, 124, 125, 126, + 11, 12, 13, 0, 0, 0, 14, 15, 0, 16, 17, 0, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 26, 27, 28, 29, 30, 133, 0, 31, 32, 0, 0, 33, 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, 0, 44, 45, 46, 134, 47, 48, 49, 50, 51, 52, 53, 54, 0, 55, 56, 0, 57, 135, 0, 125, 126, 127, // State 7 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 125, 126, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 126, 127, // State 8 - 0, 0, 0, 0, 0, -25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 125, 126, + 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 126, 127, // State 9 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, // State 10 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 11 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 12 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 13 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 14 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 15 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 16 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 17 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 18 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 19 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 20 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 21 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 22 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 23 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 24 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 25 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 26 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 27 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 28 - 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 29 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, // State 30 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 31 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, // State 32 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 33 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 34 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 35 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 36 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 37 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 38 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 39 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 40 - 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 41 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 42 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 43 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 44 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 45 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 46 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 47 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 48 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 49 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 50 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 51 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 52 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 53 - 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 54 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 55 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 56 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 57 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 58 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 59 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 60 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 61 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 62 - 0, 0, 0, 7, 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 63 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 64 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 65 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 66 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 67 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 68 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 69 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 70 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 71 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 72 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 73 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 74 - 11, 12, 13, 0, 0, 0, 14, 15, 0, 16, 17, 0, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 26, 27, 28, 29, 30, 132, 0, 31, 32, 0, 181, 33, 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, 0, 44, 45, 46, 133, 47, 48, 49, 50, 51, 52, 53, 54, 0, 55, 56, 0, 57, 134, 144, 124, 125, 126, + 11, 12, 13, 0, 0, 0, 14, 15, 0, 16, 17, 0, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 26, 27, 28, 29, 30, 133, 0, 31, 32, 0, 183, 33, 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, 0, 44, 45, 46, 134, 47, 48, 49, 50, 51, 52, 53, 54, 0, 55, 56, 0, 57, 135, 146, 125, 126, 127, // State 75 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, // State 76 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 77 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 78 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 79 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 80 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 81 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 82 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 83 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 84 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 85 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 86 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 87 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 88 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 89 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 90 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 91 - 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 92 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 93 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 94 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 95 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 96 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 97 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 98 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 99 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 100 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 101 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 102 - 0, 0, 0, 0, 0, -105, 0, 0, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, + 0, 0, 0, 0, 0, -107, 0, 0, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, // State 103 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, -28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 104 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 105 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 106 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 107 - 0, 0, 0, 109, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 108 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 110, 0, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 109 - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 110 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 111 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 112 - 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 113 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 114 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 115 - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 116 - 0, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 117 - 0, 0, 0, 0, 0, -26, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 118 - 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -27, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 119 - 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 120 - 0, 0, 0, 0, 0, -22, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 121 - 0, 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -23, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 122 - 0, 0, 0, 0, 0, -18, 0, 0, -18, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 123 - 0, 0, 0, 0, 0, -96, 0, 0, -96, 0, 0, -96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -19, 0, 0, -19, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 124 - 0, 0, 0, 0, 0, -97, 0, 0, -97, 0, 0, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -97, 0, 0, -97, 0, 0, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 125 - 0, 0, 0, 0, 0, -98, 0, 0, -98, 0, 0, -98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -98, 0, 0, -98, 0, 0, -98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 126 - 0, 0, 0, 0, 0, -28, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -99, 0, 0, -99, 0, 0, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 127 - 0, 0, 0, -9, 0, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -29, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 128 - 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -9, 0, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 129 - 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 141, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 130 - 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 131 - 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 132 - 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 133 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0, 0, 0, + 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 134 - 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0, 0, 0, // State 135 - 0, 0, 0, 0, 0, -24, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 136 - 0, 0, 0, -17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -25, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 137 - 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, -4, -4, + 0, 0, 0, -17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 138 - 0, 0, 0, -10, 0, -10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, -4, -4, // State 139 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -10, 0, -10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 140 - 0, 0, 0, -36, 0, -36, 0, 0, -36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 141 - 0, 0, 0, -35, 0, -35, 0, 0, -35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 142 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -37, 0, -37, 0, 0, -37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 143 - 0, 0, 0, -112, 0, -112, 0, 0, -112, 0, 0, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, 0, 0, 0, + 0, 0, 0, -36, 0, -36, 0, 0, -36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 144 - 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 145 - 0, 0, 0, 0, 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -114, 0, -114, 0, 0, -114, 0, 0, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, 0, 0, 0, // State 146 - 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 147 - 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 148 - 0, 0, 0, -38, 0, -38, 0, 0, -38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 149 - 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 150 - 0, 0, 0, -37, 0, -37, 0, 0, -37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -39, 0, -39, 0, 0, -39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 151 - 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 152 - 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -38, 0, -38, 0, 0, -38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 153 - 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 154 - 0, 0, 0, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -5, -5, -5, + 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 155 - 0, 0, 0, 0, 0, -19, 0, 0, -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 156 - 0, 0, 0, 0, 0, -108, 0, 0, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -5, -5, -5, // State 157 - 0, 0, 0, 0, 0, -107, 0, 0, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -20, 0, 0, -20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 158 - 0, 0, 0, -39, 0, -39, 0, 0, -39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -110, 0, 0, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 159 - 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -109, 0, 0, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 160 - 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -40, 0, -40, 0, 0, -40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 161 - 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 162 - 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 163 - 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 164 - 0, 0, 0, -54, 0, -54, 0, 0, -54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 165 - 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 166 - 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -55, 0, -55, 0, 0, -55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 167 - 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 168 - 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 169 - 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 170 - 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 171 - 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 172 - 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 173 - 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 174 - 0, 0, 0, -88, 0, -88, 0, 0, -88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 175 - 0, 0, 0, -58, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 176 - 0, 0, 0, -56, 0, -56, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -89, 0, -89, 0, 0, -89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 177 - 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -59, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 178 - 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -57, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 179 - 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 180 - 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 181 - 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 182 - 0, 0, 0, -60, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 183 - 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 184 - 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -61, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 185 - 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 186 - 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 187 - 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 188 - 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 189 - 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 190 - 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 191 - 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 192 - 0, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 193 - 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 194 - 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 195 - 0, 0, 0, -101, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 196 - 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 197 - 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -102, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 198 - 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 199 - 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 200 - 0, 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 201 - 0, 0, 0, -89, 0, -89, 0, 0, -89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 202 - 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 203 - 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -90, 0, -90, 0, 0, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 204 - 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 205 - 0, 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 206 - 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 207 - 0, 0, 0, -55, 0, -55, 0, 0, -55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 208 - 0, 0, 0, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 209 - 0, 0, 0, 0, 0, -106, 0, 0, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -56, 0, -56, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 210 - 0, 0, 0, 0, 0, -34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 211 - 0, 0, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -108, 0, 0, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 212 - 0, 0, 0, -40, 0, -40, 0, 0, -40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 213 - 0, 0, 0, -63, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 214 - 0, 0, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 215 - 0, 0, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -41, 0, -41, 0, 0, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 216 - 0, 0, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 217 - 0, 0, 0, -45, 0, -45, 0, 0, -45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 218 - 0, 0, 0, -44, 0, -44, 0, 0, -44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 219 - 0, 0, 0, -43, 0, -43, 0, 0, -43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 220 - 0, 0, 0, -42, 0, -42, 0, 0, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -46, 0, -46, 0, 0, -46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 221 - 0, 0, 0, -59, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -45, 0, -45, 0, 0, -45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 222 - 0, 0, 0, -57, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -44, 0, -44, 0, 0, -44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 223 - 0, 0, 0, -61, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -43, 0, -43, 0, 0, -43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 224 - 0, 0, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -60, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 225 - 0, 0, 0, -84, 0, -84, 0, 0, -84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -58, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 226 - 0, 0, 0, -83, 0, -83, 0, 0, -83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -62, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 227 - 0, 0, 0, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 228 - 0, 0, 0, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -85, 0, -85, 0, 0, -85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 229 - 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -84, 0, -84, 0, 0, -84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 230 - 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 231 - 0, 0, 0, -87, 0, -87, 0, 0, -87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 232 - 0, 0, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 233 - 0, 0, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 234 - 0, 0, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -88, 0, -88, 0, 0, -88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 235 - 0, 0, 0, -46, 0, -46, 0, 0, -46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 236 - 0, 0, 0, -47, 0, -47, 0, 0, -47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 237 - 0, 0, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 238 - 0, 0, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -47, 0, -47, 0, 0, -47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 239 - 0, 0, 0, -81, 0, -81, 0, 0, -81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -48, 0, -48, 0, 0, -48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 240 - 0, 0, 0, -80, 0, -80, 0, 0, -80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 241 - 0, 0, 0, -48, 0, -48, 0, 0, -48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 242 - 0, 0, 0, -49, 0, -49, 0, 0, -49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -82, 0, -82, 0, 0, -82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 243 - 0, 0, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -81, 0, -81, 0, 0, -81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 244 - 0, 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -49, 0, -49, 0, 0, -49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 245 - 0, 0, 0, -102, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -50, 0, -50, 0, 0, -50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 246 - 0, 0, 0, -86, 0, -86, 0, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 247 - 0, 0, 0, -50, 0, -50, 0, 0, -50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 248 - 0, 0, 0, -51, 0, -51, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -103, 0, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 249 - 0, 0, 0, -52, 0, -52, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -87, 0, -87, 0, 0, -87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 250 - 0, 0, 0, -53, 0, -53, 0, 0, -53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -51, 0, -51, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 251 - 0, 0, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -52, 0, -52, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 252 - 0, 0, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -53, 0, -53, 0, 0, -53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 253 - 0, 0, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -54, 0, -54, 0, 0, -54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 254 - 0, 0, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 255 - 0, 0, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 256 - 0, 0, 0, -41, 0, -41, 0, 0, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -80, 0, -80, 0, 0, -80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 257 - 0, 0, 0, -82, 0, -82, 0, 0, -82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 258 - 0, 0, 0, -85, 0, -85, 0, 0, -85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 259 - 0, 0, 0, -62, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -42, 0, -42, 0, 0, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 260 - 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 261 - 0, 0, 0, -100, 0, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -83, 0, -83, 0, 0, -83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 262 + 0, 0, 0, -86, 0, -86, 0, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 263 + 0, 0, 0, -63, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 264 + 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 265 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 266 + 0, 0, 0, -101, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]; fn __action(state: i16, integer: usize) -> i16 { - __ACTION[(state as usize) * 69 + integer] + __ACTION[(state as usize) * 70 + integer] } const __EOF_ACTION: &[i16] = &[ // State 0 @@ -25071,9 +30176,9 @@ mod __parse__TermAnnotation { // State 109 0, // State 110 - -121, - // State 111 0, + // State 111 + -124, // State 112 0, // State 113 @@ -25129,11 +30234,11 @@ mod __parse__TermAnnotation { // State 138 0, // State 139 - -103, + 0, // State 140 0, // State 141 - 0, + -105, // State 142 0, // State 143 @@ -25374,22 +30479,33 @@ mod __parse__TermAnnotation { 0, // State 261 0, + // State 262 + 0, + // State 263 + 0, + // State 264 + 0, + // State 265 + -104, + // State 266 + 0, ]; fn __goto(state: i16, nt: usize) -> i16 { match nt { 2 => 8, 5 => 5, - 9 => 119, - 10 => 115, - 11 => match state { - 7 => 134, - 8 => 135, - _ => 120, + 9 => 120, + 10 => 116, + 12 => match state { + 7 => 135, + 8 => 136, + _ => 121, }, - 13 => 121, - 14 => 116, - 16 => 129, - 17 => match state { + 14 => 122, + 15 => 117, + 17 => 130, + 18 => match state { + 11 => 58, 12 => 59, 13 => 60, 14 => 61, @@ -25427,89 +30543,91 @@ mod __parse__TermAnnotation { 53 => 98, 54 => 100, 55 => 101, - 76 => 105, - 90 => 106, - 108 => 109, - 3 => 117, - 5 => 126, - 10 => 144, - 25 => 145, - 26 => 146, - 27 => 147, - 32 => 149, - 51 => 151, - 56 => 152, - 58 => 159, - 59 => 160, - 60 => 161, - 61 => 162, - 62 => 163, - 63 => 165, - 64 => 166, - 65 => 167, - 66 => 168, - 67 => 169, - 68 => 170, - 69 => 171, - 70 => 172, - 71 => 173, - 72 => 177, - 73 => 178, - 77 => 181, - 78 => 183, - 79 => 184, - 80 => 185, - 81 => 186, - 82 => 187, - 83 => 188, - 84 => 189, - 85 => 190, - 86 => 191, - 87 => 192, - 88 => 193, - 89 => 194, - 92 => 196, - 93 => 197, - 94 => 198, - 95 => 199, - 96 => 200, - 97 => 202, - 98 => 203, - 99 => 204, - 100 => 205, - 101 => 206, - 104 => 229, - 105 => 230, - 106 => 244, - 109 => 260, - _ => 58, + 76 => 106, + 90 => 107, + 109 => 110, + 5 => 127, + 10 => 146, + 25 => 147, + 26 => 148, + 27 => 149, + 32 => 151, + 51 => 153, + 56 => 154, + 58 => 161, + 59 => 162, + 60 => 163, + 61 => 164, + 62 => 165, + 63 => 167, + 64 => 168, + 65 => 169, + 66 => 170, + 67 => 171, + 68 => 172, + 69 => 173, + 70 => 174, + 71 => 175, + 72 => 179, + 73 => 180, + 77 => 183, + 78 => 185, + 79 => 186, + 80 => 187, + 81 => 188, + 82 => 189, + 83 => 190, + 84 => 191, + 85 => 192, + 86 => 193, + 87 => 194, + 88 => 195, + 89 => 196, + 92 => 198, + 93 => 199, + 94 => 200, + 95 => 201, + 96 => 202, + 97 => 204, + 98 => 205, + 99 => 206, + 100 => 207, + 101 => 208, + 105 => 232, + 106 => 233, + 107 => 247, + 110 => 264, + _ => 118, + }, + 20 => match state { + 103 => 212, + _ => 119, }, - 19 => 118, - 23 => match state { - 6 | 74 => 130, - _ => 122, + 24 => match state { + 6 | 74 => 131, + _ => 123, }, - 24 => 9, - 25 => match state { - 107 => 245, - _ => 195, + 25 => 9, + 26 => match state { + 108 => 248, + _ => 197, }, - 26 => 107, - 27 => 110, - 28 => 112, - 29 => match state { - 103 => 210, - _ => 155, + 27 => 108, + 28 => 111, + 29 => 113, + 30 => match state { + 104 => 213, + _ => 157, }, - 32 => match state { + 33 => match state { 31 => 77, - 75 => 104, - 9 => 142, - 74 => 179, - 102 => 209, + 75 => 105, + 9 => 144, + 74 => 181, + 102 => 211, _ => 75, }, - 33 => match state { + 34 => match state { 40 => 86, 53 => 99, _ => 73, @@ -25539,7 +30657,8 @@ mod __parse__TermAnnotation { r###""a64clz""###, r###""a64rev""###, r###""ashr""###, - r###""assertions""###, + r###""assert""###, + r###""assume""###, r###""bool""###, r###""bv""###, r###""bv2int""###, @@ -25640,7 +30759,7 @@ mod __parse__TermAnnotation { #[inline] fn error_action(&self, state: i16) -> i16 { - __action(state, 69 - 1) + __action(state, 70 - 1) } #[inline] @@ -25767,11 +30886,12 @@ mod __parse__TermAnnotation { Token(66, _) if true => Some(61), Token(67, _) if true => Some(62), Token(68, _) if true => Some(63), - Token(0, _) if true => Some(64), - Token(1, _) if true => Some(65), - Token(2, _) if true => Some(66), - Token(3, _) if true => Some(67), - Token(4, _) if true => Some(68), + Token(69, _) if true => Some(64), + Token(0, _) if true => Some(65), + Token(1, _) if true => Some(66), + Token(2, _) if true => Some(67), + Token(3, _) if true => Some(68), + Token(4, _) if true => Some(69), _ => None, } } @@ -25784,8 +30904,8 @@ mod __parse__TermAnnotation { ) -> __Symbol<'input> { match __token_index { - 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 => match __token { - Token(5, __tok0) | Token(6, __tok0) | Token(7, __tok0) | Token(8, __tok0) | Token(9, __tok0) | Token(10, __tok0) | Token(11, __tok0) | Token(12, __tok0) | Token(13, __tok0) | Token(14, __tok0) | Token(15, __tok0) | Token(16, __tok0) | Token(17, __tok0) | Token(18, __tok0) | Token(19, __tok0) | Token(20, __tok0) | Token(21, __tok0) | Token(22, __tok0) | Token(23, __tok0) | Token(24, __tok0) | Token(25, __tok0) | Token(26, __tok0) | Token(27, __tok0) | Token(28, __tok0) | Token(29, __tok0) | Token(30, __tok0) | Token(31, __tok0) | Token(32, __tok0) | Token(33, __tok0) | Token(34, __tok0) | Token(35, __tok0) | Token(36, __tok0) | Token(37, __tok0) | Token(38, __tok0) | Token(39, __tok0) | Token(40, __tok0) | Token(41, __tok0) | Token(42, __tok0) | Token(43, __tok0) | Token(44, __tok0) | Token(45, __tok0) | Token(46, __tok0) | Token(47, __tok0) | Token(48, __tok0) | Token(49, __tok0) | Token(50, __tok0) | Token(51, __tok0) | Token(52, __tok0) | Token(53, __tok0) | Token(54, __tok0) | Token(55, __tok0) | Token(56, __tok0) | Token(57, __tok0) | Token(58, __tok0) | Token(59, __tok0) | Token(60, __tok0) | Token(61, __tok0) | Token(62, __tok0) | Token(63, __tok0) | Token(64, __tok0) | Token(65, __tok0) | Token(66, __tok0) | Token(67, __tok0) | Token(68, __tok0) | Token(0, __tok0) | Token(1, __tok0) | Token(2, __tok0) | Token(3, __tok0) | Token(4, __tok0) if true => __Symbol::Variant0(__tok0), + 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 => match __token { + Token(5, __tok0) | Token(6, __tok0) | Token(7, __tok0) | Token(8, __tok0) | Token(9, __tok0) | Token(10, __tok0) | Token(11, __tok0) | Token(12, __tok0) | Token(13, __tok0) | Token(14, __tok0) | Token(15, __tok0) | Token(16, __tok0) | Token(17, __tok0) | Token(18, __tok0) | Token(19, __tok0) | Token(20, __tok0) | Token(21, __tok0) | Token(22, __tok0) | Token(23, __tok0) | Token(24, __tok0) | Token(25, __tok0) | Token(26, __tok0) | Token(27, __tok0) | Token(28, __tok0) | Token(29, __tok0) | Token(30, __tok0) | Token(31, __tok0) | Token(32, __tok0) | Token(33, __tok0) | Token(34, __tok0) | Token(35, __tok0) | Token(36, __tok0) | Token(37, __tok0) | Token(38, __tok0) | Token(39, __tok0) | Token(40, __tok0) | Token(41, __tok0) | Token(42, __tok0) | Token(43, __tok0) | Token(44, __tok0) | Token(45, __tok0) | Token(46, __tok0) | Token(47, __tok0) | Token(48, __tok0) | Token(49, __tok0) | Token(50, __tok0) | Token(51, __tok0) | Token(52, __tok0) | Token(53, __tok0) | Token(54, __tok0) | Token(55, __tok0) | Token(56, __tok0) | Token(57, __tok0) | Token(58, __tok0) | Token(59, __tok0) | Token(60, __tok0) | Token(61, __tok0) | Token(62, __tok0) | Token(63, __tok0) | Token(64, __tok0) | Token(65, __tok0) | Token(66, __tok0) | Token(67, __tok0) | Token(68, __tok0) | Token(69, __tok0) | Token(0, __tok0) | Token(1, __tok0) | Token(2, __tok0) | Token(3, __tok0) | Token(4, __tok0) if true => __Symbol::Variant0(__tok0), _ => unreachable!(), }, _ => unreachable!(), @@ -26196,12 +31316,7 @@ mod __parse__TermAnnotation { __reduce119(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } 120 => { - // __TermAnnotation = TermAnnotation => ActionFn(9); - let __sym0 = __pop_Variant20(__symbols); - let __start = __sym0.0.clone(); - let __end = __sym0.2.clone(); - let __nt = super::__action9::<>(input, __sym0); - return Some(Ok(__nt)); + __reduce120(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } 121 => { __reduce121(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) @@ -26210,7 +31325,21 @@ mod __parse__TermAnnotation { __reduce122(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } 123 => { - __reduce123(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + // __TermAnnotation = TermAnnotation => ActionFn(10); + let __sym0 = __pop_Variant20(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action10::<>(input, __sym0); + return Some(Ok(__nt)); + } + 124 => { + __reduce124(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 125 => { + __reduce125(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 126 => { + __reduce126(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } _ => panic!("invalid action code {}", __action) }; @@ -26368,14 +31497,14 @@ mod __parse__TermAnnotation { _ => __symbol_type_mismatch() } } - fn __pop_Variant9< + fn __pop_Variant8< 'input, >( __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, Vec>, usize) { match __symbols.pop() { - Some((__l, __Symbol::Variant9(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant8(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -26434,14 +31563,14 @@ mod __parse__TermAnnotation { _ => __symbol_type_mismatch() } } - fn __pop_Variant8< + fn __pop_Variant9< 'input, >( __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, core::option::Option, usize) { match __symbols.pop() { - Some((__l, __Symbol::Variant8(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant9(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -26509,13 +31638,13 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = BoundVar, "," => ActionFn(98); + // ( ",") = BoundVar, "," => ActionFn(101); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action98::<>(input, __sym0, __sym1); + let __nt = super::__action101::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (2, 0) } @@ -26528,10 +31657,10 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(96); + // ( ",")* = => ActionFn(99); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action96::<>(input, &__start, &__end); + let __nt = super::__action99::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (0, 1) } @@ -26544,11 +31673,11 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(97); + // ( ",")* = ( ",")+ => ActionFn(100); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action97::<>(input, __sym0); + let __nt = super::__action100::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (1, 1) } @@ -26561,13 +31690,13 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = BoundVar, "," => ActionFn(115); + // ( ",")+ = BoundVar, "," => ActionFn(118); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action115::<>(input, __sym0, __sym1); + let __nt = super::__action118::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (2, 2) } @@ -26580,14 +31709,14 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, BoundVar, "," => ActionFn(116); + // ( ",")+ = ( ",")+, BoundVar, "," => ActionFn(119); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant1(__symbols); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action116::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action119::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (3, 2) } @@ -26600,13 +31729,13 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = Expr, "," => ActionFn(108); + // ( ",") = Expr, "," => ActionFn(111); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action108::<>(input, __sym0, __sym1); + let __nt = super::__action111::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); (2, 3) } @@ -26619,10 +31748,10 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(106); + // ( ",")* = => ActionFn(109); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action106::<>(input, &__start, &__end); + let __nt = super::__action109::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (0, 4) } @@ -26635,11 +31764,11 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(107); + // ( ",")* = ( ",")+ => ActionFn(110); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action107::<>(input, __sym0); + let __nt = super::__action110::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 4) } @@ -26652,13 +31781,13 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Expr, "," => ActionFn(119); + // ( ",")+ = Expr, "," => ActionFn(122); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action119::<>(input, __sym0, __sym1); + let __nt = super::__action122::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (2, 5) } @@ -26671,14 +31800,14 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Expr, "," => ActionFn(120); + // ( ",")+ = ( ",")+, Expr, "," => ActionFn(123); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant3(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action120::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action123::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 5) } @@ -26691,13 +31820,13 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = Type, "," => ActionFn(103); + // ( ",") = Type, "," => ActionFn(106); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action103::<>(input, __sym0, __sym1); + let __nt = super::__action106::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (2, 6) } @@ -26710,10 +31839,10 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(101); + // ( ",")* = => ActionFn(104); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action101::<>(input, &__start, &__end); + let __nt = super::__action104::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (0, 7) } @@ -26726,11 +31855,11 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(102); + // ( ",")* = ( ",")+ => ActionFn(105); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action102::<>(input, __sym0); + let __nt = super::__action105::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (1, 7) } @@ -26743,13 +31872,13 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Type, "," => ActionFn(123); + // ( ",")+ = Type, "," => ActionFn(126); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action123::<>(input, __sym0, __sym1); + let __nt = super::__action126::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (2, 8) } @@ -26762,14 +31891,14 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Type, "," => ActionFn(124); + // ( ",")+ = ( ",")+, Type, "," => ActionFn(127); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant5(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action124::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action127::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (3, 8) } @@ -26782,11 +31911,11 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ArgList = Comma => ActionFn(21); + // ArgList = Comma => ActionFn(22); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action21::<>(input, __sym0); + let __nt = super::__action22::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (1, 9) } @@ -26799,14 +31928,14 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Args = "(args", ArgList, ")" => ActionFn(22); + // Args = "(args", ArgList, ")" => ActionFn(23); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant7(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action22::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action23::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (3, 10) } @@ -26819,15 +31948,36 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar = Ident => ActionFn(19); + // AssertBlock = "(", "assert", ExprList, ")" => ActionFn(89); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant8(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action89::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (4, 11) + } + pub(crate) fn __reduce18< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // BoundVar = Ident => ActionFn(20); let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action19::<>(input, __sym0); + let __nt = super::__action20::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); - (1, 11) + (1, 12) } - pub(crate) fn __reduce18< + pub(crate) fn __reduce19< 'input, >( input: &'input str, @@ -26836,18 +31986,18 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar = Ident, ":", Type => ActionFn(20); + // BoundVar = Ident, ":", Type => ActionFn(21); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant5(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action20::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action21::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); - (3, 11) + (3, 12) } - pub(crate) fn __reduce19< + pub(crate) fn __reduce20< 'input, >( input: &'input str, @@ -26856,15 +32006,15 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar? = BoundVar => ActionFn(94); + // BoundVar? = BoundVar => ActionFn(97); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action94::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (1, 12) + let __nt = super::__action97::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (1, 13) } - pub(crate) fn __reduce20< + pub(crate) fn __reduce21< 'input, >( input: &'input str, @@ -26873,14 +32023,14 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar? = => ActionFn(95); + // BoundVar? = => ActionFn(98); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action95::<>(input, &__start, &__end); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (0, 12) + let __nt = super::__action98::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (0, 13) } - pub(crate) fn __reduce21< + pub(crate) fn __reduce22< 'input, >( input: &'input str, @@ -26889,15 +32039,15 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = BoundVar => ActionFn(127); + // Comma = BoundVar => ActionFn(130); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action127::<>(input, __sym0); + let __nt = super::__action130::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (1, 13) + (1, 14) } - pub(crate) fn __reduce22< + pub(crate) fn __reduce23< 'input, >( input: &'input str, @@ -26906,14 +32056,14 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(128); + // Comma = => ActionFn(131); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action128::<>(input, &__start, &__end); + let __nt = super::__action131::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (0, 13) + (0, 14) } - pub(crate) fn __reduce23< + pub(crate) fn __reduce24< 'input, >( input: &'input str, @@ -26922,17 +32072,17 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, BoundVar => ActionFn(129); + // Comma = ( ",")+, BoundVar => ActionFn(132); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant1(__symbols); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action129::<>(input, __sym0, __sym1); + let __nt = super::__action132::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (2, 13) + (2, 14) } - pub(crate) fn __reduce24< + pub(crate) fn __reduce25< 'input, >( input: &'input str, @@ -26941,15 +32091,15 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(130); + // Comma = ( ",")+ => ActionFn(133); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action130::<>(input, __sym0); + let __nt = super::__action133::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (1, 13) + (1, 14) } - pub(crate) fn __reduce25< + pub(crate) fn __reduce26< 'input, >( input: &'input str, @@ -26958,15 +32108,15 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Expr => ActionFn(131); + // Comma = Expr => ActionFn(134); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action131::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 14) + let __nt = super::__action134::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 15) } - pub(crate) fn __reduce26< + pub(crate) fn __reduce27< 'input, >( input: &'input str, @@ -26975,14 +32125,14 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(132); + // Comma = => ActionFn(135); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action132::<>(input, &__start, &__end); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (0, 14) + let __nt = super::__action135::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (0, 15) } - pub(crate) fn __reduce27< + pub(crate) fn __reduce28< 'input, >( input: &'input str, @@ -26991,17 +32141,17 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Expr => ActionFn(133); + // Comma = ( ",")+, Expr => ActionFn(136); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant3(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action133::<>(input, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (2, 14) + let __nt = super::__action136::<>(input, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (2, 15) } - pub(crate) fn __reduce28< + pub(crate) fn __reduce29< 'input, >( input: &'input str, @@ -27010,15 +32160,15 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(134); + // Comma = ( ",")+ => ActionFn(137); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action134::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 14) + let __nt = super::__action137::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 15) } - pub(crate) fn __reduce29< + pub(crate) fn __reduce30< 'input, >( input: &'input str, @@ -27027,15 +32177,15 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Type => ActionFn(135); + // Comma = Type => ActionFn(138); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action135::<>(input, __sym0); + let __nt = super::__action138::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 15) + (1, 16) } - pub(crate) fn __reduce30< + pub(crate) fn __reduce31< 'input, >( input: &'input str, @@ -27044,14 +32194,14 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(136); + // Comma = => ActionFn(139); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action136::<>(input, &__start, &__end); + let __nt = super::__action139::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (0, 15) + (0, 16) } - pub(crate) fn __reduce31< + pub(crate) fn __reduce32< 'input, >( input: &'input str, @@ -27060,17 +32210,17 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Type => ActionFn(137); + // Comma = ( ",")+, Type => ActionFn(140); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant5(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action137::<>(input, __sym0, __sym1); + let __nt = super::__action140::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (2, 15) + (2, 16) } - pub(crate) fn __reduce32< + pub(crate) fn __reduce33< 'input, >( input: &'input str, @@ -27079,15 +32229,15 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(138); + // Comma = ( ",")+ => ActionFn(141); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action138::<>(input, __sym0); + let __nt = super::__action141::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 15) + (1, 16) } - pub(crate) fn __reduce33< + pub(crate) fn __reduce34< 'input, >( input: &'input str, @@ -27096,7 +32246,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Const = Num, UNum, ":", Type => ActionFn(28); + // Const = Num, UNum, ":", Type => ActionFn(29); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant5(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -27104,29 +32254,9 @@ mod __parse__TermAnnotation { let __sym0 = __pop_Variant17(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action28::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action29::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); - (4, 16) - } - pub(crate) fn __reduce34< - 'input, - >( - input: &'input str, - __lookahead_start: Option<&usize>, - __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, - _: core::marker::PhantomData<(&'input ())>, - ) -> (usize, usize) - { - // Expr = "(", Ident, ")" => ActionFn(33); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant16(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0.clone(); - let __end = __sym2.2.clone(); - let __nt = super::__action33::<>(input, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (4, 17) } pub(crate) fn __reduce35< 'input, @@ -27137,16 +32267,16 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", Const, ")" => ActionFn(34); + // Expr = "(", Ident, ")" => ActionFn(34); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant11(__symbols); + let __sym1 = __pop_Variant16(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); let __nt = super::__action34::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (3, 18) } pub(crate) fn __reduce36< 'input, @@ -27157,16 +32287,16 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "true", ")" => ActionFn(35); + // Expr = "(", Const, ")" => ActionFn(35); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant11(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); let __nt = super::__action35::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (3, 18) } pub(crate) fn __reduce37< 'input, @@ -27177,7 +32307,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "false", ")" => ActionFn(36); + // Expr = "(", "true", ")" => ActionFn(36); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); @@ -27186,7 +32316,7 @@ mod __parse__TermAnnotation { let __end = __sym2.2.clone(); let __nt = super::__action36::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (3, 18) } pub(crate) fn __reduce38< 'input, @@ -27197,17 +32327,16 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "!", Expr, ")" => ActionFn(37); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant3(__symbols); + // Expr = "(", "false", ")" => ActionFn(37); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym3.2.clone(); - let __nt = super::__action37::<>(input, __sym0, __sym1, __sym2, __sym3); + let __end = __sym2.2.clone(); + let __nt = super::__action37::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (3, 18) } pub(crate) fn __reduce39< 'input, @@ -27218,18 +32347,17 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "&&", Expr, Expr, ")" => ActionFn(38); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant3(__symbols); + // Expr = "(", "!", Expr, ")" => ActionFn(38); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym4.2.clone(); - let __nt = super::__action38::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __end = __sym3.2.clone(); + let __nt = super::__action38::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (4, 18) } pub(crate) fn __reduce40< 'input, @@ -27240,7 +32368,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "||", Expr, Expr, ")" => ActionFn(39); + // Expr = "(", "&&", Expr, Expr, ")" => ActionFn(39); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -27251,7 +32379,7 @@ mod __parse__TermAnnotation { let __end = __sym4.2.clone(); let __nt = super::__action39::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce41< 'input, @@ -27262,7 +32390,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "=>", Expr, Expr, ")" => ActionFn(40); + // Expr = "(", "||", Expr, Expr, ")" => ActionFn(40); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -27273,7 +32401,7 @@ mod __parse__TermAnnotation { let __end = __sym4.2.clone(); let __nt = super::__action40::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce42< 'input, @@ -27284,7 +32412,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "=", Expr, Expr, ")" => ActionFn(41); + // Expr = "(", "=>", Expr, Expr, ")" => ActionFn(41); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -27295,7 +32423,7 @@ mod __parse__TermAnnotation { let __end = __sym4.2.clone(); let __nt = super::__action41::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce43< 'input, @@ -27306,7 +32434,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "<=", Expr, Expr, ")" => ActionFn(42); + // Expr = "(", "=", Expr, Expr, ")" => ActionFn(42); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -27317,7 +32445,7 @@ mod __parse__TermAnnotation { let __end = __sym4.2.clone(); let __nt = super::__action42::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce44< 'input, @@ -27328,7 +32456,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "<", Expr, Expr, ")" => ActionFn(43); + // Expr = "(", "<=", Expr, Expr, ")" => ActionFn(43); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -27339,7 +32467,7 @@ mod __parse__TermAnnotation { let __end = __sym4.2.clone(); let __nt = super::__action43::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce45< 'input, @@ -27350,7 +32478,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sgt", Expr, Expr, ")" => ActionFn(44); + // Expr = "(", "<", Expr, Expr, ")" => ActionFn(44); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -27361,7 +32489,7 @@ mod __parse__TermAnnotation { let __end = __sym4.2.clone(); let __nt = super::__action44::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce46< 'input, @@ -27372,7 +32500,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sgte", Expr, Expr, ")" => ActionFn(45); + // Expr = "(", "sgt", Expr, Expr, ")" => ActionFn(45); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -27383,7 +32511,7 @@ mod __parse__TermAnnotation { let __end = __sym4.2.clone(); let __nt = super::__action45::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce47< 'input, @@ -27394,7 +32522,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "slt", Expr, Expr, ")" => ActionFn(46); + // Expr = "(", "sgte", Expr, Expr, ")" => ActionFn(46); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -27405,7 +32533,7 @@ mod __parse__TermAnnotation { let __end = __sym4.2.clone(); let __nt = super::__action46::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce48< 'input, @@ -27416,7 +32544,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "slte", Expr, Expr, ")" => ActionFn(47); + // Expr = "(", "slt", Expr, Expr, ")" => ActionFn(47); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -27427,7 +32555,7 @@ mod __parse__TermAnnotation { let __end = __sym4.2.clone(); let __nt = super::__action47::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce49< 'input, @@ -27438,7 +32566,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ugt", Expr, Expr, ")" => ActionFn(48); + // Expr = "(", "slte", Expr, Expr, ")" => ActionFn(48); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -27449,7 +32577,7 @@ mod __parse__TermAnnotation { let __end = __sym4.2.clone(); let __nt = super::__action48::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce50< 'input, @@ -27460,7 +32588,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ugte", Expr, Expr, ")" => ActionFn(49); + // Expr = "(", "ugt", Expr, Expr, ")" => ActionFn(49); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -27471,7 +32599,7 @@ mod __parse__TermAnnotation { let __end = __sym4.2.clone(); let __nt = super::__action49::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce51< 'input, @@ -27482,7 +32610,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ult", Expr, Expr, ")" => ActionFn(50); + // Expr = "(", "ugte", Expr, Expr, ")" => ActionFn(50); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -27493,7 +32621,7 @@ mod __parse__TermAnnotation { let __end = __sym4.2.clone(); let __nt = super::__action50::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce52< 'input, @@ -27504,7 +32632,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ulte", Expr, Expr, ")" => ActionFn(51); + // Expr = "(", "ult", Expr, Expr, ")" => ActionFn(51); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -27515,7 +32643,7 @@ mod __parse__TermAnnotation { let __end = __sym4.2.clone(); let __nt = super::__action51::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce53< 'input, @@ -27526,17 +32654,18 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "-", Expr, ")" => ActionFn(52); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); + // Expr = "(", "ulte", Expr, Expr, ")" => ActionFn(52); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym3.2.clone(); - let __nt = super::__action52::<>(input, __sym0, __sym1, __sym2, __sym3); + let __end = __sym4.2.clone(); + let __nt = super::__action52::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (5, 18) } pub(crate) fn __reduce54< 'input, @@ -27547,7 +32676,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "~", Expr, ")" => ActionFn(53); + // Expr = "(", "-", Expr, ")" => ActionFn(53); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -27557,7 +32686,7 @@ mod __parse__TermAnnotation { let __end = __sym3.2.clone(); let __nt = super::__action53::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } pub(crate) fn __reduce55< 'input, @@ -27568,7 +32697,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "clz", Expr, ")" => ActionFn(54); + // Expr = "(", "~", Expr, ")" => ActionFn(54); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -27578,7 +32707,7 @@ mod __parse__TermAnnotation { let __end = __sym3.2.clone(); let __nt = super::__action54::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } pub(crate) fn __reduce56< 'input, @@ -27589,7 +32718,28 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "a64clz", Expr, Expr, ")" => ActionFn(55); + // Expr = "(", "clz", Expr, ")" => ActionFn(55); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action55::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (4, 18) + } + pub(crate) fn __reduce57< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "a64clz", Expr, Expr, ")" => ActionFn(56); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -27598,11 +32748,11 @@ mod __parse__TermAnnotation { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action55::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action56::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce57< + pub(crate) fn __reduce58< 'input, >( input: &'input str, @@ -27611,7 +32761,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "cls", Expr, ")" => ActionFn(56); + // Expr = "(", "cls", Expr, ")" => ActionFn(57); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -27619,11 +32769,11 @@ mod __parse__TermAnnotation { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action56::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action57::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce58< + pub(crate) fn __reduce59< 'input, >( input: &'input str, @@ -27632,7 +32782,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "a64cls", Expr, Expr, ")" => ActionFn(57); + // Expr = "(", "a64cls", Expr, Expr, ")" => ActionFn(58); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -27641,11 +32791,11 @@ mod __parse__TermAnnotation { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action57::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action58::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce59< + pub(crate) fn __reduce60< 'input, >( input: &'input str, @@ -27654,7 +32804,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "rev", Expr, ")" => ActionFn(58); + // Expr = "(", "rev", Expr, ")" => ActionFn(59); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -27662,11 +32812,11 @@ mod __parse__TermAnnotation { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action58::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action59::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce60< + pub(crate) fn __reduce61< 'input, >( input: &'input str, @@ -27675,7 +32825,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "a64rev", Expr, Expr, ")" => ActionFn(59); + // Expr = "(", "a64rev", Expr, Expr, ")" => ActionFn(60); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -27684,11 +32834,11 @@ mod __parse__TermAnnotation { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action59::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action60::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce61< + pub(crate) fn __reduce62< 'input, >( input: &'input str, @@ -27697,7 +32847,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "subs", Expr, Expr, Expr, ")" => ActionFn(60); + // Expr = "(", "subs", Expr, Expr, Expr, ")" => ActionFn(61); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant3(__symbols); @@ -27707,31 +32857,9 @@ mod __parse__TermAnnotation { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym5.2.clone(); - let __nt = super::__action60::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action61::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (6, 17) - } - pub(crate) fn __reduce62< - 'input, - >( - input: &'input str, - __lookahead_start: Option<&usize>, - __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, - _: core::marker::PhantomData<(&'input ())>, - ) -> (usize, usize) - { - // Expr = "(", "*", Expr, Expr, ")" => ActionFn(61); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant3(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0.clone(); - let __end = __sym4.2.clone(); - let __nt = super::__action61::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); - __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (6, 18) } pub(crate) fn __reduce63< 'input, @@ -27742,7 +32870,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "/", Expr, Expr, ")" => ActionFn(62); + // Expr = "(", "*", Expr, Expr, ")" => ActionFn(62); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -27753,7 +32881,7 @@ mod __parse__TermAnnotation { let __end = __sym4.2.clone(); let __nt = super::__action62::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce64< 'input, @@ -27764,7 +32892,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sdiv", Expr, Expr, ")" => ActionFn(63); + // Expr = "(", "/", Expr, Expr, ")" => ActionFn(63); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -27775,7 +32903,7 @@ mod __parse__TermAnnotation { let __end = __sym4.2.clone(); let __nt = super::__action63::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce65< 'input, @@ -27786,7 +32914,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "+", Expr, Expr, ")" => ActionFn(64); + // Expr = "(", "sdiv", Expr, Expr, ")" => ActionFn(64); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -27797,7 +32925,7 @@ mod __parse__TermAnnotation { let __end = __sym4.2.clone(); let __nt = super::__action64::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce66< 'input, @@ -27808,7 +32936,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "-", Expr, Expr, ")" => ActionFn(65); + // Expr = "(", "+", Expr, Expr, ")" => ActionFn(65); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -27819,7 +32947,7 @@ mod __parse__TermAnnotation { let __end = __sym4.2.clone(); let __nt = super::__action65::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce67< 'input, @@ -27830,7 +32958,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "urem", Expr, Expr, ")" => ActionFn(66); + // Expr = "(", "-", Expr, Expr, ")" => ActionFn(66); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -27841,7 +32969,7 @@ mod __parse__TermAnnotation { let __end = __sym4.2.clone(); let __nt = super::__action66::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce68< 'input, @@ -27852,7 +32980,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "srem", Expr, Expr, ")" => ActionFn(67); + // Expr = "(", "urem", Expr, Expr, ")" => ActionFn(67); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -27863,7 +32991,7 @@ mod __parse__TermAnnotation { let __end = __sym4.2.clone(); let __nt = super::__action67::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce69< 'input, @@ -27874,7 +33002,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "&", Expr, Expr, ")" => ActionFn(68); + // Expr = "(", "srem", Expr, Expr, ")" => ActionFn(68); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -27885,7 +33013,7 @@ mod __parse__TermAnnotation { let __end = __sym4.2.clone(); let __nt = super::__action68::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce70< 'input, @@ -27896,7 +33024,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "|", Expr, Expr, ")" => ActionFn(69); + // Expr = "(", "&", Expr, Expr, ")" => ActionFn(69); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -27907,7 +33035,7 @@ mod __parse__TermAnnotation { let __end = __sym4.2.clone(); let __nt = super::__action69::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce71< 'input, @@ -27918,7 +33046,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "xor", Expr, Expr, ")" => ActionFn(70); + // Expr = "(", "|", Expr, Expr, ")" => ActionFn(70); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -27929,7 +33057,7 @@ mod __parse__TermAnnotation { let __end = __sym4.2.clone(); let __nt = super::__action70::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce72< 'input, @@ -27940,7 +33068,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "rotl", Expr, Expr, ")" => ActionFn(71); + // Expr = "(", "xor", Expr, Expr, ")" => ActionFn(71); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -27951,7 +33079,7 @@ mod __parse__TermAnnotation { let __end = __sym4.2.clone(); let __nt = super::__action71::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce73< 'input, @@ -27962,7 +33090,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "rotr", Expr, Expr, ")" => ActionFn(72); + // Expr = "(", "rotl", Expr, Expr, ")" => ActionFn(72); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -27973,7 +33101,7 @@ mod __parse__TermAnnotation { let __end = __sym4.2.clone(); let __nt = super::__action72::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce74< 'input, @@ -27984,7 +33112,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "shl", Expr, Expr, ")" => ActionFn(73); + // Expr = "(", "rotr", Expr, Expr, ")" => ActionFn(73); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -27995,7 +33123,7 @@ mod __parse__TermAnnotation { let __end = __sym4.2.clone(); let __nt = super::__action73::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce75< 'input, @@ -28006,7 +33134,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "shr", Expr, Expr, ")" => ActionFn(74); + // Expr = "(", "shl", Expr, Expr, ")" => ActionFn(74); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -28017,7 +33145,7 @@ mod __parse__TermAnnotation { let __end = __sym4.2.clone(); let __nt = super::__action74::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce76< 'input, @@ -28028,7 +33156,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ashr", Expr, Expr, ")" => ActionFn(75); + // Expr = "(", "shr", Expr, Expr, ")" => ActionFn(75); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -28039,7 +33167,7 @@ mod __parse__TermAnnotation { let __end = __sym4.2.clone(); let __nt = super::__action75::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce77< 'input, @@ -28050,18 +33178,18 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "zero_ext", Width, Expr, ")" => ActionFn(76); + // Expr = "(", "ashr", Expr, Expr, ")" => ActionFn(76); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant24(__symbols); + let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action76::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce78< 'input, @@ -28072,18 +33200,18 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "zero_ext", Expr, Expr, ")" => ActionFn(77); + // Expr = "(", "zero_ext", Width, Expr, ")" => ActionFn(77); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant24(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action77::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce79< 'input, @@ -28094,18 +33222,18 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sign_ext", Width, Expr, ")" => ActionFn(78); + // Expr = "(", "zero_ext", Expr, Expr, ")" => ActionFn(78); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant24(__symbols); + let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action78::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce80< 'input, @@ -28116,18 +33244,18 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sign_ext", Expr, Expr, ")" => ActionFn(79); + // Expr = "(", "sign_ext", Width, Expr, ")" => ActionFn(79); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant24(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action79::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce81< 'input, @@ -28138,7 +33266,29 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "extract", UNum, UNum, Expr, ")" => ActionFn(80); + // Expr = "(", "sign_ext", Expr, Expr, ")" => ActionFn(80); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action80::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce82< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "extract", UNum, UNum, Expr, ")" => ActionFn(81); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant3(__symbols); @@ -28148,11 +33298,11 @@ mod __parse__TermAnnotation { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym5.2.clone(); - let __nt = super::__action80::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action81::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (6, 17) + (6, 18) } - pub(crate) fn __reduce82< + pub(crate) fn __reduce83< 'input, >( input: &'input str, @@ -28161,7 +33311,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "conv_to", Width, Expr, ")" => ActionFn(81); + // Expr = "(", "conv_to", Width, Expr, ")" => ActionFn(82); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -28170,11 +33320,11 @@ mod __parse__TermAnnotation { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action81::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action82::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce83< + pub(crate) fn __reduce84< 'input, >( input: &'input str, @@ -28183,7 +33333,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "conv_to", Expr, Expr, ")" => ActionFn(82); + // Expr = "(", "conv_to", Expr, Expr, ")" => ActionFn(83); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -28192,11 +33342,11 @@ mod __parse__TermAnnotation { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action82::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action83::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce84< + pub(crate) fn __reduce85< 'input, >( input: &'input str, @@ -28205,7 +33355,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "if", Expr, Expr, Expr, ")" => ActionFn(83); + // Expr = "(", "if", Expr, Expr, Expr, ")" => ActionFn(84); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant3(__symbols); @@ -28215,11 +33365,11 @@ mod __parse__TermAnnotation { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym5.2.clone(); - let __nt = super::__action83::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action84::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (6, 17) + (6, 18) } - pub(crate) fn __reduce85< + pub(crate) fn __reduce86< 'input, >( input: &'input str, @@ -28228,7 +33378,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "switch", Expr, Pair+, ")" => ActionFn(84); + // Expr = "(", "switch", Expr, Pair+, ")" => ActionFn(85); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant19(__symbols); @@ -28237,11 +33387,11 @@ mod __parse__TermAnnotation { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action84::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action85::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce86< + pub(crate) fn __reduce87< 'input, >( input: &'input str, @@ -28250,7 +33400,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "int2bv", UNum, Expr, ")" => ActionFn(85); + // Expr = "(", "int2bv", UNum, Expr, ")" => ActionFn(86); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -28259,11 +33409,11 @@ mod __parse__TermAnnotation { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action85::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action86::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce87< + pub(crate) fn __reduce88< 'input, >( input: &'input str, @@ -28272,7 +33422,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "bv2int", Expr, ")" => ActionFn(86); + // Expr = "(", "bv2int", Expr, ")" => ActionFn(87); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -28280,11 +33430,11 @@ mod __parse__TermAnnotation { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action86::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action87::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce88< + pub(crate) fn __reduce89< 'input, >( input: &'input str, @@ -28293,7 +33443,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "widthof", Expr, ")" => ActionFn(87); + // Expr = "(", "widthof", Expr, ")" => ActionFn(88); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -28301,11 +33451,11 @@ mod __parse__TermAnnotation { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action87::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action88::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce89< + pub(crate) fn __reduce90< 'input, >( input: &'input str, @@ -28314,15 +33464,15 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr? = Expr => ActionFn(104); + // Expr? = Expr => ActionFn(107); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action104::<>(input, __sym0); + let __nt = super::__action107::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (1, 18) + (1, 19) } - pub(crate) fn __reduce90< + pub(crate) fn __reduce91< 'input, >( input: &'input str, @@ -28331,14 +33481,14 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr? = => ActionFn(105); + // Expr? = => ActionFn(108); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action105::<>(input, &__start, &__end); + let __nt = super::__action108::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (0, 18) + (0, 19) } - pub(crate) fn __reduce91< + pub(crate) fn __reduce92< 'input, >( input: &'input str, @@ -28347,15 +33497,15 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprList = Comma => ActionFn(24); - let __sym0 = __pop_Variant9(__symbols); + // ExprList = Comma => ActionFn(25); + let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action24::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 19) + let __nt = super::__action25::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 20) } - pub(crate) fn __reduce92< + pub(crate) fn __reduce93< 'input, >( input: &'input str, @@ -28364,7 +33514,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Function = Ident, "(", ArgList, ")", "(", Type, ")", "{", Expr, "}" => ActionFn(29); + // Function = Ident, "(", ArgList, ")", "(", Type, ")", "{", Expr, "}" => ActionFn(30); assert!(__symbols.len() >= 10); let __sym9 = __pop_Variant0(__symbols); let __sym8 = __pop_Variant3(__symbols); @@ -28378,11 +33528,11 @@ mod __parse__TermAnnotation { let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0.clone(); let __end = __sym9.2.clone(); - let __nt = super::__action29::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); + let __nt = super::__action30::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); - (10, 20) + (10, 21) } - pub(crate) fn __reduce93< + pub(crate) fn __reduce94< 'input, >( input: &'input str, @@ -28391,19 +33541,19 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // FunctionApplication = Expr, "(", ExprList, ")" => ActionFn(30); + // FunctionApplication = Expr, "(", ExprList, ")" => ActionFn(31); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant9(__symbols); + let __sym2 = __pop_Variant8(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action30::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action31::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (4, 21) + (4, 22) } - pub(crate) fn __reduce94< + pub(crate) fn __reduce95< 'input, >( input: &'input str, @@ -28412,7 +33562,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // FunctionType = "func", "(", TypeList, ")", "(", Type, ")" => ActionFn(27); + // FunctionType = "func", "(", TypeList, ")", "(", Type, ")" => ActionFn(28); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant5(__symbols); @@ -28423,11 +33573,11 @@ mod __parse__TermAnnotation { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym6.2.clone(); - let __nt = super::__action27::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action28::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (7, 22) + (7, 23) } - pub(crate) fn __reduce95< + pub(crate) fn __reduce96< 'input, >( input: &'input str, @@ -28436,15 +33586,15 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"[A-Za-z]"# => ActionFn(12); + // Ident = r#"[A-Za-z]"# => ActionFn(13); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action12::<>(input, __sym0); + let __nt = super::__action13::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 23) + (1, 24) } - pub(crate) fn __reduce96< + pub(crate) fn __reduce97< 'input, >( input: &'input str, @@ -28453,15 +33603,15 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"[A-Zac-z][\\.\\w]+"# => ActionFn(13); + // Ident = r#"[A-Zac-z][\\.\\w]+"# => ActionFn(14); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action13::<>(input, __sym0); + let __nt = super::__action14::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 23) + (1, 24) } - pub(crate) fn __reduce97< + pub(crate) fn __reduce98< 'input, >( input: &'input str, @@ -28470,15 +33620,15 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"b[\\w&&[^v]][\\.\\w]*"# => ActionFn(14); + // Ident = r#"b[\\w&&[^v]][\\.\\w]*"# => ActionFn(15); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action14::<>(input, __sym0); + let __nt = super::__action15::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 23) + (1, 24) } - pub(crate) fn __reduce98< + pub(crate) fn __reduce99< 'input, >( input: &'input str, @@ -28487,15 +33637,15 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Num = r#"-?[0-9]+i"# => ActionFn(11); + // Num = r#"-?[0-9]+i"# => ActionFn(12); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action11::<>(input, __sym0); + let __nt = super::__action12::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant17(__nt), __end)); - (1, 24) + (1, 25) } - pub(crate) fn __reduce99< + pub(crate) fn __reduce100< 'input, >( input: &'input str, @@ -28504,7 +33654,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Pair = "(", Expr, Expr, ")" => ActionFn(25); + // Pair = "(", Expr, Expr, ")" => ActionFn(26); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -28512,11 +33662,11 @@ mod __parse__TermAnnotation { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action25::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action26::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant18(__nt), __end)); - (4, 25) + (4, 26) } - pub(crate) fn __reduce100< + pub(crate) fn __reduce101< 'input, >( input: &'input str, @@ -28525,15 +33675,15 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Pair+ = Pair => ActionFn(89); + // Pair+ = Pair => ActionFn(92); let __sym0 = __pop_Variant18(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action89::<>(input, __sym0); + let __nt = super::__action92::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant19(__nt), __end)); - (1, 26) + (1, 27) } - pub(crate) fn __reduce101< + pub(crate) fn __reduce102< 'input, >( input: &'input str, @@ -28542,17 +33692,46 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Pair+ = Pair+, Pair => ActionFn(90); + // Pair+ = Pair+, Pair => ActionFn(93); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant18(__symbols); let __sym0 = __pop_Variant19(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action90::<>(input, __sym0, __sym1); + let __nt = super::__action93::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant19(__nt), __end)); - (2, 26) + (2, 27) } - pub(crate) fn __reduce102< + pub(crate) fn __reduce103< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // TermAnnotation = "(", "spec", TermSignature, "(", "assume", ExprList, ")", "(", "assert", ExprList, ")", ")" => ActionFn(90); + assert!(__symbols.len() >= 12); + let __sym11 = __pop_Variant0(__symbols); + let __sym10 = __pop_Variant0(__symbols); + let __sym9 = __pop_Variant8(__symbols); + let __sym8 = __pop_Variant0(__symbols); + let __sym7 = __pop_Variant0(__symbols); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant8(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant21(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym11.2.clone(); + let __nt = super::__action90::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9, __sym10, __sym11); + __symbols.push((__start, __Symbol::Variant20(__nt), __end)); + (12, 28) + } + pub(crate) fn __reduce104< 'input, >( input: &'input str, @@ -28561,11 +33740,11 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // TermAnnotation = "(", "spec", TermSignature, "(", "assertions", ExprList, ")", ")" => ActionFn(88); + // TermAnnotation = "(", "spec", TermSignature, "(", "assume", ExprList, ")", ")" => ActionFn(91); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant9(__symbols); + let __sym5 = __pop_Variant8(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant21(__symbols); @@ -28573,11 +33752,11 @@ mod __parse__TermAnnotation { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym7.2.clone(); - let __nt = super::__action88::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); + let __nt = super::__action91::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant20(__nt), __end)); - (8, 27) + (8, 28) } - pub(crate) fn __reduce103< + pub(crate) fn __reduce105< 'input, >( input: &'input str, @@ -28586,7 +33765,7 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // TermSignature = "(", "sig", Args, "(", BoundVar, ")", ")" => ActionFn(26); + // TermSignature = "(", "sig", Args, "(", BoundVar, ")", ")" => ActionFn(27); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -28597,11 +33776,11 @@ mod __parse__TermAnnotation { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym6.2.clone(); - let __nt = super::__action26::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action27::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant21(__nt), __end)); - (7, 28) + (7, 29) } - pub(crate) fn __reduce104< + pub(crate) fn __reduce106< 'input, >( input: &'input str, @@ -28610,15 +33789,15 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "bv" => ActionFn(15); + // Type = "bv" => ActionFn(16); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action15::<>(input, __sym0); + let __nt = super::__action16::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 29) + (1, 30) } - pub(crate) fn __reduce105< + pub(crate) fn __reduce107< 'input, >( input: &'input str, @@ -28627,17 +33806,17 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "bv", UNum => ActionFn(16); + // Type = "bv", UNum => ActionFn(17); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant23(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action16::<>(input, __sym0, __sym1); + let __nt = super::__action17::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (2, 29) + (2, 30) } - pub(crate) fn __reduce106< + pub(crate) fn __reduce108< 'input, >( input: &'input str, @@ -28646,15 +33825,15 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "isleType" => ActionFn(17); + // Type = "isleType" => ActionFn(18); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action17::<>(input, __sym0); + let __nt = super::__action18::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 29) + (1, 30) } - pub(crate) fn __reduce107< + pub(crate) fn __reduce109< 'input, >( input: &'input str, @@ -28663,15 +33842,15 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "bool" => ActionFn(18); + // Type = "bool" => ActionFn(19); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action18::<>(input, __sym0); + let __nt = super::__action19::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 29) + (1, 30) } - pub(crate) fn __reduce108< + pub(crate) fn __reduce110< 'input, >( input: &'input str, @@ -28680,15 +33859,15 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type? = Type => ActionFn(99); + // Type? = Type => ActionFn(102); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action99::<>(input, __sym0); + let __nt = super::__action102::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant22(__nt), __end)); - (1, 30) + (1, 31) } - pub(crate) fn __reduce109< + pub(crate) fn __reduce111< 'input, >( input: &'input str, @@ -28697,14 +33876,14 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type? = => ActionFn(100); + // Type? = => ActionFn(103); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action100::<>(input, &__start, &__end); + let __nt = super::__action103::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant22(__nt), __end)); - (0, 30) + (0, 31) } - pub(crate) fn __reduce110< + pub(crate) fn __reduce112< 'input, >( input: &'input str, @@ -28713,15 +33892,15 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // TypeList = Comma => ActionFn(23); + // TypeList = Comma => ActionFn(24); let __sym0 = __pop_Variant10(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action23::<>(input, __sym0); + let __nt = super::__action24::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 31) + (1, 32) } - pub(crate) fn __reduce111< + pub(crate) fn __reduce113< 'input, >( input: &'input str, @@ -28730,15 +33909,15 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // UNum = r#"[0-9]+"# => ActionFn(10); + // UNum = r#"[0-9]+"# => ActionFn(11); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action10::<>(input, __sym0); + let __nt = super::__action11::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant23(__nt), __end)); - (1, 32) + (1, 33) } - pub(crate) fn __reduce112< + pub(crate) fn __reduce114< 'input, >( input: &'input str, @@ -28747,18 +33926,18 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Width = "(", "regwidth", ")" => ActionFn(31); + // Width = "(", "regwidth", ")" => ActionFn(32); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action31::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action32::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (3, 33) + (3, 34) } - pub(crate) fn __reduce113< + pub(crate) fn __reduce115< 'input, >( input: &'input str, @@ -28767,18 +33946,35 @@ mod __parse__TermAnnotation { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Width = "(", UNum, ")" => ActionFn(32); + // Width = "(", UNum, ")" => ActionFn(33); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant23(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action32::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action33::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (3, 33) + (3, 34) } - pub(crate) fn __reduce114< + pub(crate) fn __reduce116< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // __AssertBlock = AssertBlock => ActionFn(9); + let __sym0 = __pop_Variant8(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action9::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 35) + } + pub(crate) fn __reduce117< 'input, >( input: &'input str, @@ -28793,9 +33989,9 @@ mod __parse__TermAnnotation { let __end = __sym0.2.clone(); let __nt = super::__action1::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); - (1, 34) + (1, 36) } - pub(crate) fn __reduce115< + pub(crate) fn __reduce118< 'input, >( input: &'input str, @@ -28810,9 +34006,9 @@ mod __parse__TermAnnotation { let __end = __sym0.2.clone(); let __nt = super::__action4::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); - (1, 35) + (1, 37) } - pub(crate) fn __reduce116< + pub(crate) fn __reduce119< 'input, >( input: &'input str, @@ -28827,9 +34023,9 @@ mod __parse__TermAnnotation { let __end = __sym0.2.clone(); let __nt = super::__action8::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (1, 36) + (1, 38) } - pub(crate) fn __reduce117< + pub(crate) fn __reduce120< 'input, >( input: &'input str, @@ -28844,9 +34040,9 @@ mod __parse__TermAnnotation { let __end = __sym0.2.clone(); let __nt = super::__action5::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); - (1, 37) + (1, 39) } - pub(crate) fn __reduce118< + pub(crate) fn __reduce121< 'input, >( input: &'input str, @@ -28861,9 +34057,9 @@ mod __parse__TermAnnotation { let __end = __sym0.2.clone(); let __nt = super::__action6::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 38) + (1, 40) } - pub(crate) fn __reduce119< + pub(crate) fn __reduce122< 'input, >( input: &'input str, @@ -28878,9 +34074,9 @@ mod __parse__TermAnnotation { let __end = __sym0.2.clone(); let __nt = super::__action3::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 39) + (1, 41) } - pub(crate) fn __reduce121< + pub(crate) fn __reduce124< 'input, >( input: &'input str, @@ -28895,9 +34091,9 @@ mod __parse__TermAnnotation { let __end = __sym0.2.clone(); let __nt = super::__action2::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant21(__nt), __end)); - (1, 41) + (1, 43) } - pub(crate) fn __reduce122< + pub(crate) fn __reduce125< 'input, >( input: &'input str, @@ -28912,9 +34108,9 @@ mod __parse__TermAnnotation { let __end = __sym0.2.clone(); let __nt = super::__action0::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 42) + (1, 44) } - pub(crate) fn __reduce123< + pub(crate) fn __reduce126< 'input, >( input: &'input str, @@ -28929,7 +34125,7 @@ mod __parse__TermAnnotation { let __end = __sym0.2.clone(); let __nt = super::__action7::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (1, 43) + (1, 45) } } pub use self::__parse__TermAnnotation::TermAnnotationParser; @@ -28959,8 +34155,8 @@ mod __parse__TermSignature { Variant5(Type), Variant6(alloc::vec::Vec), Variant7(Vec), - Variant8(core::option::Option), - Variant9(Vec>), + Variant8(Vec>), + Variant9(core::option::Option), Variant10(Vec), Variant11(Const), Variant12(core::option::Option>), @@ -28979,66 +34175,66 @@ mod __parse__TermSignature { } const __ACTION: &[i8] = &[ // State 0 - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1 - 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 2 - 0, 0, 0, 0, 0, -23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 16, 17, + 0, 0, 0, 0, 0, -24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 16, 17, // State 3 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 16, 17, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 16, 17, // State 4 - 0, 0, 0, 0, 0, -25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 16, 17, + 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 16, 17, // State 5 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 6 - 0, 0, 0, 0, 0, -105, 0, 0, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + 0, 0, 0, 0, 0, -107, 0, 0, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, // State 7 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 8 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 9 - 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 10 - 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 11 - 0, 0, 0, 0, 0, -22, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -23, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 12 - 0, 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 13 - 0, 0, 0, 0, 0, -18, 0, 0, -18, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -19, 0, 0, -19, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 14 - 0, 0, 0, 0, 0, -96, 0, 0, -96, 0, 0, -96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -97, 0, 0, -97, 0, 0, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 15 - 0, 0, 0, 0, 0, -97, 0, 0, -97, 0, 0, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -98, 0, 0, -98, 0, 0, -98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 16 - 0, 0, 0, 0, 0, -98, 0, 0, -98, 0, 0, -98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -99, 0, 0, -99, 0, 0, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 17 - 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 18 - 0, 0, 0, 0, 0, -24, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -25, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 19 - 0, 0, 0, -17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 20 - 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, -4, -4, + 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, -4, -4, // State 21 - 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 22 - 0, 0, 0, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -5, -5, -5, + 0, 0, 0, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -5, -5, -5, // State 23 - 0, 0, 0, 0, 0, -19, 0, 0, -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -20, 0, 0, -20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 24 - 0, 0, 0, 0, 0, -108, 0, 0, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -110, 0, 0, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 25 - 0, 0, 0, 0, 0, -107, 0, 0, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -109, 0, 0, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 26 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 27 - 0, 0, 0, 0, 0, -106, 0, 0, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -108, 0, 0, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 28 - 0, 0, 0, 0, 0, -112, 0, 0, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -114, 0, 0, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]; fn __action(state: i8, integer: usize) -> i8 { - __ACTION[(state as usize) * 69 + integer] + __ACTION[(state as usize) * 70 + integer] } const __EOF_ACTION: &[i8] = &[ // State 0 @@ -29056,7 +34252,7 @@ mod __parse__TermSignature { // State 6 0, // State 7 - -122, + -125, // State 8 0, // State 9 @@ -29094,7 +34290,7 @@ mod __parse__TermSignature { // State 25 0, // State 26 - -104, + -106, // State 27 0, // State 28 @@ -29105,16 +34301,16 @@ mod __parse__TermSignature { 2 => 4, 9 => 10, 10 => 9, - 11 => match state { + 12 => match state { 3 => 17, 4 => 18, _ => 11, }, - 13 => 12, - 23 => 13, - 28 => 7, - 29 => 23, - 32 => 27, + 14 => 12, + 24 => 13, + 29 => 7, + 30 => 23, + 33 => 27, _ => 0, } } @@ -29140,7 +34336,8 @@ mod __parse__TermSignature { r###""a64clz""###, r###""a64rev""###, r###""ashr""###, - r###""assertions""###, + r###""assert""###, + r###""assume""###, r###""bool""###, r###""bv""###, r###""bv2int""###, @@ -29241,7 +34438,7 @@ mod __parse__TermSignature { #[inline] fn error_action(&self, state: i8) -> i8 { - __action(state, 69 - 1) + __action(state, 70 - 1) } #[inline] @@ -29368,11 +34565,12 @@ mod __parse__TermSignature { Token(66, _) if true => Some(61), Token(67, _) if true => Some(62), Token(68, _) if true => Some(63), - Token(0, _) if true => Some(64), - Token(1, _) if true => Some(65), - Token(2, _) if true => Some(66), - Token(3, _) if true => Some(67), - Token(4, _) if true => Some(68), + Token(69, _) if true => Some(64), + Token(0, _) if true => Some(65), + Token(1, _) if true => Some(66), + Token(2, _) if true => Some(67), + Token(3, _) if true => Some(68), + Token(4, _) if true => Some(69), _ => None, } } @@ -29385,8 +34583,8 @@ mod __parse__TermSignature { ) -> __Symbol<'input> { match __token_index { - 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 => match __token { - Token(5, __tok0) | Token(6, __tok0) | Token(7, __tok0) | Token(8, __tok0) | Token(9, __tok0) | Token(10, __tok0) | Token(11, __tok0) | Token(12, __tok0) | Token(13, __tok0) | Token(14, __tok0) | Token(15, __tok0) | Token(16, __tok0) | Token(17, __tok0) | Token(18, __tok0) | Token(19, __tok0) | Token(20, __tok0) | Token(21, __tok0) | Token(22, __tok0) | Token(23, __tok0) | Token(24, __tok0) | Token(25, __tok0) | Token(26, __tok0) | Token(27, __tok0) | Token(28, __tok0) | Token(29, __tok0) | Token(30, __tok0) | Token(31, __tok0) | Token(32, __tok0) | Token(33, __tok0) | Token(34, __tok0) | Token(35, __tok0) | Token(36, __tok0) | Token(37, __tok0) | Token(38, __tok0) | Token(39, __tok0) | Token(40, __tok0) | Token(41, __tok0) | Token(42, __tok0) | Token(43, __tok0) | Token(44, __tok0) | Token(45, __tok0) | Token(46, __tok0) | Token(47, __tok0) | Token(48, __tok0) | Token(49, __tok0) | Token(50, __tok0) | Token(51, __tok0) | Token(52, __tok0) | Token(53, __tok0) | Token(54, __tok0) | Token(55, __tok0) | Token(56, __tok0) | Token(57, __tok0) | Token(58, __tok0) | Token(59, __tok0) | Token(60, __tok0) | Token(61, __tok0) | Token(62, __tok0) | Token(63, __tok0) | Token(64, __tok0) | Token(65, __tok0) | Token(66, __tok0) | Token(67, __tok0) | Token(68, __tok0) | Token(0, __tok0) | Token(1, __tok0) | Token(2, __tok0) | Token(3, __tok0) | Token(4, __tok0) if true => __Symbol::Variant0(__tok0), + 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 => match __token { + Token(5, __tok0) | Token(6, __tok0) | Token(7, __tok0) | Token(8, __tok0) | Token(9, __tok0) | Token(10, __tok0) | Token(11, __tok0) | Token(12, __tok0) | Token(13, __tok0) | Token(14, __tok0) | Token(15, __tok0) | Token(16, __tok0) | Token(17, __tok0) | Token(18, __tok0) | Token(19, __tok0) | Token(20, __tok0) | Token(21, __tok0) | Token(22, __tok0) | Token(23, __tok0) | Token(24, __tok0) | Token(25, __tok0) | Token(26, __tok0) | Token(27, __tok0) | Token(28, __tok0) | Token(29, __tok0) | Token(30, __tok0) | Token(31, __tok0) | Token(32, __tok0) | Token(33, __tok0) | Token(34, __tok0) | Token(35, __tok0) | Token(36, __tok0) | Token(37, __tok0) | Token(38, __tok0) | Token(39, __tok0) | Token(40, __tok0) | Token(41, __tok0) | Token(42, __tok0) | Token(43, __tok0) | Token(44, __tok0) | Token(45, __tok0) | Token(46, __tok0) | Token(47, __tok0) | Token(48, __tok0) | Token(49, __tok0) | Token(50, __tok0) | Token(51, __tok0) | Token(52, __tok0) | Token(53, __tok0) | Token(54, __tok0) | Token(55, __tok0) | Token(56, __tok0) | Token(57, __tok0) | Token(58, __tok0) | Token(59, __tok0) | Token(60, __tok0) | Token(61, __tok0) | Token(62, __tok0) | Token(63, __tok0) | Token(64, __tok0) | Token(65, __tok0) | Token(66, __tok0) | Token(67, __tok0) | Token(68, __tok0) | Token(69, __tok0) | Token(0, __tok0) | Token(1, __tok0) | Token(2, __tok0) | Token(3, __tok0) | Token(4, __tok0) if true => __Symbol::Variant0(__tok0), _ => unreachable!(), }, _ => unreachable!(), @@ -29800,6 +34998,15 @@ mod __parse__TermSignature { __reduce120(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } 121 => { + __reduce121(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 122 => { + __reduce122(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 123 => { + __reduce123(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 124 => { // __TermSignature = TermSignature => ActionFn(2); let __sym0 = __pop_Variant21(__symbols); let __start = __sym0.0.clone(); @@ -29807,11 +35014,11 @@ mod __parse__TermSignature { let __nt = super::__action2::<>(input, __sym0); return Some(Ok(__nt)); } - 122 => { - __reduce122(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + 125 => { + __reduce125(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } - 123 => { - __reduce123(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + 126 => { + __reduce126(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } _ => panic!("invalid action code {}", __action) }; @@ -29969,14 +35176,14 @@ mod __parse__TermSignature { _ => __symbol_type_mismatch() } } - fn __pop_Variant9< + fn __pop_Variant8< 'input, >( __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, Vec>, usize) { match __symbols.pop() { - Some((__l, __Symbol::Variant9(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant8(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -30035,14 +35242,14 @@ mod __parse__TermSignature { _ => __symbol_type_mismatch() } } - fn __pop_Variant8< + fn __pop_Variant9< 'input, >( __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, core::option::Option, usize) { match __symbols.pop() { - Some((__l, __Symbol::Variant8(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant9(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -30110,13 +35317,13 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = BoundVar, "," => ActionFn(98); + // ( ",") = BoundVar, "," => ActionFn(101); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action98::<>(input, __sym0, __sym1); + let __nt = super::__action101::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (2, 0) } @@ -30129,10 +35336,10 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(96); + // ( ",")* = => ActionFn(99); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action96::<>(input, &__start, &__end); + let __nt = super::__action99::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (0, 1) } @@ -30145,11 +35352,11 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(97); + // ( ",")* = ( ",")+ => ActionFn(100); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action97::<>(input, __sym0); + let __nt = super::__action100::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (1, 1) } @@ -30162,13 +35369,13 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = BoundVar, "," => ActionFn(115); + // ( ",")+ = BoundVar, "," => ActionFn(118); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action115::<>(input, __sym0, __sym1); + let __nt = super::__action118::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (2, 2) } @@ -30181,14 +35388,14 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, BoundVar, "," => ActionFn(116); + // ( ",")+ = ( ",")+, BoundVar, "," => ActionFn(119); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant1(__symbols); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action116::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action119::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (3, 2) } @@ -30201,13 +35408,13 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = Expr, "," => ActionFn(108); + // ( ",") = Expr, "," => ActionFn(111); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action108::<>(input, __sym0, __sym1); + let __nt = super::__action111::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); (2, 3) } @@ -30220,10 +35427,10 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(106); + // ( ",")* = => ActionFn(109); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action106::<>(input, &__start, &__end); + let __nt = super::__action109::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (0, 4) } @@ -30236,11 +35443,11 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(107); + // ( ",")* = ( ",")+ => ActionFn(110); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action107::<>(input, __sym0); + let __nt = super::__action110::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 4) } @@ -30253,13 +35460,13 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Expr, "," => ActionFn(119); + // ( ",")+ = Expr, "," => ActionFn(122); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action119::<>(input, __sym0, __sym1); + let __nt = super::__action122::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (2, 5) } @@ -30272,14 +35479,14 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Expr, "," => ActionFn(120); + // ( ",")+ = ( ",")+, Expr, "," => ActionFn(123); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant3(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action120::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action123::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 5) } @@ -30292,13 +35499,13 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = Type, "," => ActionFn(103); + // ( ",") = Type, "," => ActionFn(106); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action103::<>(input, __sym0, __sym1); + let __nt = super::__action106::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (2, 6) } @@ -30311,10 +35518,10 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(101); + // ( ",")* = => ActionFn(104); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action101::<>(input, &__start, &__end); + let __nt = super::__action104::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (0, 7) } @@ -30327,11 +35534,11 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(102); + // ( ",")* = ( ",")+ => ActionFn(105); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action102::<>(input, __sym0); + let __nt = super::__action105::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (1, 7) } @@ -30344,13 +35551,13 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Type, "," => ActionFn(123); + // ( ",")+ = Type, "," => ActionFn(126); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action123::<>(input, __sym0, __sym1); + let __nt = super::__action126::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (2, 8) } @@ -30363,14 +35570,14 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Type, "," => ActionFn(124); + // ( ",")+ = ( ",")+, Type, "," => ActionFn(127); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant5(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action124::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action127::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (3, 8) } @@ -30383,11 +35590,11 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ArgList = Comma => ActionFn(21); + // ArgList = Comma => ActionFn(22); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action21::<>(input, __sym0); + let __nt = super::__action22::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (1, 9) } @@ -30400,14 +35607,14 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Args = "(args", ArgList, ")" => ActionFn(22); + // Args = "(args", ArgList, ")" => ActionFn(23); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant7(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action22::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action23::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (3, 10) } @@ -30420,15 +35627,36 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar = Ident => ActionFn(19); + // AssertBlock = "(", "assert", ExprList, ")" => ActionFn(89); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant8(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action89::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (4, 11) + } + pub(crate) fn __reduce18< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // BoundVar = Ident => ActionFn(20); let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action19::<>(input, __sym0); + let __nt = super::__action20::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); - (1, 11) + (1, 12) } - pub(crate) fn __reduce18< + pub(crate) fn __reduce19< 'input, >( input: &'input str, @@ -30437,18 +35665,18 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar = Ident, ":", Type => ActionFn(20); + // BoundVar = Ident, ":", Type => ActionFn(21); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant5(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action20::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action21::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); - (3, 11) + (3, 12) } - pub(crate) fn __reduce19< + pub(crate) fn __reduce20< 'input, >( input: &'input str, @@ -30457,15 +35685,15 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar? = BoundVar => ActionFn(94); + // BoundVar? = BoundVar => ActionFn(97); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action94::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (1, 12) + let __nt = super::__action97::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (1, 13) } - pub(crate) fn __reduce20< + pub(crate) fn __reduce21< 'input, >( input: &'input str, @@ -30474,14 +35702,14 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar? = => ActionFn(95); + // BoundVar? = => ActionFn(98); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action95::<>(input, &__start, &__end); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (0, 12) + let __nt = super::__action98::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (0, 13) } - pub(crate) fn __reduce21< + pub(crate) fn __reduce22< 'input, >( input: &'input str, @@ -30490,15 +35718,15 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = BoundVar => ActionFn(127); + // Comma = BoundVar => ActionFn(130); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action127::<>(input, __sym0); + let __nt = super::__action130::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (1, 13) + (1, 14) } - pub(crate) fn __reduce22< + pub(crate) fn __reduce23< 'input, >( input: &'input str, @@ -30507,14 +35735,14 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(128); + // Comma = => ActionFn(131); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action128::<>(input, &__start, &__end); + let __nt = super::__action131::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (0, 13) + (0, 14) } - pub(crate) fn __reduce23< + pub(crate) fn __reduce24< 'input, >( input: &'input str, @@ -30523,17 +35751,17 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, BoundVar => ActionFn(129); + // Comma = ( ",")+, BoundVar => ActionFn(132); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant1(__symbols); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action129::<>(input, __sym0, __sym1); + let __nt = super::__action132::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (2, 13) + (2, 14) } - pub(crate) fn __reduce24< + pub(crate) fn __reduce25< 'input, >( input: &'input str, @@ -30542,15 +35770,15 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(130); + // Comma = ( ",")+ => ActionFn(133); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action130::<>(input, __sym0); + let __nt = super::__action133::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (1, 13) + (1, 14) } - pub(crate) fn __reduce25< + pub(crate) fn __reduce26< 'input, >( input: &'input str, @@ -30559,15 +35787,15 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Expr => ActionFn(131); + // Comma = Expr => ActionFn(134); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action131::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 14) + let __nt = super::__action134::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 15) } - pub(crate) fn __reduce26< + pub(crate) fn __reduce27< 'input, >( input: &'input str, @@ -30576,14 +35804,14 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(132); + // Comma = => ActionFn(135); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action132::<>(input, &__start, &__end); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (0, 14) + let __nt = super::__action135::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (0, 15) } - pub(crate) fn __reduce27< + pub(crate) fn __reduce28< 'input, >( input: &'input str, @@ -30592,17 +35820,17 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Expr => ActionFn(133); + // Comma = ( ",")+, Expr => ActionFn(136); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant3(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action133::<>(input, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (2, 14) + let __nt = super::__action136::<>(input, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (2, 15) } - pub(crate) fn __reduce28< + pub(crate) fn __reduce29< 'input, >( input: &'input str, @@ -30611,15 +35839,15 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(134); + // Comma = ( ",")+ => ActionFn(137); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action134::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 14) + let __nt = super::__action137::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 15) } - pub(crate) fn __reduce29< + pub(crate) fn __reduce30< 'input, >( input: &'input str, @@ -30628,15 +35856,15 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Type => ActionFn(135); + // Comma = Type => ActionFn(138); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action135::<>(input, __sym0); + let __nt = super::__action138::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 15) + (1, 16) } - pub(crate) fn __reduce30< + pub(crate) fn __reduce31< 'input, >( input: &'input str, @@ -30645,14 +35873,14 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(136); + // Comma = => ActionFn(139); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action136::<>(input, &__start, &__end); + let __nt = super::__action139::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (0, 15) + (0, 16) } - pub(crate) fn __reduce31< + pub(crate) fn __reduce32< 'input, >( input: &'input str, @@ -30661,17 +35889,17 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Type => ActionFn(137); + // Comma = ( ",")+, Type => ActionFn(140); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant5(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action137::<>(input, __sym0, __sym1); + let __nt = super::__action140::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (2, 15) + (2, 16) } - pub(crate) fn __reduce32< + pub(crate) fn __reduce33< 'input, >( input: &'input str, @@ -30680,15 +35908,15 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(138); + // Comma = ( ",")+ => ActionFn(141); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action138::<>(input, __sym0); + let __nt = super::__action141::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 15) + (1, 16) } - pub(crate) fn __reduce33< + pub(crate) fn __reduce34< 'input, >( input: &'input str, @@ -30697,7 +35925,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Const = Num, UNum, ":", Type => ActionFn(28); + // Const = Num, UNum, ":", Type => ActionFn(29); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant5(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -30705,29 +35933,9 @@ mod __parse__TermSignature { let __sym0 = __pop_Variant17(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action28::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action29::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); - (4, 16) - } - pub(crate) fn __reduce34< - 'input, - >( - input: &'input str, - __lookahead_start: Option<&usize>, - __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, - _: core::marker::PhantomData<(&'input ())>, - ) -> (usize, usize) - { - // Expr = "(", Ident, ")" => ActionFn(33); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant16(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0.clone(); - let __end = __sym2.2.clone(); - let __nt = super::__action33::<>(input, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (4, 17) } pub(crate) fn __reduce35< 'input, @@ -30738,16 +35946,16 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", Const, ")" => ActionFn(34); + // Expr = "(", Ident, ")" => ActionFn(34); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant11(__symbols); + let __sym1 = __pop_Variant16(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); let __nt = super::__action34::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (3, 18) } pub(crate) fn __reduce36< 'input, @@ -30758,16 +35966,16 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "true", ")" => ActionFn(35); + // Expr = "(", Const, ")" => ActionFn(35); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant11(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); let __nt = super::__action35::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (3, 18) } pub(crate) fn __reduce37< 'input, @@ -30778,7 +35986,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "false", ")" => ActionFn(36); + // Expr = "(", "true", ")" => ActionFn(36); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); @@ -30787,7 +35995,7 @@ mod __parse__TermSignature { let __end = __sym2.2.clone(); let __nt = super::__action36::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (3, 18) } pub(crate) fn __reduce38< 'input, @@ -30798,17 +36006,16 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "!", Expr, ")" => ActionFn(37); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant3(__symbols); + // Expr = "(", "false", ")" => ActionFn(37); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym3.2.clone(); - let __nt = super::__action37::<>(input, __sym0, __sym1, __sym2, __sym3); + let __end = __sym2.2.clone(); + let __nt = super::__action37::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (3, 18) } pub(crate) fn __reduce39< 'input, @@ -30819,18 +36026,17 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "&&", Expr, Expr, ")" => ActionFn(38); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant3(__symbols); + // Expr = "(", "!", Expr, ")" => ActionFn(38); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym4.2.clone(); - let __nt = super::__action38::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __end = __sym3.2.clone(); + let __nt = super::__action38::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (4, 18) } pub(crate) fn __reduce40< 'input, @@ -30841,7 +36047,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "||", Expr, Expr, ")" => ActionFn(39); + // Expr = "(", "&&", Expr, Expr, ")" => ActionFn(39); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -30852,7 +36058,7 @@ mod __parse__TermSignature { let __end = __sym4.2.clone(); let __nt = super::__action39::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce41< 'input, @@ -30863,7 +36069,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "=>", Expr, Expr, ")" => ActionFn(40); + // Expr = "(", "||", Expr, Expr, ")" => ActionFn(40); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -30874,7 +36080,7 @@ mod __parse__TermSignature { let __end = __sym4.2.clone(); let __nt = super::__action40::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce42< 'input, @@ -30885,7 +36091,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "=", Expr, Expr, ")" => ActionFn(41); + // Expr = "(", "=>", Expr, Expr, ")" => ActionFn(41); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -30896,7 +36102,7 @@ mod __parse__TermSignature { let __end = __sym4.2.clone(); let __nt = super::__action41::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce43< 'input, @@ -30907,7 +36113,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "<=", Expr, Expr, ")" => ActionFn(42); + // Expr = "(", "=", Expr, Expr, ")" => ActionFn(42); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -30918,7 +36124,7 @@ mod __parse__TermSignature { let __end = __sym4.2.clone(); let __nt = super::__action42::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce44< 'input, @@ -30929,7 +36135,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "<", Expr, Expr, ")" => ActionFn(43); + // Expr = "(", "<=", Expr, Expr, ")" => ActionFn(43); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -30940,7 +36146,7 @@ mod __parse__TermSignature { let __end = __sym4.2.clone(); let __nt = super::__action43::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce45< 'input, @@ -30951,7 +36157,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sgt", Expr, Expr, ")" => ActionFn(44); + // Expr = "(", "<", Expr, Expr, ")" => ActionFn(44); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -30962,7 +36168,7 @@ mod __parse__TermSignature { let __end = __sym4.2.clone(); let __nt = super::__action44::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce46< 'input, @@ -30973,7 +36179,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sgte", Expr, Expr, ")" => ActionFn(45); + // Expr = "(", "sgt", Expr, Expr, ")" => ActionFn(45); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -30984,7 +36190,7 @@ mod __parse__TermSignature { let __end = __sym4.2.clone(); let __nt = super::__action45::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce47< 'input, @@ -30995,7 +36201,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "slt", Expr, Expr, ")" => ActionFn(46); + // Expr = "(", "sgte", Expr, Expr, ")" => ActionFn(46); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -31006,7 +36212,7 @@ mod __parse__TermSignature { let __end = __sym4.2.clone(); let __nt = super::__action46::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce48< 'input, @@ -31017,7 +36223,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "slte", Expr, Expr, ")" => ActionFn(47); + // Expr = "(", "slt", Expr, Expr, ")" => ActionFn(47); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -31028,7 +36234,7 @@ mod __parse__TermSignature { let __end = __sym4.2.clone(); let __nt = super::__action47::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce49< 'input, @@ -31039,7 +36245,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ugt", Expr, Expr, ")" => ActionFn(48); + // Expr = "(", "slte", Expr, Expr, ")" => ActionFn(48); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -31050,7 +36256,7 @@ mod __parse__TermSignature { let __end = __sym4.2.clone(); let __nt = super::__action48::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce50< 'input, @@ -31061,7 +36267,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ugte", Expr, Expr, ")" => ActionFn(49); + // Expr = "(", "ugt", Expr, Expr, ")" => ActionFn(49); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -31072,7 +36278,7 @@ mod __parse__TermSignature { let __end = __sym4.2.clone(); let __nt = super::__action49::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce51< 'input, @@ -31083,7 +36289,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ult", Expr, Expr, ")" => ActionFn(50); + // Expr = "(", "ugte", Expr, Expr, ")" => ActionFn(50); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -31094,7 +36300,7 @@ mod __parse__TermSignature { let __end = __sym4.2.clone(); let __nt = super::__action50::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce52< 'input, @@ -31105,7 +36311,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ulte", Expr, Expr, ")" => ActionFn(51); + // Expr = "(", "ult", Expr, Expr, ")" => ActionFn(51); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -31116,7 +36322,7 @@ mod __parse__TermSignature { let __end = __sym4.2.clone(); let __nt = super::__action51::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce53< 'input, @@ -31127,17 +36333,18 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "-", Expr, ")" => ActionFn(52); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); + // Expr = "(", "ulte", Expr, Expr, ")" => ActionFn(52); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym3.2.clone(); - let __nt = super::__action52::<>(input, __sym0, __sym1, __sym2, __sym3); + let __end = __sym4.2.clone(); + let __nt = super::__action52::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (5, 18) } pub(crate) fn __reduce54< 'input, @@ -31148,7 +36355,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "~", Expr, ")" => ActionFn(53); + // Expr = "(", "-", Expr, ")" => ActionFn(53); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -31158,7 +36365,7 @@ mod __parse__TermSignature { let __end = __sym3.2.clone(); let __nt = super::__action53::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } pub(crate) fn __reduce55< 'input, @@ -31169,7 +36376,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "clz", Expr, ")" => ActionFn(54); + // Expr = "(", "~", Expr, ")" => ActionFn(54); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -31179,7 +36386,7 @@ mod __parse__TermSignature { let __end = __sym3.2.clone(); let __nt = super::__action54::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } pub(crate) fn __reduce56< 'input, @@ -31190,7 +36397,28 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "a64clz", Expr, Expr, ")" => ActionFn(55); + // Expr = "(", "clz", Expr, ")" => ActionFn(55); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action55::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (4, 18) + } + pub(crate) fn __reduce57< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "a64clz", Expr, Expr, ")" => ActionFn(56); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -31199,11 +36427,11 @@ mod __parse__TermSignature { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action55::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action56::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce57< + pub(crate) fn __reduce58< 'input, >( input: &'input str, @@ -31212,7 +36440,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "cls", Expr, ")" => ActionFn(56); + // Expr = "(", "cls", Expr, ")" => ActionFn(57); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -31220,11 +36448,11 @@ mod __parse__TermSignature { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action56::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action57::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce58< + pub(crate) fn __reduce59< 'input, >( input: &'input str, @@ -31233,7 +36461,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "a64cls", Expr, Expr, ")" => ActionFn(57); + // Expr = "(", "a64cls", Expr, Expr, ")" => ActionFn(58); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -31242,11 +36470,11 @@ mod __parse__TermSignature { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action57::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action58::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce59< + pub(crate) fn __reduce60< 'input, >( input: &'input str, @@ -31255,7 +36483,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "rev", Expr, ")" => ActionFn(58); + // Expr = "(", "rev", Expr, ")" => ActionFn(59); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -31263,11 +36491,11 @@ mod __parse__TermSignature { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action58::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action59::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce60< + pub(crate) fn __reduce61< 'input, >( input: &'input str, @@ -31276,7 +36504,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "a64rev", Expr, Expr, ")" => ActionFn(59); + // Expr = "(", "a64rev", Expr, Expr, ")" => ActionFn(60); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -31285,11 +36513,11 @@ mod __parse__TermSignature { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action59::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action60::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce61< + pub(crate) fn __reduce62< 'input, >( input: &'input str, @@ -31298,7 +36526,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "subs", Expr, Expr, Expr, ")" => ActionFn(60); + // Expr = "(", "subs", Expr, Expr, Expr, ")" => ActionFn(61); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant3(__symbols); @@ -31308,31 +36536,9 @@ mod __parse__TermSignature { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym5.2.clone(); - let __nt = super::__action60::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action61::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (6, 17) - } - pub(crate) fn __reduce62< - 'input, - >( - input: &'input str, - __lookahead_start: Option<&usize>, - __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, - _: core::marker::PhantomData<(&'input ())>, - ) -> (usize, usize) - { - // Expr = "(", "*", Expr, Expr, ")" => ActionFn(61); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant3(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0.clone(); - let __end = __sym4.2.clone(); - let __nt = super::__action61::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); - __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (6, 18) } pub(crate) fn __reduce63< 'input, @@ -31343,7 +36549,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "/", Expr, Expr, ")" => ActionFn(62); + // Expr = "(", "*", Expr, Expr, ")" => ActionFn(62); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -31354,7 +36560,7 @@ mod __parse__TermSignature { let __end = __sym4.2.clone(); let __nt = super::__action62::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce64< 'input, @@ -31365,7 +36571,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sdiv", Expr, Expr, ")" => ActionFn(63); + // Expr = "(", "/", Expr, Expr, ")" => ActionFn(63); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -31376,7 +36582,7 @@ mod __parse__TermSignature { let __end = __sym4.2.clone(); let __nt = super::__action63::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce65< 'input, @@ -31387,7 +36593,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "+", Expr, Expr, ")" => ActionFn(64); + // Expr = "(", "sdiv", Expr, Expr, ")" => ActionFn(64); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -31398,7 +36604,7 @@ mod __parse__TermSignature { let __end = __sym4.2.clone(); let __nt = super::__action64::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce66< 'input, @@ -31409,7 +36615,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "-", Expr, Expr, ")" => ActionFn(65); + // Expr = "(", "+", Expr, Expr, ")" => ActionFn(65); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -31420,7 +36626,7 @@ mod __parse__TermSignature { let __end = __sym4.2.clone(); let __nt = super::__action65::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce67< 'input, @@ -31431,7 +36637,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "urem", Expr, Expr, ")" => ActionFn(66); + // Expr = "(", "-", Expr, Expr, ")" => ActionFn(66); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -31442,7 +36648,7 @@ mod __parse__TermSignature { let __end = __sym4.2.clone(); let __nt = super::__action66::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce68< 'input, @@ -31453,7 +36659,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "srem", Expr, Expr, ")" => ActionFn(67); + // Expr = "(", "urem", Expr, Expr, ")" => ActionFn(67); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -31464,7 +36670,7 @@ mod __parse__TermSignature { let __end = __sym4.2.clone(); let __nt = super::__action67::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce69< 'input, @@ -31475,7 +36681,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "&", Expr, Expr, ")" => ActionFn(68); + // Expr = "(", "srem", Expr, Expr, ")" => ActionFn(68); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -31486,7 +36692,7 @@ mod __parse__TermSignature { let __end = __sym4.2.clone(); let __nt = super::__action68::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce70< 'input, @@ -31497,7 +36703,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "|", Expr, Expr, ")" => ActionFn(69); + // Expr = "(", "&", Expr, Expr, ")" => ActionFn(69); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -31508,7 +36714,7 @@ mod __parse__TermSignature { let __end = __sym4.2.clone(); let __nt = super::__action69::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce71< 'input, @@ -31519,7 +36725,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "xor", Expr, Expr, ")" => ActionFn(70); + // Expr = "(", "|", Expr, Expr, ")" => ActionFn(70); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -31530,7 +36736,7 @@ mod __parse__TermSignature { let __end = __sym4.2.clone(); let __nt = super::__action70::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce72< 'input, @@ -31541,7 +36747,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "rotl", Expr, Expr, ")" => ActionFn(71); + // Expr = "(", "xor", Expr, Expr, ")" => ActionFn(71); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -31552,7 +36758,7 @@ mod __parse__TermSignature { let __end = __sym4.2.clone(); let __nt = super::__action71::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce73< 'input, @@ -31563,7 +36769,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "rotr", Expr, Expr, ")" => ActionFn(72); + // Expr = "(", "rotl", Expr, Expr, ")" => ActionFn(72); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -31574,7 +36780,7 @@ mod __parse__TermSignature { let __end = __sym4.2.clone(); let __nt = super::__action72::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce74< 'input, @@ -31585,7 +36791,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "shl", Expr, Expr, ")" => ActionFn(73); + // Expr = "(", "rotr", Expr, Expr, ")" => ActionFn(73); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -31596,7 +36802,7 @@ mod __parse__TermSignature { let __end = __sym4.2.clone(); let __nt = super::__action73::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce75< 'input, @@ -31607,7 +36813,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "shr", Expr, Expr, ")" => ActionFn(74); + // Expr = "(", "shl", Expr, Expr, ")" => ActionFn(74); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -31618,7 +36824,7 @@ mod __parse__TermSignature { let __end = __sym4.2.clone(); let __nt = super::__action74::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce76< 'input, @@ -31629,7 +36835,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ashr", Expr, Expr, ")" => ActionFn(75); + // Expr = "(", "shr", Expr, Expr, ")" => ActionFn(75); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -31640,7 +36846,7 @@ mod __parse__TermSignature { let __end = __sym4.2.clone(); let __nt = super::__action75::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce77< 'input, @@ -31651,18 +36857,18 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "zero_ext", Width, Expr, ")" => ActionFn(76); + // Expr = "(", "ashr", Expr, Expr, ")" => ActionFn(76); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant24(__symbols); + let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action76::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce78< 'input, @@ -31673,18 +36879,18 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "zero_ext", Expr, Expr, ")" => ActionFn(77); + // Expr = "(", "zero_ext", Width, Expr, ")" => ActionFn(77); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant24(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action77::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce79< 'input, @@ -31695,18 +36901,18 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sign_ext", Width, Expr, ")" => ActionFn(78); + // Expr = "(", "zero_ext", Expr, Expr, ")" => ActionFn(78); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant24(__symbols); + let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action78::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce80< 'input, @@ -31717,18 +36923,18 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sign_ext", Expr, Expr, ")" => ActionFn(79); + // Expr = "(", "sign_ext", Width, Expr, ")" => ActionFn(79); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant24(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action79::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce81< 'input, @@ -31739,7 +36945,29 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "extract", UNum, UNum, Expr, ")" => ActionFn(80); + // Expr = "(", "sign_ext", Expr, Expr, ")" => ActionFn(80); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action80::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce82< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "extract", UNum, UNum, Expr, ")" => ActionFn(81); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant3(__symbols); @@ -31749,11 +36977,11 @@ mod __parse__TermSignature { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym5.2.clone(); - let __nt = super::__action80::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action81::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (6, 17) + (6, 18) } - pub(crate) fn __reduce82< + pub(crate) fn __reduce83< 'input, >( input: &'input str, @@ -31762,7 +36990,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "conv_to", Width, Expr, ")" => ActionFn(81); + // Expr = "(", "conv_to", Width, Expr, ")" => ActionFn(82); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -31771,11 +36999,11 @@ mod __parse__TermSignature { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action81::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action82::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce83< + pub(crate) fn __reduce84< 'input, >( input: &'input str, @@ -31784,7 +37012,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "conv_to", Expr, Expr, ")" => ActionFn(82); + // Expr = "(", "conv_to", Expr, Expr, ")" => ActionFn(83); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -31793,11 +37021,11 @@ mod __parse__TermSignature { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action82::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action83::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce84< + pub(crate) fn __reduce85< 'input, >( input: &'input str, @@ -31806,7 +37034,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "if", Expr, Expr, Expr, ")" => ActionFn(83); + // Expr = "(", "if", Expr, Expr, Expr, ")" => ActionFn(84); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant3(__symbols); @@ -31816,11 +37044,11 @@ mod __parse__TermSignature { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym5.2.clone(); - let __nt = super::__action83::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action84::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (6, 17) + (6, 18) } - pub(crate) fn __reduce85< + pub(crate) fn __reduce86< 'input, >( input: &'input str, @@ -31829,7 +37057,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "switch", Expr, Pair+, ")" => ActionFn(84); + // Expr = "(", "switch", Expr, Pair+, ")" => ActionFn(85); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant19(__symbols); @@ -31838,11 +37066,11 @@ mod __parse__TermSignature { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action84::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action85::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce86< + pub(crate) fn __reduce87< 'input, >( input: &'input str, @@ -31851,7 +37079,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "int2bv", UNum, Expr, ")" => ActionFn(85); + // Expr = "(", "int2bv", UNum, Expr, ")" => ActionFn(86); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -31860,11 +37088,11 @@ mod __parse__TermSignature { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action85::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action86::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce87< + pub(crate) fn __reduce88< 'input, >( input: &'input str, @@ -31873,7 +37101,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "bv2int", Expr, ")" => ActionFn(86); + // Expr = "(", "bv2int", Expr, ")" => ActionFn(87); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -31881,11 +37109,11 @@ mod __parse__TermSignature { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action86::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action87::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce88< + pub(crate) fn __reduce89< 'input, >( input: &'input str, @@ -31894,7 +37122,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "widthof", Expr, ")" => ActionFn(87); + // Expr = "(", "widthof", Expr, ")" => ActionFn(88); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -31902,11 +37130,11 @@ mod __parse__TermSignature { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action87::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action88::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce89< + pub(crate) fn __reduce90< 'input, >( input: &'input str, @@ -31915,15 +37143,15 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr? = Expr => ActionFn(104); + // Expr? = Expr => ActionFn(107); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action104::<>(input, __sym0); + let __nt = super::__action107::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (1, 18) + (1, 19) } - pub(crate) fn __reduce90< + pub(crate) fn __reduce91< 'input, >( input: &'input str, @@ -31932,14 +37160,14 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr? = => ActionFn(105); + // Expr? = => ActionFn(108); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action105::<>(input, &__start, &__end); + let __nt = super::__action108::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (0, 18) + (0, 19) } - pub(crate) fn __reduce91< + pub(crate) fn __reduce92< 'input, >( input: &'input str, @@ -31948,15 +37176,15 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprList = Comma => ActionFn(24); - let __sym0 = __pop_Variant9(__symbols); + // ExprList = Comma => ActionFn(25); + let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action24::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 19) + let __nt = super::__action25::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 20) } - pub(crate) fn __reduce92< + pub(crate) fn __reduce93< 'input, >( input: &'input str, @@ -31965,7 +37193,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Function = Ident, "(", ArgList, ")", "(", Type, ")", "{", Expr, "}" => ActionFn(29); + // Function = Ident, "(", ArgList, ")", "(", Type, ")", "{", Expr, "}" => ActionFn(30); assert!(__symbols.len() >= 10); let __sym9 = __pop_Variant0(__symbols); let __sym8 = __pop_Variant3(__symbols); @@ -31979,11 +37207,11 @@ mod __parse__TermSignature { let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0.clone(); let __end = __sym9.2.clone(); - let __nt = super::__action29::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); + let __nt = super::__action30::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); - (10, 20) + (10, 21) } - pub(crate) fn __reduce93< + pub(crate) fn __reduce94< 'input, >( input: &'input str, @@ -31992,19 +37220,19 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // FunctionApplication = Expr, "(", ExprList, ")" => ActionFn(30); + // FunctionApplication = Expr, "(", ExprList, ")" => ActionFn(31); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant9(__symbols); + let __sym2 = __pop_Variant8(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action30::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action31::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (4, 21) + (4, 22) } - pub(crate) fn __reduce94< + pub(crate) fn __reduce95< 'input, >( input: &'input str, @@ -32013,7 +37241,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // FunctionType = "func", "(", TypeList, ")", "(", Type, ")" => ActionFn(27); + // FunctionType = "func", "(", TypeList, ")", "(", Type, ")" => ActionFn(28); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant5(__symbols); @@ -32024,11 +37252,11 @@ mod __parse__TermSignature { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym6.2.clone(); - let __nt = super::__action27::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action28::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (7, 22) + (7, 23) } - pub(crate) fn __reduce95< + pub(crate) fn __reduce96< 'input, >( input: &'input str, @@ -32037,15 +37265,15 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"[A-Za-z]"# => ActionFn(12); + // Ident = r#"[A-Za-z]"# => ActionFn(13); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action12::<>(input, __sym0); + let __nt = super::__action13::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 23) + (1, 24) } - pub(crate) fn __reduce96< + pub(crate) fn __reduce97< 'input, >( input: &'input str, @@ -32054,15 +37282,15 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"[A-Zac-z][\\.\\w]+"# => ActionFn(13); + // Ident = r#"[A-Zac-z][\\.\\w]+"# => ActionFn(14); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action13::<>(input, __sym0); + let __nt = super::__action14::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 23) + (1, 24) } - pub(crate) fn __reduce97< + pub(crate) fn __reduce98< 'input, >( input: &'input str, @@ -32071,15 +37299,15 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"b[\\w&&[^v]][\\.\\w]*"# => ActionFn(14); + // Ident = r#"b[\\w&&[^v]][\\.\\w]*"# => ActionFn(15); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action14::<>(input, __sym0); + let __nt = super::__action15::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 23) + (1, 24) } - pub(crate) fn __reduce98< + pub(crate) fn __reduce99< 'input, >( input: &'input str, @@ -32088,15 +37316,15 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Num = r#"-?[0-9]+i"# => ActionFn(11); + // Num = r#"-?[0-9]+i"# => ActionFn(12); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action11::<>(input, __sym0); + let __nt = super::__action12::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant17(__nt), __end)); - (1, 24) + (1, 25) } - pub(crate) fn __reduce99< + pub(crate) fn __reduce100< 'input, >( input: &'input str, @@ -32105,7 +37333,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Pair = "(", Expr, Expr, ")" => ActionFn(25); + // Pair = "(", Expr, Expr, ")" => ActionFn(26); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -32113,11 +37341,11 @@ mod __parse__TermSignature { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action25::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action26::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant18(__nt), __end)); - (4, 25) + (4, 26) } - pub(crate) fn __reduce100< + pub(crate) fn __reduce101< 'input, >( input: &'input str, @@ -32126,15 +37354,15 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Pair+ = Pair => ActionFn(89); + // Pair+ = Pair => ActionFn(92); let __sym0 = __pop_Variant18(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action89::<>(input, __sym0); + let __nt = super::__action92::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant19(__nt), __end)); - (1, 26) + (1, 27) } - pub(crate) fn __reduce101< + pub(crate) fn __reduce102< 'input, >( input: &'input str, @@ -32143,17 +37371,46 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Pair+ = Pair+, Pair => ActionFn(90); + // Pair+ = Pair+, Pair => ActionFn(93); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant18(__symbols); let __sym0 = __pop_Variant19(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action90::<>(input, __sym0, __sym1); + let __nt = super::__action93::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant19(__nt), __end)); - (2, 26) + (2, 27) } - pub(crate) fn __reduce102< + pub(crate) fn __reduce103< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // TermAnnotation = "(", "spec", TermSignature, "(", "assume", ExprList, ")", "(", "assert", ExprList, ")", ")" => ActionFn(90); + assert!(__symbols.len() >= 12); + let __sym11 = __pop_Variant0(__symbols); + let __sym10 = __pop_Variant0(__symbols); + let __sym9 = __pop_Variant8(__symbols); + let __sym8 = __pop_Variant0(__symbols); + let __sym7 = __pop_Variant0(__symbols); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant8(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant21(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym11.2.clone(); + let __nt = super::__action90::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9, __sym10, __sym11); + __symbols.push((__start, __Symbol::Variant20(__nt), __end)); + (12, 28) + } + pub(crate) fn __reduce104< 'input, >( input: &'input str, @@ -32162,11 +37419,11 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // TermAnnotation = "(", "spec", TermSignature, "(", "assertions", ExprList, ")", ")" => ActionFn(88); + // TermAnnotation = "(", "spec", TermSignature, "(", "assume", ExprList, ")", ")" => ActionFn(91); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant9(__symbols); + let __sym5 = __pop_Variant8(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant21(__symbols); @@ -32174,11 +37431,11 @@ mod __parse__TermSignature { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym7.2.clone(); - let __nt = super::__action88::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); + let __nt = super::__action91::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant20(__nt), __end)); - (8, 27) + (8, 28) } - pub(crate) fn __reduce103< + pub(crate) fn __reduce105< 'input, >( input: &'input str, @@ -32187,7 +37444,7 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // TermSignature = "(", "sig", Args, "(", BoundVar, ")", ")" => ActionFn(26); + // TermSignature = "(", "sig", Args, "(", BoundVar, ")", ")" => ActionFn(27); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -32198,11 +37455,11 @@ mod __parse__TermSignature { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym6.2.clone(); - let __nt = super::__action26::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action27::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant21(__nt), __end)); - (7, 28) + (7, 29) } - pub(crate) fn __reduce104< + pub(crate) fn __reduce106< 'input, >( input: &'input str, @@ -32211,15 +37468,15 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "bv" => ActionFn(15); + // Type = "bv" => ActionFn(16); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action15::<>(input, __sym0); + let __nt = super::__action16::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 29) + (1, 30) } - pub(crate) fn __reduce105< + pub(crate) fn __reduce107< 'input, >( input: &'input str, @@ -32228,17 +37485,17 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "bv", UNum => ActionFn(16); + // Type = "bv", UNum => ActionFn(17); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant23(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action16::<>(input, __sym0, __sym1); + let __nt = super::__action17::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (2, 29) + (2, 30) } - pub(crate) fn __reduce106< + pub(crate) fn __reduce108< 'input, >( input: &'input str, @@ -32247,15 +37504,15 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "isleType" => ActionFn(17); + // Type = "isleType" => ActionFn(18); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action17::<>(input, __sym0); + let __nt = super::__action18::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 29) + (1, 30) } - pub(crate) fn __reduce107< + pub(crate) fn __reduce109< 'input, >( input: &'input str, @@ -32264,15 +37521,15 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "bool" => ActionFn(18); + // Type = "bool" => ActionFn(19); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action18::<>(input, __sym0); + let __nt = super::__action19::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 29) + (1, 30) } - pub(crate) fn __reduce108< + pub(crate) fn __reduce110< 'input, >( input: &'input str, @@ -32281,15 +37538,15 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type? = Type => ActionFn(99); + // Type? = Type => ActionFn(102); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action99::<>(input, __sym0); + let __nt = super::__action102::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant22(__nt), __end)); - (1, 30) + (1, 31) } - pub(crate) fn __reduce109< + pub(crate) fn __reduce111< 'input, >( input: &'input str, @@ -32298,14 +37555,14 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type? = => ActionFn(100); + // Type? = => ActionFn(103); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action100::<>(input, &__start, &__end); + let __nt = super::__action103::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant22(__nt), __end)); - (0, 30) + (0, 31) } - pub(crate) fn __reduce110< + pub(crate) fn __reduce112< 'input, >( input: &'input str, @@ -32314,15 +37571,15 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // TypeList = Comma => ActionFn(23); + // TypeList = Comma => ActionFn(24); let __sym0 = __pop_Variant10(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action23::<>(input, __sym0); + let __nt = super::__action24::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 31) + (1, 32) } - pub(crate) fn __reduce111< + pub(crate) fn __reduce113< 'input, >( input: &'input str, @@ -32331,15 +37588,15 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // UNum = r#"[0-9]+"# => ActionFn(10); + // UNum = r#"[0-9]+"# => ActionFn(11); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action10::<>(input, __sym0); + let __nt = super::__action11::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant23(__nt), __end)); - (1, 32) + (1, 33) } - pub(crate) fn __reduce112< + pub(crate) fn __reduce114< 'input, >( input: &'input str, @@ -32348,18 +37605,18 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Width = "(", "regwidth", ")" => ActionFn(31); + // Width = "(", "regwidth", ")" => ActionFn(32); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action31::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action32::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (3, 33) + (3, 34) } - pub(crate) fn __reduce113< + pub(crate) fn __reduce115< 'input, >( input: &'input str, @@ -32368,18 +37625,35 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Width = "(", UNum, ")" => ActionFn(32); + // Width = "(", UNum, ")" => ActionFn(33); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant23(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action32::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action33::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (3, 33) + (3, 34) } - pub(crate) fn __reduce114< + pub(crate) fn __reduce116< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // __AssertBlock = AssertBlock => ActionFn(9); + let __sym0 = __pop_Variant8(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action9::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 35) + } + pub(crate) fn __reduce117< 'input, >( input: &'input str, @@ -32394,9 +37668,9 @@ mod __parse__TermSignature { let __end = __sym0.2.clone(); let __nt = super::__action1::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); - (1, 34) + (1, 36) } - pub(crate) fn __reduce115< + pub(crate) fn __reduce118< 'input, >( input: &'input str, @@ -32411,9 +37685,9 @@ mod __parse__TermSignature { let __end = __sym0.2.clone(); let __nt = super::__action4::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); - (1, 35) + (1, 37) } - pub(crate) fn __reduce116< + pub(crate) fn __reduce119< 'input, >( input: &'input str, @@ -32428,9 +37702,9 @@ mod __parse__TermSignature { let __end = __sym0.2.clone(); let __nt = super::__action8::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (1, 36) + (1, 38) } - pub(crate) fn __reduce117< + pub(crate) fn __reduce120< 'input, >( input: &'input str, @@ -32445,9 +37719,9 @@ mod __parse__TermSignature { let __end = __sym0.2.clone(); let __nt = super::__action5::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); - (1, 37) + (1, 39) } - pub(crate) fn __reduce118< + pub(crate) fn __reduce121< 'input, >( input: &'input str, @@ -32462,9 +37736,9 @@ mod __parse__TermSignature { let __end = __sym0.2.clone(); let __nt = super::__action6::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 38) + (1, 40) } - pub(crate) fn __reduce119< + pub(crate) fn __reduce122< 'input, >( input: &'input str, @@ -32479,9 +37753,9 @@ mod __parse__TermSignature { let __end = __sym0.2.clone(); let __nt = super::__action3::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 39) + (1, 41) } - pub(crate) fn __reduce120< + pub(crate) fn __reduce123< 'input, >( input: &'input str, @@ -32490,15 +37764,15 @@ mod __parse__TermSignature { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // __TermAnnotation = TermAnnotation => ActionFn(9); + // __TermAnnotation = TermAnnotation => ActionFn(10); let __sym0 = __pop_Variant20(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action9::<>(input, __sym0); + let __nt = super::__action10::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant20(__nt), __end)); - (1, 40) + (1, 42) } - pub(crate) fn __reduce122< + pub(crate) fn __reduce125< 'input, >( input: &'input str, @@ -32513,9 +37787,9 @@ mod __parse__TermSignature { let __end = __sym0.2.clone(); let __nt = super::__action0::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 42) + (1, 44) } - pub(crate) fn __reduce123< + pub(crate) fn __reduce126< 'input, >( input: &'input str, @@ -32530,7 +37804,7 @@ mod __parse__TermSignature { let __end = __sym0.2.clone(); let __nt = super::__action7::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (1, 43) + (1, 45) } } pub use self::__parse__TermSignature::TermSignatureParser; @@ -32560,8 +37834,8 @@ mod __parse__Type { Variant5(Type), Variant6(alloc::vec::Vec), Variant7(Vec), - Variant8(core::option::Option), - Variant9(Vec>), + Variant8(Vec>), + Variant9(core::option::Option), Variant10(Vec), Variant11(Const), Variant12(core::option::Option>), @@ -32580,43 +37854,43 @@ mod __parse__Type { } const __ACTION: &[i8] = &[ // State 0 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, // State 2 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 3 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 4 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 5 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 6 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]; fn __action(state: i8, integer: usize) -> i8 { - __ACTION[(state as usize) * 69 + integer] + __ACTION[(state as usize) * 70 + integer] } const __EOF_ACTION: &[i8] = &[ // State 0 0, // State 1 - -105, + -107, // State 2 - -123, + -126, // State 3 - -108, + -110, // State 4 - -107, + -109, // State 5 - -106, + -108, // State 6 - -112, + -114, ]; fn __goto(state: i8, nt: usize) -> i8 { match nt { - 29 => 2, - 32 => 5, + 30 => 2, + 33 => 5, _ => 0, } } @@ -32642,7 +37916,8 @@ mod __parse__Type { r###""a64clz""###, r###""a64rev""###, r###""ashr""###, - r###""assertions""###, + r###""assert""###, + r###""assume""###, r###""bool""###, r###""bv""###, r###""bv2int""###, @@ -32743,7 +38018,7 @@ mod __parse__Type { #[inline] fn error_action(&self, state: i8) -> i8 { - __action(state, 69 - 1) + __action(state, 70 - 1) } #[inline] @@ -32870,11 +38145,12 @@ mod __parse__Type { Token(66, _) if true => Some(61), Token(67, _) if true => Some(62), Token(68, _) if true => Some(63), - Token(0, _) if true => Some(64), - Token(1, _) if true => Some(65), - Token(2, _) if true => Some(66), - Token(3, _) if true => Some(67), - Token(4, _) if true => Some(68), + Token(69, _) if true => Some(64), + Token(0, _) if true => Some(65), + Token(1, _) if true => Some(66), + Token(2, _) if true => Some(67), + Token(3, _) if true => Some(68), + Token(4, _) if true => Some(69), _ => None, } } @@ -32887,8 +38163,8 @@ mod __parse__Type { ) -> __Symbol<'input> { match __token_index { - 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 => match __token { - Token(5, __tok0) | Token(6, __tok0) | Token(7, __tok0) | Token(8, __tok0) | Token(9, __tok0) | Token(10, __tok0) | Token(11, __tok0) | Token(12, __tok0) | Token(13, __tok0) | Token(14, __tok0) | Token(15, __tok0) | Token(16, __tok0) | Token(17, __tok0) | Token(18, __tok0) | Token(19, __tok0) | Token(20, __tok0) | Token(21, __tok0) | Token(22, __tok0) | Token(23, __tok0) | Token(24, __tok0) | Token(25, __tok0) | Token(26, __tok0) | Token(27, __tok0) | Token(28, __tok0) | Token(29, __tok0) | Token(30, __tok0) | Token(31, __tok0) | Token(32, __tok0) | Token(33, __tok0) | Token(34, __tok0) | Token(35, __tok0) | Token(36, __tok0) | Token(37, __tok0) | Token(38, __tok0) | Token(39, __tok0) | Token(40, __tok0) | Token(41, __tok0) | Token(42, __tok0) | Token(43, __tok0) | Token(44, __tok0) | Token(45, __tok0) | Token(46, __tok0) | Token(47, __tok0) | Token(48, __tok0) | Token(49, __tok0) | Token(50, __tok0) | Token(51, __tok0) | Token(52, __tok0) | Token(53, __tok0) | Token(54, __tok0) | Token(55, __tok0) | Token(56, __tok0) | Token(57, __tok0) | Token(58, __tok0) | Token(59, __tok0) | Token(60, __tok0) | Token(61, __tok0) | Token(62, __tok0) | Token(63, __tok0) | Token(64, __tok0) | Token(65, __tok0) | Token(66, __tok0) | Token(67, __tok0) | Token(68, __tok0) | Token(0, __tok0) | Token(1, __tok0) | Token(2, __tok0) | Token(3, __tok0) | Token(4, __tok0) if true => __Symbol::Variant0(__tok0), + 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 => match __token { + Token(5, __tok0) | Token(6, __tok0) | Token(7, __tok0) | Token(8, __tok0) | Token(9, __tok0) | Token(10, __tok0) | Token(11, __tok0) | Token(12, __tok0) | Token(13, __tok0) | Token(14, __tok0) | Token(15, __tok0) | Token(16, __tok0) | Token(17, __tok0) | Token(18, __tok0) | Token(19, __tok0) | Token(20, __tok0) | Token(21, __tok0) | Token(22, __tok0) | Token(23, __tok0) | Token(24, __tok0) | Token(25, __tok0) | Token(26, __tok0) | Token(27, __tok0) | Token(28, __tok0) | Token(29, __tok0) | Token(30, __tok0) | Token(31, __tok0) | Token(32, __tok0) | Token(33, __tok0) | Token(34, __tok0) | Token(35, __tok0) | Token(36, __tok0) | Token(37, __tok0) | Token(38, __tok0) | Token(39, __tok0) | Token(40, __tok0) | Token(41, __tok0) | Token(42, __tok0) | Token(43, __tok0) | Token(44, __tok0) | Token(45, __tok0) | Token(46, __tok0) | Token(47, __tok0) | Token(48, __tok0) | Token(49, __tok0) | Token(50, __tok0) | Token(51, __tok0) | Token(52, __tok0) | Token(53, __tok0) | Token(54, __tok0) | Token(55, __tok0) | Token(56, __tok0) | Token(57, __tok0) | Token(58, __tok0) | Token(59, __tok0) | Token(60, __tok0) | Token(61, __tok0) | Token(62, __tok0) | Token(63, __tok0) | Token(64, __tok0) | Token(65, __tok0) | Token(66, __tok0) | Token(67, __tok0) | Token(68, __tok0) | Token(69, __tok0) | Token(0, __tok0) | Token(1, __tok0) | Token(2, __tok0) | Token(3, __tok0) | Token(4, __tok0) if true => __Symbol::Variant0(__tok0), _ => unreachable!(), }, _ => unreachable!(), @@ -33305,6 +38581,15 @@ mod __parse__Type { __reduce121(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } 122 => { + __reduce122(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 123 => { + __reduce123(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 124 => { + __reduce124(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 125 => { // __Type = Type => ActionFn(0); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); @@ -33312,8 +38597,8 @@ mod __parse__Type { let __nt = super::__action0::<>(input, __sym0); return Some(Ok(__nt)); } - 123 => { - __reduce123(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + 126 => { + __reduce126(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } _ => panic!("invalid action code {}", __action) }; @@ -33471,14 +38756,14 @@ mod __parse__Type { _ => __symbol_type_mismatch() } } - fn __pop_Variant9< + fn __pop_Variant8< 'input, >( __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, Vec>, usize) { match __symbols.pop() { - Some((__l, __Symbol::Variant9(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant8(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -33537,14 +38822,14 @@ mod __parse__Type { _ => __symbol_type_mismatch() } } - fn __pop_Variant8< + fn __pop_Variant9< 'input, >( __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, core::option::Option, usize) { match __symbols.pop() { - Some((__l, __Symbol::Variant8(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant9(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -33612,13 +38897,13 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = BoundVar, "," => ActionFn(98); + // ( ",") = BoundVar, "," => ActionFn(101); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action98::<>(input, __sym0, __sym1); + let __nt = super::__action101::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (2, 0) } @@ -33631,10 +38916,10 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(96); + // ( ",")* = => ActionFn(99); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action96::<>(input, &__start, &__end); + let __nt = super::__action99::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (0, 1) } @@ -33647,11 +38932,11 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(97); + // ( ",")* = ( ",")+ => ActionFn(100); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action97::<>(input, __sym0); + let __nt = super::__action100::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (1, 1) } @@ -33664,13 +38949,13 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = BoundVar, "," => ActionFn(115); + // ( ",")+ = BoundVar, "," => ActionFn(118); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action115::<>(input, __sym0, __sym1); + let __nt = super::__action118::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (2, 2) } @@ -33683,14 +38968,14 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, BoundVar, "," => ActionFn(116); + // ( ",")+ = ( ",")+, BoundVar, "," => ActionFn(119); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant1(__symbols); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action116::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action119::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (3, 2) } @@ -33703,13 +38988,13 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = Expr, "," => ActionFn(108); + // ( ",") = Expr, "," => ActionFn(111); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action108::<>(input, __sym0, __sym1); + let __nt = super::__action111::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); (2, 3) } @@ -33722,10 +39007,10 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(106); + // ( ",")* = => ActionFn(109); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action106::<>(input, &__start, &__end); + let __nt = super::__action109::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (0, 4) } @@ -33738,11 +39023,11 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(107); + // ( ",")* = ( ",")+ => ActionFn(110); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action107::<>(input, __sym0); + let __nt = super::__action110::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 4) } @@ -33755,13 +39040,13 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Expr, "," => ActionFn(119); + // ( ",")+ = Expr, "," => ActionFn(122); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action119::<>(input, __sym0, __sym1); + let __nt = super::__action122::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (2, 5) } @@ -33774,14 +39059,14 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Expr, "," => ActionFn(120); + // ( ",")+ = ( ",")+, Expr, "," => ActionFn(123); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant3(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action120::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action123::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 5) } @@ -33794,13 +39079,13 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = Type, "," => ActionFn(103); + // ( ",") = Type, "," => ActionFn(106); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action103::<>(input, __sym0, __sym1); + let __nt = super::__action106::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (2, 6) } @@ -33813,10 +39098,10 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(101); + // ( ",")* = => ActionFn(104); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action101::<>(input, &__start, &__end); + let __nt = super::__action104::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (0, 7) } @@ -33829,11 +39114,11 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(102); + // ( ",")* = ( ",")+ => ActionFn(105); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action102::<>(input, __sym0); + let __nt = super::__action105::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (1, 7) } @@ -33846,13 +39131,13 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Type, "," => ActionFn(123); + // ( ",")+ = Type, "," => ActionFn(126); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action123::<>(input, __sym0, __sym1); + let __nt = super::__action126::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (2, 8) } @@ -33865,14 +39150,14 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Type, "," => ActionFn(124); + // ( ",")+ = ( ",")+, Type, "," => ActionFn(127); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant5(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action124::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action127::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (3, 8) } @@ -33885,11 +39170,11 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ArgList = Comma => ActionFn(21); + // ArgList = Comma => ActionFn(22); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action21::<>(input, __sym0); + let __nt = super::__action22::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (1, 9) } @@ -33902,14 +39187,14 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Args = "(args", ArgList, ")" => ActionFn(22); + // Args = "(args", ArgList, ")" => ActionFn(23); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant7(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action22::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action23::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (3, 10) } @@ -33922,15 +39207,36 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar = Ident => ActionFn(19); + // AssertBlock = "(", "assert", ExprList, ")" => ActionFn(89); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant8(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action89::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (4, 11) + } + pub(crate) fn __reduce18< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // BoundVar = Ident => ActionFn(20); let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action19::<>(input, __sym0); + let __nt = super::__action20::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); - (1, 11) + (1, 12) } - pub(crate) fn __reduce18< + pub(crate) fn __reduce19< 'input, >( input: &'input str, @@ -33939,18 +39245,18 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar = Ident, ":", Type => ActionFn(20); + // BoundVar = Ident, ":", Type => ActionFn(21); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant5(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action20::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action21::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); - (3, 11) + (3, 12) } - pub(crate) fn __reduce19< + pub(crate) fn __reduce20< 'input, >( input: &'input str, @@ -33959,15 +39265,15 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar? = BoundVar => ActionFn(94); + // BoundVar? = BoundVar => ActionFn(97); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action94::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (1, 12) + let __nt = super::__action97::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (1, 13) } - pub(crate) fn __reduce20< + pub(crate) fn __reduce21< 'input, >( input: &'input str, @@ -33976,14 +39282,14 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar? = => ActionFn(95); + // BoundVar? = => ActionFn(98); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action95::<>(input, &__start, &__end); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (0, 12) + let __nt = super::__action98::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (0, 13) } - pub(crate) fn __reduce21< + pub(crate) fn __reduce22< 'input, >( input: &'input str, @@ -33992,15 +39298,15 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = BoundVar => ActionFn(127); + // Comma = BoundVar => ActionFn(130); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action127::<>(input, __sym0); + let __nt = super::__action130::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (1, 13) + (1, 14) } - pub(crate) fn __reduce22< + pub(crate) fn __reduce23< 'input, >( input: &'input str, @@ -34009,14 +39315,14 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(128); + // Comma = => ActionFn(131); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action128::<>(input, &__start, &__end); + let __nt = super::__action131::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (0, 13) + (0, 14) } - pub(crate) fn __reduce23< + pub(crate) fn __reduce24< 'input, >( input: &'input str, @@ -34025,17 +39331,17 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, BoundVar => ActionFn(129); + // Comma = ( ",")+, BoundVar => ActionFn(132); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant1(__symbols); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action129::<>(input, __sym0, __sym1); + let __nt = super::__action132::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (2, 13) + (2, 14) } - pub(crate) fn __reduce24< + pub(crate) fn __reduce25< 'input, >( input: &'input str, @@ -34044,15 +39350,15 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(130); + // Comma = ( ",")+ => ActionFn(133); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action130::<>(input, __sym0); + let __nt = super::__action133::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (1, 13) + (1, 14) } - pub(crate) fn __reduce25< + pub(crate) fn __reduce26< 'input, >( input: &'input str, @@ -34061,15 +39367,15 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Expr => ActionFn(131); + // Comma = Expr => ActionFn(134); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action131::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 14) + let __nt = super::__action134::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 15) } - pub(crate) fn __reduce26< + pub(crate) fn __reduce27< 'input, >( input: &'input str, @@ -34078,14 +39384,14 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(132); + // Comma = => ActionFn(135); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action132::<>(input, &__start, &__end); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (0, 14) + let __nt = super::__action135::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (0, 15) } - pub(crate) fn __reduce27< + pub(crate) fn __reduce28< 'input, >( input: &'input str, @@ -34094,17 +39400,17 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Expr => ActionFn(133); + // Comma = ( ",")+, Expr => ActionFn(136); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant3(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action133::<>(input, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (2, 14) + let __nt = super::__action136::<>(input, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (2, 15) } - pub(crate) fn __reduce28< + pub(crate) fn __reduce29< 'input, >( input: &'input str, @@ -34113,15 +39419,15 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(134); + // Comma = ( ",")+ => ActionFn(137); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action134::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 14) + let __nt = super::__action137::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 15) } - pub(crate) fn __reduce29< + pub(crate) fn __reduce30< 'input, >( input: &'input str, @@ -34130,15 +39436,15 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Type => ActionFn(135); + // Comma = Type => ActionFn(138); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action135::<>(input, __sym0); + let __nt = super::__action138::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 15) + (1, 16) } - pub(crate) fn __reduce30< + pub(crate) fn __reduce31< 'input, >( input: &'input str, @@ -34147,14 +39453,14 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(136); + // Comma = => ActionFn(139); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action136::<>(input, &__start, &__end); + let __nt = super::__action139::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (0, 15) + (0, 16) } - pub(crate) fn __reduce31< + pub(crate) fn __reduce32< 'input, >( input: &'input str, @@ -34163,17 +39469,17 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Type => ActionFn(137); + // Comma = ( ",")+, Type => ActionFn(140); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant5(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action137::<>(input, __sym0, __sym1); + let __nt = super::__action140::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (2, 15) + (2, 16) } - pub(crate) fn __reduce32< + pub(crate) fn __reduce33< 'input, >( input: &'input str, @@ -34182,15 +39488,15 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(138); + // Comma = ( ",")+ => ActionFn(141); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action138::<>(input, __sym0); + let __nt = super::__action141::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 15) + (1, 16) } - pub(crate) fn __reduce33< + pub(crate) fn __reduce34< 'input, >( input: &'input str, @@ -34199,7 +39505,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Const = Num, UNum, ":", Type => ActionFn(28); + // Const = Num, UNum, ":", Type => ActionFn(29); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant5(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -34207,29 +39513,9 @@ mod __parse__Type { let __sym0 = __pop_Variant17(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action28::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action29::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); - (4, 16) - } - pub(crate) fn __reduce34< - 'input, - >( - input: &'input str, - __lookahead_start: Option<&usize>, - __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, - _: core::marker::PhantomData<(&'input ())>, - ) -> (usize, usize) - { - // Expr = "(", Ident, ")" => ActionFn(33); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant16(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0.clone(); - let __end = __sym2.2.clone(); - let __nt = super::__action33::<>(input, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (4, 17) } pub(crate) fn __reduce35< 'input, @@ -34240,16 +39526,16 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", Const, ")" => ActionFn(34); + // Expr = "(", Ident, ")" => ActionFn(34); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant11(__symbols); + let __sym1 = __pop_Variant16(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); let __nt = super::__action34::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (3, 18) } pub(crate) fn __reduce36< 'input, @@ -34260,16 +39546,16 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "true", ")" => ActionFn(35); + // Expr = "(", Const, ")" => ActionFn(35); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant11(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); let __nt = super::__action35::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (3, 18) } pub(crate) fn __reduce37< 'input, @@ -34280,7 +39566,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "false", ")" => ActionFn(36); + // Expr = "(", "true", ")" => ActionFn(36); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); @@ -34289,7 +39575,7 @@ mod __parse__Type { let __end = __sym2.2.clone(); let __nt = super::__action36::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (3, 18) } pub(crate) fn __reduce38< 'input, @@ -34300,17 +39586,16 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "!", Expr, ")" => ActionFn(37); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant3(__symbols); + // Expr = "(", "false", ")" => ActionFn(37); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym3.2.clone(); - let __nt = super::__action37::<>(input, __sym0, __sym1, __sym2, __sym3); + let __end = __sym2.2.clone(); + let __nt = super::__action37::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (3, 18) } pub(crate) fn __reduce39< 'input, @@ -34321,18 +39606,17 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "&&", Expr, Expr, ")" => ActionFn(38); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant3(__symbols); + // Expr = "(", "!", Expr, ")" => ActionFn(38); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym4.2.clone(); - let __nt = super::__action38::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __end = __sym3.2.clone(); + let __nt = super::__action38::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (4, 18) } pub(crate) fn __reduce40< 'input, @@ -34343,7 +39627,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "||", Expr, Expr, ")" => ActionFn(39); + // Expr = "(", "&&", Expr, Expr, ")" => ActionFn(39); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -34354,7 +39638,7 @@ mod __parse__Type { let __end = __sym4.2.clone(); let __nt = super::__action39::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce41< 'input, @@ -34365,7 +39649,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "=>", Expr, Expr, ")" => ActionFn(40); + // Expr = "(", "||", Expr, Expr, ")" => ActionFn(40); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -34376,7 +39660,7 @@ mod __parse__Type { let __end = __sym4.2.clone(); let __nt = super::__action40::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce42< 'input, @@ -34387,7 +39671,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "=", Expr, Expr, ")" => ActionFn(41); + // Expr = "(", "=>", Expr, Expr, ")" => ActionFn(41); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -34398,7 +39682,7 @@ mod __parse__Type { let __end = __sym4.2.clone(); let __nt = super::__action41::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce43< 'input, @@ -34409,7 +39693,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "<=", Expr, Expr, ")" => ActionFn(42); + // Expr = "(", "=", Expr, Expr, ")" => ActionFn(42); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -34420,7 +39704,7 @@ mod __parse__Type { let __end = __sym4.2.clone(); let __nt = super::__action42::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce44< 'input, @@ -34431,7 +39715,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "<", Expr, Expr, ")" => ActionFn(43); + // Expr = "(", "<=", Expr, Expr, ")" => ActionFn(43); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -34442,7 +39726,7 @@ mod __parse__Type { let __end = __sym4.2.clone(); let __nt = super::__action43::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce45< 'input, @@ -34453,7 +39737,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sgt", Expr, Expr, ")" => ActionFn(44); + // Expr = "(", "<", Expr, Expr, ")" => ActionFn(44); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -34464,7 +39748,7 @@ mod __parse__Type { let __end = __sym4.2.clone(); let __nt = super::__action44::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce46< 'input, @@ -34475,7 +39759,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sgte", Expr, Expr, ")" => ActionFn(45); + // Expr = "(", "sgt", Expr, Expr, ")" => ActionFn(45); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -34486,7 +39770,7 @@ mod __parse__Type { let __end = __sym4.2.clone(); let __nt = super::__action45::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce47< 'input, @@ -34497,7 +39781,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "slt", Expr, Expr, ")" => ActionFn(46); + // Expr = "(", "sgte", Expr, Expr, ")" => ActionFn(46); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -34508,7 +39792,7 @@ mod __parse__Type { let __end = __sym4.2.clone(); let __nt = super::__action46::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce48< 'input, @@ -34519,7 +39803,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "slte", Expr, Expr, ")" => ActionFn(47); + // Expr = "(", "slt", Expr, Expr, ")" => ActionFn(47); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -34530,7 +39814,7 @@ mod __parse__Type { let __end = __sym4.2.clone(); let __nt = super::__action47::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce49< 'input, @@ -34541,7 +39825,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ugt", Expr, Expr, ")" => ActionFn(48); + // Expr = "(", "slte", Expr, Expr, ")" => ActionFn(48); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -34552,7 +39836,7 @@ mod __parse__Type { let __end = __sym4.2.clone(); let __nt = super::__action48::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce50< 'input, @@ -34563,7 +39847,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ugte", Expr, Expr, ")" => ActionFn(49); + // Expr = "(", "ugt", Expr, Expr, ")" => ActionFn(49); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -34574,7 +39858,7 @@ mod __parse__Type { let __end = __sym4.2.clone(); let __nt = super::__action49::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce51< 'input, @@ -34585,7 +39869,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ult", Expr, Expr, ")" => ActionFn(50); + // Expr = "(", "ugte", Expr, Expr, ")" => ActionFn(50); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -34596,7 +39880,7 @@ mod __parse__Type { let __end = __sym4.2.clone(); let __nt = super::__action50::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce52< 'input, @@ -34607,7 +39891,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ulte", Expr, Expr, ")" => ActionFn(51); + // Expr = "(", "ult", Expr, Expr, ")" => ActionFn(51); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -34618,7 +39902,7 @@ mod __parse__Type { let __end = __sym4.2.clone(); let __nt = super::__action51::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce53< 'input, @@ -34629,17 +39913,18 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "-", Expr, ")" => ActionFn(52); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); + // Expr = "(", "ulte", Expr, Expr, ")" => ActionFn(52); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym3.2.clone(); - let __nt = super::__action52::<>(input, __sym0, __sym1, __sym2, __sym3); + let __end = __sym4.2.clone(); + let __nt = super::__action52::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (5, 18) } pub(crate) fn __reduce54< 'input, @@ -34650,7 +39935,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "~", Expr, ")" => ActionFn(53); + // Expr = "(", "-", Expr, ")" => ActionFn(53); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -34660,7 +39945,7 @@ mod __parse__Type { let __end = __sym3.2.clone(); let __nt = super::__action53::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } pub(crate) fn __reduce55< 'input, @@ -34671,7 +39956,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "clz", Expr, ")" => ActionFn(54); + // Expr = "(", "~", Expr, ")" => ActionFn(54); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -34681,7 +39966,7 @@ mod __parse__Type { let __end = __sym3.2.clone(); let __nt = super::__action54::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } pub(crate) fn __reduce56< 'input, @@ -34692,7 +39977,28 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "a64clz", Expr, Expr, ")" => ActionFn(55); + // Expr = "(", "clz", Expr, ")" => ActionFn(55); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action55::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (4, 18) + } + pub(crate) fn __reduce57< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "a64clz", Expr, Expr, ")" => ActionFn(56); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -34701,11 +40007,11 @@ mod __parse__Type { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action55::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action56::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce57< + pub(crate) fn __reduce58< 'input, >( input: &'input str, @@ -34714,7 +40020,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "cls", Expr, ")" => ActionFn(56); + // Expr = "(", "cls", Expr, ")" => ActionFn(57); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -34722,11 +40028,11 @@ mod __parse__Type { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action56::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action57::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce58< + pub(crate) fn __reduce59< 'input, >( input: &'input str, @@ -34735,7 +40041,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "a64cls", Expr, Expr, ")" => ActionFn(57); + // Expr = "(", "a64cls", Expr, Expr, ")" => ActionFn(58); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -34744,11 +40050,11 @@ mod __parse__Type { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action57::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action58::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce59< + pub(crate) fn __reduce60< 'input, >( input: &'input str, @@ -34757,7 +40063,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "rev", Expr, ")" => ActionFn(58); + // Expr = "(", "rev", Expr, ")" => ActionFn(59); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -34765,11 +40071,11 @@ mod __parse__Type { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action58::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action59::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce60< + pub(crate) fn __reduce61< 'input, >( input: &'input str, @@ -34778,7 +40084,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "a64rev", Expr, Expr, ")" => ActionFn(59); + // Expr = "(", "a64rev", Expr, Expr, ")" => ActionFn(60); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -34787,11 +40093,11 @@ mod __parse__Type { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action59::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action60::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce61< + pub(crate) fn __reduce62< 'input, >( input: &'input str, @@ -34800,7 +40106,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "subs", Expr, Expr, Expr, ")" => ActionFn(60); + // Expr = "(", "subs", Expr, Expr, Expr, ")" => ActionFn(61); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant3(__symbols); @@ -34810,31 +40116,9 @@ mod __parse__Type { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym5.2.clone(); - let __nt = super::__action60::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action61::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (6, 17) - } - pub(crate) fn __reduce62< - 'input, - >( - input: &'input str, - __lookahead_start: Option<&usize>, - __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, - _: core::marker::PhantomData<(&'input ())>, - ) -> (usize, usize) - { - // Expr = "(", "*", Expr, Expr, ")" => ActionFn(61); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant3(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0.clone(); - let __end = __sym4.2.clone(); - let __nt = super::__action61::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); - __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (6, 18) } pub(crate) fn __reduce63< 'input, @@ -34845,7 +40129,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "/", Expr, Expr, ")" => ActionFn(62); + // Expr = "(", "*", Expr, Expr, ")" => ActionFn(62); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -34856,7 +40140,7 @@ mod __parse__Type { let __end = __sym4.2.clone(); let __nt = super::__action62::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce64< 'input, @@ -34867,7 +40151,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sdiv", Expr, Expr, ")" => ActionFn(63); + // Expr = "(", "/", Expr, Expr, ")" => ActionFn(63); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -34878,7 +40162,7 @@ mod __parse__Type { let __end = __sym4.2.clone(); let __nt = super::__action63::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce65< 'input, @@ -34889,7 +40173,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "+", Expr, Expr, ")" => ActionFn(64); + // Expr = "(", "sdiv", Expr, Expr, ")" => ActionFn(64); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -34900,7 +40184,7 @@ mod __parse__Type { let __end = __sym4.2.clone(); let __nt = super::__action64::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce66< 'input, @@ -34911,7 +40195,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "-", Expr, Expr, ")" => ActionFn(65); + // Expr = "(", "+", Expr, Expr, ")" => ActionFn(65); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -34922,7 +40206,7 @@ mod __parse__Type { let __end = __sym4.2.clone(); let __nt = super::__action65::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce67< 'input, @@ -34933,7 +40217,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "urem", Expr, Expr, ")" => ActionFn(66); + // Expr = "(", "-", Expr, Expr, ")" => ActionFn(66); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -34944,7 +40228,7 @@ mod __parse__Type { let __end = __sym4.2.clone(); let __nt = super::__action66::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce68< 'input, @@ -34955,7 +40239,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "srem", Expr, Expr, ")" => ActionFn(67); + // Expr = "(", "urem", Expr, Expr, ")" => ActionFn(67); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -34966,7 +40250,7 @@ mod __parse__Type { let __end = __sym4.2.clone(); let __nt = super::__action67::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce69< 'input, @@ -34977,7 +40261,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "&", Expr, Expr, ")" => ActionFn(68); + // Expr = "(", "srem", Expr, Expr, ")" => ActionFn(68); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -34988,7 +40272,7 @@ mod __parse__Type { let __end = __sym4.2.clone(); let __nt = super::__action68::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce70< 'input, @@ -34999,7 +40283,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "|", Expr, Expr, ")" => ActionFn(69); + // Expr = "(", "&", Expr, Expr, ")" => ActionFn(69); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -35010,7 +40294,7 @@ mod __parse__Type { let __end = __sym4.2.clone(); let __nt = super::__action69::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce71< 'input, @@ -35021,7 +40305,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "xor", Expr, Expr, ")" => ActionFn(70); + // Expr = "(", "|", Expr, Expr, ")" => ActionFn(70); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -35032,7 +40316,7 @@ mod __parse__Type { let __end = __sym4.2.clone(); let __nt = super::__action70::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce72< 'input, @@ -35043,7 +40327,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "rotl", Expr, Expr, ")" => ActionFn(71); + // Expr = "(", "xor", Expr, Expr, ")" => ActionFn(71); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -35054,7 +40338,7 @@ mod __parse__Type { let __end = __sym4.2.clone(); let __nt = super::__action71::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce73< 'input, @@ -35065,7 +40349,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "rotr", Expr, Expr, ")" => ActionFn(72); + // Expr = "(", "rotl", Expr, Expr, ")" => ActionFn(72); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -35076,7 +40360,7 @@ mod __parse__Type { let __end = __sym4.2.clone(); let __nt = super::__action72::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce74< 'input, @@ -35087,7 +40371,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "shl", Expr, Expr, ")" => ActionFn(73); + // Expr = "(", "rotr", Expr, Expr, ")" => ActionFn(73); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -35098,7 +40382,7 @@ mod __parse__Type { let __end = __sym4.2.clone(); let __nt = super::__action73::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce75< 'input, @@ -35109,7 +40393,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "shr", Expr, Expr, ")" => ActionFn(74); + // Expr = "(", "shl", Expr, Expr, ")" => ActionFn(74); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -35120,7 +40404,7 @@ mod __parse__Type { let __end = __sym4.2.clone(); let __nt = super::__action74::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce76< 'input, @@ -35131,7 +40415,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ashr", Expr, Expr, ")" => ActionFn(75); + // Expr = "(", "shr", Expr, Expr, ")" => ActionFn(75); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -35142,7 +40426,7 @@ mod __parse__Type { let __end = __sym4.2.clone(); let __nt = super::__action75::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce77< 'input, @@ -35153,18 +40437,18 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "zero_ext", Width, Expr, ")" => ActionFn(76); + // Expr = "(", "ashr", Expr, Expr, ")" => ActionFn(76); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant24(__symbols); + let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action76::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce78< 'input, @@ -35175,18 +40459,18 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "zero_ext", Expr, Expr, ")" => ActionFn(77); + // Expr = "(", "zero_ext", Width, Expr, ")" => ActionFn(77); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant24(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action77::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce79< 'input, @@ -35197,18 +40481,18 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sign_ext", Width, Expr, ")" => ActionFn(78); + // Expr = "(", "zero_ext", Expr, Expr, ")" => ActionFn(78); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant24(__symbols); + let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action78::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce80< 'input, @@ -35219,18 +40503,18 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sign_ext", Expr, Expr, ")" => ActionFn(79); + // Expr = "(", "sign_ext", Width, Expr, ")" => ActionFn(79); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant24(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action79::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce81< 'input, @@ -35241,7 +40525,29 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "extract", UNum, UNum, Expr, ")" => ActionFn(80); + // Expr = "(", "sign_ext", Expr, Expr, ")" => ActionFn(80); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action80::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce82< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "extract", UNum, UNum, Expr, ")" => ActionFn(81); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant3(__symbols); @@ -35251,11 +40557,11 @@ mod __parse__Type { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym5.2.clone(); - let __nt = super::__action80::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action81::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (6, 17) + (6, 18) } - pub(crate) fn __reduce82< + pub(crate) fn __reduce83< 'input, >( input: &'input str, @@ -35264,7 +40570,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "conv_to", Width, Expr, ")" => ActionFn(81); + // Expr = "(", "conv_to", Width, Expr, ")" => ActionFn(82); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -35273,11 +40579,11 @@ mod __parse__Type { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action81::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action82::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce83< + pub(crate) fn __reduce84< 'input, >( input: &'input str, @@ -35286,7 +40592,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "conv_to", Expr, Expr, ")" => ActionFn(82); + // Expr = "(", "conv_to", Expr, Expr, ")" => ActionFn(83); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -35295,11 +40601,11 @@ mod __parse__Type { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action82::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action83::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce84< + pub(crate) fn __reduce85< 'input, >( input: &'input str, @@ -35308,7 +40614,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "if", Expr, Expr, Expr, ")" => ActionFn(83); + // Expr = "(", "if", Expr, Expr, Expr, ")" => ActionFn(84); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant3(__symbols); @@ -35318,11 +40624,11 @@ mod __parse__Type { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym5.2.clone(); - let __nt = super::__action83::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action84::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (6, 17) + (6, 18) } - pub(crate) fn __reduce85< + pub(crate) fn __reduce86< 'input, >( input: &'input str, @@ -35331,7 +40637,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "switch", Expr, Pair+, ")" => ActionFn(84); + // Expr = "(", "switch", Expr, Pair+, ")" => ActionFn(85); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant19(__symbols); @@ -35340,11 +40646,11 @@ mod __parse__Type { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action84::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action85::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce86< + pub(crate) fn __reduce87< 'input, >( input: &'input str, @@ -35353,7 +40659,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "int2bv", UNum, Expr, ")" => ActionFn(85); + // Expr = "(", "int2bv", UNum, Expr, ")" => ActionFn(86); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -35362,11 +40668,11 @@ mod __parse__Type { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action85::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action86::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce87< + pub(crate) fn __reduce88< 'input, >( input: &'input str, @@ -35375,7 +40681,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "bv2int", Expr, ")" => ActionFn(86); + // Expr = "(", "bv2int", Expr, ")" => ActionFn(87); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -35383,11 +40689,11 @@ mod __parse__Type { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action86::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action87::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce88< + pub(crate) fn __reduce89< 'input, >( input: &'input str, @@ -35396,7 +40702,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "widthof", Expr, ")" => ActionFn(87); + // Expr = "(", "widthof", Expr, ")" => ActionFn(88); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -35404,11 +40710,11 @@ mod __parse__Type { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action87::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action88::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce89< + pub(crate) fn __reduce90< 'input, >( input: &'input str, @@ -35417,15 +40723,15 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr? = Expr => ActionFn(104); + // Expr? = Expr => ActionFn(107); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action104::<>(input, __sym0); + let __nt = super::__action107::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (1, 18) + (1, 19) } - pub(crate) fn __reduce90< + pub(crate) fn __reduce91< 'input, >( input: &'input str, @@ -35434,14 +40740,14 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr? = => ActionFn(105); + // Expr? = => ActionFn(108); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action105::<>(input, &__start, &__end); + let __nt = super::__action108::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (0, 18) + (0, 19) } - pub(crate) fn __reduce91< + pub(crate) fn __reduce92< 'input, >( input: &'input str, @@ -35450,15 +40756,15 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprList = Comma => ActionFn(24); - let __sym0 = __pop_Variant9(__symbols); + // ExprList = Comma => ActionFn(25); + let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action24::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 19) + let __nt = super::__action25::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 20) } - pub(crate) fn __reduce92< + pub(crate) fn __reduce93< 'input, >( input: &'input str, @@ -35467,7 +40773,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Function = Ident, "(", ArgList, ")", "(", Type, ")", "{", Expr, "}" => ActionFn(29); + // Function = Ident, "(", ArgList, ")", "(", Type, ")", "{", Expr, "}" => ActionFn(30); assert!(__symbols.len() >= 10); let __sym9 = __pop_Variant0(__symbols); let __sym8 = __pop_Variant3(__symbols); @@ -35481,11 +40787,11 @@ mod __parse__Type { let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0.clone(); let __end = __sym9.2.clone(); - let __nt = super::__action29::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); + let __nt = super::__action30::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); - (10, 20) + (10, 21) } - pub(crate) fn __reduce93< + pub(crate) fn __reduce94< 'input, >( input: &'input str, @@ -35494,19 +40800,19 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // FunctionApplication = Expr, "(", ExprList, ")" => ActionFn(30); + // FunctionApplication = Expr, "(", ExprList, ")" => ActionFn(31); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant9(__symbols); + let __sym2 = __pop_Variant8(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action30::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action31::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (4, 21) + (4, 22) } - pub(crate) fn __reduce94< + pub(crate) fn __reduce95< 'input, >( input: &'input str, @@ -35515,7 +40821,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // FunctionType = "func", "(", TypeList, ")", "(", Type, ")" => ActionFn(27); + // FunctionType = "func", "(", TypeList, ")", "(", Type, ")" => ActionFn(28); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant5(__symbols); @@ -35526,11 +40832,11 @@ mod __parse__Type { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym6.2.clone(); - let __nt = super::__action27::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action28::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (7, 22) + (7, 23) } - pub(crate) fn __reduce95< + pub(crate) fn __reduce96< 'input, >( input: &'input str, @@ -35539,15 +40845,15 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"[A-Za-z]"# => ActionFn(12); + // Ident = r#"[A-Za-z]"# => ActionFn(13); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action12::<>(input, __sym0); + let __nt = super::__action13::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 23) + (1, 24) } - pub(crate) fn __reduce96< + pub(crate) fn __reduce97< 'input, >( input: &'input str, @@ -35556,15 +40862,15 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"[A-Zac-z][\\.\\w]+"# => ActionFn(13); + // Ident = r#"[A-Zac-z][\\.\\w]+"# => ActionFn(14); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action13::<>(input, __sym0); + let __nt = super::__action14::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 23) + (1, 24) } - pub(crate) fn __reduce97< + pub(crate) fn __reduce98< 'input, >( input: &'input str, @@ -35573,15 +40879,15 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"b[\\w&&[^v]][\\.\\w]*"# => ActionFn(14); + // Ident = r#"b[\\w&&[^v]][\\.\\w]*"# => ActionFn(15); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action14::<>(input, __sym0); + let __nt = super::__action15::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 23) + (1, 24) } - pub(crate) fn __reduce98< + pub(crate) fn __reduce99< 'input, >( input: &'input str, @@ -35590,15 +40896,15 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Num = r#"-?[0-9]+i"# => ActionFn(11); + // Num = r#"-?[0-9]+i"# => ActionFn(12); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action11::<>(input, __sym0); + let __nt = super::__action12::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant17(__nt), __end)); - (1, 24) + (1, 25) } - pub(crate) fn __reduce99< + pub(crate) fn __reduce100< 'input, >( input: &'input str, @@ -35607,7 +40913,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Pair = "(", Expr, Expr, ")" => ActionFn(25); + // Pair = "(", Expr, Expr, ")" => ActionFn(26); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -35615,11 +40921,11 @@ mod __parse__Type { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action25::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action26::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant18(__nt), __end)); - (4, 25) + (4, 26) } - pub(crate) fn __reduce100< + pub(crate) fn __reduce101< 'input, >( input: &'input str, @@ -35628,15 +40934,15 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Pair+ = Pair => ActionFn(89); + // Pair+ = Pair => ActionFn(92); let __sym0 = __pop_Variant18(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action89::<>(input, __sym0); + let __nt = super::__action92::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant19(__nt), __end)); - (1, 26) + (1, 27) } - pub(crate) fn __reduce101< + pub(crate) fn __reduce102< 'input, >( input: &'input str, @@ -35645,17 +40951,17 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Pair+ = Pair+, Pair => ActionFn(90); + // Pair+ = Pair+, Pair => ActionFn(93); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant18(__symbols); let __sym0 = __pop_Variant19(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action90::<>(input, __sym0, __sym1); + let __nt = super::__action93::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant19(__nt), __end)); - (2, 26) + (2, 27) } - pub(crate) fn __reduce102< + pub(crate) fn __reduce103< 'input, >( input: &'input str, @@ -35664,11 +40970,40 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // TermAnnotation = "(", "spec", TermSignature, "(", "assertions", ExprList, ")", ")" => ActionFn(88); + // TermAnnotation = "(", "spec", TermSignature, "(", "assume", ExprList, ")", "(", "assert", ExprList, ")", ")" => ActionFn(90); + assert!(__symbols.len() >= 12); + let __sym11 = __pop_Variant0(__symbols); + let __sym10 = __pop_Variant0(__symbols); + let __sym9 = __pop_Variant8(__symbols); + let __sym8 = __pop_Variant0(__symbols); + let __sym7 = __pop_Variant0(__symbols); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant8(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant21(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym11.2.clone(); + let __nt = super::__action90::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9, __sym10, __sym11); + __symbols.push((__start, __Symbol::Variant20(__nt), __end)); + (12, 28) + } + pub(crate) fn __reduce104< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // TermAnnotation = "(", "spec", TermSignature, "(", "assume", ExprList, ")", ")" => ActionFn(91); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant9(__symbols); + let __sym5 = __pop_Variant8(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant21(__symbols); @@ -35676,11 +41011,11 @@ mod __parse__Type { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym7.2.clone(); - let __nt = super::__action88::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); + let __nt = super::__action91::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant20(__nt), __end)); - (8, 27) + (8, 28) } - pub(crate) fn __reduce103< + pub(crate) fn __reduce105< 'input, >( input: &'input str, @@ -35689,7 +41024,7 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // TermSignature = "(", "sig", Args, "(", BoundVar, ")", ")" => ActionFn(26); + // TermSignature = "(", "sig", Args, "(", BoundVar, ")", ")" => ActionFn(27); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -35700,11 +41035,11 @@ mod __parse__Type { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym6.2.clone(); - let __nt = super::__action26::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action27::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant21(__nt), __end)); - (7, 28) + (7, 29) } - pub(crate) fn __reduce104< + pub(crate) fn __reduce106< 'input, >( input: &'input str, @@ -35713,15 +41048,15 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "bv" => ActionFn(15); + // Type = "bv" => ActionFn(16); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action15::<>(input, __sym0); + let __nt = super::__action16::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 29) + (1, 30) } - pub(crate) fn __reduce105< + pub(crate) fn __reduce107< 'input, >( input: &'input str, @@ -35730,17 +41065,17 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "bv", UNum => ActionFn(16); + // Type = "bv", UNum => ActionFn(17); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant23(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action16::<>(input, __sym0, __sym1); + let __nt = super::__action17::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (2, 29) + (2, 30) } - pub(crate) fn __reduce106< + pub(crate) fn __reduce108< 'input, >( input: &'input str, @@ -35749,15 +41084,15 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "isleType" => ActionFn(17); + // Type = "isleType" => ActionFn(18); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action17::<>(input, __sym0); + let __nt = super::__action18::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 29) + (1, 30) } - pub(crate) fn __reduce107< + pub(crate) fn __reduce109< 'input, >( input: &'input str, @@ -35766,15 +41101,15 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "bool" => ActionFn(18); + // Type = "bool" => ActionFn(19); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action18::<>(input, __sym0); + let __nt = super::__action19::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 29) + (1, 30) } - pub(crate) fn __reduce108< + pub(crate) fn __reduce110< 'input, >( input: &'input str, @@ -35783,15 +41118,15 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type? = Type => ActionFn(99); + // Type? = Type => ActionFn(102); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action99::<>(input, __sym0); + let __nt = super::__action102::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant22(__nt), __end)); - (1, 30) + (1, 31) } - pub(crate) fn __reduce109< + pub(crate) fn __reduce111< 'input, >( input: &'input str, @@ -35800,14 +41135,14 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type? = => ActionFn(100); + // Type? = => ActionFn(103); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action100::<>(input, &__start, &__end); + let __nt = super::__action103::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant22(__nt), __end)); - (0, 30) + (0, 31) } - pub(crate) fn __reduce110< + pub(crate) fn __reduce112< 'input, >( input: &'input str, @@ -35816,15 +41151,15 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // TypeList = Comma => ActionFn(23); + // TypeList = Comma => ActionFn(24); let __sym0 = __pop_Variant10(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action23::<>(input, __sym0); + let __nt = super::__action24::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 31) + (1, 32) } - pub(crate) fn __reduce111< + pub(crate) fn __reduce113< 'input, >( input: &'input str, @@ -35833,15 +41168,15 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // UNum = r#"[0-9]+"# => ActionFn(10); + // UNum = r#"[0-9]+"# => ActionFn(11); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action10::<>(input, __sym0); + let __nt = super::__action11::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant23(__nt), __end)); - (1, 32) + (1, 33) } - pub(crate) fn __reduce112< + pub(crate) fn __reduce114< 'input, >( input: &'input str, @@ -35850,18 +41185,18 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Width = "(", "regwidth", ")" => ActionFn(31); + // Width = "(", "regwidth", ")" => ActionFn(32); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action31::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action32::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (3, 33) + (3, 34) } - pub(crate) fn __reduce113< + pub(crate) fn __reduce115< 'input, >( input: &'input str, @@ -35870,18 +41205,35 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Width = "(", UNum, ")" => ActionFn(32); + // Width = "(", UNum, ")" => ActionFn(33); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant23(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action32::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action33::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (3, 33) + (3, 34) } - pub(crate) fn __reduce114< + pub(crate) fn __reduce116< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // __AssertBlock = AssertBlock => ActionFn(9); + let __sym0 = __pop_Variant8(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action9::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 35) + } + pub(crate) fn __reduce117< 'input, >( input: &'input str, @@ -35896,9 +41248,9 @@ mod __parse__Type { let __end = __sym0.2.clone(); let __nt = super::__action1::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); - (1, 34) + (1, 36) } - pub(crate) fn __reduce115< + pub(crate) fn __reduce118< 'input, >( input: &'input str, @@ -35913,9 +41265,9 @@ mod __parse__Type { let __end = __sym0.2.clone(); let __nt = super::__action4::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); - (1, 35) + (1, 37) } - pub(crate) fn __reduce116< + pub(crate) fn __reduce119< 'input, >( input: &'input str, @@ -35930,9 +41282,9 @@ mod __parse__Type { let __end = __sym0.2.clone(); let __nt = super::__action8::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (1, 36) + (1, 38) } - pub(crate) fn __reduce117< + pub(crate) fn __reduce120< 'input, >( input: &'input str, @@ -35947,9 +41299,9 @@ mod __parse__Type { let __end = __sym0.2.clone(); let __nt = super::__action5::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); - (1, 37) + (1, 39) } - pub(crate) fn __reduce118< + pub(crate) fn __reduce121< 'input, >( input: &'input str, @@ -35964,9 +41316,9 @@ mod __parse__Type { let __end = __sym0.2.clone(); let __nt = super::__action6::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 38) + (1, 40) } - pub(crate) fn __reduce119< + pub(crate) fn __reduce122< 'input, >( input: &'input str, @@ -35981,9 +41333,9 @@ mod __parse__Type { let __end = __sym0.2.clone(); let __nt = super::__action3::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 39) + (1, 41) } - pub(crate) fn __reduce120< + pub(crate) fn __reduce123< 'input, >( input: &'input str, @@ -35992,15 +41344,15 @@ mod __parse__Type { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // __TermAnnotation = TermAnnotation => ActionFn(9); + // __TermAnnotation = TermAnnotation => ActionFn(10); let __sym0 = __pop_Variant20(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action9::<>(input, __sym0); + let __nt = super::__action10::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant20(__nt), __end)); - (1, 40) + (1, 42) } - pub(crate) fn __reduce121< + pub(crate) fn __reduce124< 'input, >( input: &'input str, @@ -36015,9 +41367,9 @@ mod __parse__Type { let __end = __sym0.2.clone(); let __nt = super::__action2::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant21(__nt), __end)); - (1, 41) + (1, 43) } - pub(crate) fn __reduce123< + pub(crate) fn __reduce126< 'input, >( input: &'input str, @@ -36032,7 +41384,7 @@ mod __parse__Type { let __end = __sym0.2.clone(); let __nt = super::__action7::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (1, 43) + (1, 45) } } pub use self::__parse__Type::TypeParser; @@ -36062,8 +41414,8 @@ mod __parse__Width { Variant5(Type), Variant6(alloc::vec::Vec), Variant7(Vec), - Variant8(core::option::Option), - Variant9(Vec>), + Variant8(Vec>), + Variant9(core::option::Option), Variant10(Vec), Variant11(Const), Variant12(core::option::Option>), @@ -36082,24 +41434,24 @@ mod __parse__Width { } const __ACTION: &[i8] = &[ // State 0 - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, // State 2 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 3 - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 4 - 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 5 - 0, 0, 0, 0, 0, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 6 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 7 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]; fn __action(state: i8, integer: usize) -> i8 { - __ACTION[(state as usize) * 69 + integer] + __ACTION[(state as usize) * 70 + integer] } const __EOF_ACTION: &[i8] = &[ // State 0 @@ -36107,7 +41459,7 @@ mod __parse__Width { // State 1 0, // State 2 - -124, + -127, // State 3 0, // State 4 @@ -36115,14 +41467,14 @@ mod __parse__Width { // State 5 0, // State 6 - -114, + -116, // State 7 - -113, + -115, ]; fn __goto(state: i8, nt: usize) -> i8 { match nt { - 32 => 3, - 33 => 2, + 33 => 3, + 34 => 2, _ => 0, } } @@ -36148,7 +41500,8 @@ mod __parse__Width { r###""a64clz""###, r###""a64rev""###, r###""ashr""###, - r###""assertions""###, + r###""assert""###, + r###""assume""###, r###""bool""###, r###""bv""###, r###""bv2int""###, @@ -36249,7 +41602,7 @@ mod __parse__Width { #[inline] fn error_action(&self, state: i8) -> i8 { - __action(state, 69 - 1) + __action(state, 70 - 1) } #[inline] @@ -36376,11 +41729,12 @@ mod __parse__Width { Token(66, _) if true => Some(61), Token(67, _) if true => Some(62), Token(68, _) if true => Some(63), - Token(0, _) if true => Some(64), - Token(1, _) if true => Some(65), - Token(2, _) if true => Some(66), - Token(3, _) if true => Some(67), - Token(4, _) if true => Some(68), + Token(69, _) if true => Some(64), + Token(0, _) if true => Some(65), + Token(1, _) if true => Some(66), + Token(2, _) if true => Some(67), + Token(3, _) if true => Some(68), + Token(4, _) if true => Some(69), _ => None, } } @@ -36393,8 +41747,8 @@ mod __parse__Width { ) -> __Symbol<'input> { match __token_index { - 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 => match __token { - Token(5, __tok0) | Token(6, __tok0) | Token(7, __tok0) | Token(8, __tok0) | Token(9, __tok0) | Token(10, __tok0) | Token(11, __tok0) | Token(12, __tok0) | Token(13, __tok0) | Token(14, __tok0) | Token(15, __tok0) | Token(16, __tok0) | Token(17, __tok0) | Token(18, __tok0) | Token(19, __tok0) | Token(20, __tok0) | Token(21, __tok0) | Token(22, __tok0) | Token(23, __tok0) | Token(24, __tok0) | Token(25, __tok0) | Token(26, __tok0) | Token(27, __tok0) | Token(28, __tok0) | Token(29, __tok0) | Token(30, __tok0) | Token(31, __tok0) | Token(32, __tok0) | Token(33, __tok0) | Token(34, __tok0) | Token(35, __tok0) | Token(36, __tok0) | Token(37, __tok0) | Token(38, __tok0) | Token(39, __tok0) | Token(40, __tok0) | Token(41, __tok0) | Token(42, __tok0) | Token(43, __tok0) | Token(44, __tok0) | Token(45, __tok0) | Token(46, __tok0) | Token(47, __tok0) | Token(48, __tok0) | Token(49, __tok0) | Token(50, __tok0) | Token(51, __tok0) | Token(52, __tok0) | Token(53, __tok0) | Token(54, __tok0) | Token(55, __tok0) | Token(56, __tok0) | Token(57, __tok0) | Token(58, __tok0) | Token(59, __tok0) | Token(60, __tok0) | Token(61, __tok0) | Token(62, __tok0) | Token(63, __tok0) | Token(64, __tok0) | Token(65, __tok0) | Token(66, __tok0) | Token(67, __tok0) | Token(68, __tok0) | Token(0, __tok0) | Token(1, __tok0) | Token(2, __tok0) | Token(3, __tok0) | Token(4, __tok0) if true => __Symbol::Variant0(__tok0), + 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 => match __token { + Token(5, __tok0) | Token(6, __tok0) | Token(7, __tok0) | Token(8, __tok0) | Token(9, __tok0) | Token(10, __tok0) | Token(11, __tok0) | Token(12, __tok0) | Token(13, __tok0) | Token(14, __tok0) | Token(15, __tok0) | Token(16, __tok0) | Token(17, __tok0) | Token(18, __tok0) | Token(19, __tok0) | Token(20, __tok0) | Token(21, __tok0) | Token(22, __tok0) | Token(23, __tok0) | Token(24, __tok0) | Token(25, __tok0) | Token(26, __tok0) | Token(27, __tok0) | Token(28, __tok0) | Token(29, __tok0) | Token(30, __tok0) | Token(31, __tok0) | Token(32, __tok0) | Token(33, __tok0) | Token(34, __tok0) | Token(35, __tok0) | Token(36, __tok0) | Token(37, __tok0) | Token(38, __tok0) | Token(39, __tok0) | Token(40, __tok0) | Token(41, __tok0) | Token(42, __tok0) | Token(43, __tok0) | Token(44, __tok0) | Token(45, __tok0) | Token(46, __tok0) | Token(47, __tok0) | Token(48, __tok0) | Token(49, __tok0) | Token(50, __tok0) | Token(51, __tok0) | Token(52, __tok0) | Token(53, __tok0) | Token(54, __tok0) | Token(55, __tok0) | Token(56, __tok0) | Token(57, __tok0) | Token(58, __tok0) | Token(59, __tok0) | Token(60, __tok0) | Token(61, __tok0) | Token(62, __tok0) | Token(63, __tok0) | Token(64, __tok0) | Token(65, __tok0) | Token(66, __tok0) | Token(67, __tok0) | Token(68, __tok0) | Token(69, __tok0) | Token(0, __tok0) | Token(1, __tok0) | Token(2, __tok0) | Token(3, __tok0) | Token(4, __tok0) if true => __Symbol::Variant0(__tok0), _ => unreachable!(), }, _ => unreachable!(), @@ -36814,6 +42168,15 @@ mod __parse__Width { __reduce122(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } 123 => { + __reduce123(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 124 => { + __reduce124(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 125 => { + __reduce125(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 126 => { // __Width = Width => ActionFn(7); let __sym0 = __pop_Variant24(__symbols); let __start = __sym0.0.clone(); @@ -36977,14 +42340,14 @@ mod __parse__Width { _ => __symbol_type_mismatch() } } - fn __pop_Variant9< + fn __pop_Variant8< 'input, >( __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, Vec>, usize) { match __symbols.pop() { - Some((__l, __Symbol::Variant9(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant8(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -37043,14 +42406,14 @@ mod __parse__Width { _ => __symbol_type_mismatch() } } - fn __pop_Variant8< + fn __pop_Variant9< 'input, >( __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, core::option::Option, usize) { match __symbols.pop() { - Some((__l, __Symbol::Variant8(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant9(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -37118,13 +42481,13 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = BoundVar, "," => ActionFn(98); + // ( ",") = BoundVar, "," => ActionFn(101); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action98::<>(input, __sym0, __sym1); + let __nt = super::__action101::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (2, 0) } @@ -37137,10 +42500,10 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(96); + // ( ",")* = => ActionFn(99); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action96::<>(input, &__start, &__end); + let __nt = super::__action99::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (0, 1) } @@ -37153,11 +42516,11 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(97); + // ( ",")* = ( ",")+ => ActionFn(100); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action97::<>(input, __sym0); + let __nt = super::__action100::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (1, 1) } @@ -37170,13 +42533,13 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = BoundVar, "," => ActionFn(115); + // ( ",")+ = BoundVar, "," => ActionFn(118); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action115::<>(input, __sym0, __sym1); + let __nt = super::__action118::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (2, 2) } @@ -37189,14 +42552,14 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, BoundVar, "," => ActionFn(116); + // ( ",")+ = ( ",")+, BoundVar, "," => ActionFn(119); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant1(__symbols); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action116::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action119::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (3, 2) } @@ -37209,13 +42572,13 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = Expr, "," => ActionFn(108); + // ( ",") = Expr, "," => ActionFn(111); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action108::<>(input, __sym0, __sym1); + let __nt = super::__action111::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); (2, 3) } @@ -37228,10 +42591,10 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(106); + // ( ",")* = => ActionFn(109); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action106::<>(input, &__start, &__end); + let __nt = super::__action109::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (0, 4) } @@ -37244,11 +42607,11 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(107); + // ( ",")* = ( ",")+ => ActionFn(110); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action107::<>(input, __sym0); + let __nt = super::__action110::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 4) } @@ -37261,13 +42624,13 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Expr, "," => ActionFn(119); + // ( ",")+ = Expr, "," => ActionFn(122); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action119::<>(input, __sym0, __sym1); + let __nt = super::__action122::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (2, 5) } @@ -37280,14 +42643,14 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Expr, "," => ActionFn(120); + // ( ",")+ = ( ",")+, Expr, "," => ActionFn(123); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant3(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action120::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action123::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 5) } @@ -37300,13 +42663,13 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = Type, "," => ActionFn(103); + // ( ",") = Type, "," => ActionFn(106); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action103::<>(input, __sym0, __sym1); + let __nt = super::__action106::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (2, 6) } @@ -37319,10 +42682,10 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(101); + // ( ",")* = => ActionFn(104); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action101::<>(input, &__start, &__end); + let __nt = super::__action104::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (0, 7) } @@ -37335,11 +42698,11 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(102); + // ( ",")* = ( ",")+ => ActionFn(105); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action102::<>(input, __sym0); + let __nt = super::__action105::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (1, 7) } @@ -37352,13 +42715,13 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Type, "," => ActionFn(123); + // ( ",")+ = Type, "," => ActionFn(126); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action123::<>(input, __sym0, __sym1); + let __nt = super::__action126::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (2, 8) } @@ -37371,14 +42734,14 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Type, "," => ActionFn(124); + // ( ",")+ = ( ",")+, Type, "," => ActionFn(127); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant5(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action124::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action127::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (3, 8) } @@ -37391,11 +42754,11 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ArgList = Comma => ActionFn(21); + // ArgList = Comma => ActionFn(22); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action21::<>(input, __sym0); + let __nt = super::__action22::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (1, 9) } @@ -37408,14 +42771,14 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Args = "(args", ArgList, ")" => ActionFn(22); + // Args = "(args", ArgList, ")" => ActionFn(23); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant7(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action22::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action23::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (3, 10) } @@ -37428,15 +42791,36 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar = Ident => ActionFn(19); + // AssertBlock = "(", "assert", ExprList, ")" => ActionFn(89); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant8(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action89::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (4, 11) + } + pub(crate) fn __reduce18< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // BoundVar = Ident => ActionFn(20); let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action19::<>(input, __sym0); + let __nt = super::__action20::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); - (1, 11) + (1, 12) } - pub(crate) fn __reduce18< + pub(crate) fn __reduce19< 'input, >( input: &'input str, @@ -37445,18 +42829,18 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar = Ident, ":", Type => ActionFn(20); + // BoundVar = Ident, ":", Type => ActionFn(21); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant5(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action20::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action21::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); - (3, 11) + (3, 12) } - pub(crate) fn __reduce19< + pub(crate) fn __reduce20< 'input, >( input: &'input str, @@ -37465,15 +42849,15 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar? = BoundVar => ActionFn(94); + // BoundVar? = BoundVar => ActionFn(97); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action94::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (1, 12) + let __nt = super::__action97::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (1, 13) } - pub(crate) fn __reduce20< + pub(crate) fn __reduce21< 'input, >( input: &'input str, @@ -37482,14 +42866,14 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BoundVar? = => ActionFn(95); + // BoundVar? = => ActionFn(98); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action95::<>(input, &__start, &__end); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (0, 12) + let __nt = super::__action98::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (0, 13) } - pub(crate) fn __reduce21< + pub(crate) fn __reduce22< 'input, >( input: &'input str, @@ -37498,15 +42882,15 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = BoundVar => ActionFn(127); + // Comma = BoundVar => ActionFn(130); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action127::<>(input, __sym0); + let __nt = super::__action130::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (1, 13) + (1, 14) } - pub(crate) fn __reduce22< + pub(crate) fn __reduce23< 'input, >( input: &'input str, @@ -37515,14 +42899,14 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(128); + // Comma = => ActionFn(131); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action128::<>(input, &__start, &__end); + let __nt = super::__action131::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (0, 13) + (0, 14) } - pub(crate) fn __reduce23< + pub(crate) fn __reduce24< 'input, >( input: &'input str, @@ -37531,17 +42915,17 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, BoundVar => ActionFn(129); + // Comma = ( ",")+, BoundVar => ActionFn(132); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant1(__symbols); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action129::<>(input, __sym0, __sym1); + let __nt = super::__action132::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (2, 13) + (2, 14) } - pub(crate) fn __reduce24< + pub(crate) fn __reduce25< 'input, >( input: &'input str, @@ -37550,15 +42934,15 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(130); + // Comma = ( ",")+ => ActionFn(133); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action130::<>(input, __sym0); + let __nt = super::__action133::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (1, 13) + (1, 14) } - pub(crate) fn __reduce25< + pub(crate) fn __reduce26< 'input, >( input: &'input str, @@ -37567,15 +42951,15 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Expr => ActionFn(131); + // Comma = Expr => ActionFn(134); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action131::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 14) + let __nt = super::__action134::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 15) } - pub(crate) fn __reduce26< + pub(crate) fn __reduce27< 'input, >( input: &'input str, @@ -37584,14 +42968,14 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(132); + // Comma = => ActionFn(135); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action132::<>(input, &__start, &__end); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (0, 14) + let __nt = super::__action135::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (0, 15) } - pub(crate) fn __reduce27< + pub(crate) fn __reduce28< 'input, >( input: &'input str, @@ -37600,17 +42984,17 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Expr => ActionFn(133); + // Comma = ( ",")+, Expr => ActionFn(136); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant3(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action133::<>(input, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (2, 14) + let __nt = super::__action136::<>(input, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (2, 15) } - pub(crate) fn __reduce28< + pub(crate) fn __reduce29< 'input, >( input: &'input str, @@ -37619,15 +43003,15 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(134); + // Comma = ( ",")+ => ActionFn(137); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action134::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 14) + let __nt = super::__action137::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 15) } - pub(crate) fn __reduce29< + pub(crate) fn __reduce30< 'input, >( input: &'input str, @@ -37636,15 +43020,15 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Type => ActionFn(135); + // Comma = Type => ActionFn(138); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action135::<>(input, __sym0); + let __nt = super::__action138::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 15) + (1, 16) } - pub(crate) fn __reduce30< + pub(crate) fn __reduce31< 'input, >( input: &'input str, @@ -37653,14 +43037,14 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(136); + // Comma = => ActionFn(139); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action136::<>(input, &__start, &__end); + let __nt = super::__action139::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (0, 15) + (0, 16) } - pub(crate) fn __reduce31< + pub(crate) fn __reduce32< 'input, >( input: &'input str, @@ -37669,17 +43053,17 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Type => ActionFn(137); + // Comma = ( ",")+, Type => ActionFn(140); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant5(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action137::<>(input, __sym0, __sym1); + let __nt = super::__action140::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (2, 15) + (2, 16) } - pub(crate) fn __reduce32< + pub(crate) fn __reduce33< 'input, >( input: &'input str, @@ -37688,15 +43072,15 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(138); + // Comma = ( ",")+ => ActionFn(141); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action138::<>(input, __sym0); + let __nt = super::__action141::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 15) + (1, 16) } - pub(crate) fn __reduce33< + pub(crate) fn __reduce34< 'input, >( input: &'input str, @@ -37705,7 +43089,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Const = Num, UNum, ":", Type => ActionFn(28); + // Const = Num, UNum, ":", Type => ActionFn(29); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant5(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -37713,29 +43097,9 @@ mod __parse__Width { let __sym0 = __pop_Variant17(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action28::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action29::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); - (4, 16) - } - pub(crate) fn __reduce34< - 'input, - >( - input: &'input str, - __lookahead_start: Option<&usize>, - __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, - _: core::marker::PhantomData<(&'input ())>, - ) -> (usize, usize) - { - // Expr = "(", Ident, ")" => ActionFn(33); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant16(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0.clone(); - let __end = __sym2.2.clone(); - let __nt = super::__action33::<>(input, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (4, 17) } pub(crate) fn __reduce35< 'input, @@ -37746,16 +43110,16 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", Const, ")" => ActionFn(34); + // Expr = "(", Ident, ")" => ActionFn(34); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant11(__symbols); + let __sym1 = __pop_Variant16(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); let __nt = super::__action34::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (3, 18) } pub(crate) fn __reduce36< 'input, @@ -37766,16 +43130,16 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "true", ")" => ActionFn(35); + // Expr = "(", Const, ")" => ActionFn(35); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant11(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); let __nt = super::__action35::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (3, 18) } pub(crate) fn __reduce37< 'input, @@ -37786,7 +43150,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "false", ")" => ActionFn(36); + // Expr = "(", "true", ")" => ActionFn(36); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); @@ -37795,7 +43159,7 @@ mod __parse__Width { let __end = __sym2.2.clone(); let __nt = super::__action36::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (3, 17) + (3, 18) } pub(crate) fn __reduce38< 'input, @@ -37806,17 +43170,16 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "!", Expr, ")" => ActionFn(37); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant3(__symbols); + // Expr = "(", "false", ")" => ActionFn(37); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym3.2.clone(); - let __nt = super::__action37::<>(input, __sym0, __sym1, __sym2, __sym3); + let __end = __sym2.2.clone(); + let __nt = super::__action37::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (3, 18) } pub(crate) fn __reduce39< 'input, @@ -37827,18 +43190,17 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "&&", Expr, Expr, ")" => ActionFn(38); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant3(__symbols); + // Expr = "(", "!", Expr, ")" => ActionFn(38); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym4.2.clone(); - let __nt = super::__action38::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __end = __sym3.2.clone(); + let __nt = super::__action38::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (4, 18) } pub(crate) fn __reduce40< 'input, @@ -37849,7 +43211,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "||", Expr, Expr, ")" => ActionFn(39); + // Expr = "(", "&&", Expr, Expr, ")" => ActionFn(39); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -37860,7 +43222,7 @@ mod __parse__Width { let __end = __sym4.2.clone(); let __nt = super::__action39::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce41< 'input, @@ -37871,7 +43233,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "=>", Expr, Expr, ")" => ActionFn(40); + // Expr = "(", "||", Expr, Expr, ")" => ActionFn(40); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -37882,7 +43244,7 @@ mod __parse__Width { let __end = __sym4.2.clone(); let __nt = super::__action40::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce42< 'input, @@ -37893,7 +43255,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "=", Expr, Expr, ")" => ActionFn(41); + // Expr = "(", "=>", Expr, Expr, ")" => ActionFn(41); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -37904,7 +43266,7 @@ mod __parse__Width { let __end = __sym4.2.clone(); let __nt = super::__action41::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce43< 'input, @@ -37915,7 +43277,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "<=", Expr, Expr, ")" => ActionFn(42); + // Expr = "(", "=", Expr, Expr, ")" => ActionFn(42); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -37926,7 +43288,7 @@ mod __parse__Width { let __end = __sym4.2.clone(); let __nt = super::__action42::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce44< 'input, @@ -37937,7 +43299,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "<", Expr, Expr, ")" => ActionFn(43); + // Expr = "(", "<=", Expr, Expr, ")" => ActionFn(43); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -37948,7 +43310,7 @@ mod __parse__Width { let __end = __sym4.2.clone(); let __nt = super::__action43::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce45< 'input, @@ -37959,7 +43321,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sgt", Expr, Expr, ")" => ActionFn(44); + // Expr = "(", "<", Expr, Expr, ")" => ActionFn(44); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -37970,7 +43332,7 @@ mod __parse__Width { let __end = __sym4.2.clone(); let __nt = super::__action44::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce46< 'input, @@ -37981,7 +43343,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sgte", Expr, Expr, ")" => ActionFn(45); + // Expr = "(", "sgt", Expr, Expr, ")" => ActionFn(45); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -37992,7 +43354,7 @@ mod __parse__Width { let __end = __sym4.2.clone(); let __nt = super::__action45::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce47< 'input, @@ -38003,7 +43365,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "slt", Expr, Expr, ")" => ActionFn(46); + // Expr = "(", "sgte", Expr, Expr, ")" => ActionFn(46); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -38014,7 +43376,7 @@ mod __parse__Width { let __end = __sym4.2.clone(); let __nt = super::__action46::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce48< 'input, @@ -38025,7 +43387,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "slte", Expr, Expr, ")" => ActionFn(47); + // Expr = "(", "slt", Expr, Expr, ")" => ActionFn(47); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -38036,7 +43398,7 @@ mod __parse__Width { let __end = __sym4.2.clone(); let __nt = super::__action47::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce49< 'input, @@ -38047,7 +43409,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ugt", Expr, Expr, ")" => ActionFn(48); + // Expr = "(", "slte", Expr, Expr, ")" => ActionFn(48); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -38058,7 +43420,7 @@ mod __parse__Width { let __end = __sym4.2.clone(); let __nt = super::__action48::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce50< 'input, @@ -38069,7 +43431,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ugte", Expr, Expr, ")" => ActionFn(49); + // Expr = "(", "ugt", Expr, Expr, ")" => ActionFn(49); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -38080,7 +43442,7 @@ mod __parse__Width { let __end = __sym4.2.clone(); let __nt = super::__action49::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce51< 'input, @@ -38091,7 +43453,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ult", Expr, Expr, ")" => ActionFn(50); + // Expr = "(", "ugte", Expr, Expr, ")" => ActionFn(50); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -38102,7 +43464,7 @@ mod __parse__Width { let __end = __sym4.2.clone(); let __nt = super::__action50::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce52< 'input, @@ -38113,7 +43475,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ulte", Expr, Expr, ")" => ActionFn(51); + // Expr = "(", "ult", Expr, Expr, ")" => ActionFn(51); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -38124,7 +43486,7 @@ mod __parse__Width { let __end = __sym4.2.clone(); let __nt = super::__action51::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce53< 'input, @@ -38135,17 +43497,18 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "-", Expr, ")" => ActionFn(52); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); + // Expr = "(", "ulte", Expr, Expr, ")" => ActionFn(52); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym3.2.clone(); - let __nt = super::__action52::<>(input, __sym0, __sym1, __sym2, __sym3); + let __end = __sym4.2.clone(); + let __nt = super::__action52::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (5, 18) } pub(crate) fn __reduce54< 'input, @@ -38156,7 +43519,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "~", Expr, ")" => ActionFn(53); + // Expr = "(", "-", Expr, ")" => ActionFn(53); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -38166,7 +43529,7 @@ mod __parse__Width { let __end = __sym3.2.clone(); let __nt = super::__action53::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } pub(crate) fn __reduce55< 'input, @@ -38177,7 +43540,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "clz", Expr, ")" => ActionFn(54); + // Expr = "(", "~", Expr, ")" => ActionFn(54); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -38187,7 +43550,7 @@ mod __parse__Width { let __end = __sym3.2.clone(); let __nt = super::__action54::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } pub(crate) fn __reduce56< 'input, @@ -38198,7 +43561,28 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "a64clz", Expr, Expr, ")" => ActionFn(55); + // Expr = "(", "clz", Expr, ")" => ActionFn(55); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym3.2.clone(); + let __nt = super::__action55::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (4, 18) + } + pub(crate) fn __reduce57< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "a64clz", Expr, Expr, ")" => ActionFn(56); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -38207,11 +43591,11 @@ mod __parse__Width { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action55::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action56::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce57< + pub(crate) fn __reduce58< 'input, >( input: &'input str, @@ -38220,7 +43604,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "cls", Expr, ")" => ActionFn(56); + // Expr = "(", "cls", Expr, ")" => ActionFn(57); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -38228,11 +43612,11 @@ mod __parse__Width { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action56::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action57::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce58< + pub(crate) fn __reduce59< 'input, >( input: &'input str, @@ -38241,7 +43625,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "a64cls", Expr, Expr, ")" => ActionFn(57); + // Expr = "(", "a64cls", Expr, Expr, ")" => ActionFn(58); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -38250,11 +43634,11 @@ mod __parse__Width { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action57::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action58::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce59< + pub(crate) fn __reduce60< 'input, >( input: &'input str, @@ -38263,7 +43647,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "rev", Expr, ")" => ActionFn(58); + // Expr = "(", "rev", Expr, ")" => ActionFn(59); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -38271,11 +43655,11 @@ mod __parse__Width { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action58::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action59::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce60< + pub(crate) fn __reduce61< 'input, >( input: &'input str, @@ -38284,7 +43668,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "a64rev", Expr, Expr, ")" => ActionFn(59); + // Expr = "(", "a64rev", Expr, Expr, ")" => ActionFn(60); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -38293,11 +43677,11 @@ mod __parse__Width { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action59::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action60::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce61< + pub(crate) fn __reduce62< 'input, >( input: &'input str, @@ -38306,7 +43690,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "subs", Expr, Expr, Expr, ")" => ActionFn(60); + // Expr = "(", "subs", Expr, Expr, Expr, ")" => ActionFn(61); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant3(__symbols); @@ -38316,31 +43700,9 @@ mod __parse__Width { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym5.2.clone(); - let __nt = super::__action60::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action61::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (6, 17) - } - pub(crate) fn __reduce62< - 'input, - >( - input: &'input str, - __lookahead_start: Option<&usize>, - __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, - _: core::marker::PhantomData<(&'input ())>, - ) -> (usize, usize) - { - // Expr = "(", "*", Expr, Expr, ")" => ActionFn(61); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant3(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0.clone(); - let __end = __sym4.2.clone(); - let __nt = super::__action61::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); - __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (6, 18) } pub(crate) fn __reduce63< 'input, @@ -38351,7 +43713,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "/", Expr, Expr, ")" => ActionFn(62); + // Expr = "(", "*", Expr, Expr, ")" => ActionFn(62); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -38362,7 +43724,7 @@ mod __parse__Width { let __end = __sym4.2.clone(); let __nt = super::__action62::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce64< 'input, @@ -38373,7 +43735,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sdiv", Expr, Expr, ")" => ActionFn(63); + // Expr = "(", "/", Expr, Expr, ")" => ActionFn(63); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -38384,7 +43746,7 @@ mod __parse__Width { let __end = __sym4.2.clone(); let __nt = super::__action63::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce65< 'input, @@ -38395,7 +43757,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "+", Expr, Expr, ")" => ActionFn(64); + // Expr = "(", "sdiv", Expr, Expr, ")" => ActionFn(64); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -38406,7 +43768,7 @@ mod __parse__Width { let __end = __sym4.2.clone(); let __nt = super::__action64::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce66< 'input, @@ -38417,7 +43779,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "-", Expr, Expr, ")" => ActionFn(65); + // Expr = "(", "+", Expr, Expr, ")" => ActionFn(65); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -38428,7 +43790,7 @@ mod __parse__Width { let __end = __sym4.2.clone(); let __nt = super::__action65::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce67< 'input, @@ -38439,7 +43801,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "urem", Expr, Expr, ")" => ActionFn(66); + // Expr = "(", "-", Expr, Expr, ")" => ActionFn(66); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -38450,7 +43812,7 @@ mod __parse__Width { let __end = __sym4.2.clone(); let __nt = super::__action66::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce68< 'input, @@ -38461,7 +43823,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "srem", Expr, Expr, ")" => ActionFn(67); + // Expr = "(", "urem", Expr, Expr, ")" => ActionFn(67); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -38472,7 +43834,7 @@ mod __parse__Width { let __end = __sym4.2.clone(); let __nt = super::__action67::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce69< 'input, @@ -38483,7 +43845,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "&", Expr, Expr, ")" => ActionFn(68); + // Expr = "(", "srem", Expr, Expr, ")" => ActionFn(68); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -38494,7 +43856,7 @@ mod __parse__Width { let __end = __sym4.2.clone(); let __nt = super::__action68::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce70< 'input, @@ -38505,7 +43867,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "|", Expr, Expr, ")" => ActionFn(69); + // Expr = "(", "&", Expr, Expr, ")" => ActionFn(69); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -38516,7 +43878,7 @@ mod __parse__Width { let __end = __sym4.2.clone(); let __nt = super::__action69::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce71< 'input, @@ -38527,7 +43889,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "xor", Expr, Expr, ")" => ActionFn(70); + // Expr = "(", "|", Expr, Expr, ")" => ActionFn(70); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -38538,7 +43900,7 @@ mod __parse__Width { let __end = __sym4.2.clone(); let __nt = super::__action70::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce72< 'input, @@ -38549,7 +43911,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "rotl", Expr, Expr, ")" => ActionFn(71); + // Expr = "(", "xor", Expr, Expr, ")" => ActionFn(71); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -38560,7 +43922,7 @@ mod __parse__Width { let __end = __sym4.2.clone(); let __nt = super::__action71::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce73< 'input, @@ -38571,7 +43933,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "rotr", Expr, Expr, ")" => ActionFn(72); + // Expr = "(", "rotl", Expr, Expr, ")" => ActionFn(72); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -38582,7 +43944,7 @@ mod __parse__Width { let __end = __sym4.2.clone(); let __nt = super::__action72::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce74< 'input, @@ -38593,7 +43955,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "shl", Expr, Expr, ")" => ActionFn(73); + // Expr = "(", "rotr", Expr, Expr, ")" => ActionFn(73); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -38604,7 +43966,7 @@ mod __parse__Width { let __end = __sym4.2.clone(); let __nt = super::__action73::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce75< 'input, @@ -38615,7 +43977,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "shr", Expr, Expr, ")" => ActionFn(74); + // Expr = "(", "shl", Expr, Expr, ")" => ActionFn(74); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -38626,7 +43988,7 @@ mod __parse__Width { let __end = __sym4.2.clone(); let __nt = super::__action74::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce76< 'input, @@ -38637,7 +43999,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "ashr", Expr, Expr, ")" => ActionFn(75); + // Expr = "(", "shr", Expr, Expr, ")" => ActionFn(75); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -38648,7 +44010,7 @@ mod __parse__Width { let __end = __sym4.2.clone(); let __nt = super::__action75::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce77< 'input, @@ -38659,18 +44021,18 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "zero_ext", Width, Expr, ")" => ActionFn(76); + // Expr = "(", "ashr", Expr, Expr, ")" => ActionFn(76); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant24(__symbols); + let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action76::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce78< 'input, @@ -38681,18 +44043,18 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "zero_ext", Expr, Expr, ")" => ActionFn(77); + // Expr = "(", "zero_ext", Width, Expr, ")" => ActionFn(77); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant24(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action77::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce79< 'input, @@ -38703,18 +44065,18 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sign_ext", Width, Expr, ")" => ActionFn(78); + // Expr = "(", "zero_ext", Expr, Expr, ")" => ActionFn(78); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant24(__symbols); + let __sym2 = __pop_Variant3(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action78::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce80< 'input, @@ -38725,18 +44087,18 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "sign_ext", Expr, Expr, ")" => ActionFn(79); + // Expr = "(", "sign_ext", Width, Expr, ")" => ActionFn(79); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); - let __sym2 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant24(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action79::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } pub(crate) fn __reduce81< 'input, @@ -38747,7 +44109,29 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "extract", UNum, UNum, Expr, ")" => ActionFn(80); + // Expr = "(", "sign_ext", Expr, Expr, ")" => ActionFn(80); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant3(__symbols); + let __sym2 = __pop_Variant3(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym4.2.clone(); + let __nt = super::__action80::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant3(__nt), __end)); + (5, 18) + } + pub(crate) fn __reduce82< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // Expr = "(", "extract", UNum, UNum, Expr, ")" => ActionFn(81); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant3(__symbols); @@ -38757,11 +44141,11 @@ mod __parse__Width { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym5.2.clone(); - let __nt = super::__action80::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action81::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (6, 17) + (6, 18) } - pub(crate) fn __reduce82< + pub(crate) fn __reduce83< 'input, >( input: &'input str, @@ -38770,7 +44154,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "conv_to", Width, Expr, ")" => ActionFn(81); + // Expr = "(", "conv_to", Width, Expr, ")" => ActionFn(82); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -38779,11 +44163,11 @@ mod __parse__Width { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action81::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action82::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce83< + pub(crate) fn __reduce84< 'input, >( input: &'input str, @@ -38792,7 +44176,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "conv_to", Expr, Expr, ")" => ActionFn(82); + // Expr = "(", "conv_to", Expr, Expr, ")" => ActionFn(83); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -38801,11 +44185,11 @@ mod __parse__Width { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action82::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action83::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce84< + pub(crate) fn __reduce85< 'input, >( input: &'input str, @@ -38814,7 +44198,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "if", Expr, Expr, Expr, ")" => ActionFn(83); + // Expr = "(", "if", Expr, Expr, Expr, ")" => ActionFn(84); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant3(__symbols); @@ -38824,11 +44208,11 @@ mod __parse__Width { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym5.2.clone(); - let __nt = super::__action83::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action84::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (6, 17) + (6, 18) } - pub(crate) fn __reduce85< + pub(crate) fn __reduce86< 'input, >( input: &'input str, @@ -38837,7 +44221,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "switch", Expr, Pair+, ")" => ActionFn(84); + // Expr = "(", "switch", Expr, Pair+, ")" => ActionFn(85); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant19(__symbols); @@ -38846,11 +44230,11 @@ mod __parse__Width { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action84::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action85::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce86< + pub(crate) fn __reduce87< 'input, >( input: &'input str, @@ -38859,7 +44243,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "int2bv", UNum, Expr, ")" => ActionFn(85); + // Expr = "(", "int2bv", UNum, Expr, ")" => ActionFn(86); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant3(__symbols); @@ -38868,11 +44252,11 @@ mod __parse__Width { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action85::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action86::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (5, 17) + (5, 18) } - pub(crate) fn __reduce87< + pub(crate) fn __reduce88< 'input, >( input: &'input str, @@ -38881,7 +44265,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "bv2int", Expr, ")" => ActionFn(86); + // Expr = "(", "bv2int", Expr, ")" => ActionFn(87); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -38889,11 +44273,11 @@ mod __parse__Width { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action86::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action87::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce88< + pub(crate) fn __reduce89< 'input, >( input: &'input str, @@ -38902,7 +44286,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = "(", "widthof", Expr, ")" => ActionFn(87); + // Expr = "(", "widthof", Expr, ")" => ActionFn(88); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -38910,11 +44294,11 @@ mod __parse__Width { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action87::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action88::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (4, 17) + (4, 18) } - pub(crate) fn __reduce89< + pub(crate) fn __reduce90< 'input, >( input: &'input str, @@ -38923,15 +44307,15 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr? = Expr => ActionFn(104); + // Expr? = Expr => ActionFn(107); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action104::<>(input, __sym0); + let __nt = super::__action107::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (1, 18) + (1, 19) } - pub(crate) fn __reduce90< + pub(crate) fn __reduce91< 'input, >( input: &'input str, @@ -38940,14 +44324,14 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr? = => ActionFn(105); + // Expr? = => ActionFn(108); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action105::<>(input, &__start, &__end); + let __nt = super::__action108::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (0, 18) + (0, 19) } - pub(crate) fn __reduce91< + pub(crate) fn __reduce92< 'input, >( input: &'input str, @@ -38956,15 +44340,15 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprList = Comma => ActionFn(24); - let __sym0 = __pop_Variant9(__symbols); + // ExprList = Comma => ActionFn(25); + let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action24::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 19) + let __nt = super::__action25::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 20) } - pub(crate) fn __reduce92< + pub(crate) fn __reduce93< 'input, >( input: &'input str, @@ -38973,7 +44357,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Function = Ident, "(", ArgList, ")", "(", Type, ")", "{", Expr, "}" => ActionFn(29); + // Function = Ident, "(", ArgList, ")", "(", Type, ")", "{", Expr, "}" => ActionFn(30); assert!(__symbols.len() >= 10); let __sym9 = __pop_Variant0(__symbols); let __sym8 = __pop_Variant3(__symbols); @@ -38987,11 +44371,11 @@ mod __parse__Width { let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0.clone(); let __end = __sym9.2.clone(); - let __nt = super::__action29::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); + let __nt = super::__action30::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); - (10, 20) + (10, 21) } - pub(crate) fn __reduce93< + pub(crate) fn __reduce94< 'input, >( input: &'input str, @@ -39000,19 +44384,19 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // FunctionApplication = Expr, "(", ExprList, ")" => ActionFn(30); + // FunctionApplication = Expr, "(", ExprList, ")" => ActionFn(31); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant9(__symbols); + let __sym2 = __pop_Variant8(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action30::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action31::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (4, 21) + (4, 22) } - pub(crate) fn __reduce94< + pub(crate) fn __reduce95< 'input, >( input: &'input str, @@ -39021,7 +44405,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // FunctionType = "func", "(", TypeList, ")", "(", Type, ")" => ActionFn(27); + // FunctionType = "func", "(", TypeList, ")", "(", Type, ")" => ActionFn(28); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant5(__symbols); @@ -39032,11 +44416,11 @@ mod __parse__Width { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym6.2.clone(); - let __nt = super::__action27::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action28::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (7, 22) + (7, 23) } - pub(crate) fn __reduce95< + pub(crate) fn __reduce96< 'input, >( input: &'input str, @@ -39045,15 +44429,15 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"[A-Za-z]"# => ActionFn(12); + // Ident = r#"[A-Za-z]"# => ActionFn(13); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action12::<>(input, __sym0); + let __nt = super::__action13::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 23) + (1, 24) } - pub(crate) fn __reduce96< + pub(crate) fn __reduce97< 'input, >( input: &'input str, @@ -39062,15 +44446,15 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"[A-Zac-z][\\.\\w]+"# => ActionFn(13); + // Ident = r#"[A-Zac-z][\\.\\w]+"# => ActionFn(14); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action13::<>(input, __sym0); + let __nt = super::__action14::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 23) + (1, 24) } - pub(crate) fn __reduce97< + pub(crate) fn __reduce98< 'input, >( input: &'input str, @@ -39079,15 +44463,15 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"b[\\w&&[^v]][\\.\\w]*"# => ActionFn(14); + // Ident = r#"b[\\w&&[^v]][\\.\\w]*"# => ActionFn(15); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action14::<>(input, __sym0); + let __nt = super::__action15::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 23) + (1, 24) } - pub(crate) fn __reduce98< + pub(crate) fn __reduce99< 'input, >( input: &'input str, @@ -39096,15 +44480,15 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Num = r#"-?[0-9]+i"# => ActionFn(11); + // Num = r#"-?[0-9]+i"# => ActionFn(12); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action11::<>(input, __sym0); + let __nt = super::__action12::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant17(__nt), __end)); - (1, 24) + (1, 25) } - pub(crate) fn __reduce99< + pub(crate) fn __reduce100< 'input, >( input: &'input str, @@ -39113,7 +44497,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Pair = "(", Expr, Expr, ")" => ActionFn(25); + // Pair = "(", Expr, Expr, ")" => ActionFn(26); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant3(__symbols); @@ -39121,11 +44505,11 @@ mod __parse__Width { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action25::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action26::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant18(__nt), __end)); - (4, 25) + (4, 26) } - pub(crate) fn __reduce100< + pub(crate) fn __reduce101< 'input, >( input: &'input str, @@ -39134,15 +44518,15 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Pair+ = Pair => ActionFn(89); + // Pair+ = Pair => ActionFn(92); let __sym0 = __pop_Variant18(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action89::<>(input, __sym0); + let __nt = super::__action92::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant19(__nt), __end)); - (1, 26) + (1, 27) } - pub(crate) fn __reduce101< + pub(crate) fn __reduce102< 'input, >( input: &'input str, @@ -39151,17 +44535,46 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Pair+ = Pair+, Pair => ActionFn(90); + // Pair+ = Pair+, Pair => ActionFn(93); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant18(__symbols); let __sym0 = __pop_Variant19(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action90::<>(input, __sym0, __sym1); + let __nt = super::__action93::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant19(__nt), __end)); - (2, 26) + (2, 27) } - pub(crate) fn __reduce102< + pub(crate) fn __reduce103< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // TermAnnotation = "(", "spec", TermSignature, "(", "assume", ExprList, ")", "(", "assert", ExprList, ")", ")" => ActionFn(90); + assert!(__symbols.len() >= 12); + let __sym11 = __pop_Variant0(__symbols); + let __sym10 = __pop_Variant0(__symbols); + let __sym9 = __pop_Variant8(__symbols); + let __sym8 = __pop_Variant0(__symbols); + let __sym7 = __pop_Variant0(__symbols); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant8(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant21(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym11.2.clone(); + let __nt = super::__action90::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9, __sym10, __sym11); + __symbols.push((__start, __Symbol::Variant20(__nt), __end)); + (12, 28) + } + pub(crate) fn __reduce104< 'input, >( input: &'input str, @@ -39170,11 +44583,11 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // TermAnnotation = "(", "spec", TermSignature, "(", "assertions", ExprList, ")", ")" => ActionFn(88); + // TermAnnotation = "(", "spec", TermSignature, "(", "assume", ExprList, ")", ")" => ActionFn(91); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant9(__symbols); + let __sym5 = __pop_Variant8(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant21(__symbols); @@ -39182,11 +44595,11 @@ mod __parse__Width { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym7.2.clone(); - let __nt = super::__action88::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); + let __nt = super::__action91::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant20(__nt), __end)); - (8, 27) + (8, 28) } - pub(crate) fn __reduce103< + pub(crate) fn __reduce105< 'input, >( input: &'input str, @@ -39195,7 +44608,7 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // TermSignature = "(", "sig", Args, "(", BoundVar, ")", ")" => ActionFn(26); + // TermSignature = "(", "sig", Args, "(", BoundVar, ")", ")" => ActionFn(27); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -39206,11 +44619,11 @@ mod __parse__Width { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym6.2.clone(); - let __nt = super::__action26::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action27::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant21(__nt), __end)); - (7, 28) + (7, 29) } - pub(crate) fn __reduce104< + pub(crate) fn __reduce106< 'input, >( input: &'input str, @@ -39219,15 +44632,15 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "bv" => ActionFn(15); + // Type = "bv" => ActionFn(16); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action15::<>(input, __sym0); + let __nt = super::__action16::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 29) + (1, 30) } - pub(crate) fn __reduce105< + pub(crate) fn __reduce107< 'input, >( input: &'input str, @@ -39236,17 +44649,17 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "bv", UNum => ActionFn(16); + // Type = "bv", UNum => ActionFn(17); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant23(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action16::<>(input, __sym0, __sym1); + let __nt = super::__action17::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (2, 29) + (2, 30) } - pub(crate) fn __reduce106< + pub(crate) fn __reduce108< 'input, >( input: &'input str, @@ -39255,15 +44668,15 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "isleType" => ActionFn(17); + // Type = "isleType" => ActionFn(18); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action17::<>(input, __sym0); + let __nt = super::__action18::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 29) + (1, 30) } - pub(crate) fn __reduce107< + pub(crate) fn __reduce109< 'input, >( input: &'input str, @@ -39272,15 +44685,15 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type = "bool" => ActionFn(18); + // Type = "bool" => ActionFn(19); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action18::<>(input, __sym0); + let __nt = super::__action19::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 29) + (1, 30) } - pub(crate) fn __reduce108< + pub(crate) fn __reduce110< 'input, >( input: &'input str, @@ -39289,15 +44702,15 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type? = Type => ActionFn(99); + // Type? = Type => ActionFn(102); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action99::<>(input, __sym0); + let __nt = super::__action102::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant22(__nt), __end)); - (1, 30) + (1, 31) } - pub(crate) fn __reduce109< + pub(crate) fn __reduce111< 'input, >( input: &'input str, @@ -39306,14 +44719,14 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Type? = => ActionFn(100); + // Type? = => ActionFn(103); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action100::<>(input, &__start, &__end); + let __nt = super::__action103::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant22(__nt), __end)); - (0, 30) + (0, 31) } - pub(crate) fn __reduce110< + pub(crate) fn __reduce112< 'input, >( input: &'input str, @@ -39322,15 +44735,15 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // TypeList = Comma => ActionFn(23); + // TypeList = Comma => ActionFn(24); let __sym0 = __pop_Variant10(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action23::<>(input, __sym0); + let __nt = super::__action24::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 31) + (1, 32) } - pub(crate) fn __reduce111< + pub(crate) fn __reduce113< 'input, >( input: &'input str, @@ -39339,15 +44752,15 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // UNum = r#"[0-9]+"# => ActionFn(10); + // UNum = r#"[0-9]+"# => ActionFn(11); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action10::<>(input, __sym0); + let __nt = super::__action11::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant23(__nt), __end)); - (1, 32) + (1, 33) } - pub(crate) fn __reduce112< + pub(crate) fn __reduce114< 'input, >( input: &'input str, @@ -39356,18 +44769,18 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Width = "(", "regwidth", ")" => ActionFn(31); + // Width = "(", "regwidth", ")" => ActionFn(32); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action31::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action32::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (3, 33) + (3, 34) } - pub(crate) fn __reduce113< + pub(crate) fn __reduce115< 'input, >( input: &'input str, @@ -39376,18 +44789,35 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Width = "(", UNum, ")" => ActionFn(32); + // Width = "(", UNum, ")" => ActionFn(33); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant23(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action32::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action33::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (3, 33) + (3, 34) } - pub(crate) fn __reduce114< + pub(crate) fn __reduce116< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // __AssertBlock = AssertBlock => ActionFn(9); + let __sym0 = __pop_Variant8(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action9::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 35) + } + pub(crate) fn __reduce117< 'input, >( input: &'input str, @@ -39402,9 +44832,9 @@ mod __parse__Width { let __end = __sym0.2.clone(); let __nt = super::__action1::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); - (1, 34) + (1, 36) } - pub(crate) fn __reduce115< + pub(crate) fn __reduce118< 'input, >( input: &'input str, @@ -39419,9 +44849,9 @@ mod __parse__Width { let __end = __sym0.2.clone(); let __nt = super::__action4::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); - (1, 35) + (1, 37) } - pub(crate) fn __reduce116< + pub(crate) fn __reduce119< 'input, >( input: &'input str, @@ -39436,9 +44866,9 @@ mod __parse__Width { let __end = __sym0.2.clone(); let __nt = super::__action8::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); - (1, 36) + (1, 38) } - pub(crate) fn __reduce117< + pub(crate) fn __reduce120< 'input, >( input: &'input str, @@ -39453,9 +44883,9 @@ mod __parse__Width { let __end = __sym0.2.clone(); let __nt = super::__action5::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); - (1, 37) + (1, 39) } - pub(crate) fn __reduce118< + pub(crate) fn __reduce121< 'input, >( input: &'input str, @@ -39470,9 +44900,9 @@ mod __parse__Width { let __end = __sym0.2.clone(); let __nt = super::__action6::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 38) + (1, 40) } - pub(crate) fn __reduce119< + pub(crate) fn __reduce122< 'input, >( input: &'input str, @@ -39487,9 +44917,9 @@ mod __parse__Width { let __end = __sym0.2.clone(); let __nt = super::__action3::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 39) + (1, 41) } - pub(crate) fn __reduce120< + pub(crate) fn __reduce123< 'input, >( input: &'input str, @@ -39498,15 +44928,15 @@ mod __parse__Width { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // __TermAnnotation = TermAnnotation => ActionFn(9); + // __TermAnnotation = TermAnnotation => ActionFn(10); let __sym0 = __pop_Variant20(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action9::<>(input, __sym0); + let __nt = super::__action10::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant20(__nt), __end)); - (1, 40) + (1, 42) } - pub(crate) fn __reduce121< + pub(crate) fn __reduce124< 'input, >( input: &'input str, @@ -39521,9 +44951,9 @@ mod __parse__Width { let __end = __sym0.2.clone(); let __nt = super::__action2::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant21(__nt), __end)); - (1, 41) + (1, 43) } - pub(crate) fn __reduce122< + pub(crate) fn __reduce125< 'input, >( input: &'input str, @@ -39538,7 +44968,7 @@ mod __parse__Width { let __end = __sym0.2.clone(); let __nt = super::__action0::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 42) + (1, 44) } } pub use self::__parse__Width::WidthParser; @@ -39581,7 +45011,8 @@ mod __intern_token { ("^(a64clz)", false), ("^(a64rev)", false), ("^(ashr)", false), - ("^(assertions)", false), + ("^(assert)", false), + ("^(assume)", false), ("^(bool)", false), ("^(bv)", false), ("^(bv2int)", false), @@ -39736,8 +45167,8 @@ fn __action9< 'input, >( input: &'input str, - (_, __0, _): (usize, TermAnnotation, usize), -) -> TermAnnotation + (_, __0, _): (usize, Vec>, usize), +) -> Vec> { __0 } @@ -39747,10 +45178,10 @@ fn __action10< 'input, >( input: &'input str, - (_, s, _): (usize, &'input str, usize), -) -> usize + (_, __0, _): (usize, TermAnnotation, usize), +) -> TermAnnotation { - usize::from_str(s).unwrap() + __0 } #[allow(unused_variables)] @@ -39759,9 +45190,9 @@ fn __action11< >( input: &'input str, (_, s, _): (usize, &'input str, usize), -) -> i128 +) -> usize { - i128::from_str(&s[..s.len() - 1]).unwrap() + usize::from_str(s).unwrap() } #[allow(unused_variables)] @@ -39770,9 +45201,9 @@ fn __action12< >( input: &'input str, (_, s, _): (usize, &'input str, usize), -) -> String +) -> i128 { - s.to_string() + i128::from_str(&s[..s.len() - 1]).unwrap() } #[allow(unused_variables)] @@ -39800,6 +45231,17 @@ fn __action14< #[allow(unused_variables)] fn __action15< 'input, +>( + input: &'input str, + (_, s, _): (usize, &'input str, usize), +) -> String +{ + s.to_string() +} + +#[allow(unused_variables)] +fn __action16< + 'input, >( input: &'input str, (_, __0, _): (usize, &'input str, usize), @@ -39809,7 +45251,7 @@ fn __action15< } #[allow(unused_variables)] -fn __action16< +fn __action17< 'input, >( input: &'input str, @@ -39821,7 +45263,7 @@ fn __action16< } #[allow(unused_variables)] -fn __action17< +fn __action18< 'input, >( input: &'input str, @@ -39832,7 +45274,7 @@ fn __action17< } #[allow(unused_variables)] -fn __action18< +fn __action19< 'input, >( input: &'input str, @@ -39843,7 +45285,7 @@ fn __action18< } #[allow(unused_variables)] -fn __action19< +fn __action20< 'input, >( input: &'input str, @@ -39854,7 +45296,7 @@ fn __action19< } #[allow(unused_variables)] -fn __action20< +fn __action21< 'input, >( input: &'input str, @@ -39867,7 +45309,7 @@ fn __action20< } #[allow(unused_variables)] -fn __action21< +fn __action22< 'input, >( input: &'input str, @@ -39878,7 +45320,7 @@ fn __action21< } #[allow(unused_variables)] -fn __action22< +fn __action23< 'input, >( input: &'input str, @@ -39891,7 +45333,7 @@ fn __action22< } #[allow(unused_variables)] -fn __action23< +fn __action24< 'input, >( input: &'input str, @@ -39902,7 +45344,7 @@ fn __action23< } #[allow(unused_variables)] -fn __action24< +fn __action25< 'input, >( input: &'input str, @@ -39913,7 +45355,7 @@ fn __action24< } #[allow(unused_variables)] -fn __action25< +fn __action26< 'input, >( input: &'input str, @@ -39927,7 +45369,7 @@ fn __action25< } #[allow(unused_variables)] -fn __action26< +fn __action27< 'input, >( input: &'input str, @@ -39944,7 +45386,7 @@ fn __action26< } #[allow(unused_variables)] -fn __action27< +fn __action28< 'input, >( input: &'input str, @@ -39961,7 +45403,7 @@ fn __action27< } #[allow(unused_variables)] -fn __action28< +fn __action29< 'input, >( input: &'input str, @@ -39975,7 +45417,7 @@ fn __action28< } #[allow(unused_variables)] -fn __action29< +fn __action30< 'input, >( input: &'input str, @@ -39995,7 +45437,7 @@ fn __action29< } #[allow(unused_variables)] -fn __action30< +fn __action31< 'input, >( input: &'input str, @@ -40009,7 +45451,7 @@ fn __action30< } #[allow(unused_variables)] -fn __action31< +fn __action32< 'input, >( input: &'input str, @@ -40022,7 +45464,7 @@ fn __action31< } #[allow(unused_variables)] -fn __action32< +fn __action33< 'input, >( input: &'input str, @@ -40035,7 +45477,7 @@ fn __action32< } #[allow(unused_variables)] -fn __action33< +fn __action34< 'input, >( input: &'input str, @@ -40048,7 +45490,7 @@ fn __action33< } #[allow(unused_variables)] -fn __action34< +fn __action35< 'input, >( input: &'input str, @@ -40061,7 +45503,7 @@ fn __action34< } #[allow(unused_variables)] -fn __action35< +fn __action36< 'input, >( input: &'input str, @@ -40074,7 +45516,7 @@ fn __action35< } #[allow(unused_variables)] -fn __action36< +fn __action37< 'input, >( input: &'input str, @@ -40087,7 +45529,7 @@ fn __action36< } #[allow(unused_variables)] -fn __action37< +fn __action38< 'input, >( input: &'input str, @@ -40101,7 +45543,7 @@ fn __action37< } #[allow(unused_variables)] -fn __action38< +fn __action39< 'input, >( input: &'input str, @@ -40116,7 +45558,7 @@ fn __action38< } #[allow(unused_variables)] -fn __action39< +fn __action40< 'input, >( input: &'input str, @@ -40131,7 +45573,7 @@ fn __action39< } #[allow(unused_variables)] -fn __action40< +fn __action41< 'input, >( input: &'input str, @@ -40146,7 +45588,7 @@ fn __action40< } #[allow(unused_variables)] -fn __action41< +fn __action42< 'input, >( input: &'input str, @@ -40161,7 +45603,7 @@ fn __action41< } #[allow(unused_variables)] -fn __action42< +fn __action43< 'input, >( input: &'input str, @@ -40176,7 +45618,7 @@ fn __action42< } #[allow(unused_variables)] -fn __action43< +fn __action44< 'input, >( input: &'input str, @@ -40191,7 +45633,7 @@ fn __action43< } #[allow(unused_variables)] -fn __action44< +fn __action45< 'input, >( input: &'input str, @@ -40206,7 +45648,7 @@ fn __action44< } #[allow(unused_variables)] -fn __action45< +fn __action46< 'input, >( input: &'input str, @@ -40221,7 +45663,7 @@ fn __action45< } #[allow(unused_variables)] -fn __action46< +fn __action47< 'input, >( input: &'input str, @@ -40236,7 +45678,7 @@ fn __action46< } #[allow(unused_variables)] -fn __action47< +fn __action48< 'input, >( input: &'input str, @@ -40251,7 +45693,7 @@ fn __action47< } #[allow(unused_variables)] -fn __action48< +fn __action49< 'input, >( input: &'input str, @@ -40266,7 +45708,7 @@ fn __action48< } #[allow(unused_variables)] -fn __action49< +fn __action50< 'input, >( input: &'input str, @@ -40281,7 +45723,7 @@ fn __action49< } #[allow(unused_variables)] -fn __action50< +fn __action51< 'input, >( input: &'input str, @@ -40296,7 +45738,7 @@ fn __action50< } #[allow(unused_variables)] -fn __action51< +fn __action52< 'input, >( input: &'input str, @@ -40311,7 +45753,7 @@ fn __action51< } #[allow(unused_variables)] -fn __action52< +fn __action53< 'input, >( input: &'input str, @@ -40325,7 +45767,7 @@ fn __action52< } #[allow(unused_variables)] -fn __action53< +fn __action54< 'input, >( input: &'input str, @@ -40339,7 +45781,7 @@ fn __action53< } #[allow(unused_variables)] -fn __action54< +fn __action55< 'input, >( input: &'input str, @@ -40353,7 +45795,7 @@ fn __action54< } #[allow(unused_variables)] -fn __action55< +fn __action56< 'input, >( input: &'input str, @@ -40368,7 +45810,7 @@ fn __action55< } #[allow(unused_variables)] -fn __action56< +fn __action57< 'input, >( input: &'input str, @@ -40382,7 +45824,7 @@ fn __action56< } #[allow(unused_variables)] -fn __action57< +fn __action58< 'input, >( input: &'input str, @@ -40397,7 +45839,7 @@ fn __action57< } #[allow(unused_variables)] -fn __action58< +fn __action59< 'input, >( input: &'input str, @@ -40411,7 +45853,7 @@ fn __action58< } #[allow(unused_variables)] -fn __action59< +fn __action60< 'input, >( input: &'input str, @@ -40426,7 +45868,7 @@ fn __action59< } #[allow(unused_variables)] -fn __action60< +fn __action61< 'input, >( input: &'input str, @@ -40442,7 +45884,7 @@ fn __action60< } #[allow(unused_variables)] -fn __action61< +fn __action62< 'input, >( input: &'input str, @@ -40457,7 +45899,7 @@ fn __action61< } #[allow(unused_variables)] -fn __action62< +fn __action63< 'input, >( input: &'input str, @@ -40472,7 +45914,7 @@ fn __action62< } #[allow(unused_variables)] -fn __action63< +fn __action64< 'input, >( input: &'input str, @@ -40487,7 +45929,7 @@ fn __action63< } #[allow(unused_variables)] -fn __action64< +fn __action65< 'input, >( input: &'input str, @@ -40502,7 +45944,7 @@ fn __action64< } #[allow(unused_variables)] -fn __action65< +fn __action66< 'input, >( input: &'input str, @@ -40517,7 +45959,7 @@ fn __action65< } #[allow(unused_variables)] -fn __action66< +fn __action67< 'input, >( input: &'input str, @@ -40532,7 +45974,7 @@ fn __action66< } #[allow(unused_variables)] -fn __action67< +fn __action68< 'input, >( input: &'input str, @@ -40547,7 +45989,7 @@ fn __action67< } #[allow(unused_variables)] -fn __action68< +fn __action69< 'input, >( input: &'input str, @@ -40562,7 +46004,7 @@ fn __action68< } #[allow(unused_variables)] -fn __action69< +fn __action70< 'input, >( input: &'input str, @@ -40577,7 +46019,7 @@ fn __action69< } #[allow(unused_variables)] -fn __action70< +fn __action71< 'input, >( input: &'input str, @@ -40592,7 +46034,7 @@ fn __action70< } #[allow(unused_variables)] -fn __action71< +fn __action72< 'input, >( input: &'input str, @@ -40607,7 +46049,7 @@ fn __action71< } #[allow(unused_variables)] -fn __action72< +fn __action73< 'input, >( input: &'input str, @@ -40622,7 +46064,7 @@ fn __action72< } #[allow(unused_variables)] -fn __action73< +fn __action74< 'input, >( input: &'input str, @@ -40637,7 +46079,7 @@ fn __action73< } #[allow(unused_variables)] -fn __action74< +fn __action75< 'input, >( input: &'input str, @@ -40652,7 +46094,7 @@ fn __action74< } #[allow(unused_variables)] -fn __action75< +fn __action76< 'input, >( input: &'input str, @@ -40667,7 +46109,7 @@ fn __action75< } #[allow(unused_variables)] -fn __action76< +fn __action77< 'input, >( input: &'input str, @@ -40682,7 +46124,7 @@ fn __action76< } #[allow(unused_variables)] -fn __action77< +fn __action78< 'input, >( input: &'input str, @@ -40697,7 +46139,7 @@ fn __action77< } #[allow(unused_variables)] -fn __action78< +fn __action79< 'input, >( input: &'input str, @@ -40712,7 +46154,7 @@ fn __action78< } #[allow(unused_variables)] -fn __action79< +fn __action80< 'input, >( input: &'input str, @@ -40727,7 +46169,7 @@ fn __action79< } #[allow(unused_variables)] -fn __action80< +fn __action81< 'input, >( input: &'input str, @@ -40743,7 +46185,7 @@ fn __action80< } #[allow(unused_variables)] -fn __action81< +fn __action82< 'input, >( input: &'input str, @@ -40758,7 +46200,7 @@ fn __action81< } #[allow(unused_variables)] -fn __action82< +fn __action83< 'input, >( input: &'input str, @@ -40773,7 +46215,7 @@ fn __action82< } #[allow(unused_variables)] -fn __action83< +fn __action84< 'input, >( input: &'input str, @@ -40789,7 +46231,7 @@ fn __action83< } #[allow(unused_variables)] -fn __action84< +fn __action85< 'input, >( input: &'input str, @@ -40804,7 +46246,7 @@ fn __action84< } #[allow(unused_variables)] -fn __action85< +fn __action86< 'input, >( input: &'input str, @@ -40819,7 +46261,7 @@ fn __action85< } #[allow(unused_variables)] -fn __action86< +fn __action87< 'input, >( input: &'input str, @@ -40833,7 +46275,7 @@ fn __action86< } #[allow(unused_variables)] -fn __action87< +fn __action88< 'input, >( input: &'input str, @@ -40847,7 +46289,43 @@ fn __action87< } #[allow(unused_variables)] -fn __action88< +fn __action89< + 'input, +>( + input: &'input str, + (_, _, _): (usize, &'input str, usize), + (_, _, _): (usize, &'input str, usize), + (_, a, _): (usize, Vec>, usize), + (_, _, _): (usize, &'input str, usize), +) -> Vec> +{ + a +} + +#[allow(unused_variables)] +fn __action90< + 'input, +>( + input: &'input str, + (_, _, _): (usize, &'input str, usize), + (_, _, _): (usize, &'input str, usize), + (_, s, _): (usize, TermSignature, usize), + (_, _, _): (usize, &'input str, usize), + (_, _, _): (usize, &'input str, usize), + (_, a, _): (usize, Vec>, usize), + (_, _, _): (usize, &'input str, usize), + (_, _, _): (usize, &'input str, usize), + (_, _, _): (usize, &'input str, usize), + (_, b, _): (usize, Vec>, usize), + (_, _, _): (usize, &'input str, usize), + (_, _, _): (usize, &'input str, usize), +) -> TermAnnotation +{ + TermAnnotation {sig: s, assumptions: a, assertions: b } +} + +#[allow(unused_variables)] +fn __action91< 'input, >( input: &'input str, @@ -40861,11 +46339,11 @@ fn __action88< (_, _, _): (usize, &'input str, usize), ) -> TermAnnotation { - TermAnnotation {sig: s, assertions: a} + TermAnnotation {sig: s, assumptions: a, assertions: vec![] } } #[allow(unused_variables)] -fn __action89< +fn __action92< 'input, >( input: &'input str, @@ -40876,7 +46354,7 @@ fn __action89< } #[allow(unused_variables)] -fn __action90< +fn __action93< 'input, >( input: &'input str, @@ -40888,7 +46366,7 @@ fn __action90< } #[allow(unused_variables)] -fn __action91< +fn __action94< 'input, >( input: &'input str, @@ -40906,7 +46384,7 @@ fn __action91< } #[allow(unused_variables)] -fn __action92< +fn __action95< 'input, >( input: &'input str, @@ -40924,7 +46402,7 @@ fn __action92< } #[allow(unused_variables)] -fn __action93< +fn __action96< 'input, >( input: &'input str, @@ -40942,7 +46420,7 @@ fn __action93< } #[allow(unused_variables)] -fn __action94< +fn __action97< 'input, >( input: &'input str, @@ -40953,7 +46431,7 @@ fn __action94< } #[allow(unused_variables)] -fn __action95< +fn __action98< 'input, >( input: &'input str, @@ -40965,7 +46443,7 @@ fn __action95< } #[allow(unused_variables)] -fn __action96< +fn __action99< 'input, >( input: &'input str, @@ -40977,7 +46455,7 @@ fn __action96< } #[allow(unused_variables)] -fn __action97< +fn __action100< 'input, >( input: &'input str, @@ -40988,7 +46466,7 @@ fn __action97< } #[allow(unused_variables)] -fn __action98< +fn __action101< 'input, >( input: &'input str, @@ -41000,7 +46478,7 @@ fn __action98< } #[allow(unused_variables)] -fn __action99< +fn __action102< 'input, >( input: &'input str, @@ -41011,7 +46489,7 @@ fn __action99< } #[allow(unused_variables)] -fn __action100< +fn __action103< 'input, >( input: &'input str, @@ -41023,7 +46501,7 @@ fn __action100< } #[allow(unused_variables)] -fn __action101< +fn __action104< 'input, >( input: &'input str, @@ -41035,7 +46513,7 @@ fn __action101< } #[allow(unused_variables)] -fn __action102< +fn __action105< 'input, >( input: &'input str, @@ -41046,7 +46524,7 @@ fn __action102< } #[allow(unused_variables)] -fn __action103< +fn __action106< 'input, >( input: &'input str, @@ -41058,7 +46536,7 @@ fn __action103< } #[allow(unused_variables)] -fn __action104< +fn __action107< 'input, >( input: &'input str, @@ -41069,7 +46547,7 @@ fn __action104< } #[allow(unused_variables)] -fn __action105< +fn __action108< 'input, >( input: &'input str, @@ -41081,7 +46559,7 @@ fn __action105< } #[allow(unused_variables)] -fn __action106< +fn __action109< 'input, >( input: &'input str, @@ -41093,7 +46571,7 @@ fn __action106< } #[allow(unused_variables)] -fn __action107< +fn __action110< 'input, >( input: &'input str, @@ -41104,7 +46582,7 @@ fn __action107< } #[allow(unused_variables)] -fn __action108< +fn __action111< 'input, >( input: &'input str, @@ -41116,7 +46594,7 @@ fn __action108< } #[allow(unused_variables)] -fn __action109< +fn __action112< 'input, >( input: &'input str, @@ -41127,7 +46605,7 @@ fn __action109< } #[allow(unused_variables)] -fn __action110< +fn __action113< 'input, >( input: &'input str, @@ -41139,7 +46617,7 @@ fn __action110< } #[allow(unused_variables)] -fn __action111< +fn __action114< 'input, >( input: &'input str, @@ -41150,7 +46628,7 @@ fn __action111< } #[allow(unused_variables)] -fn __action112< +fn __action115< 'input, >( input: &'input str, @@ -41162,7 +46640,7 @@ fn __action112< } #[allow(unused_variables)] -fn __action113< +fn __action116< 'input, >( input: &'input str, @@ -41173,7 +46651,7 @@ fn __action113< } #[allow(unused_variables)] -fn __action114< +fn __action117< 'input, >( input: &'input str, @@ -41185,7 +46663,7 @@ fn __action114< } #[allow(unused_variables)] -fn __action115< +fn __action118< 'input, >( input: &'input str, @@ -41195,20 +46673,20 @@ fn __action115< { let __start0 = __0.0.clone(); let __end0 = __1.2.clone(); - let __temp0 = __action98( + let __temp0 = __action101( input, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action113( + __action116( input, __temp0, ) } #[allow(unused_variables)] -fn __action116< +fn __action119< 'input, >( input: &'input str, @@ -41219,13 +46697,13 @@ fn __action116< { let __start0 = __1.0.clone(); let __end0 = __2.2.clone(); - let __temp0 = __action98( + let __temp0 = __action101( input, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action114( + __action117( input, __0, __temp0, @@ -41233,7 +46711,7 @@ fn __action116< } #[allow(unused_variables)] -fn __action117< +fn __action120< 'input, >( input: &'input str, @@ -41242,13 +46720,13 @@ fn __action117< { let __start0 = __0.0.clone(); let __end0 = __0.0.clone(); - let __temp0 = __action96( + let __temp0 = __action99( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action93( + __action96( input, __temp0, __0, @@ -41256,7 +46734,7 @@ fn __action117< } #[allow(unused_variables)] -fn __action118< +fn __action121< 'input, >( input: &'input str, @@ -41266,12 +46744,12 @@ fn __action118< { let __start0 = __0.0.clone(); let __end0 = __0.2.clone(); - let __temp0 = __action97( + let __temp0 = __action100( input, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action93( + __action96( input, __temp0, __1, @@ -41279,7 +46757,7 @@ fn __action118< } #[allow(unused_variables)] -fn __action119< +fn __action122< 'input, >( input: &'input str, @@ -41289,20 +46767,20 @@ fn __action119< { let __start0 = __0.0.clone(); let __end0 = __1.2.clone(); - let __temp0 = __action108( + let __temp0 = __action111( input, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action109( + __action112( input, __temp0, ) } #[allow(unused_variables)] -fn __action120< +fn __action123< 'input, >( input: &'input str, @@ -41313,13 +46791,13 @@ fn __action120< { let __start0 = __1.0.clone(); let __end0 = __2.2.clone(); - let __temp0 = __action108( + let __temp0 = __action111( input, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action110( + __action113( input, __0, __temp0, @@ -41327,7 +46805,7 @@ fn __action120< } #[allow(unused_variables)] -fn __action121< +fn __action124< 'input, >( input: &'input str, @@ -41336,13 +46814,13 @@ fn __action121< { let __start0 = __0.0.clone(); let __end0 = __0.0.clone(); - let __temp0 = __action106( + let __temp0 = __action109( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action91( + __action94( input, __temp0, __0, @@ -41350,7 +46828,7 @@ fn __action121< } #[allow(unused_variables)] -fn __action122< +fn __action125< 'input, >( input: &'input str, @@ -41360,12 +46838,12 @@ fn __action122< { let __start0 = __0.0.clone(); let __end0 = __0.2.clone(); - let __temp0 = __action107( + let __temp0 = __action110( input, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action91( + __action94( input, __temp0, __1, @@ -41373,7 +46851,7 @@ fn __action122< } #[allow(unused_variables)] -fn __action123< +fn __action126< 'input, >( input: &'input str, @@ -41383,20 +46861,20 @@ fn __action123< { let __start0 = __0.0.clone(); let __end0 = __1.2.clone(); - let __temp0 = __action103( + let __temp0 = __action106( input, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action111( + __action114( input, __temp0, ) } #[allow(unused_variables)] -fn __action124< +fn __action127< 'input, >( input: &'input str, @@ -41407,13 +46885,13 @@ fn __action124< { let __start0 = __1.0.clone(); let __end0 = __2.2.clone(); - let __temp0 = __action103( + let __temp0 = __action106( input, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action112( + __action115( input, __0, __temp0, @@ -41421,7 +46899,7 @@ fn __action124< } #[allow(unused_variables)] -fn __action125< +fn __action128< 'input, >( input: &'input str, @@ -41430,13 +46908,13 @@ fn __action125< { let __start0 = __0.0.clone(); let __end0 = __0.0.clone(); - let __temp0 = __action101( + let __temp0 = __action104( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action92( + __action95( input, __temp0, __0, @@ -41444,7 +46922,7 @@ fn __action125< } #[allow(unused_variables)] -fn __action126< +fn __action129< 'input, >( input: &'input str, @@ -41454,12 +46932,12 @@ fn __action126< { let __start0 = __0.0.clone(); let __end0 = __0.2.clone(); - let __temp0 = __action102( + let __temp0 = __action105( input, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action92( + __action95( input, __temp0, __1, @@ -41467,7 +46945,7 @@ fn __action126< } #[allow(unused_variables)] -fn __action127< +fn __action130< 'input, >( input: &'input str, @@ -41476,19 +46954,19 @@ fn __action127< { let __start0 = __0.0.clone(); let __end0 = __0.2.clone(); - let __temp0 = __action94( + let __temp0 = __action97( input, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action117( + __action120( input, __temp0, ) } #[allow(unused_variables)] -fn __action128< +fn __action131< 'input, >( input: &'input str, @@ -41498,20 +46976,20 @@ fn __action128< { let __start0 = __lookbehind.clone(); let __end0 = __lookahead.clone(); - let __temp0 = __action95( + let __temp0 = __action98( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action117( + __action120( input, __temp0, ) } #[allow(unused_variables)] -fn __action129< +fn __action132< 'input, >( input: &'input str, @@ -41521,12 +46999,12 @@ fn __action129< { let __start0 = __1.0.clone(); let __end0 = __1.2.clone(); - let __temp0 = __action94( + let __temp0 = __action97( input, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action118( + __action121( input, __0, __temp0, @@ -41534,7 +47012,7 @@ fn __action129< } #[allow(unused_variables)] -fn __action130< +fn __action133< 'input, >( input: &'input str, @@ -41543,13 +47021,13 @@ fn __action130< { let __start0 = __0.2.clone(); let __end0 = __0.2.clone(); - let __temp0 = __action95( + let __temp0 = __action98( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action118( + __action121( input, __0, __temp0, @@ -41557,7 +47035,7 @@ fn __action130< } #[allow(unused_variables)] -fn __action131< +fn __action134< 'input, >( input: &'input str, @@ -41566,19 +47044,19 @@ fn __action131< { let __start0 = __0.0.clone(); let __end0 = __0.2.clone(); - let __temp0 = __action104( + let __temp0 = __action107( input, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action121( + __action124( input, __temp0, ) } #[allow(unused_variables)] -fn __action132< +fn __action135< 'input, >( input: &'input str, @@ -41588,20 +47066,20 @@ fn __action132< { let __start0 = __lookbehind.clone(); let __end0 = __lookahead.clone(); - let __temp0 = __action105( + let __temp0 = __action108( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action121( + __action124( input, __temp0, ) } #[allow(unused_variables)] -fn __action133< +fn __action136< 'input, >( input: &'input str, @@ -41611,12 +47089,12 @@ fn __action133< { let __start0 = __1.0.clone(); let __end0 = __1.2.clone(); - let __temp0 = __action104( + let __temp0 = __action107( input, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action122( + __action125( input, __0, __temp0, @@ -41624,7 +47102,7 @@ fn __action133< } #[allow(unused_variables)] -fn __action134< +fn __action137< 'input, >( input: &'input str, @@ -41633,13 +47111,13 @@ fn __action134< { let __start0 = __0.2.clone(); let __end0 = __0.2.clone(); - let __temp0 = __action105( + let __temp0 = __action108( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action122( + __action125( input, __0, __temp0, @@ -41647,7 +47125,7 @@ fn __action134< } #[allow(unused_variables)] -fn __action135< +fn __action138< 'input, >( input: &'input str, @@ -41656,19 +47134,19 @@ fn __action135< { let __start0 = __0.0.clone(); let __end0 = __0.2.clone(); - let __temp0 = __action99( + let __temp0 = __action102( input, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action125( + __action128( input, __temp0, ) } #[allow(unused_variables)] -fn __action136< +fn __action139< 'input, >( input: &'input str, @@ -41678,20 +47156,20 @@ fn __action136< { let __start0 = __lookbehind.clone(); let __end0 = __lookahead.clone(); - let __temp0 = __action100( + let __temp0 = __action103( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action125( + __action128( input, __temp0, ) } #[allow(unused_variables)] -fn __action137< +fn __action140< 'input, >( input: &'input str, @@ -41701,12 +47179,12 @@ fn __action137< { let __start0 = __1.0.clone(); let __end0 = __1.2.clone(); - let __temp0 = __action99( + let __temp0 = __action102( input, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action126( + __action129( input, __0, __temp0, @@ -41714,7 +47192,7 @@ fn __action137< } #[allow(unused_variables)] -fn __action138< +fn __action141< 'input, >( input: &'input str, @@ -41723,13 +47201,13 @@ fn __action138< { let __start0 = __0.2.clone(); let __end0 = __0.2.clone(); - let __temp0 = __action100( + let __temp0 = __action103( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action126( + __action129( input, __0, __temp0, diff --git a/cranelift/isle/veri/veri_annotation/tests/integration_test.rs b/cranelift/isle/veri/veri_annotation/tests/integration_test.rs index 7446ca3afd76..5db502061def 100644 --- a/cranelift/isle/veri/veri_annotation/tests/integration_test.rs +++ b/cranelift/isle/veri/veri_annotation/tests/integration_test.rs @@ -30,7 +30,7 @@ fn test_parser_multi_file() { fn test_parser_str() { let code = " ;;@ (spec (sig (args arg) (ret)) - ;;@ (assertions (= (arg) (ret)), (<= (arg) (64i128: isleType)))) + ;;@ (assume (= (arg) (ret)), (<= (arg) (64i128: isleType)))) (decl fits_in_64 (Type) Type) (extern extractor fits_in_64 fits_in_64) @@ -38,7 +38,7 @@ fn test_parser_str() { (extern extractor fits_in_32 fits_in_32) ;;@ (spec (sig (args a, b) (r)) - ;;@ (assertions (= (+ (a) (b)) (r)))) + ;;@ (assume (= (+ (a) (b)) (r)))) (decl iadd (Value Value) Inst) (extern extractor iadd iadd) "; @@ -56,7 +56,7 @@ fn test_parser_str() { fn test_parser_no_decl() { let code = " ;;@ (spec (sig (args arg) (ret)) - ;;@ (assertions (= (arg) (ret)), (<= (arg) (64i128: isleType)))) + ;;@ (assume (= (arg) (ret)), (<= (arg) (64i128: isleType)))) (extern extractor fits_in_64 fits_in_64) "; parse_annotations_str(code); @@ -67,16 +67,16 @@ fn test_parser_no_decl() { fn test_parser_dup_term_same_file() { let code = " ;;@ (spec (sig (args arg) (ret)) - ;;@ (assertions (= (arg) (ret)), (<= (arg) (64i128: isleType)))) + ;;@ (assume (= (arg) (ret)), (<= (arg) (64i128: isleType)))) (decl fits_in_64 (Type) Type) ;;@ (spec (sig (args arg) (ret)) - ;;@ (assertions (= (arg) (ret)), (<= (arg) (32: isleType)))) + ;;@ (assume (= (arg) (ret)), (<= (arg) (32: isleType)))) (decl fits_in_32 (Type) Type) (extern extractor fits_in_32 fits_in_32) ;;@ (spec (sig (args arg) (ret)) - ;;@ (assertions (= (arg) (ret)), (<= (arg) (16i128: isleType)))) + ;;@ (assume (= (arg) (ret)), (<= (arg) (16i128: isleType)))) (decl fits_in_64 (Type) Type) "; parse_annotations_str(code); diff --git a/cranelift/isle/veri/veri_annotation/tests/parser_test.rs b/cranelift/isle/veri/veri_annotation/tests/parser_test.rs index 5d0f318f8a88..fb28f7f3e451 100644 --- a/cranelift/isle/veri/veri_annotation/tests/parser_test.rs +++ b/cranelift/isle/veri/veri_annotation/tests/parser_test.rs @@ -114,7 +114,7 @@ fn test_term_annotation() { assert!(parser::TermAnnotationParser::new() .parse( "(spec (sig (args x, y) (ret)) - (assertions (= (+ (x) (y)) (ret))))" + (assume (= (+ (x) (y)) (ret))))" ) .is_ok()); } @@ -125,7 +125,7 @@ fn test_real_annotations() { let parsed = parser::TermAnnotationParser::new() .parse( "(spec (sig (args arg) (ret)) - (assertions (= (arg) (ret))))", + (assume (= (arg) (ret))))", ) .unwrap(); let expected = isle_annotation_for_term("lower").unwrap(); @@ -135,7 +135,7 @@ fn test_real_annotations() { let parsed = parser::TermAnnotationParser::new() .parse( "(spec (sig (args arg) (ret)) - (assertions (= (arg) (tywidth))))", + (assume (= (arg) (tywidth))))", ) .unwrap(); let expected = isle_annotation_for_term("value_type").unwrap(); @@ -145,7 +145,7 @@ fn test_real_annotations() { let parsed = parser::TermAnnotationParser::new() .parse( "(spec (sig (args ty, arg) (ret)) - (assertions (= (ty) (tywidth)), (= (arg) (ret))))", + (assume (= (ty) (tywidth)), (= (arg) (ret))))", ) .unwrap(); let expected = isle_annotation_for_term("has_type").unwrap(); @@ -155,7 +155,7 @@ fn test_real_annotations() { let parsed = parser::TermAnnotationParser::new() .parse( "(spec (sig (args arg) (ret)) - (assertions (= (arg) (ret)), (<= (arg) (64i128: isleType))))", + (assume (= (arg) (ret)), (<= (arg) (64i128: isleType))))", ) .unwrap(); let expected = isle_annotation_for_term("fits_in_64").unwrap(); @@ -165,7 +165,7 @@ fn test_real_annotations() { let parsed = parser::TermAnnotationParser::new() .parse( "(spec (sig (args a, b) (r)) - (assertions (= (+ (a) (b)) (r))))", + (assume (= (+ (a) (b)) (r))))", ) .unwrap(); let expected = isle_annotation_for_term("iadd").unwrap(); @@ -175,7 +175,7 @@ fn test_real_annotations() { let parsed = parser::TermAnnotationParser::new() .parse( "(spec (sig (args ty, a, b) (r)) - (assertions (= (+ (a) (b)) (r))))", + (assume (= (+ (a) (b)) (r))))", ) .unwrap(); //let expected = isle_annotation_for_term("add").unwrap(); @@ -185,7 +185,7 @@ fn test_real_annotations() { //let parsed = parser::TermAnnotationParser::new() // .parse( // "(spec (sig (args imm_arg) (ret)) - // (assertions (= (-(conv_from 12 (imm_arg))) (ret))))", + // (assume (= (-(conv_from 12 (imm_arg))) (ret))))", // ) // .unwrap(); //let expected = isle_annotation_for_term("imm12_from_negated_value").unwrap(); @@ -195,7 +195,7 @@ fn test_real_annotations() { //let parsed = parser::TermAnnotationParser::new() // .parse( // "(spec (sig (args ty, reg, imm_arg) (ret)) - // (assertions (= (-(reg) (conv_from 12 (imm_arg))) (ret))))", + // (assume (= (-(reg) (conv_from 12 (imm_arg))) (ret))))", // ) // .unwrap(); //let expected = isle_annotation_for_term("sub_imm").unwrap(); @@ -205,7 +205,7 @@ fn test_real_annotations() { // let parsed = parser::TermAnnotationParser::new() // .parse( // "(spec (sig (args a, b, c, d) (ret)) - // (assertions (if (b) { + // (assume (if (b) { // (= (ret) (signed_conv_to (d) (a))) // // (= (ret) (conv_to (d) (a)))}), diff --git a/cranelift/isle/veri/veri_engine/examples/band/64_band.isle b/cranelift/isle/veri/veri_engine/examples/band/64_band.isle index 16bb77a37ee3..b7c5a6a10a78 100644 --- a/cranelift/isle/veri/veri_engine/examples/band/64_band.isle +++ b/cranelift/isle/veri/veri_engine/examples/band/64_band.isle @@ -1,6 +1,6 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -9,15 +9,15 @@ )) ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (0i64:bv) (ret)))) +;;@ (assume (= (0i64:bv) (ret)))) ;;decl ALUOp.And ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (1i64:bv) (ret)))) +;;@ (assume (= (1i64:bv) (ret)))) ;;decl ALUOp.Orr ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (2i64:bv) (ret)))) +;;@ (assume (= (2i64:bv) (ret)))) ;;decl ALUOp.Eor ;; An ALU operation. This can be paired with several instruction formats @@ -60,7 +60,7 @@ )) ;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assertions (= (ret) (switch (op) +;;@ (assume (= (ret) (switch (op) ;;@ ((0i64:bv) (& (a) (b))) ;;@ ((1i64:bv) (| (a) (b))) ;;@ ((2i64:bv) (xor (a) (b))) diff --git a/cranelift/isle/veri/veri_engine/examples/band/fits_in_32_band.isle b/cranelift/isle/veri/veri_engine/examples/band/fits_in_32_band.isle index 34a547a91e6c..02021a345a05 100644 --- a/cranelift/isle/veri/veri_engine/examples/band/fits_in_32_band.isle +++ b/cranelift/isle/veri/veri_engine/examples/band/fits_in_32_band.isle @@ -1,6 +1,6 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -9,15 +9,15 @@ )) ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (0i64:bv) (ret)))) +;;@ (assume (= (0i64:bv) (ret)))) ;;decl ALUOp.And ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (1i64:bv) (ret)))) +;;@ (assume (= (1i64:bv) (ret)))) ;;decl ALUOp.Orr ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (2i64:bv) (ret)))) +;;@ (assume (= (2i64:bv) (ret)))) ;;decl ALUOp.Eor ;; An ALU operation. This can be paired with several instruction formats @@ -60,7 +60,7 @@ )) ;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assertions (= (ret) (switch (op) +;;@ (assume (= (ret) (switch (op) ;;@ ((0i64:bv) (& (a) (b))) ;;@ ((1i64:bv) (| (a) (b))) ;;@ ((2i64:bv) (xor (a) (b))) diff --git a/cranelift/isle/veri/veri_engine/examples/bor/64_bor.isle b/cranelift/isle/veri/veri_engine/examples/bor/64_bor.isle index 4fe3e60b0190..52541db81297 100644 --- a/cranelift/isle/veri/veri_engine/examples/bor/64_bor.isle +++ b/cranelift/isle/veri/veri_engine/examples/bor/64_bor.isle @@ -1,6 +1,6 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -9,15 +9,15 @@ )) ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (0i64:bv) (ret)))) +;;@ (assume (= (0i64:bv) (ret)))) ;;decl ALUOp.And ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (1i64:bv) (ret)))) +;;@ (assume (= (1i64:bv) (ret)))) ;;decl ALUOp.Orr ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (2i64:bv) (ret)))) +;;@ (assume (= (2i64:bv) (ret)))) ;;decl ALUOp.Eor ;; An ALU operation. This can be paired with several instruction formats @@ -60,7 +60,7 @@ )) ;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assertions (= (ret) (switch (op) +;;@ (assume (= (ret) (switch (op) ;;@ ((0i64:bv) (& (a) (b))) ;;@ ((1i64:bv) (| (a) (b))) ;;@ ((2i64:bv) (xor (a) (b))) diff --git a/cranelift/isle/veri/veri_engine/examples/bor/fits_in_32_bor.isle b/cranelift/isle/veri/veri_engine/examples/bor/fits_in_32_bor.isle index 576fda3f1b78..9f0e77393259 100644 --- a/cranelift/isle/veri/veri_engine/examples/bor/fits_in_32_bor.isle +++ b/cranelift/isle/veri/veri_engine/examples/bor/fits_in_32_bor.isle @@ -1,6 +1,6 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -9,15 +9,15 @@ )) ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (0i64:bv) (ret)))) +;;@ (assume (= (0i64:bv) (ret)))) ;;decl ALUOp.And ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (1i64:bv) (ret)))) +;;@ (assume (= (1i64:bv) (ret)))) ;;decl ALUOp.Orr ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (2i64:bv) (ret)))) +;;@ (assume (= (2i64:bv) (ret)))) ;;decl ALUOp.Eor ;; An ALU operation. This can be paired with several instruction formats @@ -60,7 +60,7 @@ )) ;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assertions (= (ret) (switch (op) +;;@ (assume (= (ret) (switch (op) ;;@ ((0i64:bv) (& (a) (b))) ;;@ ((1i64:bv) (| (a) (b))) ;;@ ((2i64:bv) (xor (a) (b))) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/broken_32_general_rotl_to_rotr.isle b/cranelift/isle/veri/veri_engine/examples/broken/broken_32_general_rotl_to_rotr.isle index cf6a71f9aa04..60ea4ecb0c82 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/broken_32_general_rotl_to_rotr.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/broken_32_general_rotl_to_rotr.isle @@ -1,6 +1,6 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -9,17 +9,17 @@ )) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (- (a) (b)) (r)))) +;;@ (assume (= (- (a) (b)) (r)))) (decl sub (Type Reg Reg) Reg) (extern constructor sub sub) ;;@ (spec (sig (args) (r)) -;;@ (assertions (= (zero_ext (regwidth) (0i1:bv)) (r)))) +;;@ (assume (= (zero_ext (regwidth) (0i1:bv)) (r)))) (decl zero_reg () Reg) (extern constructor zero_reg zero_reg) ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (zero_ext (regwidth) (rotr (extract 31 0 (x)) (extract 31 0 (y)))) ;;@ (rotr (x) (y)) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/broken_fits_in_16_rotl_to_rotr.isle b/cranelift/isle/veri/veri_engine/examples/broken/broken_fits_in_16_rotl_to_rotr.isle index d266bcd4abbe..4f0281ed5084 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/broken_fits_in_16_rotl_to_rotr.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/broken_fits_in_16_rotl_to_rotr.isle @@ -2,21 +2,21 @@ (type Imm12 (primitive Imm12)) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (- (a) (b)) (r)))) +;;@ (assume (= (- (a) (b)) (r)))) (decl sub (Type Reg Reg) Reg) (extern constructor sub sub) ;;@ (spec (sig (args) (r)) -;;@ (assertions (= (zero_ext (regwidth) (0i1:bv)) (r)))) +;;@ (assume (= (zero_ext (regwidth) (0i1:bv)) (r)))) (decl zero_reg () Reg) (extern constructor zero_reg zero_reg) ;;@ (spec (sig (args a, b, c, d) (ret)) -;;@ (assertions (if (b) +;;@ (assume (if (b) ;;@ (= (ret) (sign_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) ;;@ (= (ret) (zero_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) ;;@ ) @@ -25,7 +25,7 @@ (extern constructor extend extend) ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) ;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) ;;@ (= (extract 2 0 (y)) (0i3:bv)) ;;@ )), @@ -41,7 +41,7 @@ ;; Place a `Value` into a register, zero extending it to 32-bits ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions ( +;;@ (assume ( ;;@ if (<= (32i0:isleType) (widthof (arg))) ;;@ (= (ret) (conv_to (regwidth) (arg))) ;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) @@ -56,13 +56,13 @@ ;; } ;; ;;@ (spec (sig (args x) (ret)) -;;@ (assertions (= (- (int2bv 64 (x)) (1i64:bv64)) (ret)))) +;;@ (assume (= (- (int2bv 64 (x)) (1i64:bv64)) (ret)))) (decl rotr_mask (Type) ImmLogic) (extern constructor rotr_mask rotr_mask) ;; Note that 4094 = 0xffe and 16773119 = 0xffefff ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) ;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) ;;@ (= (extract 2 0 (y)) (0i3:bv)) ;;@ )), @@ -72,22 +72,22 @@ (extern constructor sub_imm sub_imm) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (ret) (zero_ext (24) (arg))))) +;;@ (assume (= (ret) (zero_ext (24) (arg))))) (decl u8_into_imm12 (u8) Imm12) (extern constructor u8_into_imm12 u8_into_imm12) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (shr (a) (b)) (r)))) +;;@ (assume (= (shr (a) (b)) (r)))) (decl lsr (Type Reg Reg) Reg) (extern constructor lsr lsr) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (shl (a) (b)) (r)))) +;;@ (assume (= (shl (a) (b)) (r)))) (decl lsl (Type Reg Reg) Reg) (extern constructor lsl lsl) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (| (a) (b)) (r)))) +;;@ (assume (= (| (a) (b)) (r)))) (decl orr (Type Reg Reg) Reg) (extern constructor orr orr) @@ -104,7 +104,7 @@ ;;@ (spec (sig (args t, x, y) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (t) ;;@ ((8i8: isleType) (conv_to (regwidth) (rotr (extract 7 0 (x)) (extract 7 0 (y))))) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/broken_fits_in_16_with_imm_rotl_to_rotr.isle b/cranelift/isle/veri/veri_engine/examples/broken/broken_fits_in_16_with_imm_rotl_to_rotr.isle index fdac447af0a8..fb7697d6f3e6 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/broken_fits_in_16_with_imm_rotl_to_rotr.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/broken_fits_in_16_with_imm_rotl_to_rotr.isle @@ -3,21 +3,21 @@ (type Imm12 (primitive Imm12)) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (- (a) (b)) (r)))) +;;@ (assume (= (- (a) (b)) (r)))) (decl sub (Type Reg Reg) Reg) (extern constructor sub sub) ;;@ (spec (sig (args) (r)) -;;@ (assertions (= (zero_ext (regwidth) (0i1:bv)) (r)))) +;;@ (assume (= (zero_ext (regwidth) (0i1:bv)) (r)))) (decl zero_reg () Reg) (extern constructor zero_reg zero_reg) ;;@ (spec (sig (args a, b, c, d) (ret)) -;;@ (assertions (if (b) +;;@ (assume (if (b) ;;@ (= (ret) (sign_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) ;;@ (= (ret) (zero_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) ;;@ ) @@ -26,7 +26,7 @@ (extern constructor extend extend) ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) ;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) ;;@ (= (extract 2 0 (y)) (0i3:bv)) ;;@ )), @@ -42,7 +42,7 @@ ;; Place a `Value` into a register, zero extending it to 32-bits ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions ( +;;@ (assume ( ;;@ if (<= (32i0:isleType) (widthof (arg))) ;;@ (= (ret) (conv_to (regwidth) (arg))) ;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) @@ -53,7 +53,7 @@ ;; Note that 4094 = 0xffe and 16773119 = 0xffefff ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) ;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) ;;@ (= (extract 2 0 (y)) (0i3:bv)) ;;@ )), @@ -63,22 +63,22 @@ (extern constructor sub_imm sub_imm) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (ret) (zero_ext (24) (arg))))) +;;@ (assume (= (ret) (zero_ext (24) (arg))))) (decl u8_into_imm12 (u8) Imm12) (extern constructor u8_into_imm12 u8_into_imm12) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (shr (a) (b)) (r)))) +;;@ (assume (= (shr (a) (b)) (r)))) (decl lsr (Type Reg Reg) Reg) (extern constructor lsr lsr) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (shl (a) (b)) (r)))) +;;@ (assume (= (shl (a) (b)) (r)))) (decl lsl (Type Reg Reg) Reg) (extern constructor lsl lsl) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (| (a) (b)) (r)))) +;;@ (assume (= (| (a) (b)) (r)))) (decl orr (Type Reg Reg) Reg) (extern constructor orr orr) @@ -90,7 +90,7 @@ ;; Add an assertion that the value fits, using the constand with 56 1's then 6 0's (~63) ;;@ (spec (sig (args ty, x) (r)) -;;@ (assertions +;;@ (assume ;;@ (= (r) (extract 5 0 (& (x) (- (int2bv 64 (ty)) (1i64:bv64))))), ;;@ (ult (& (x) (- (int2bv 64 (ty)) (1i64:bv64))) (64i64:bv64)) ;;@ ) @@ -106,7 +106,7 @@ ;; } ;;@ (spec (sig (args ty, x) (r)) -;;@ (assertions +;;@ (assume ;;@ (= (- (x)) (r)) ;;@ ) ;;@ ) @@ -115,13 +115,13 @@ ;; Helper for generating `lsr` instructions. ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (shr (a) (b)) (r)))) +;;@ (assume (= (shr (a) (b)) (r)))) (decl lsr_imm (Type Reg ImmShift) Reg) (extern constructor lsr_imm lsr_imm) (extern extractor lsr_imm lsr_imm) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (shl (a) (b)) (r)))) +;;@ (assume (= (shl (a) (b)) (r)))) (decl lsl_imm (Type Reg ImmShift) Reg) (extern constructor lsl_imm lsl_imm) (extern extractor lsl_imm lsl_imm) @@ -132,7 +132,7 @@ ;; } ;;@ (spec (sig (args ty, x) (ret)) -;;@ (assertions (= (- (int2bv 6 (ty)) (& (x) (- (int2bv 6 (ty)) (1i6:bv)))) (ret)))) +;;@ (assume (= (- (int2bv 6 (ty)) (& (x) (- (int2bv 6 (ty)) (1i6:bv)))) (ret)))) (decl rotr_opposite_amount (Type ImmShift) ImmShift) (extern constructor rotr_opposite_amount rotr_opposite_amount) @@ -148,7 +148,7 @@ (small_rotr_imm ty (put_in_reg_zext32 x) n)) ;;@ (spec (sig (args t, x, y) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (t) ;;@ ((8i8: isleType) (conv_to (regwidth) (rotr (extract 7 0 (x)) (zero_ext (8) (y))))) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/broken_fits_in_32_band.isle b/cranelift/isle/veri/veri_engine/examples/broken/broken_fits_in_32_band.isle index 9aa8d28e3f4d..4cf58505c79c 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/broken_fits_in_32_band.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/broken_fits_in_32_band.isle @@ -1,6 +1,6 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -9,11 +9,11 @@ )) ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (0i64:bv) (ret)))) +;;@ (assume (= (0i64:bv) (ret)))) ;;decl ALUOp.And ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (1i64:bv) (ret)))) +;;@ (assume (= (1i64:bv) (ret)))) ;;decl ALUOp.Or ;; An ALU operation. This can be paired with several instruction formats @@ -57,7 +57,7 @@ ;; BROKEN: swapped 0 and 1 ;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assertions (= (ret) (switch (op) +;;@ (assume (= (ret) (switch (op) ;;@ ((1i64:bv) (& (a) (b))) ;;@ ((0i64:bv) (| (a) (b))) ;;@ ((2i64:bv) (xor (a) (b))) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/broken_fits_in_32_bor.isle b/cranelift/isle/veri/veri_engine/examples/broken/broken_fits_in_32_bor.isle index 64017884deff..b7622941abb3 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/broken_fits_in_32_bor.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/broken_fits_in_32_bor.isle @@ -1,6 +1,6 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -9,11 +9,11 @@ )) ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (0i64:bv) (ret)))) +;;@ (assume (= (0i64:bv) (ret)))) ;;decl ALUOp.And ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (1i64:bv) (ret)))) +;;@ (assume (= (1i64:bv) (ret)))) ;;decl ALUOp.Orr ;; An ALU operation. This can be paired with several instruction formats @@ -57,7 +57,7 @@ ;; BROKEN: swapped 0 and 1 ;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assertions (= (ret) (switch (op) +;;@ (assume (= (ret) (switch (op) ;;@ ((1i64:bv) (& (a) (b))) ;;@ ((0i64:bv) (| (a) (b))) ;;@ ((2i64:bv) (xor (a) (b))) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/broken_imul.isle b/cranelift/isle/veri/veri_engine/examples/broken/broken_imul.isle index a40025d02661..89d23fb16497 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/broken_imul.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/broken_imul.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -35,7 +35,7 @@ (extern constructor alu_rrrr alu_rrrr) ;;@ (spec (sig (args) (r)) -;;@ (assertions (= (zero_ext (regwidth) (0i1:bv)) (r)))) +;;@ (assume (= (zero_ext (regwidth) (0i1:bv)) (r)))) (decl zero_reg () Reg) (extern constructor zero_reg zero_reg) @@ -46,7 +46,7 @@ ;; Helpers for generating `madd` instructions. ;;@ (spec (sig (args ty, a, b, c) (r)) -;;@ (assertions (= (+ (c) (* (a) (b))) (r)))) +;;@ (assume (= (+ (c) (* (a) (b))) (r)))) (decl madd (Type Reg Reg Reg) Reg) (rule (madd ty x y z) (alu_rrrr (ALUOp3.MAdd) ty x y z)) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/broken_mask_small_rotr.isle b/cranelift/isle/veri/veri_engine/examples/broken/broken_mask_small_rotr.isle index 67f6a03cdcda..c24267e52135 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/broken_mask_small_rotr.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/broken_mask_small_rotr.isle @@ -2,17 +2,17 @@ (type Imm12 (primitive Imm12)) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (- (a) (b)) (r)))) +;;@ (assume (= (- (a) (b)) (r)))) (decl sub (Type Reg Reg) Reg) (extern constructor sub sub) ;;@ (spec (sig (args) (r)) -;;@ (assertions (= (zero_ext (regwidth) (0i1:bv)) (r)))) +;;@ (assume (= (zero_ext (regwidth) (0i1:bv)) (r)))) (decl zero_reg () Reg) (extern constructor zero_reg zero_reg) ;;@ (spec (sig (args a, b, c, d) (ret)) -;;@ (assertions (if (b) +;;@ (assume (if (b) ;;@ (= (ret) (sign_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) ;;@ (= (ret) (zero_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) ;;@ ) @@ -21,7 +21,7 @@ (extern constructor extend extend) ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) ;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) ;;@ (= (extract 2 0 (y)) (0i3:bv)) ;;@ )), @@ -37,7 +37,7 @@ ;; Place a `Value` into a register, zero extending it to 32-bits ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions ( +;;@ (assume ( ;;@ if (<= (32i0:isleType) (widthof (arg))) ;;@ (= (ret) (conv_to (regwidth) (arg))) ;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) @@ -53,13 +53,13 @@ ;; } ;; ;;@ (spec (sig (args x) (ret)) -;;@ (assertions (= (- (int2bv 64 (x)) (2i64:bv64)) (ret)))) +;;@ (assume (= (- (int2bv 64 (x)) (2i64:bv64)) (ret)))) (decl rotr_mask (Type) ImmLogic) (extern constructor rotr_mask rotr_mask) ;; Note that 4094 = 0xffe and 16773119 = 0xffefff ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) ;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) ;;@ (= (extract 2 0 (y)) (0i3:bv)) ;;@ )), @@ -74,12 +74,12 @@ (extern constructor sub_imm sub_imm) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (ret) (zero_ext (24) (arg))))) +;;@ (assume (= (ret) (zero_ext (24) (arg))))) (decl u8_into_imm12 (u8) Imm12) (extern constructor u8_into_imm12 u8_into_imm12) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions +;;@ (assume ;;@ (= (r) ;;@ (switch (ty) ;;@ ((32i8: isleType) (conv_to (regwidth) (shr (extract 31 0 (a)) (extract 31 0 (b))))) @@ -91,7 +91,7 @@ (extern constructor lsr lsr) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions +;;@ (assume ;;@ (= (r) ;;@ (switch (ty) ;;@ ((32i8: isleType) (conv_to (regwidth) (shl (extract 31 0 (a)) (extract 31 0 (b))))) @@ -103,7 +103,7 @@ (extern constructor lsl lsl) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions +;;@ (assume ;;@ (= (r) ;;@ (switch (ty) ;;@ ((32i8: isleType) (conv_to (regwidth) (| (extract 31 0 (a)) (extract 31 0 (b))))) @@ -121,7 +121,7 @@ ;;@ (spec (sig (args t, x, y) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (t) ;;@ ((8i8: isleType) (conv_to (regwidth) (rotr (extract 7 0 (x)) (extract 7 0 (y))))) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/broken_rule_or_small_rotr.isle b/cranelift/isle/veri/veri_engine/examples/broken/broken_rule_or_small_rotr.isle index 9492f55d1344..f7ad24f3df8e 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/broken_rule_or_small_rotr.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/broken_rule_or_small_rotr.isle @@ -2,17 +2,17 @@ (type Imm12 (primitive Imm12)) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (- (a) (b)) (r)))) +;;@ (assume (= (- (a) (b)) (r)))) (decl sub (Type Reg Reg) Reg) (extern constructor sub sub) ;;@ (spec (sig (args) (r)) -;;@ (assertions (= (zero_ext (regwidth) (0i1:bv)) (r)))) +;;@ (assume (= (zero_ext (regwidth) (0i1:bv)) (r)))) (decl zero_reg () Reg) (extern constructor zero_reg zero_reg) ;;@ (spec (sig (args a, b, c, d) (ret)) -;;@ (assertions (if (b) +;;@ (assume (if (b) ;;@ (= (ret) (sign_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) ;;@ (= (ret) (zero_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) ;;@ ) @@ -21,7 +21,7 @@ (extern constructor extend extend) ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) ;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) ;;@ (= (extract 2 0 (y)) (0i3:bv)) ;;@ )), @@ -37,7 +37,7 @@ ;; Place a `Value` into a register, zero extending it to 32-bits ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions ( +;;@ (assume ( ;;@ if (<= (32i0:isleType) (widthof (arg))) ;;@ (= (ret) (conv_to (regwidth) (arg))) ;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) @@ -52,13 +52,13 @@ ;; } ;; ;;@ (spec (sig (args x) (ret)) -;;@ (assertions (= (- (int2bv 64 (x)) (1i64:bv64)) (ret)))) +;;@ (assume (= (- (int2bv 64 (x)) (1i64:bv64)) (ret)))) (decl rotr_mask (Type) ImmLogic) (extern constructor rotr_mask rotr_mask) ;; Note that 4094 = 0xffe and 16773119 = 0xffefff ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) ;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) ;;@ (= (extract 2 0 (y)) (0i3:bv)) ;;@ )), @@ -73,12 +73,12 @@ (extern constructor sub_imm sub_imm) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (ret) (zero_ext (24) (arg))))) +;;@ (assume (= (ret) (zero_ext (24) (arg))))) (decl u8_into_imm12 (u8) Imm12) (extern constructor u8_into_imm12 u8_into_imm12) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions +;;@ (assume ;;@ (= (r) ;;@ (switch (ty) ;;@ ((32i8: isleType) (conv_to (regwidth) (shr (extract 31 0 (a)) (extract 31 0 (b))))) @@ -90,7 +90,7 @@ (extern constructor lsr lsr) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions +;;@ (assume ;;@ (= (r) ;;@ (switch (ty) ;;@ ((32i8: isleType) (conv_to (regwidth) (shl (extract 31 0 (a)) (extract 31 0 (b))))) @@ -102,7 +102,7 @@ (extern constructor lsl lsl) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions +;;@ (assume ;;@ (= (r) ;;@ (switch (ty) ;;@ ((32i8: isleType) (conv_to (regwidth) (| (extract 31 0 (a)) (extract 31 0 (b))))) @@ -120,7 +120,7 @@ ;;@ (spec (sig (args t, x, y) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (t) ;;@ ((8i8: isleType) (conv_to (regwidth) (rotr (extract 7 0 (x)) (extract 7 0 (y))))) @@ -137,7 +137,7 @@ (decl small_rotr (Type Reg Reg) Reg) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions +;;@ (assume ;;@ (= (r) ;;@ (switch (ty) ;;@ ((32i8: isleType) (conv_to (regwidth) (& (extract 31 0 (a)) (extract 31 0 (b))))) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/broken_uextend.isle b/cranelift/isle/veri/veri_engine/examples/broken/broken_uextend.isle index 8f36c258a9e1..a463d9c364cd 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/broken_uextend.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/broken_uextend.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -17,7 +17,7 @@ ;; Helper for emitting `MInst.Extend` instructions. ;; BROKEN: zero_ext and sign_ext swapped ;;@ (spec (sig (args a, b, c, d) (ret)) -;;@ (assertions (if (b) +;;@ (assume (if (b) ;;@ (= (ret) (zero_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) ;;@ (= (ret) (sign_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) ;;@ ) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/cls/broken_cls.isle b/cranelift/isle/veri/veri_engine/examples/broken/cls/broken_cls.isle index 534d9e0ec688..dd1ac63a7b25 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/cls/broken_cls.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/cls/broken_cls.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -17,7 +17,7 @@ (extern constructor bit_rr bit_rr) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (a64cls (32i0:isleType) (a)) ;;@ (a64cls (64i0:isleType) (a)) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/cls/broken_cls16.isle b/cranelift/isle/veri/veri_engine/examples/broken/cls/broken_cls16.isle index e9acffdeccb1..79f0c2eef2ff 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/cls/broken_cls16.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/cls/broken_cls16.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -34,7 +34,7 @@ ;; Note that 4094 = 0xffe and 16773119 = 0xffefff ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) ;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) ;;@ (= (extract 2 0 (y)) (0i3:bv)) ;;@ )), @@ -44,7 +44,7 @@ (rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (a64cls (32i0:isleType) (a)) ;;@ (a64cls (64i0:isleType) (a)) @@ -64,7 +64,7 @@ ;; Place a `Value` into a register, zero extending it to 32-bits ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions ( +;;@ (assume ( ;;@ if (<= (32i0:isleType) (widthof (arg))) ;;@ (= (ret) (conv_to (regwidth) (arg))) ;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) @@ -77,7 +77,7 @@ (rule (put_in_reg_zext32 val @ (value_type $I64)) val) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (ret) (zero_ext (24) (arg))))) +;;@ (assume (= (ret) (zero_ext (24) (arg))))) (decl u8_into_imm12 (u8) Imm12) (extern constructor u8_into_imm12 u8_into_imm12) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/cls/broken_cls8.isle b/cranelift/isle/veri/veri_engine/examples/broken/cls/broken_cls8.isle index 7bd8d20ba39c..70c3f1e1eac2 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/cls/broken_cls8.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/cls/broken_cls8.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -34,7 +34,7 @@ ;; Note that 4094 = 0xffe and 16773119 = 0xffefff ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) ;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) ;;@ (= (extract 2 0 (y)) (0i3:bv)) ;;@ )), @@ -44,7 +44,7 @@ (rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (a64cls (32i0:isleType) (a)) ;;@ (a64cls (64i0:isleType) (a)) @@ -64,7 +64,7 @@ ;; Place a `Value` into a register, zero extending it to 32-bits ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions ( +;;@ (assume ( ;;@ if (<= (32i0:isleType) (widthof (arg))) ;;@ (= (ret) (conv_to (regwidth) (arg))) ;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) @@ -77,7 +77,7 @@ (rule (put_in_reg_zext32 val @ (value_type $I64)) val) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (ret) (zero_ext (24) (arg))))) +;;@ (assume (= (ret) (zero_ext (24) (arg))))) (decl u8_into_imm12 (u8) Imm12) (extern constructor u8_into_imm12 u8_into_imm12) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/clz/broken_clz.isle b/cranelift/isle/veri/veri_engine/examples/broken/clz/broken_clz.isle index c3f360264e5a..722873f5976f 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/clz/broken_clz.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/clz/broken_clz.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -17,7 +17,7 @@ (extern constructor bit_rr bit_rr) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (ret) (clz (a))))) +;;@ (assume (= (ret) (clz (a))))) (decl a64_clz (Type Reg) Reg) (rule (a64_clz ty x) (bit_rr (BitOp.Clz) ty x)) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/clz/broken_clz16.isle b/cranelift/isle/veri/veri_engine/examples/broken/clz/broken_clz16.isle index 3d3f020d3b84..a203ed4347e2 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/clz/broken_clz16.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/clz/broken_clz16.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -34,7 +34,7 @@ ;; Note that 4094 = 0xffe and 16773119 = 0xffefff ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) ;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) ;;@ (= (extract 2 0 (y)) (0i3:bv)) ;;@ )), @@ -44,7 +44,7 @@ (rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (a64clz (32i0:isleType) (a)) ;;@ (a64clz (64i0:isleType) (a)) @@ -64,7 +64,7 @@ ;; Place a `Value` into a register, zero extending it to 32-bits ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions ( +;;@ (assume ( ;;@ if (<= (32i0:isleType) (widthof (arg))) ;;@ (= (ret) (conv_to (regwidth) (arg))) ;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) @@ -77,7 +77,7 @@ (rule (put_in_reg_zext32 val @ (value_type $I64)) val) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (ret) (zero_ext (24) (arg))))) +;;@ (assume (= (ret) (zero_ext (24) (arg))))) (decl u8_into_imm12 (u8) Imm12) (extern constructor u8_into_imm12 u8_into_imm12) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/clz/broken_clz8.isle b/cranelift/isle/veri/veri_engine/examples/broken/clz/broken_clz8.isle index c2bef181e42e..8b872266312c 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/clz/broken_clz8.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/clz/broken_clz8.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -34,7 +34,7 @@ ;; Note that 4094 = 0xffe and 16773119 = 0xffefff ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) ;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) ;;@ (= (extract 2 0 (y)) (0i3:bv)) ;;@ )), @@ -44,7 +44,7 @@ (rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (a64clz (32i0:isleType) (a)) ;;@ (a64clz (64i0:isleType) (a)) @@ -65,7 +65,7 @@ ;; BROKEN: swapped order in comparison ;; Place a `Value` into a register, zero extending it to 32-bits ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions ( +;;@ (assume ( ;;@ if (<= (widthof (arg)) (32i0:isleType)) ;;@ (= (ret) (conv_to (regwidth) (arg))) ;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) @@ -78,7 +78,7 @@ (rule (put_in_reg_zext32 val @ (value_type $I64)) val) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (ret) (zero_ext (24) (arg))))) +;;@ (assume (= (ret) (zero_ext (24) (arg))))) (decl u8_into_imm12 (u8) Imm12) (extern constructor u8_into_imm12 u8_into_imm12) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/ctz/broken_ctz.isle b/cranelift/isle/veri/veri_engine/examples/broken/ctz/broken_ctz.isle index c9a4d8843a08..4f9ac069a1e4 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/ctz/broken_ctz.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/ctz/broken_ctz.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -18,7 +18,7 @@ (extern constructor bit_rr bit_rr) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (a64clz (32i0:isleType) (a)) ;;@ (a64clz (64i0:isleType) (a)) @@ -31,7 +31,7 @@ (rule (a64_clz ty x) (bit_rr (BitOp.Clz) ty x)) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (a64rev (32i0:isleType) (a)) ;;@ (a64rev (64i0:isleType) (a)) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/ctz/broken_ctz16.isle b/cranelift/isle/veri/veri_engine/examples/broken/ctz/broken_ctz16.isle index bf3d252e97c9..80a0b8b7ddab 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/ctz/broken_ctz16.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/ctz/broken_ctz16.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -45,7 +45,7 @@ dst)) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (a64clz (32i0:isleType) (a)) ;;@ (a64clz (64i0:isleType) (a)) @@ -58,12 +58,12 @@ (rule (a64_clz ty x) (bit_rr (BitOp.Clz) ty x)) ;;@ (spec (sig (args ty, a, b) (ret)) -;;@ (assertions (= (ret) (| (a) (b))))) +;;@ (assume (= (ret) (| (a) (b))))) (decl orr_imm (Type Reg ImmLogic) Reg) (rule (orr_imm ty x y) (alu_rr_imm_logic (ALUOp.Orr) ty x y)) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (a64rev (32i0:isleType) (a)) ;;@ (a64rev (64i0:isleType) (a)) @@ -76,7 +76,7 @@ (rule (rbit ty x) (bit_rr (BitOp.RBit) ty x)) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType))) +;;@ (assume (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType))) ;;@ )) (decl u64_into_imm_logic (Type u64) ImmLogic) (extern constructor u64_into_imm_logic u64_into_imm_logic) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/ctz/broken_ctz8.isle b/cranelift/isle/veri/veri_engine/examples/broken/ctz/broken_ctz8.isle index 6ade0da0b38d..276f181bf9a1 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/ctz/broken_ctz8.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/ctz/broken_ctz8.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -45,7 +45,7 @@ dst)) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (a64clz (32i0:isleType) (a)) ;;@ (a64clz (64i0:isleType) (a)) @@ -58,12 +58,12 @@ (rule (a64_clz ty x) (bit_rr (BitOp.Clz) ty x)) ;;@ (spec (sig (args ty, a, b) (ret)) -;;@ (assertions (= (ret) (| (a) (conv_to (regwidth) (b)))))) +;;@ (assume (= (ret) (| (a) (conv_to (regwidth) (b)))))) (decl orr_imm (Type Reg ImmLogic) Reg) (rule (orr_imm ty x y) (alu_rr_imm_logic (ALUOp.Orr) ty x y)) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (a64rev (32i0:isleType) (a)) ;;@ (a64rev (64i0:isleType) (a)) @@ -76,7 +76,7 @@ (rule (rbit ty x) (bit_rr (BitOp.RBit) ty x)) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (a) (ret)), +;;@ (assume (= (a) (ret)), ;;@ (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType))) ;;@ )) (decl u64_into_imm_logic (Type u64) ImmLogic) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_base_case.isle b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_base_case.isle index dcdb65e55361..2ae6cacff7b1 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_base_case.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_base_case.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -15,7 +15,7 @@ (extern constructor alu_rrr alu_rrr) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (+ (a) (b)) (r)))) +;;@ (assume (= (+ (a) (b)) (r)))) (decl add (Type Reg Reg) Reg) (rule (add ty x y) (alu_rrr (ALUOp.Add) ty x y)) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_imm12.isle b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_imm12.isle index 92ad0e02a825..79a06637514a 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_imm12.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_imm12.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -17,7 +17,7 @@ ;; Note that 4094 = 0xffe and 16773119 = 0xffefff ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) ;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) ;;@ (= (extract 2 0 (y)) (0i3:bv)) ;;@ )), @@ -31,7 +31,7 @@ ;; Note that 4095 = 0xfff and 16773120 = 0xfff000 ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (|| (< (zero_ext (regwidth) (ret)) (4095i64:bv)) +;;@ (assume (|| (< (zero_ext (regwidth) (ret)) (4095i64:bv)) ;;@ (&& (< (zero_ext (regwidth) (ret)) (16773120i64:bv)) ;;@ (= (extract 2 0 (zero_ext (regwidth) (ret))) (0i3:bv)) ;;@ )), diff --git a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_imm12_2.isle b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_imm12_2.isle index 4ab531f35727..b91b5395e934 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_imm12_2.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_imm12_2.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -18,7 +18,7 @@ ;; BROKEN: subtract instead of add ;; Note that 4094 = 0xffe and 16773119 = 0xffefff ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) ;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) ;;@ (= (extract 2 0 (y)) (0i3:bv)) ;;@ )), @@ -32,7 +32,7 @@ ;; Note that 4095 = 0xfff and 16773120 = 0xfff000 ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (|| (< (zero_ext (regwidth) (ret)) (4095i64:bv)) +;;@ (assume (|| (< (zero_ext (regwidth) (ret)) (4095i64:bv)) ;;@ (&& (< (zero_ext (regwidth) (ret)) (16773120i64:bv)) ;;@ (= (extract 2 0 (zero_ext (regwidth) (ret))) (0i3:bv)) ;;@ )), diff --git a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_imm12neg.isle b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_imm12neg.isle index 9c5a63a730bb..af7242fe833d 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_imm12neg.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_imm12neg.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -19,7 +19,7 @@ ;; BROKEN: * instead of sub ;; Note that 4094 = 0xffe and 16773119 = 0xffefff ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (= (ret) (* (x) (zero_ext (regwidth) (y)))) +;;@ (assume (= (ret) (* (x) (zero_ext (regwidth) (y)))) ;;@ )) (decl sub_imm (Type Reg Imm12) Reg) (rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) @@ -29,7 +29,7 @@ ;; Note that 4095 = 0xfff and 16773120 = 0xfff000 ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (|| (< (- (zero_ext (regwidth) (ret))) (4095i64:bv)) +;;@ (assume (|| (< (- (zero_ext (regwidth) (ret))) (4095i64:bv)) ;;@ (&& (< (- (zero_ext (regwidth) (ret))) (16773120i64:bv)) ;;@ (= (extract 2 0 (- (zero_ext (regwidth) (ret)))) (0i3:bv)) ;;@ )), diff --git a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_imm12neg2.isle b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_imm12neg2.isle index d8b8f2f34e25..b0709b2756fa 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_imm12neg2.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_imm12neg2.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -18,7 +18,7 @@ ;; BROKEN: * instead of - ;; Note that 4094 = 0xffe and 16773119 = 0xffefff ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (= (ret) (* (x) (zero_ext (regwidth) (y)))) +;;@ (assume (= (ret) (* (x) (zero_ext (regwidth) (y)))) ;;@ )) (decl sub_imm (Type Reg Imm12) Reg) (rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) @@ -28,7 +28,7 @@ ;; Note that 4095 = 0xfff and 16773120 = 0xfff000 ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (|| (< (- (zero_ext (regwidth) (ret))) (4095i64:bv)) +;;@ (assume (|| (< (- (zero_ext (regwidth) (ret))) (4095i64:bv)) ;;@ (&& (< (- (zero_ext (regwidth) (ret))) (16773120i64:bv)) ;;@ (= (extract 2 0 (- (zero_ext (regwidth) (ret)))) (0i3:bv)) ;;@ )), diff --git a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_madd.isle b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_madd.isle index 8766195706d9..990726d77688 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_madd.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_madd.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -13,7 +13,7 @@ )) ;;@ (spec (sig (args ty, a, b, c) (r)) -;;@ (assertions (= (+ (c) (* (a) (b))) (r)))) +;;@ (assume (= (+ (c) (* (a) (b))) (r)))) (decl madd (Type Reg Reg Reg) Reg) (rule (madd ty x y z) (alu_rrrr (ALUOp3.MAdd) ty x y z)) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_madd2.isle b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_madd2.isle index 2abc06c461e3..4346ad87eb05 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_madd2.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_madd2.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -13,7 +13,7 @@ )) ;;@ (spec (sig (args ty, a, b, c) (r)) -;;@ (assertions (= (+ (c) (* (a) (b))) (r)))) +;;@ (assume (= (+ (c) (* (a) (b))) (r)))) (decl madd (Type Reg Reg Reg) Reg) (rule (madd ty x y z) (alu_rrrr (ALUOp3.MAdd) ty x y z)) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_msub.isle b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_msub.isle index 08851e79c9b7..3df75dcb789b 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_msub.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_msub.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -13,7 +13,7 @@ )) ;;@ (spec (sig (args ty, a, b, c) (r)) -;;@ (assertions (= (- (c) (* (a) (b))) (r)))) +;;@ (assume (= (- (c) (* (a) (b))) (r)))) (decl msub (Type Reg Reg Reg) Reg) (rule (msub ty x y z) (alu_rrrr (ALUOp3.MSub) ty x y z)) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_shift.isle b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_shift.isle index e80211c48608..f3a28d901f1a 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_shift.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_shift.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -28,7 +28,7 @@ ;; BROKEN: swapped shl shr ;;@ (spec (sig (args ty, a, b, shift) (ret)) -;;@ (assertions +;;@ (assume ;;@ (switch (extract 9 8 (shift)) ;;@ ((0i2:bv) (= (ret) (+ (a) (shr (b) (zero_ext (widthof (b)) (extract 7 0 (shift))))))) ;;@ ((1i2:bv) (= (ret) (+ (a) (shl (b) (zero_ext (widthof (b)) (extract 7 0 (shift))))))) @@ -41,7 +41,7 @@ (rule (add_shift ty x y z) (alu_rrr_shift (ALUOp.Add) ty x y z)) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (extract 63 8 (a)) (0i56:bv)), +;;@ (assume (= (extract 63 8 (a)) (0i56:bv)), ;;@ (= (ret) (zero_ext (10) (extract 7 0 (a)))))) (decl pure lshl_from_imm64 (Type Imm64) ShiftOpAndAmt) (extern constructor lshl_from_imm64 lshl_from_imm64) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_shift2.isle b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_shift2.isle index bdeb28f26e03..bdc4fe507cb3 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_shift2.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_shift2.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -27,7 +27,7 @@ (extern constructor alu_rrr_shift alu_rrr_shift) ;;@ (spec (sig (args ty, a, b, shift) (ret)) -;;@ (assertions +;;@ (assume ;;@ (switch (extract 9 8 (shift)) ;;@ ((0i2:bv) (= (ret) (+ (a) (shl (b) (zero_ext (widthof (b)) (extract 7 0 (shift))))))) ;;@ ((1i2:bv) (= (ret) (+ (a) (shr (b) (zero_ext (widthof (b)) (extract 7 0 (shift))))))) @@ -40,7 +40,7 @@ (rule (add_shift ty x y z) (alu_rrr_shift (ALUOp.Add) ty x y z)) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (extract 63 8 (a)) (0i56:bv)), +;;@ (assume (= (extract 63 8 (a)) (0i56:bv)), ;;@ (= (ret) (& (256i10:bv) (zero_ext (10) (extract 7 0 (a))))))) (decl pure lshr_from_u64 (Type Imm64) ShiftOpAndAmt) (extern constructor lshr_from_u64 lshr_from_u64) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/imul/broken_imul.isle b/cranelift/isle/veri/veri_engine/examples/broken/imul/broken_imul.isle index a40025d02661..89d23fb16497 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/imul/broken_imul.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/imul/broken_imul.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -35,7 +35,7 @@ (extern constructor alu_rrrr alu_rrrr) ;;@ (spec (sig (args) (r)) -;;@ (assertions (= (zero_ext (regwidth) (0i1:bv)) (r)))) +;;@ (assume (= (zero_ext (regwidth) (0i1:bv)) (r)))) (decl zero_reg () Reg) (extern constructor zero_reg zero_reg) @@ -46,7 +46,7 @@ ;; Helpers for generating `madd` instructions. ;;@ (spec (sig (args ty, a, b, c) (r)) -;;@ (assertions (= (+ (c) (* (a) (b))) (r)))) +;;@ (assume (= (+ (c) (* (a) (b))) (r)))) (decl madd (Type Reg Reg Reg) Reg) (rule (madd ty x y z) (alu_rrrr (ALUOp3.MAdd) ty x y z)) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/isub/broken_base_case.isle b/cranelift/isle/veri/veri_engine/examples/broken/isub/broken_base_case.isle index 08b88cb91f32..36c21a99bcd3 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/isub/broken_base_case.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/isub/broken_base_case.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -12,7 +12,7 @@ )) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (- (a) (b)) (r)))) +;;@ (assume (= (- (a) (b)) (r)))) (decl sub (Type Reg Reg) Reg) (rule (sub ty x y) (alu_rrr (ALUOp.Sub) ty x y)) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/isub/broken_imm12.isle b/cranelift/isle/veri/veri_engine/examples/broken/isub/broken_imm12.isle index c6e21e84de9e..58f0f7335384 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/isub/broken_imm12.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/isub/broken_imm12.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -17,7 +17,7 @@ ;; Note that 4094 = 0xffe and 16773119 = 0xffefff ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) ;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) ;;@ (= (extract 2 0 (y)) (0i3:bv)) ;;@ )), @@ -31,7 +31,7 @@ ;; Note that 4095 = 0xfff and 16773120 = 0xfff000 ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (|| (< (zero_ext (regwidth) (ret)) (4095i64:bv)) +;;@ (assume (|| (< (zero_ext (regwidth) (ret)) (4095i64:bv)) ;;@ (&& (< (zero_ext (regwidth) (ret)) (16773120i64:bv)) ;;@ (= (extract 2 0 (zero_ext (regwidth) (ret))) (0i3:bv)) ;;@ )), diff --git a/cranelift/isle/veri/veri_engine/examples/broken/isub/broken_imm12neg.isle b/cranelift/isle/veri/veri_engine/examples/broken/isub/broken_imm12neg.isle index fb87775f9150..50062ef151d9 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/isub/broken_imm12neg.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/isub/broken_imm12neg.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -18,7 +18,7 @@ ;; BROKEN: * instead of - ;; Note that 4094 = 0xffe and 16773119 = 0xffefff ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (= (ret) (* (x) (zero_ext (regwidth) (y)))) +;;@ (assume (= (ret) (* (x) (zero_ext (regwidth) (y)))) ;;@ )) (decl add_imm (Type Reg Imm12) Reg) (rule (add_imm ty x y) (alu_rr_imm12 (ALUOp.Add) ty x y)) @@ -28,7 +28,7 @@ ;; Note that 4095 = 0xfff and 16773120 = 0xfff000 ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (|| (< (- (zero_ext (regwidth) (ret))) (4095i64:bv)) +;;@ (assume (|| (< (- (zero_ext (regwidth) (ret))) (4095i64:bv)) ;;@ (&& (< (- (zero_ext (regwidth) (ret))) (16773120i64:bv)) ;;@ (= (extract 2 0 (- (zero_ext (regwidth) (ret)))) (0i3:bv)) ;;@ )), diff --git a/cranelift/isle/veri/veri_engine/examples/broken/isub/broken_shift.isle b/cranelift/isle/veri/veri_engine/examples/broken/isub/broken_shift.isle index 99bda39e6edb..782ffc228e3e 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/isub/broken_shift.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/isub/broken_shift.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -28,7 +28,7 @@ ;; BROKEN: swapped shl, shr ;;@ (spec (sig (args ty, a, b, shift) (ret)) -;;@ (assertions +;;@ (assume ;;@ (switch (extract 9 8 (shift)) ;;@ ((0i2:bv) (= (ret) (- (a) (shr (b) (zero_ext (widthof (b)) (extract 7 0 (shift))))))) ;;@ ((1i2:bv) (= (ret) (- (a) (shl (b) (zero_ext (widthof (b)) (extract 7 0 (shift))))))) @@ -41,7 +41,7 @@ (rule (sub_shift ty x y z) (alu_rrr_shift (ALUOp.Sub) ty x y z)) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (extract 63 8 (a)) (0i56:bv)), +;;@ (assume (= (extract 63 8 (a)) (0i56:bv)), ;;@ (= (ret) (zero_ext (10) (extract 7 0 (a)))))) (decl pure lshl_from_imm64 (Type Imm64) ShiftOpAndAmt) (extern constructor lshl_from_imm64 lshl_from_imm64) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/sdiv/broken_sdiv.isle b/cranelift/isle/veri/veri_engine/examples/broken/sdiv/broken_sdiv.isle index 2f0bacc14ea2..10a84433a89f 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/sdiv/broken_sdiv.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/sdiv/broken_sdiv.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst (enum)) @@ -15,19 +15,19 @@ ;; BROKEN: zero-extends instead of sign-extends ;; Place a `Value` into a register, sign extending it to 64-bits ;;@ (spec (sig (args x) (ret)) -;;@ (assertions (= (zero_ext (64) (x)) (ret)))) +;;@ (assume (= (zero_ext (64) (x)) (ret)))) (decl put_in_reg_sext64 (Value) Reg) (extern constructor put_in_reg_sext64 put_in_reg_sext64) ;; Helper for placing a `Value` into a `Reg` and validating that it's nonzero. ;;@ (spec (sig (args x) (ret)) -;;@ (assertions (= (sign_ext (64) (x)) (ret)), +;;@ (assume (= (sign_ext (64) (x)) (ret)), ;;@ (! (= (0i64:bv) (ret))))) (decl put_nonzero_in_reg_sext64 (Value) Reg) (extern constructor put_nonzero_in_reg_sext64 put_nonzero_in_reg_sext64) ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (= (sdiv (x) (y)) (ret)), +;;@ (assume (= (sdiv (x) (y)) (ret)), ;;@ (= (ty) (64i0: isleType)) ;;@ )) (decl a64_sdiv (Type Reg Reg) Reg) @@ -37,7 +37,7 @@ ;; The following checks must be done in 32-bit or 64-bit, depending ;; on the input type. ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (= (x) (ret)), +;;@ (assume (= (x) (ret)), ;;@ (if (= (ty) (32i0:isleType)) ;;@ (! (&& (= (0i32:bv) (extract 31 0 (y))) ;;@ (= (2147483648i32:bv) (extract 31 0 (y))))) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/sdiv/broken_sdiv_safe_const.isle b/cranelift/isle/veri/veri_engine/examples/broken/sdiv/broken_sdiv_safe_const.isle index 3fc6ed8ff542..c82b2c01f942 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/sdiv/broken_sdiv_safe_const.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/sdiv/broken_sdiv_safe_const.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst (enum)) @@ -18,7 +18,7 @@ )) ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (1i0: isleType) (ret)))) +;;@ (assume (= (1i0: isleType) (ret)))) (decl ImmExtend.Sign () ImmExtend) (extern constructor ImmExtend.Sign ImmExtend.Sign) @@ -26,14 +26,14 @@ (extern constructor alu_rrr alu_rrr) ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (= (/ (x) (y)) (ret)), +;;@ (assume (= (/ (x) (y)) (ret)), ;;@ (= (ty) (64i0: isleType)) ;;@ )) (decl a64_udiv (Type Reg Reg) Reg) (rule (a64_udiv ty x y) (alu_rrr (ALUOp.UDiv) ty x y)) ;;@ (spec (sig (args ty, ext, x) (ret)) -;;@ (assertions (|| (= (ext) (0i0:isleType)) (= (ext) (1i0:isleType))), +;;@ (assume (|| (= (ext) (0i0:isleType)) (= (ext) (1i0:isleType))), ;;@ (if (= (ext) (0i0:isleType)) ;;@ (= (ret) (zero_ext (regwidth) (conv_to (ty) (x)))) ;;@ (= (ret) (sign_ext (regwidth) (conv_to (ty) (x)))) @@ -44,20 +44,20 @@ ;; Place a `Value` into a register, sign extending it to 64-bits ;;@ (spec (sig (args x) (ret)) -;;@ (assertions (= (sign_ext (64) (x)) (ret)))) +;;@ (assume (= (sign_ext (64) (x)) (ret)))) (decl put_in_reg_sext64 (Value) Reg) (extern constructor put_in_reg_sext64 put_in_reg_sext64) ;; Helper for placing a `Value` into a `Reg` and validating that it's nonzero. ;;@ (spec (sig (args x) (ret)) -;;@ (assertions (= (sign_ext (64) (x)) (ret)), +;;@ (assume (= (sign_ext (64) (x)) (ret)), ;;@ (! (= (0i64:bv) (ret))))) (decl put_nonzero_in_reg_sext64 (Value) Reg) (extern constructor put_nonzero_in_reg_sext64 put_nonzero_in_reg_sext64) ;; Helper for extracting an immediate that's not 0 and not -1 from an imm64. ;;@ (spec (sig (args x) (ret)) -;;@ (assertions (= (x) (ret)), +;;@ (assume (= (x) (ret)), ;;@ )) (decl safe_divisor_from_imm64 (u64) Imm64) (extern extractor safe_divisor_from_imm64 safe_divisor_from_imm64) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_do_shift_32.isle b/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_do_shift_32.isle index a1202da07544..9a43be343417 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_do_shift_32.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_do_shift_32.isle @@ -4,15 +4,15 @@ )) ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (0i64:bv) (ret)))) +;;@ (assume (= (0i64:bv) (ret)))) ;;decl ALUOp.Lsl ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (1i64:bv) (ret)))) +;;@ (assume (= (1i64:bv) (ret)))) ;;decl ALUOp.Lsr ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (2i64:bv) (ret)))) +;;@ (assume (= (2i64:bv) (ret)))) ;;decl ALUOp.Asr ;; An ALU operation. This can be paired with several instruction formats @@ -56,7 +56,7 @@ ;; BROKEN: no restriction on op in annotation ;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (op) ;;@ ((0i64:bv) (conv_to (regwidth) @@ -82,7 +82,7 @@ ;; BROKEN: no restriction on op in annotation ;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) (switch (op) ;;@ ((0i64:bv) ;;@ (if (<= (t) (32i8: isleType)) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_ishl_to_do_shift_64.isle b/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_ishl_to_do_shift_64.isle index 9fd7ad8e8f1f..10eec7abcd0a 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_ishl_to_do_shift_64.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_ishl_to_do_shift_64.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -8,15 +8,15 @@ )) ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (0i64:bv) (ret)))) +;;@ (assume (= (0i64:bv) (ret)))) ;;decl ALUOp.Lsl ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (1i64:bv) (ret)))) +;;@ (assume (= (1i64:bv) (ret)))) ;;decl ALUOp.Lsr ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (2i64:bv) (ret)))) +;;@ (assume (= (2i64:bv) (ret)))) ;;decl ALUOp.Asr ;; An ALU operation. This can be paired with several instruction formats @@ -59,7 +59,7 @@ )) ;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (op) ;;@ ((0i64:bv) (conv_to (regwidth) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_sshr_to_do_shift_fits_in_32.isle b/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_sshr_to_do_shift_fits_in_32.isle index 8c1935f6988e..feb96203fd2e 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_sshr_to_do_shift_fits_in_32.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_sshr_to_do_shift_fits_in_32.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -8,15 +8,15 @@ )) ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (0i64:bv) (ret)))) +;;@ (assume (= (0i64:bv) (ret)))) ;;decl ALUOp.Lsl ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (1i64:bv) (ret)))) +;;@ (assume (= (1i64:bv) (ret)))) ;;decl ALUOp.Lsr ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (2i64:bv) (ret)))) +;;@ (assume (= (2i64:bv) (ret)))) ;;decl ALUOp.Asr ;; An ALU operation. This can be paired with several instruction formats @@ -60,7 +60,7 @@ ;; BROKEN: missing extension part of the spec ;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (op) ;;@ ((0i64:bv) (conv_to (regwidth) @@ -87,7 +87,7 @@ (extern constructor do_shift do_shift) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions ( +;;@ (assume ( ;;@ if (<= (32i0:isleType) (widthof (arg))) ;;@ (= (ret) (conv_to (regwidth) (arg))) ;;@ (= (ret) (conv_to (regwidth) (sign_ext (32) (arg)))) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_ushr_to_do_shift_fits_in_32.isle b/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_ushr_to_do_shift_fits_in_32.isle index 937a1e8dfb8b..447b7b5f9a82 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_ushr_to_do_shift_fits_in_32.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_ushr_to_do_shift_fits_in_32.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -8,15 +8,15 @@ )) ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (0i64:bv) (ret)))) +;;@ (assume (= (0i64:bv) (ret)))) ;;decl ALUOp.Lsl ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (1i64:bv) (ret)))) +;;@ (assume (= (1i64:bv) (ret)))) ;;decl ALUOp.Lsr ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (2i64:bv) (ret)))) +;;@ (assume (= (2i64:bv) (ret)))) ;;decl ALUOp.Asr ;; An ALU operation. This can be paired with several instruction formats @@ -59,7 +59,7 @@ )) ;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (op) ;;@ ((0i64:bv) (conv_to (regwidth) @@ -100,7 +100,7 @@ ;; Place a `Value` into a register, zero extending it to 32-bits ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions ( +;;@ (assume ( ;;@ if (<= (32i0:isleType) (widthof (arg))) ;;@ (= (ret) (conv_to (regwidth) (arg))) ;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/udiv/broken_udiv.isle b/cranelift/isle/veri/veri_engine/examples/broken/udiv/broken_udiv.isle index e17fa95d1c57..c53e688af9cf 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/udiv/broken_udiv.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/udiv/broken_udiv.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst (enum)) @@ -13,20 +13,20 @@ (extern constructor alu_rrr alu_rrr) ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (= (/ (x) (y)) (ret)), +;;@ (assume (= (/ (x) (y)) (ret)), ;;@ (= (ty) (64i0: isleType)) ;;@ )) (decl a64_udiv (Type Reg Reg) Reg) (rule (a64_udiv ty x y) (alu_rrr (ALUOp.UDiv) ty x y)) ;;@ (spec (sig (args x) (ret)) -;;@ (assertions (= (zero_ext (64) (x)) (ret)), +;;@ (assume (= (zero_ext (64) (x)) (ret)), ;;@ (! (= (0i64:bv) (ret))))) (decl put_nonzero_in_reg_zext64 (Value) Reg) (extern constructor put_nonzero_in_reg_zext64 put_nonzero_in_reg_zext64) ;;@ (spec (sig (args x) (ret)) -;;@ (assertions (= (sign_ext (64) (x)) (ret)))) +;;@ (assume (= (sign_ext (64) (x)) (ret)))) (decl put_in_reg_sext64 (Value) Reg) (extern constructor put_in_reg_sext64 put_in_reg_sext64) diff --git a/cranelift/isle/veri/veri_engine/examples/bxor/64_bxor.isle b/cranelift/isle/veri/veri_engine/examples/bxor/64_bxor.isle index 7738a4db843b..90de4a0aa0a7 100644 --- a/cranelift/isle/veri/veri_engine/examples/bxor/64_bxor.isle +++ b/cranelift/isle/veri/veri_engine/examples/bxor/64_bxor.isle @@ -1,6 +1,6 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -9,15 +9,15 @@ )) ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (0i64:bv) (ret)))) +;;@ (assume (= (0i64:bv) (ret)))) ;;decl ALUOp.And ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (1i64:bv) (ret)))) +;;@ (assume (= (1i64:bv) (ret)))) ;;decl ALUOp.Orr ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (2i64:bv) (ret)))) +;;@ (assume (= (2i64:bv) (ret)))) ;;decl ALUOp.Eor ;; An ALU operation. This can be paired with several instruction formats @@ -60,7 +60,7 @@ )) ;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assertions (= (ret) (switch (op) +;;@ (assume (= (ret) (switch (op) ;;@ ((0i64:bv) (& (a) (b))) ;;@ ((1i64:bv) (| (a) (b))) ;;@ ((2i64:bv) (xor (a) (b))) diff --git a/cranelift/isle/veri/veri_engine/examples/bxor/fits_in_32_bxor.isle b/cranelift/isle/veri/veri_engine/examples/bxor/fits_in_32_bxor.isle index 238698c45fdc..75c01ad3fed1 100644 --- a/cranelift/isle/veri/veri_engine/examples/bxor/fits_in_32_bxor.isle +++ b/cranelift/isle/veri/veri_engine/examples/bxor/fits_in_32_bxor.isle @@ -1,6 +1,6 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -9,15 +9,15 @@ )) ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (0i64:bv) (ret)))) +;;@ (assume (= (0i64:bv) (ret)))) ;;decl ALUOp.And ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (1i64:bv) (ret)))) +;;@ (assume (= (1i64:bv) (ret)))) ;;decl ALUOp.Orr ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (2i64:bv) (ret)))) +;;@ (assume (= (2i64:bv) (ret)))) ;;decl ALUOp.Eor ;; An ALU operation. This can be paired with several instruction formats @@ -60,7 +60,7 @@ )) ;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assertions (= (ret) (switch (op) +;;@ (assume (= (ret) (switch (op) ;;@ ((0i64:bv) (& (a) (b))) ;;@ ((1i64:bv) (| (a) (b))) ;;@ ((2i64:bv) (xor (a) (b))) diff --git a/cranelift/isle/veri/veri_engine/examples/cls/cls.isle b/cranelift/isle/veri/veri_engine/examples/cls/cls.isle index 47b89d32d12f..c653c9b751e7 100644 --- a/cranelift/isle/veri/veri_engine/examples/cls/cls.isle +++ b/cranelift/isle/veri/veri_engine/examples/cls/cls.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -17,7 +17,7 @@ (extern constructor bit_rr bit_rr) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (a64cls (32i0:isleType) (a)) ;;@ (a64cls (64i0:isleType) (a)) diff --git a/cranelift/isle/veri/veri_engine/examples/cls/cls16.isle b/cranelift/isle/veri/veri_engine/examples/cls/cls16.isle index ae206665689e..d375b40097fa 100644 --- a/cranelift/isle/veri/veri_engine/examples/cls/cls16.isle +++ b/cranelift/isle/veri/veri_engine/examples/cls/cls16.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -34,7 +34,7 @@ ;; Note that 4094 = 0xffe and 16773119 = 0xffefff ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) ;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) ;;@ (= (extract 2 0 (y)) (0i3:bv)) ;;@ )), @@ -44,7 +44,7 @@ (rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (a64cls (32i0:isleType) (a)) ;;@ (a64cls (64i0:isleType) (a)) @@ -63,7 +63,7 @@ dst)) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions ( +;;@ (assume ( ;;@ if (<= (32i0:isleType) (widthof (arg))) ;;@ (= (ret) (conv_to (regwidth) (arg))) ;;@ (= (ret) (conv_to (regwidth) (sign_ext (32) (arg)))) @@ -76,7 +76,7 @@ (rule (put_in_reg_sext32 val @ (value_type $I64)) val) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (ret) (zero_ext (24) (arg))))) +;;@ (assume (= (ret) (zero_ext (24) (arg))))) (decl u8_into_imm12 (u8) Imm12) (extern constructor u8_into_imm12 u8_into_imm12) diff --git a/cranelift/isle/veri/veri_engine/examples/cls/cls8.isle b/cranelift/isle/veri/veri_engine/examples/cls/cls8.isle index 0b77b43d58bc..25b2bbfed8eb 100644 --- a/cranelift/isle/veri/veri_engine/examples/cls/cls8.isle +++ b/cranelift/isle/veri/veri_engine/examples/cls/cls8.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -34,7 +34,7 @@ ;; Note that 4094 = 0xffe and 16773119 = 0xffefff ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) ;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) ;;@ (= (extract 2 0 (y)) (0i3:bv)) ;;@ )), @@ -44,7 +44,7 @@ (rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (a64cls (32i0:isleType) (a)) ;;@ (a64cls (64i0:isleType) (a)) @@ -63,7 +63,7 @@ dst)) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions ( +;;@ (assume ( ;;@ if (<= (32i0:isleType) (widthof (arg))) ;;@ (= (ret) (conv_to (regwidth) (arg))) ;;@ (= (ret) (conv_to (regwidth) (sign_ext (32) (arg)))) @@ -76,7 +76,7 @@ (rule (put_in_reg_sext32 val @ (value_type $I64)) val) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (ret) (zero_ext (24) (arg))))) +;;@ (assume (= (ret) (zero_ext (24) (arg))))) (decl u8_into_imm12 (u8) Imm12) (extern constructor u8_into_imm12 u8_into_imm12) diff --git a/cranelift/isle/veri/veri_engine/examples/clz/clz.isle b/cranelift/isle/veri/veri_engine/examples/clz/clz.isle index 9ed423f3a69a..b489d04d1850 100644 --- a/cranelift/isle/veri/veri_engine/examples/clz/clz.isle +++ b/cranelift/isle/veri/veri_engine/examples/clz/clz.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -17,7 +17,7 @@ (extern constructor bit_rr bit_rr) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (a64clz (32i0:isleType) (a)) ;;@ (a64clz (64i0:isleType) (a)) diff --git a/cranelift/isle/veri/veri_engine/examples/clz/clz16.isle b/cranelift/isle/veri/veri_engine/examples/clz/clz16.isle index 3e15142a22d2..e8e081917034 100644 --- a/cranelift/isle/veri/veri_engine/examples/clz/clz16.isle +++ b/cranelift/isle/veri/veri_engine/examples/clz/clz16.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -34,7 +34,7 @@ ;; Note that 4094 = 0xffe and 16773119 = 0xffefff ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) ;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) ;;@ (= (extract 2 0 (y)) (0i3:bv)) ;;@ )), @@ -44,7 +44,7 @@ (rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (a64clz (32i0:isleType) (a)) ;;@ (a64clz (64i0:isleType) (a)) @@ -64,7 +64,7 @@ ;; Place a `Value` into a register, zero extending it to 32-bits ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions ( +;;@ (assume ( ;;@ if (<= (32i0:isleType) (widthof (arg))) ;;@ (= (ret) (conv_to (regwidth) (arg))) ;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) @@ -77,7 +77,7 @@ (rule (put_in_reg_zext32 val @ (value_type $I64)) val) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (ret) (zero_ext (24) (arg))))) +;;@ (assume (= (ret) (zero_ext (24) (arg))))) (decl u8_into_imm12 (u8) Imm12) (extern constructor u8_into_imm12 u8_into_imm12) diff --git a/cranelift/isle/veri/veri_engine/examples/clz/clz8.isle b/cranelift/isle/veri/veri_engine/examples/clz/clz8.isle index dbd41598c5e5..2446f2edfde2 100644 --- a/cranelift/isle/veri/veri_engine/examples/clz/clz8.isle +++ b/cranelift/isle/veri/veri_engine/examples/clz/clz8.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -34,7 +34,7 @@ ;; Note that 4094 = 0xffe and 16773119 = 0xffefff ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) ;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) ;;@ (= (extract 2 0 (y)) (0i3:bv)) ;;@ )), @@ -44,7 +44,7 @@ (rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (a64clz (32i0:isleType) (a)) ;;@ (a64clz (64i0:isleType) (a)) @@ -64,7 +64,7 @@ ;; Place a `Value` into a register, zero extending it to 32-bits ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions ( +;;@ (assume ( ;;@ if (<= (32i0:isleType) (widthof (arg))) ;;@ (= (ret) (conv_to (regwidth) (arg))) ;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) @@ -77,7 +77,7 @@ (rule (put_in_reg_zext32 val @ (value_type $I64)) val) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (ret) (zero_ext (24) (arg))))) +;;@ (assume (= (ret) (zero_ext (24) (arg))))) (decl u8_into_imm12 (u8) Imm12) (extern constructor u8_into_imm12 u8_into_imm12) diff --git a/cranelift/isle/veri/veri_engine/examples/constructs/if-let.isle b/cranelift/isle/veri/veri_engine/examples/constructs/if-let.isle index 84cca966ebdb..918ef3ec8bdf 100644 --- a/cranelift/isle/veri/veri_engine/examples/constructs/if-let.isle +++ b/cranelift/isle/veri/veri_engine/examples/constructs/if-let.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -9,7 +9,7 @@ ;; Constructor to test whether two values are same. ;;@ (spec (sig (args x, y) (ret)) -;;@ (assertions (= (x) (ret)), +;;@ (assume (= (x) (ret)), ;;@ (= (x) (y)))) (decl pure same_value (Value Value) Value) (extern constructor same_value same_value) @@ -19,6 +19,6 @@ (add ty z z)) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (+ (a) (b)) (r)))) +;;@ (assume (= (+ (a) (b)) (r)))) (decl add (Type Reg Reg) Reg) (extern constructor add add) diff --git a/cranelift/isle/veri/veri_engine/examples/ctz/ctz.isle b/cranelift/isle/veri/veri_engine/examples/ctz/ctz.isle index 421f0354b677..76765c995847 100644 --- a/cranelift/isle/veri/veri_engine/examples/ctz/ctz.isle +++ b/cranelift/isle/veri/veri_engine/examples/ctz/ctz.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -18,7 +18,7 @@ (extern constructor bit_rr bit_rr) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (a64clz (32i0:isleType) (a)) ;;@ (a64clz (64i0:isleType) (a)) @@ -31,7 +31,7 @@ (rule (a64_clz ty x) (bit_rr (BitOp.Clz) ty x)) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (a64rev (32i0:isleType) (a)) ;;@ (a64rev (64i0:isleType) (a)) diff --git a/cranelift/isle/veri/veri_engine/examples/ctz/ctz16.isle b/cranelift/isle/veri/veri_engine/examples/ctz/ctz16.isle index 0e28e47f31ac..3ba32dd103c2 100644 --- a/cranelift/isle/veri/veri_engine/examples/ctz/ctz16.isle +++ b/cranelift/isle/veri/veri_engine/examples/ctz/ctz16.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -45,7 +45,7 @@ dst)) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (a64clz (32i0:isleType) (a)) ;;@ (a64clz (64i0:isleType) (a)) @@ -58,12 +58,12 @@ (rule (a64_clz ty x) (bit_rr (BitOp.Clz) ty x)) ;;@ (spec (sig (args ty, a, b) (ret)) -;;@ (assertions (= (ret) (| (a) (conv_to (regwidth) (b)))))) +;;@ (assume (= (ret) (| (a) (conv_to (regwidth) (b)))))) (decl orr_imm (Type Reg ImmLogic) Reg) (rule (orr_imm ty x y) (alu_rr_imm_logic (ALUOp.Orr) ty x y)) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (a64rev (32i0:isleType) (a)) ;;@ (a64rev (64i0:isleType) (a)) @@ -76,7 +76,7 @@ (rule (rbit ty x) (bit_rr (BitOp.RBit) ty x)) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (a) (ret)), +;;@ (assume (= (a) (ret)), ;;@ (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType))) ;;@ )) (decl u64_into_imm_logic (Type u64) ImmLogic) diff --git a/cranelift/isle/veri/veri_engine/examples/ctz/ctz8.isle b/cranelift/isle/veri/veri_engine/examples/ctz/ctz8.isle index d48c74c3b4f7..0a0cdb596706 100644 --- a/cranelift/isle/veri/veri_engine/examples/ctz/ctz8.isle +++ b/cranelift/isle/veri/veri_engine/examples/ctz/ctz8.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -45,7 +45,7 @@ dst)) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (a64clz (32i0:isleType) (a)) ;;@ (a64clz (64i0:isleType) (a)) @@ -58,12 +58,12 @@ (rule (a64_clz ty x) (bit_rr (BitOp.Clz) ty x)) ;;@ (spec (sig (args ty, a, b) (ret)) -;;@ (assertions (= (ret) (| (a) (conv_to (regwidth) (b)))))) +;;@ (assume (= (ret) (| (a) (conv_to (regwidth) (b)))))) (decl orr_imm (Type Reg ImmLogic) Reg) (rule (orr_imm ty x y) (alu_rr_imm_logic (ALUOp.Orr) ty x y)) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (a64rev (32i0:isleType) (a)) ;;@ (a64rev (64i0:isleType) (a)) @@ -76,7 +76,7 @@ (rule (rbit ty x) (bit_rr (BitOp.RBit) ty x)) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (a) (ret)), +;;@ (assume (= (a) (ret)), ;;@ (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType))) ;;@ )) (decl u64_into_imm_logic (Type u64) ImmLogic) diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/base_case.isle b/cranelift/isle/veri/veri_engine/examples/iadd/base_case.isle index 8a1149943504..f162d2314334 100644 --- a/cranelift/isle/veri/veri_engine/examples/iadd/base_case.isle +++ b/cranelift/isle/veri/veri_engine/examples/iadd/base_case.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -21,7 +21,7 @@ (extern constructor alu_rrr alu_rrr) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (+ (a) (b)) (r)))) +;;@ (assume (= (+ (a) (b)) (r)))) (decl add (Type Reg Reg) Reg) (rule (add ty x y) (alu_rrr (ALUOp.Add) ty x y)) diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/imm12.isle b/cranelift/isle/veri/veri_engine/examples/iadd/imm12.isle index e3b6f55d91b8..1721c1293ab0 100644 --- a/cranelift/isle/veri/veri_engine/examples/iadd/imm12.isle +++ b/cranelift/isle/veri/veri_engine/examples/iadd/imm12.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -17,7 +17,7 @@ ;; Note that 4094 = 0xffe and 16773119 = 0xffefff ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) ;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) ;;@ (= (extract 2 0 (y)) (0i3:bv)) ;;@ )), @@ -31,7 +31,7 @@ ;; Note that 4095 = 0xfff and 16773120 = 0xfff000 ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (|| (< (zero_ext (regwidth) (ret)) (4095i64:bv)) +;;@ (assume (|| (< (zero_ext (regwidth) (ret)) (4095i64:bv)) ;;@ (&& (< (zero_ext (regwidth) (ret)) (16773120i64:bv)) ;;@ (= (extract 2 0 (zero_ext (regwidth) (ret))) (0i3:bv)) ;;@ )), diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/imm12_2.isle b/cranelift/isle/veri/veri_engine/examples/iadd/imm12_2.isle index bd02be9959e9..6638a304e154 100644 --- a/cranelift/isle/veri/veri_engine/examples/iadd/imm12_2.isle +++ b/cranelift/isle/veri/veri_engine/examples/iadd/imm12_2.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -17,7 +17,7 @@ ;; Note that 4094 = 0xffe and 16773119 = 0xffefff ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) ;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) ;;@ (= (extract 2 0 (y)) (0i3:bv)) ;;@ )), @@ -31,7 +31,7 @@ ;; Note that 4095 = 0xfff and 16773120 = 0xfff000 ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (|| (< (zero_ext (regwidth) (ret)) (4095i64:bv)) +;;@ (assume (|| (< (zero_ext (regwidth) (ret)) (4095i64:bv)) ;;@ (&& (< (zero_ext (regwidth) (ret)) (16773120i64:bv)) ;;@ (= (extract 2 0 (zero_ext (regwidth) (ret))) (0i3:bv)) ;;@ )), diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/imm12_from_negated_value.isle b/cranelift/isle/veri/veri_engine/examples/iadd/imm12_from_negated_value.isle index 022e527d178e..c1b0c27e2b07 100644 --- a/cranelift/isle/veri/veri_engine/examples/iadd/imm12_from_negated_value.isle +++ b/cranelift/isle/veri/veri_engine/examples/iadd/imm12_from_negated_value.isle @@ -5,17 +5,17 @@ (type Imm12 (primitive Imm12)) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (zero_ext (regwidth) (arg)) (ret)))) +;;@ (assume (= (zero_ext (regwidth) (arg)) (ret)))) (decl imm12_from_u64 (Imm12) u64) (extern extractor imm12_from_u64 imm12_from_u64) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (ret) (- (arg))))) +;;@ (assume (= (ret) (- (arg))))) (decl pure i64_neg (i64) i64) (extern constructor i64_neg i64_neg) ;;@ (spec (sig (args ty, arg) (ret)) -;;@ (assertions (= (ret) (sign_ext (regwidth) (conv_to (ty) (arg)))))) +;;@ (assume (= (ret) (sign_ext (regwidth) (conv_to (ty) (arg)))))) (decl pure i64_sextend_imm64 (Type Imm64) i64) (extern constructor i64_sextend_imm64 i64_sextend_imm64) @@ -24,7 +24,7 @@ ;; Note that 4095 = 0xfff and 16773120 = 0xfff000 ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (|| (< (- (sign_ext (regwidth) (arg))) (4095i64:bv)) +;;@ (assume (|| (< (- (sign_ext (regwidth) (arg))) (4095i64:bv)) ;;@ (&& (< (- (sign_ext (regwidth) (arg))) (16773120i64:bv)) ;;@ (= (extract 2 0 (- (sign_ext (regwidth) (arg)))) (0i3:bv)) ;;@ )), diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg.isle b/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg.isle index c047ff8f20fb..4a596c20c7b2 100644 --- a/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg.isle +++ b/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -16,7 +16,7 @@ )) ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (= (ret) (- (x) (zero_ext (regwidth) (y)))) +;;@ (assume (= (ret) (- (x) (zero_ext (regwidth) (y)))) ;;@ )) (decl sub_imm (Type Reg Imm12) Reg) (rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) @@ -26,7 +26,7 @@ ;; Note that 4095 = 0xfff and 16773120 = 0xfff000 ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (|| (< (- (zero_ext (regwidth) (ret))) (4095i64:bv)) +;;@ (assume (|| (< (- (zero_ext (regwidth) (ret))) (4095i64:bv)) ;;@ (&& (< (- (zero_ext (regwidth) (ret))) (16773120i64:bv)) ;;@ (= (extract 2 0 (- (zero_ext (regwidth) (ret)))) (0i3:bv)) ;;@ )), diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg2.isle b/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg2.isle index 710f3396dd90..9e94dbe96f09 100644 --- a/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg2.isle +++ b/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg2.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -17,7 +17,7 @@ ;; Note that 4094 = 0xffe and 16773119 = 0xffefff ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (= (ret) (- (x) (zero_ext (regwidth) (y)))) +;;@ (assume (= (ret) (- (x) (zero_ext (regwidth) (y)))) ;;@ )) (decl sub_imm (Type Reg Imm12) Reg) (rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) @@ -27,7 +27,7 @@ ;; Note that 4095 = 0xfff and 16773120 = 0xfff000 ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (|| (< (- (zero_ext (regwidth) (ret))) (4095i64:bv)) +;;@ (assume (|| (< (- (zero_ext (regwidth) (ret))) (4095i64:bv)) ;;@ (&& (< (- (zero_ext (regwidth) (ret))) (16773120i64:bv)) ;;@ (= (extract 2 0 (- (zero_ext (regwidth) (ret)))) (0i3:bv)) ;;@ )), diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg2_new.isle b/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg2_new.isle index 702988c5d2ff..46eeda21564d 100644 --- a/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg2_new.isle +++ b/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg2_new.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -17,7 +17,7 @@ ;; Note that 4094 = 0xffe and 16773119 = 0xffefff ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (= (ret) (- (x) (zero_ext (regwidth) (y)))) +;;@ (assume (= (ret) (- (x) (zero_ext (regwidth) (y)))) ;;@ )) (decl sub_imm (Type Reg Imm12) Reg) (rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) @@ -27,7 +27,7 @@ ;; Note that 4095 = 0xfff and 16773120 = 0xfff000 ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (|| (< (- (sign_ext (regwidth) (arg))) (4095i64:bv)) +;;@ (assume (|| (< (- (sign_ext (regwidth) (arg))) (4095i64:bv)) ;;@ (&& (< (- (sign_ext (regwidth) (arg))) (16773120i64:bv)) ;;@ (= (extract 2 0 (- (sign_ext (regwidth) (arg)))) (0i3:bv)) ;;@ )), diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg_new.isle b/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg_new.isle index 6384e86b07ca..d5d6206fd831 100644 --- a/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg_new.isle +++ b/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg_new.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -16,7 +16,7 @@ )) ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (= (ret) (- (x) (zero_ext (regwidth) (y)))) +;;@ (assume (= (ret) (- (x) (zero_ext (regwidth) (y)))) ;;@ )) (decl sub_imm (Type Reg Imm12) Reg) (rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) @@ -26,7 +26,7 @@ ;; Note that 4095 = 0xfff and 16773120 = 0xfff000 ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (|| (< (- (sign_ext (regwidth) (arg))) (4095i64:bv)) +;;@ (assume (|| (< (- (sign_ext (regwidth) (arg))) (4095i64:bv)) ;;@ (&& (< (- (sign_ext (regwidth) (arg))) (16773120i64:bv)) ;;@ (= (extract 2 0 (- (sign_ext (regwidth) (arg)))) (0i3:bv)) ;;@ )), diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/madd.isle b/cranelift/isle/veri/veri_engine/examples/iadd/madd.isle index df031a377981..df71ca36487d 100644 --- a/cranelift/isle/veri/veri_engine/examples/iadd/madd.isle +++ b/cranelift/isle/veri/veri_engine/examples/iadd/madd.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -12,7 +12,7 @@ )) ;;@ (spec (sig (args ty, a, b, c) (r)) -;;@ (assertions (= (+ (c) (* (a) (b))) (r)))) +;;@ (assume (= (+ (c) (* (a) (b))) (r)))) (decl madd (Type Reg Reg Reg) Reg) (rule (madd ty x y z) (alu_rrrr (ALUOp3.MAdd) ty x y z)) diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/madd2.isle b/cranelift/isle/veri/veri_engine/examples/iadd/madd2.isle index fc56ed6947aa..7135beb774ec 100644 --- a/cranelift/isle/veri/veri_engine/examples/iadd/madd2.isle +++ b/cranelift/isle/veri/veri_engine/examples/iadd/madd2.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -12,7 +12,7 @@ )) ;;@ (spec (sig (args ty, a, b, c) (r)) -;;@ (assertions (= (+ (c) (* (a) (b))) (r)))) +;;@ (assume (= (+ (c) (* (a) (b))) (r)))) (decl madd (Type Reg Reg Reg) Reg) (rule (madd ty x y z) (alu_rrrr (ALUOp3.MAdd) ty x y z)) diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/shift.isle b/cranelift/isle/veri/veri_engine/examples/iadd/shift.isle index ee9b63f84b8e..3f9274853c73 100644 --- a/cranelift/isle/veri/veri_engine/examples/iadd/shift.isle +++ b/cranelift/isle/veri/veri_engine/examples/iadd/shift.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -27,7 +27,7 @@ (extern constructor alu_rrr_shift alu_rrr_shift) ;;@ (spec (sig (args ty, a, b, shift) (ret)) -;;@ (assertions +;;@ (assume ;;@ (switch (extract 9 8 (shift)) ;;@ ((0i2:bv) (= (ret) (+ (a) (shl (b) (zero_ext (widthof (b)) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift)))))))) ;;@ ((1i2:bv) (= (ret) (+ (a) (shr (b) (zero_ext (widthof (b)) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift)))))))) @@ -40,7 +40,7 @@ (rule (add_shift ty x y z) (alu_rrr_shift (ALUOp.Add) ty x y z)) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (extract 63 8 (a)) (0i56:bv)), +;;@ (assume (= (extract 63 8 (a)) (0i56:bv)), ;;@ (= (ret) (zero_ext (10) (extract 7 0 (a)))))) (decl pure lshl_from_imm64 (Type Imm64) ShiftOpAndAmt) (extern constructor lshl_from_imm64 lshl_from_imm64) diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/shift2.isle b/cranelift/isle/veri/veri_engine/examples/iadd/shift2.isle index d367f6aa224d..ae8a6bf994f0 100644 --- a/cranelift/isle/veri/veri_engine/examples/iadd/shift2.isle +++ b/cranelift/isle/veri/veri_engine/examples/iadd/shift2.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -27,7 +27,7 @@ (extern constructor alu_rrr_shift alu_rrr_shift) ;;@ (spec (sig (args ty, a, b, shift) (ret)) -;;@ (assertions +;;@ (assume ;;@ (switch (extract 9 8 (shift)) ;;@ ((0i2:bv) (= (ret) (+ (a) (shl (b) (zero_ext (widthof (b)) (extract 7 0 (shift))))))) ;;@ ((1i2:bv) (= (ret) (+ (a) (shr (b) (zero_ext (widthof (b)) (extract 7 0 (shift))))))) @@ -40,7 +40,7 @@ (rule (add_shift ty x y z) (alu_rrr_shift (ALUOp.Add) ty x y z)) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (extract 63 8 (a)) (0i56:bv)), +;;@ (assume (= (extract 63 8 (a)) (0i56:bv)), ;;@ (= (ret) (zero_ext (10) (extract 7 0 (a)))))) (decl pure lshl_from_imm64 (Type Imm64) ShiftOpAndAmt) (extern constructor lshl_from_imm64 lshl_from_imm64) diff --git a/cranelift/isle/veri/veri_engine/examples/icmp/icmp_to_lower_icmp.isle b/cranelift/isle/veri/veri_engine/examples/icmp/icmp_to_lower_icmp.isle index 67f7ea59ca34..912fe12fd0da 100644 --- a/cranelift/isle/veri/veri_engine/examples/icmp/icmp_to_lower_icmp.isle +++ b/cranelift/isle/veri/veri_engine/examples/icmp/icmp_to_lower_icmp.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -7,7 +7,7 @@ ) ;;@ (spec (sig (args c, x, y, in_ty, out_ty) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (c) ;;@ ((0i8:bv8) (if (= (x) (y)) (1i8:bv8) (0i8:bv8))) diff --git a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_32_64.isle b/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_32_64.isle index b9450896ffa6..8d500ce8cfd5 100644 --- a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_32_64.isle +++ b/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_32_64.isle @@ -8,7 +8,7 @@ ;; Helper for calculating the `OperandSize` corresponding to a type ;;@ (spec (sig (args ty) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (<= (ty) (32i8:isleType)) ;;@ (32i8:isleType) ;;@ (64i8:isleType))), @@ -42,7 +42,7 @@ )) ;;@ (spec (sig (args c, x, y, in_ty) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (| (shl (zero_ext (12i8: isleType) ;;@ (extract 67 64 @@ -75,7 +75,7 @@ (extern extractor lower_icmp lower_icmp) ;;@ (spec (sig (args pflags, c) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) (| (shl (zero_ext (12i8: isleType) ;;@ (extract 67 64 (pflags)) ;;@ ) @@ -91,7 +91,7 @@ ;; C: Set to 1 when the operation results in a carry, or when a subtraction results in no borrow, cleared to 0 otherwise. ;; V: Set to 1 when the operation causes overflow, cleared to 0 otherwise. ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (subs (ty) (x) (y)) ;;@ ), diff --git a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_32_64_to_lower_icmp_const.isle b/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_32_64_to_lower_icmp_const.isle index cc74d20e2381..b31df67c5272 100644 --- a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_32_64_to_lower_icmp_const.isle +++ b/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_32_64_to_lower_icmp_const.isle @@ -54,7 +54,7 @@ ;; (8i8:bv8) ult ;; (9i8:bv8) ulte ;;@ (spec (sig (args c, x, y, in_ty) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (| (shl (zero_ext (12i8: isleType) ;;@ (extract 67 64 @@ -84,7 +84,7 @@ (decl lower_icmp (IntCC Value Value Type) FlagsAndCC) ;;@ (spec (sig (args c, x, y, in_ty) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (| (shl (zero_ext (12i8: isleType) ;;@ (extract 67 64 diff --git a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64.isle b/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64.isle index 5c91b3e34256..da36bfe27c3c 100644 --- a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64.isle +++ b/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64.isle @@ -10,7 +10,7 @@ ;; Helper for calculating the `OperandSize` corresponding to a type ;;@ (spec (sig (args ty) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (<= (ty) (32i8:isleType)) ;;@ (32i8:isleType) ;;@ (64i8:isleType))), @@ -46,7 +46,7 @@ ;; NOTE: due to rule priorities, only applies to 32 and 64 ;;@ (spec (sig (args c, x, y, in_ty) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (| (shl (zero_ext (12i8: isleType) ;;@ (extract 67 64 @@ -75,7 +75,7 @@ (decl lower_icmp_const (IntCC Value u64 Type) FlagsAndCC) ;;@ (spec (sig (args pflags, c) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) (| (shl (zero_ext (12i8: isleType) ;;@ (extract 67 64 (pflags)) ;;@ ) @@ -92,7 +92,7 @@ ;; C: Set to 1 when the operation results in a carry, or when a subtraction results in no borrow, cleared to 0 otherwise. ;; V: Set to 1 when the operation causes overflow, cleared to 0 otherwise. ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (subs (ty) (x) (y)) ;;@ ), @@ -113,7 +113,7 @@ ;; all bits in the destination register in a defined state, i.e. smaller types ;; such as `I8` are either sign- or zero-extended. ;;@ (spec (sig (args ty, e, x) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (ty) ;;@ ((8i8: isleType) (if (= (e) (0i1: isleType)) (zero_ext (regwidth) (extract 7 0 (x))) (sign_ext (regwidth) (extract 7 0 (x))))) @@ -139,11 +139,11 @@ )) ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (0i1: isleType) (ret)))) +;;@ (assume (= (0i1: isleType) (ret)))) ;;decl ImmExtend.Zero ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (1i1: isleType) (ret)))) +;;@ (assume (= (1i1: isleType) (ret)))) ;;decl ImmExtend.Sign (rule -2 (lower_icmp_const cond rn c ty) diff --git a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64_imm.isle b/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64_imm.isle index 92216a2e5008..01c348c3dc40 100644 --- a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64_imm.isle +++ b/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64_imm.isle @@ -10,7 +10,7 @@ ;; Helper for calculating the `OperandSize` corresponding to a type ;;@ (spec (sig (args ty) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (<= (ty) (32i8:isleType)) ;;@ (32i8:isleType) ;;@ (64i8:isleType))), @@ -46,7 +46,7 @@ ;; NOTE: due to rule priorities, only applies to 32 and 64 ;;@ (spec (sig (args c, x, y, in_ty) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (| (shl (zero_ext (12i8: isleType) ;;@ (extract 67 64 @@ -75,7 +75,7 @@ (decl lower_icmp_const (IntCC Value u64 Type) FlagsAndCC) ;;@ (spec (sig (args pflags, c) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) (| (shl (zero_ext (12i8: isleType) ;;@ (extract 67 64 (pflags)) ;;@ ) @@ -91,7 +91,7 @@ ;; C: Set to 1 when the operation results in a carry, or when a subtraction results in no borrow, cleared to 0 otherwise. ;; V: Set to 1 when the operation causes overflow, cleared to 0 otherwise. ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (subs (ty) (x) (zero_ext (regwidth) (y))) ;;@ ), @@ -102,7 +102,7 @@ (extern constructor cmp_imm cmp_imm) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (zero_ext (regwidth) (arg)) (ret)))) +;;@ (assume (= (zero_ext (regwidth) (arg)) (ret)))) (decl imm12_from_u64 (Imm12) u64) (extern extractor imm12_from_u64 imm12_from_u64) diff --git a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64_sgte.isle b/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64_sgte.isle index 914b53c8e6a5..45db068a544c 100644 --- a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64_sgte.isle +++ b/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64_sgte.isle @@ -10,7 +10,7 @@ ;; Helper for calculating the `OperandSize` corresponding to a type ;;@ (spec (sig (args ty) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (<= (ty) (32i8:isleType)) ;;@ (32i8:isleType) ;;@ (64i8:isleType))), @@ -46,7 +46,7 @@ ;; NOTE: due to rule priorities, only applies to 32 and 64 ;;@ (spec (sig (args c, x, y, in_ty) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (| (shl (zero_ext (12i8: isleType) ;;@ (extract 67 64 @@ -75,7 +75,7 @@ (decl lower_icmp_const (IntCC Value u64 Type) FlagsAndCC) ;;@ (spec (sig (args pflags, c) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) (| (shl (zero_ext (12i8: isleType) ;;@ (extract 67 64 (pflags)) ;;@ ) @@ -91,7 +91,7 @@ ;; C: Set to 1 when the operation results in a carry, or when a subtraction results in no borrow, cleared to 0 otherwise. ;; V: Set to 1 when the operation causes overflow, cleared to 0 otherwise. ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (subs (ty) (x) (zero_ext (regwidth) (y))) ;;@ ), @@ -102,16 +102,16 @@ (extern constructor cmp_imm cmp_imm) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (zero_ext (regwidth) (arg)) (ret)))) +;;@ (assume (= (zero_ext (regwidth) (arg)) (ret)))) (decl imm12_from_u64 (Imm12) u64) (extern extractor imm12_from_u64 imm12_from_u64) ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (ret) (2i8:bv8)))) +;;@ (assume (= (ret) (2i8:bv8)))) ;;decl IntCC.SignedGreaterThan ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (ret) (3i8:bv8)))) +;;@ (assume (= (ret) (3i8:bv8)))) ;;decl IntCC.SignedGreaterThanOrEqual ;; We get better encodings when testing against an immediate that's even instead diff --git a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64_ugte.isle b/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64_ugte.isle index f840db2751be..811c2690e4b8 100644 --- a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64_ugte.isle +++ b/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64_ugte.isle @@ -10,7 +10,7 @@ ;; Helper for calculating the `OperandSize` corresponding to a type ;;@ (spec (sig (args ty) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (<= (ty) (32i8:isleType)) ;;@ (32i8:isleType) ;;@ (64i8:isleType))), @@ -46,7 +46,7 @@ ;; NOTE: due to rule priorities, only applies to 32 and 64 ;;@ (spec (sig (args c, x, y, in_ty) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (| (shl (zero_ext (12i8: isleType) ;;@ (extract 67 64 @@ -75,7 +75,7 @@ (decl lower_icmp_const (IntCC Value u64 Type) FlagsAndCC) ;;@ (spec (sig (args pflags, c) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) (| (shl (zero_ext (12i8: isleType) ;;@ (extract 67 64 (pflags)) ;;@ ) @@ -91,7 +91,7 @@ ;; C: Set to 1 when the operation results in a carry, or when a subtraction results in no borrow, cleared to 0 otherwise. ;; V: Set to 1 when the operation causes overflow, cleared to 0 otherwise. ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (subs (ty) (x) (zero_ext (regwidth) (y))) ;;@ ), @@ -102,16 +102,16 @@ (extern constructor cmp_imm cmp_imm) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (zero_ext (regwidth) (arg)) (ret)))) +;;@ (assume (= (zero_ext (regwidth) (arg)) (ret)))) (decl imm12_from_u64 (Imm12) u64) (extern extractor imm12_from_u64 imm12_from_u64) ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (ret) (6i8:bv8)))) +;;@ (assume (= (ret) (6i8:bv8)))) ;;decl IntCC.UnsignedGreaterThan ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (ret) (7i8:bv8)))) +;;@ (assume (= (ret) (7i8:bv8)))) ;;decl IntCC.UnsignedGreaterThanOrEqual ;; We get better encodings when testing against an immediate that's even instead diff --git a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_fits_in_16_signed.isle b/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_fits_in_16_signed.isle index 50a2129828d7..afe33ade7ec0 100644 --- a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_fits_in_16_signed.isle +++ b/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_fits_in_16_signed.isle @@ -14,7 +14,7 @@ ;; Helper for calculating the `OperandSize` corresponding to a type ;;@ (spec (sig (args ty) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (<= (ty) (32i8:isleType)) ;;@ (32i8:isleType) ;;@ (64i8:isleType))), @@ -34,7 +34,7 @@ ;; (8i8:bv8) ult ;; (9i8:bv8) ulte ;;@ (spec (sig (args c, x, y, in_ty) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (| (shl (zero_ext (12i8: isleType) ;;@ (extract 67 64 @@ -68,7 +68,7 @@ ;; Note that 4095 = 0xfff and 16773120 = 0xfff000 ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (|| (< (zero_ext (regwidth) (ret)) (4095i64:bv)) +;;@ (assume (|| (< (zero_ext (regwidth) (ret)) (4095i64:bv)) ;;@ (&& (< (zero_ext (regwidth) (ret)) (16773120i64:bv)) ;;@ (= (extract 2 0 (zero_ext (regwidth) (ret))) (0i3:bv)) ;;@ )), @@ -80,7 +80,7 @@ ;; Place a `Value` into a register, zero extending it to 32-bits ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions ( +;;@ (assume ( ;;@ if (<= (32i0:isleType) (widthof (arg))) ;;@ (= (ret) (conv_to (regwidth) (arg))) ;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) @@ -90,7 +90,7 @@ (extern constructor put_in_reg_zext32 put_in_reg_zext32) ;;@ (spec (sig (args pflags, c) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) (| (shl (zero_ext (12i8: isleType) ;;@ (extract 67 64 (pflags)) ;;@ ) @@ -106,7 +106,7 @@ ;; C: Set to 1 when the operation results in a carry, or when a subtraction results in no borrow, cleared to 0 otherwise. ;; V: Set to 1 when the operation causes overflow, cleared to 0 otherwise. ;;@ (spec (sig (args ty, x, y, extend) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (subs (ty) (x) ;;@ (switch (extend) @@ -140,7 +140,7 @@ )) ;;@ (spec (sig (args ty, b) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (ty) ;;@ ((8i8: isleType) (if (b) (4i8: bv3) (0i8: bv3))) @@ -159,7 +159,7 @@ (rule (lower_extend_op $I16 $false) (ExtendOp.UXTH)) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions ( +;;@ (assume ( ;;@ if (<= (32i0:isleType) (widthof (arg))) ;;@ (= (ret) (conv_to (regwidth) (arg))) ;;@ (= (ret) (conv_to (regwidth) (sign_ext (32) (arg)))) diff --git a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_fits_in_16_unsigned.isle b/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_fits_in_16_unsigned.isle index 764265557777..8d2b69d9cd90 100644 --- a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_fits_in_16_unsigned.isle +++ b/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_fits_in_16_unsigned.isle @@ -14,7 +14,7 @@ ;; Helper for calculating the `OperandSize` corresponding to a type ;;@ (spec (sig (args ty) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (<= (ty) (32i8:isleType)) ;;@ (32i8:isleType) ;;@ (64i8:isleType))), @@ -37,7 +37,7 @@ ;; (8i8:bv8) ult ;; (9i8:bv8) ulte ;;@ (spec (sig (args c, x, y, in_ty) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (| (shl (zero_ext (12i8: isleType) ;;@ (extract 67 64 @@ -72,7 +72,7 @@ ;; Note that 4095 = 0xfff and 16773120 = 0xfff000 ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (|| (< (zero_ext (regwidth) (ret)) (4095i64:bv)) +;;@ (assume (|| (< (zero_ext (regwidth) (ret)) (4095i64:bv)) ;;@ (&& (< (zero_ext (regwidth) (ret)) (16773120i64:bv)) ;;@ (= (extract 2 0 (zero_ext (regwidth) (ret))) (0i3:bv)) ;;@ )), @@ -84,7 +84,7 @@ ;; Place a `Value` into a register, zero extending it to 32-bits ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions ( +;;@ (assume ( ;;@ if (<= (32i0:isleType) (widthof (arg))) ;;@ (= (ret) (conv_to (regwidth) (arg))) ;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) @@ -94,7 +94,7 @@ (extern constructor put_in_reg_zext32 put_in_reg_zext32) ;;@ (spec (sig (args pflags, c) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) (| (shl (zero_ext (12i8: isleType) ;;@ (extract 67 64 (pflags)) ;;@ ) @@ -110,7 +110,7 @@ ;; C: Set to 1 when the operation results in a carry, or when a subtraction results in no borrow, cleared to 0 otherwise. ;; V: Set to 1 when the operation causes overflow, cleared to 0 otherwise. ;;@ (spec (sig (args ty, x, y, extend) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (subs (ty) (x) ;;@ (switch (extend) @@ -144,7 +144,7 @@ )) ;;@ (spec (sig (args ty, b) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (ty) ;;@ ((8i8: isleType) (if (b) (4i8: bv3) (0i8: bv3))) diff --git a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_fits_in_16_unsigned_imm.isle b/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_fits_in_16_unsigned_imm.isle index 11962ec959f3..5fb1ba134d60 100644 --- a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_fits_in_16_unsigned_imm.isle +++ b/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_fits_in_16_unsigned_imm.isle @@ -14,7 +14,7 @@ ;; Helper for calculating the `OperandSize` corresponding to a type ;;@ (spec (sig (args ty) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (<= (ty) (32i8:isleType)) ;;@ (32i8:isleType) ;;@ (64i8:isleType))), @@ -37,7 +37,7 @@ ;; (8i8:bv8) ult ;; (9i8:bv8) ulte ;;@ (spec (sig (args c, x, y, in_ty) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (| (shl (zero_ext (12i8: isleType) ;;@ (extract 67 64 @@ -72,7 +72,7 @@ ;; Note that 4095 = 0xfff and 16773120 = 0xfff000 ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (|| (< (zero_ext (regwidth) (ret)) (4095i64:bv)) +;;@ (assume (|| (< (zero_ext (regwidth) (ret)) (4095i64:bv)) ;;@ (&& (< (zero_ext (regwidth) (ret)) (16773120i64:bv)) ;;@ (= (extract 2 0 (zero_ext (regwidth) (ret))) (0i3:bv)) ;;@ )), @@ -84,7 +84,7 @@ ;; Place a `Value` into a register, zero extending it to 32-bits ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions ( +;;@ (assume ( ;;@ if (<= (32i0:isleType) (widthof (arg))) ;;@ (= (ret) (conv_to (regwidth) (arg))) ;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) @@ -98,7 +98,7 @@ ;; Use a bitwise-and mask after extracting ;;@ (spec (sig (args pflags, c) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) (| (shl (zero_ext (12i8: isleType) ;;@ (extract 67 64 (pflags)) ;;@ ) @@ -114,7 +114,7 @@ ;; C: Set to 1 when the operation results in a carry, or when a subtraction results in no borrow, cleared to 0 otherwise. ;; V: Set to 1 when the operation causes overflow, cleared to 0 otherwise. ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (subs (ty) (x) (zero_ext (regwidth) (y))) ;;@ ), diff --git a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_into_reg.isle b/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_into_reg.isle index 91b172f24549..be219ce64c60 100644 --- a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_into_reg.isle +++ b/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_into_reg.isle @@ -29,12 +29,12 @@ ;; Lower an integer cond code. ;; AVH TODO CHECK ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl cond_code (IntCC) Cond) (extern constructor cond_code cond_code) ;;@ (spec (sig (args c, x, y, in_ty, out_ty) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (c) ;;@ ((0i8:bv8) (if (= (x) (y)) (1i8:bv8) (0i8:bv8))) @@ -87,7 +87,7 @@ ;; (8i8:bv8) ult ;; (9i8:bv8) ulte ;;@ (spec (sig (args c, x, y, in_ty) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (| (shl (zero_ext (12i8: isleType) ;;@ (extract 67 64 @@ -139,7 +139,7 @@ ;; [ N | Z | C | V | ... CC ... ] ;;@ (spec (sig (args a) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (extract 7 0 (a)) ;;@ ((0i8:bv8) (if (= (extract 10 10 (a)) (1i1:bv1)) (1i8:bv8) (0i8:bv8))) diff --git a/cranelift/isle/veri/veri_engine/examples/imul/imul.isle b/cranelift/isle/veri/veri_engine/examples/imul/imul.isle index 6bd4eaf960c5..702fa960c9ac 100644 --- a/cranelift/isle/veri/veri_engine/examples/imul/imul.isle +++ b/cranelift/isle/veri/veri_engine/examples/imul/imul.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -15,12 +15,12 @@ (extern constructor alu_rrrr alu_rrrr) ;;@ (spec (sig (args) (r)) -;;@ (assertions (= (zero_ext (regwidth) (0i1:bv)) (r)))) +;;@ (assume (= (zero_ext (regwidth) (0i1:bv)) (r)))) (decl zero_reg () Reg) (extern constructor zero_reg zero_reg) ;;@ (spec (sig (args ty, a, b, c) (r)) -;;@ (assertions (= (+ (c) (* (a) (b))) (r)))) +;;@ (assume (= (+ (c) (* (a) (b))) (r)))) (decl madd (Type Reg Reg Reg) Reg) (rule (madd ty x y z) (alu_rrrr (ALUOp3.MAdd) ty x y z)) diff --git a/cranelift/isle/veri/veri_engine/examples/ineg/ineg.isle b/cranelift/isle/veri/veri_engine/examples/ineg/ineg.isle index 83214809b705..d39818c98619 100644 --- a/cranelift/isle/veri/veri_engine/examples/ineg/ineg.isle +++ b/cranelift/isle/veri/veri_engine/examples/ineg/ineg.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -15,12 +15,12 @@ (extern constructor alu_rrr alu_rrr) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (- (a) (b)) (r)))) +;;@ (assume (= (- (a) (b)) (r)))) (decl sub (Type Reg Reg) Reg) (rule (sub ty x y) (alu_rrr (ALUOp.Sub) ty x y)) ;;@ (spec (sig (args) (r)) -;;@ (assertions (= (zero_ext (regwidth) (0i1:bv)) (r)))) +;;@ (assume (= (zero_ext (regwidth) (0i1:bv)) (r)))) (decl zero_reg () Reg) (extern constructor zero_reg zero_reg) diff --git a/cranelift/isle/veri/veri_engine/examples/isub/base_case.isle b/cranelift/isle/veri/veri_engine/examples/isub/base_case.isle index 4b962c942314..71676a8711d1 100644 --- a/cranelift/isle/veri/veri_engine/examples/isub/base_case.isle +++ b/cranelift/isle/veri/veri_engine/examples/isub/base_case.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -12,7 +12,7 @@ )) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (- (a) (b)) (r)))) +;;@ (assume (= (- (a) (b)) (r)))) (decl sub (Type Reg Reg) Reg) (rule (sub ty x y) (alu_rrr (ALUOp.Sub) ty x y)) diff --git a/cranelift/isle/veri/veri_engine/examples/isub/imm12.isle b/cranelift/isle/veri/veri_engine/examples/isub/imm12.isle index 40a6ecd7665a..5decad44a5dc 100644 --- a/cranelift/isle/veri/veri_engine/examples/isub/imm12.isle +++ b/cranelift/isle/veri/veri_engine/examples/isub/imm12.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -17,7 +17,7 @@ ;; Note that 4094 = 0xffe and 16773119 = 0xffefff ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (= (ret) (- (x) (zero_ext (regwidth) (y)))) +;;@ (assume (= (ret) (- (x) (zero_ext (regwidth) (y)))) ;;@ )) (decl sub_imm (Type Reg Imm12) Reg) (rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) @@ -27,7 +27,7 @@ ;; Note that 4095 = 0xfff and 16773120 = 0xfff000 ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (|| (< (zero_ext (regwidth) (ret)) (4095i64:bv)) +;;@ (assume (|| (< (zero_ext (regwidth) (ret)) (4095i64:bv)) ;;@ (&& (< (zero_ext (regwidth) (ret)) (16773120i64:bv)) ;;@ (= (extract 2 0 (zero_ext (regwidth) (ret))) (0i3:bv)) ;;@ )), diff --git a/cranelift/isle/veri/veri_engine/examples/isub/imm12neg.isle b/cranelift/isle/veri/veri_engine/examples/isub/imm12neg.isle index 12c6c7697ad1..f08a6e068845 100644 --- a/cranelift/isle/veri/veri_engine/examples/isub/imm12neg.isle +++ b/cranelift/isle/veri/veri_engine/examples/isub/imm12neg.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -17,7 +17,7 @@ ;; Note that 4094 = 0xffe and 16773119 = 0xffefff ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (= (ret) (+ (x) (zero_ext (regwidth) (y)))) +;;@ (assume (= (ret) (+ (x) (zero_ext (regwidth) (y)))) ;;@ )) (decl add_imm (Type Reg Imm12) Reg) (rule (add_imm ty x y) (alu_rr_imm12 (ALUOp.Add) ty x y)) @@ -27,7 +27,7 @@ ;; Note that 4095 = 0xfff and 16773120 = 0xfff000 ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (|| (< (- (zero_ext (regwidth) (ret))) (4095i64:bv)) +;;@ (assume (|| (< (- (zero_ext (regwidth) (ret))) (4095i64:bv)) ;;@ (&& (< (- (zero_ext (regwidth) (ret))) (16773120i64:bv)) ;;@ (= (extract 2 0 (- (zero_ext (regwidth) (ret)))) (0i3:bv)) ;;@ )), diff --git a/cranelift/isle/veri/veri_engine/examples/isub/imm12neg_new.isle b/cranelift/isle/veri/veri_engine/examples/isub/imm12neg_new.isle index bd4e0449ca24..bd207c27a8a6 100644 --- a/cranelift/isle/veri/veri_engine/examples/isub/imm12neg_new.isle +++ b/cranelift/isle/veri/veri_engine/examples/isub/imm12neg_new.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -17,7 +17,7 @@ ;; Note that 4094 = 0xffe and 16773119 = 0xffefff ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (= (ret) (+ (x) (zero_ext (regwidth) (y)))) +;;@ (assume (= (ret) (+ (x) (zero_ext (regwidth) (y)))) ;;@ )) (decl add_imm (Type Reg Imm12) Reg) (rule (add_imm ty x y) (alu_rr_imm12 (ALUOp.Add) ty x y)) @@ -27,7 +27,7 @@ ;; Note that 4095 = 0xfff and 16773120 = 0xfff000 ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (|| (< (- (sign_ext (regwidth) (arg))) (4095i64:bv)) +;;@ (assume (|| (< (- (sign_ext (regwidth) (arg))) (4095i64:bv)) ;;@ (&& (< (- (sign_ext (regwidth) (arg))) (16773120i64:bv)) ;;@ (= (extract 2 0 (- (sign_ext (regwidth) (arg)))) (0i3:bv)) ;;@ )), diff --git a/cranelift/isle/veri/veri_engine/examples/isub/isub.isle b/cranelift/isle/veri/veri_engine/examples/isub/isub.isle index 2a62bc7a8a08..18bb5273be60 100644 --- a/cranelift/isle/veri/veri_engine/examples/isub/isub.isle +++ b/cranelift/isle/veri/veri_engine/examples/isub/isub.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -50,13 +50,13 @@ (rule (operand_size (fits_in_64 _ty)) (OperandSize.Size64)) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (- (a) (b)) (r)))) +;;@ (assume (= (- (a) (b)) (r)))) (decl sub (Type Reg Reg) Reg) (rule (sub ty x y) (alu_rrr (ALUOp.Sub) ty x y)) ;; Note that 4094 = 0xffe and 16773119 = 0xffefff ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) ;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) ;;@ (= (extract 2 0 (y)) (0i3:bv)) ;;@ )), @@ -66,7 +66,7 @@ (rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (+ (a) (sign_ext (a) (b))) (r)))) +;;@ (assume (= (+ (a) (sign_ext (a) (b))) (r)))) (decl add_imm (Type Reg Imm12) Reg) (rule (add_imm ty x y) (alu_rr_imm12 (ALUOp.Add) ty x y)) diff --git a/cranelift/isle/veri/veri_engine/examples/isub/msub.isle b/cranelift/isle/veri/veri_engine/examples/isub/msub.isle index 4c54a41707b6..763c6c621190 100644 --- a/cranelift/isle/veri/veri_engine/examples/isub/msub.isle +++ b/cranelift/isle/veri/veri_engine/examples/isub/msub.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -13,7 +13,7 @@ )) ;;@ (spec (sig (args ty, a, b, c) (r)) -;;@ (assertions (= (- (c) (* (a) (b))) (r)))) +;;@ (assume (= (- (c) (* (a) (b))) (r)))) (decl msub (Type Reg Reg Reg) Reg) (rule (msub ty x y z) (alu_rrrr (ALUOp3.MSub) ty x y z)) diff --git a/cranelift/isle/veri/veri_engine/examples/isub/shift.isle b/cranelift/isle/veri/veri_engine/examples/isub/shift.isle index f50e6c8b036b..505aacb57e46 100644 --- a/cranelift/isle/veri/veri_engine/examples/isub/shift.isle +++ b/cranelift/isle/veri/veri_engine/examples/isub/shift.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -27,7 +27,7 @@ (extern constructor alu_rrr_shift alu_rrr_shift) ;;@ (spec (sig (args ty, a, b, shift) (ret)) -;;@ (assertions +;;@ (assume ;;@ (switch (extract 9 8 (shift)) ;;@ ((0i2:bv) (= (ret) (- (a) (shl (b) (zero_ext (widthof (b)) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift)))))))) ;;@ ((1i2:bv) (= (ret) (- (a) (shr (b) (zero_ext (widthof (b)) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift)))))))) @@ -40,7 +40,7 @@ (rule (sub_shift ty x y z) (alu_rrr_shift (ALUOp.Sub) ty x y z)) ;;@ (spec (sig (args ty, a) (ret)) -;;@ (assertions (= (extract 63 8 (a)) (0i56:bv)), +;;@ (assume (= (extract 63 8 (a)) (0i56:bv)), ;;@ (= (ret) (zero_ext (10) (extract 7 0 (a)))))) (decl pure lshl_from_imm64 (Type Imm64) ShiftOpAndAmt) (extern constructor lshl_from_imm64 lshl_from_imm64) diff --git a/cranelift/isle/veri/veri_engine/examples/rotl/32_general_rotl_to_rotr.isle b/cranelift/isle/veri/veri_engine/examples/rotl/32_general_rotl_to_rotr.isle index ad7b86bf475f..df30a1d82c42 100644 --- a/cranelift/isle/veri/veri_engine/examples/rotl/32_general_rotl_to_rotr.isle +++ b/cranelift/isle/veri/veri_engine/examples/rotl/32_general_rotl_to_rotr.isle @@ -1,6 +1,6 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -9,17 +9,17 @@ )) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (- (a) (b)) (r)))) +;;@ (assume (= (- (a) (b)) (r)))) (decl sub (Type Reg Reg) Reg) (extern constructor sub sub) ;;@ (spec (sig (args) (r)) -;;@ (assertions (= (zero_ext (regwidth) (0i1:bv)) (r)))) +;;@ (assume (= (zero_ext (regwidth) (0i1:bv)) (r)))) (decl zero_reg () Reg) (extern constructor zero_reg zero_reg) ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (zero_ext (regwidth) (rotr (extract 31 0 (x)) (extract 31 0 (y)))) ;;@ (rotr (x) (y)) diff --git a/cranelift/isle/veri/veri_engine/examples/rotl/32_with_imm_rotl_to_rotr.isle b/cranelift/isle/veri/veri_engine/examples/rotl/32_with_imm_rotl_to_rotr.isle index 6258dc6335f2..e7320536ae5a 100644 --- a/cranelift/isle/veri/veri_engine/examples/rotl/32_with_imm_rotl_to_rotr.isle +++ b/cranelift/isle/veri/veri_engine/examples/rotl/32_with_imm_rotl_to_rotr.isle @@ -3,7 +3,7 @@ (type Imm12 (primitive Imm12)) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -12,17 +12,17 @@ )) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (- (a) (b)) (r)))) +;;@ (assume (= (- (a) (b)) (r)))) (decl sub (Type Reg Reg) Reg) (extern constructor sub sub) ;;@ (spec (sig (args) (r)) -;;@ (assertions (= (zero_ext (regwidth) (0i1:bv)) (r)))) +;;@ (assume (= (zero_ext (regwidth) (0i1:bv)) (r)))) (decl zero_reg () Reg) (extern constructor zero_reg zero_reg) ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (zero_ext (regwidth) (rotr (extract 31 0 (x)) (zero_ext (32i0:isleType) (y)))) ;;@ (rotr (x) (zero_ext (regwidth) (y))) @@ -41,7 +41,7 @@ ;; Add an assertion that the value fits, using the constand with 56 1's then 6 0's (~63) ;;@ (spec (sig (args ty, x) (r)) -;;@ (assertions +;;@ (assume ;;@ (= (r) (extract 5 0 (& (x) (- (int2bv 64 (ty)) (1i64:bv64))))), ;;@ (ult (& (x) (- (int2bv 64 (ty)) (1i64:bv64))) (64i64:bv64)) ;;@ ) @@ -57,7 +57,7 @@ ;; } ;;@ (spec (sig (args ty, x) (r)) -;;@ (assertions +;;@ (assume ;;@ (= (- (x)) (r)) ;;@ ) ;;@ ) diff --git a/cranelift/isle/veri/veri_engine/examples/rotl/64_general_rotl_to_rotr.isle b/cranelift/isle/veri/veri_engine/examples/rotl/64_general_rotl_to_rotr.isle index 1e2ecefc1ec3..9a00c21e716d 100644 --- a/cranelift/isle/veri/veri_engine/examples/rotl/64_general_rotl_to_rotr.isle +++ b/cranelift/isle/veri/veri_engine/examples/rotl/64_general_rotl_to_rotr.isle @@ -1,6 +1,6 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -9,17 +9,17 @@ )) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (- (a) (b)) (r)))) +;;@ (assume (= (- (a) (b)) (r)))) (decl sub (Type Reg Reg) Reg) (extern constructor sub sub) ;;@ (spec (sig (args) (r)) -;;@ (assertions (= (zero_ext (regwidth) (0i1:bv)) (r)))) +;;@ (assume (= (zero_ext (regwidth) (0i1:bv)) (r)))) (decl zero_reg () Reg) (extern constructor zero_reg zero_reg) ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (zero_ext (regwidth) (rotr (extract 31 0 (x)) (extract 31 0 (y)))) ;;@ (rotr (x) (y)) diff --git a/cranelift/isle/veri/veri_engine/examples/rotl/64_with_imm_rotl_to_rotr.isle b/cranelift/isle/veri/veri_engine/examples/rotl/64_with_imm_rotl_to_rotr.isle index 75c7dcc24e74..03763e6a8ef8 100644 --- a/cranelift/isle/veri/veri_engine/examples/rotl/64_with_imm_rotl_to_rotr.isle +++ b/cranelift/isle/veri/veri_engine/examples/rotl/64_with_imm_rotl_to_rotr.isle @@ -3,7 +3,7 @@ (type Imm12 (primitive Imm12)) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -12,17 +12,17 @@ )) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (- (a) (b)) (r)))) +;;@ (assume (= (- (a) (b)) (r)))) (decl sub (Type Reg Reg) Reg) (extern constructor sub sub) ;;@ (spec (sig (args) (r)) -;;@ (assertions (= (zero_ext (regwidth) (0i1:bv)) (r)))) +;;@ (assume (= (zero_ext (regwidth) (0i1:bv)) (r)))) (decl zero_reg () Reg) (extern constructor zero_reg zero_reg) ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (zero_ext (regwidth) (rotr (extract 31 0 (x)) (zero_ext (32i0:isleType) (y)))) ;;@ (rotr (x) (zero_ext (regwidth) (y))) @@ -44,7 +44,7 @@ ;; Add an assertion that the value fits, using the constand with 56 1's then 6 0's (~63) ;;@ (spec (sig (args ty, x) (r)) -;;@ (assertions +;;@ (assume ;;@ (= (r) (extract 5 0 (& (x) (- (int2bv 64 (ty)) (1i64:bv64))))), ;;@ (ult (& (x) (- (int2bv 64 (ty)) (1i64:bv64))) (64i64:bv64)) ;;@ ) @@ -64,7 +64,7 @@ ;;@ (spec (sig (args ty, x) (r)) -;;@ (assertions +;;@ (assume ;;@ (= (- (x)) (r)) ;;@ ) ;;@ ) diff --git a/cranelift/isle/veri/veri_engine/examples/rotl/fits_in_16_rotl_to_rotr.isle b/cranelift/isle/veri/veri_engine/examples/rotl/fits_in_16_rotl_to_rotr.isle index 1ca37490eb62..3938b2d81528 100644 --- a/cranelift/isle/veri/veri_engine/examples/rotl/fits_in_16_rotl_to_rotr.isle +++ b/cranelift/isle/veri/veri_engine/examples/rotl/fits_in_16_rotl_to_rotr.isle @@ -2,21 +2,21 @@ (type Imm12 (primitive Imm12)) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (- (a) (b)) (r)))) +;;@ (assume (= (- (a) (b)) (r)))) (decl sub (Type Reg Reg) Reg) (extern constructor sub sub) ;;@ (spec (sig (args) (r)) -;;@ (assertions (= (zero_ext (regwidth) (0i1:bv)) (r)))) +;;@ (assume (= (zero_ext (regwidth) (0i1:bv)) (r)))) (decl zero_reg () Reg) (extern constructor zero_reg zero_reg) ;;@ (spec (sig (args a, b, c, d) (ret)) -;;@ (assertions (if (b) +;;@ (assume (if (b) ;;@ (= (ret) (sign_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) ;;@ (= (ret) (zero_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) ;;@ ) @@ -25,7 +25,7 @@ (extern constructor extend extend) ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) ;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) ;;@ (= (extract 2 0 (y)) (0i3:bv)) ;;@ )), @@ -41,7 +41,7 @@ ;; Place a `Value` into a register, zero extending it to 32-bits ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions ( +;;@ (assume ( ;;@ if (<= (32i0:isleType) (widthof (arg))) ;;@ (= (ret) (conv_to (regwidth) (arg))) ;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) @@ -56,13 +56,13 @@ ;; } ;; ;;@ (spec (sig (args x) (ret)) -;;@ (assertions (= (- (int2bv 64 (x)) (1i64:bv64)) (ret)))) +;;@ (assume (= (- (int2bv 64 (x)) (1i64:bv64)) (ret)))) (decl rotr_mask (Type) ImmLogic) (extern constructor rotr_mask rotr_mask) ;; Note that 4094 = 0xffe and 16773119 = 0xffefff ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) ;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) ;;@ (= (extract 2 0 (y)) (0i3:bv)) ;;@ )), @@ -72,22 +72,22 @@ (extern constructor sub_imm sub_imm) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (ret) (zero_ext (24) (arg))))) +;;@ (assume (= (ret) (zero_ext (24) (arg))))) (decl u8_into_imm12 (u8) Imm12) (extern constructor u8_into_imm12 u8_into_imm12) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (shr (a) (b)) (r)))) +;;@ (assume (= (shr (a) (b)) (r)))) (decl lsr (Type Reg Reg) Reg) (extern constructor lsr lsr) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (shl (a) (b)) (r)))) +;;@ (assume (= (shl (a) (b)) (r)))) (decl lsl (Type Reg Reg) Reg) (extern constructor lsl lsl) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (| (a) (b)) (r)))) +;;@ (assume (= (| (a) (b)) (r)))) (decl orr (Type Reg Reg) Reg) (extern constructor orr orr) @@ -104,7 +104,7 @@ ;;@ (spec (sig (args t, x, y) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (t) ;;@ ((8i8: isleType) (conv_to (regwidth) (rotr (extract 7 0 (x)) (extract 7 0 (y))))) diff --git a/cranelift/isle/veri/veri_engine/examples/rotl/fits_in_16_with_imm_rotl_to_rotr.isle b/cranelift/isle/veri/veri_engine/examples/rotl/fits_in_16_with_imm_rotl_to_rotr.isle index 5ffe985b21a0..e8b20d310c2d 100644 --- a/cranelift/isle/veri/veri_engine/examples/rotl/fits_in_16_with_imm_rotl_to_rotr.isle +++ b/cranelift/isle/veri/veri_engine/examples/rotl/fits_in_16_with_imm_rotl_to_rotr.isle @@ -3,21 +3,21 @@ (type Imm12 (primitive Imm12)) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (- (a) (b)) (r)))) +;;@ (assume (= (- (a) (b)) (r)))) (decl sub (Type Reg Reg) Reg) (extern constructor sub sub) ;;@ (spec (sig (args) (r)) -;;@ (assertions (= (zero_ext (regwidth) (0i1:bv)) (r)))) +;;@ (assume (= (zero_ext (regwidth) (0i1:bv)) (r)))) (decl zero_reg () Reg) (extern constructor zero_reg zero_reg) ;;@ (spec (sig (args a, b, c, d) (ret)) -;;@ (assertions (if (b) +;;@ (assume (if (b) ;;@ (= (ret) (sign_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) ;;@ (= (ret) (zero_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) ;;@ ) @@ -26,7 +26,7 @@ (extern constructor extend extend) ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) ;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) ;;@ (= (extract 2 0 (y)) (0i3:bv)) ;;@ )), @@ -42,7 +42,7 @@ ;; Place a `Value` into a register, zero extending it to 32-bits ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions ( +;;@ (assume ( ;;@ if (<= (32i0:isleType) (widthof (arg))) ;;@ (= (ret) (conv_to (regwidth) (arg))) ;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) @@ -53,7 +53,7 @@ ;; Note that 4094 = 0xffe and 16773119 = 0xffefff ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) ;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) ;;@ (= (extract 2 0 (y)) (0i3:bv)) ;;@ )), @@ -63,22 +63,22 @@ (extern constructor sub_imm sub_imm) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (ret) (zero_ext (24) (arg))))) +;;@ (assume (= (ret) (zero_ext (24) (arg))))) (decl u8_into_imm12 (u8) Imm12) (extern constructor u8_into_imm12 u8_into_imm12) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (shr (a) (b)) (r)))) +;;@ (assume (= (shr (a) (b)) (r)))) (decl lsr (Type Reg Reg) Reg) (extern constructor lsr lsr) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (shl (a) (b)) (r)))) +;;@ (assume (= (shl (a) (b)) (r)))) (decl lsl (Type Reg Reg) Reg) (extern constructor lsl lsl) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (| (a) (b)) (r)))) +;;@ (assume (= (| (a) (b)) (r)))) (decl orr (Type Reg Reg) Reg) (extern constructor orr orr) @@ -98,7 +98,7 @@ ;; Add an assertion that the value fits, using the constand with 56 1's then 6 0's (~63) ;;@ (spec (sig (args ty, x) (r)) -;;@ (assertions +;;@ (assume ;;@ (= (r) (extract 5 0 (& (x) (- (int2bv 64 (ty)) (1i64:bv64))))), ;;@ (ult (& (x) (- (int2bv 64 (ty)) (1i64:bv64))) (64i64:bv64)) ;;@ ) @@ -114,7 +114,7 @@ ;; } ;;@ (spec (sig (args ty, x) (r)) -;;@ (assertions +;;@ (assume ;;@ (= (- (x)) (r)) ;;@ ) ;;@ ) @@ -123,13 +123,13 @@ ;; Helper for generating `lsr` instructions. ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (shr (a) (b)) (r)))) +;;@ (assume (= (shr (a) (b)) (r)))) (decl lsr_imm (Type Reg ImmShift) Reg) (extern constructor lsr_imm lsr_imm) (extern extractor lsr_imm lsr_imm) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (shl (a) (b)) (r)))) +;;@ (assume (= (shl (a) (b)) (r)))) (decl lsl_imm (Type Reg ImmShift) Reg) (extern constructor lsl_imm lsl_imm) (extern extractor lsl_imm lsl_imm) @@ -140,7 +140,7 @@ ;; } ;;@ (spec (sig (args ty, x) (ret)) -;;@ (assertions (= (- (int2bv 6 (ty)) (& (x) (- (int2bv 6 (ty)) (1i6:bv)))) (ret)))) +;;@ (assume (= (- (int2bv 6 (ty)) (& (x) (- (int2bv 6 (ty)) (1i6:bv)))) (ret)))) (decl rotr_opposite_amount (Type ImmShift) ImmShift) (extern constructor rotr_opposite_amount rotr_opposite_amount) @@ -155,7 +155,7 @@ (small_rotr_imm ty (put_in_reg_zext32 x) (negate_imm_shift ty n))) ;;@ (spec (sig (args t, x, y) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (t) ;;@ ((8i8: isleType) (conv_to (regwidth) (rotr (extract 7 0 (x)) (zero_ext (8) (y))))) diff --git a/cranelift/isle/veri/veri_engine/examples/rotr/32_rotr.isle b/cranelift/isle/veri/veri_engine/examples/rotr/32_rotr.isle index 0e77459cb8f0..b538dcc9425c 100644 --- a/cranelift/isle/veri/veri_engine/examples/rotr/32_rotr.isle +++ b/cranelift/isle/veri/veri_engine/examples/rotr/32_rotr.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -8,7 +8,7 @@ )) ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (zero_ext (regwidth) (rotr (extract 31 0 (x)) (extract 31 0 (y)))) ;;@ (rotr (x) (y)) diff --git a/cranelift/isle/veri/veri_engine/examples/rotr/32_with_imm_rotr.isle b/cranelift/isle/veri/veri_engine/examples/rotr/32_with_imm_rotr.isle index 88c918b58159..c3d7de3bf269 100644 --- a/cranelift/isle/veri/veri_engine/examples/rotr/32_with_imm_rotr.isle +++ b/cranelift/isle/veri/veri_engine/examples/rotr/32_with_imm_rotr.isle @@ -3,7 +3,7 @@ (type Imm12 (primitive Imm12)) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -13,7 +13,7 @@ ;; Add an assertion that the value fits, using the constand with 56 1's then 6 0's (~63) ;;@ (spec (sig (args ty, x) (r)) -;;@ (assertions +;;@ (assume ;;@ (= (r) (extract 5 0 (& (x) (- (int2bv 64 (ty)) (1i64:bv64))))), ;;@ (ult (& (x) (- (int2bv 64 (ty)) (1i64:bv64))) (64i64:bv64)) ;;@ ) @@ -22,7 +22,7 @@ (extern constructor imm_shift_from_imm64 imm_shift_from_imm64) ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (zero_ext (regwidth) (rotr (extract 31 0 (x)) (zero_ext (32i0:isleType) (y)))) ;;@ (rotr (x) (zero_ext (regwidth) (y))) diff --git a/cranelift/isle/veri/veri_engine/examples/rotr/64_rotr.isle b/cranelift/isle/veri/veri_engine/examples/rotr/64_rotr.isle index 864d6b8f3929..955c745c5315 100644 --- a/cranelift/isle/veri/veri_engine/examples/rotr/64_rotr.isle +++ b/cranelift/isle/veri/veri_engine/examples/rotr/64_rotr.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -8,7 +8,7 @@ )) ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (zero_ext (regwidth) (rotr (extract 31 0 (x)) (extract 31 0 (y)))) ;;@ (rotr (x) (y)) diff --git a/cranelift/isle/veri/veri_engine/examples/rotr/64_with_imm_rotr.isle b/cranelift/isle/veri/veri_engine/examples/rotr/64_with_imm_rotr.isle index 7c97532784bf..91f76c2a670d 100644 --- a/cranelift/isle/veri/veri_engine/examples/rotr/64_with_imm_rotr.isle +++ b/cranelift/isle/veri/veri_engine/examples/rotr/64_with_imm_rotr.isle @@ -3,7 +3,7 @@ (type Imm12 (primitive Imm12)) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -13,7 +13,7 @@ ;; Add an assertion that the value fits, using the constand with 56 1's then 6 0's (~63) ;;@ (spec (sig (args ty, x) (r)) -;;@ (assertions +;;@ (assume ;;@ (= (r) (extract 5 0 (& (x) (- (int2bv 64 (ty)) (1i64:bv64))))), ;;@ (ult (& (x) (- (int2bv 64 (ty)) (1i64:bv64))) (64i64:bv64)) ;;@ ) @@ -23,7 +23,7 @@ ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (= (ret) +;;@ (assume (= (ret) ;;@ (if (= (ty) (32i0:isleType)) ;;@ (zero_ext (regwidth) (rotr (extract 31 0 (x)) (zero_ext (32i0:isleType) (y)))) ;;@ (rotr (x) (zero_ext (regwidth) (y))) diff --git a/cranelift/isle/veri/veri_engine/examples/rotr/fits_in_16_rotr.isle b/cranelift/isle/veri/veri_engine/examples/rotr/fits_in_16_rotr.isle index b5819b21150d..bccc737b313b 100644 --- a/cranelift/isle/veri/veri_engine/examples/rotr/fits_in_16_rotr.isle +++ b/cranelift/isle/veri/veri_engine/examples/rotr/fits_in_16_rotr.isle @@ -1,6 +1,6 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -10,7 +10,7 @@ ;; Place a `Value` into a register, zero extending it to 32-bits ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions ( +;;@ (assume ( ;;@ if (<= (32i0:isleType) (widthof (arg))) ;;@ (= (ret) (conv_to (regwidth) (arg))) ;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) @@ -20,7 +20,7 @@ (extern constructor put_in_reg_zext32 put_in_reg_zext32) ;;@ (spec (sig (args t, x, y) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (t) ;;@ ((8i8: isleType) (conv_to (regwidth) (rotr (extract 7 0 (x)) (extract 7 0 (y))))) diff --git a/cranelift/isle/veri/veri_engine/examples/rotr/fits_in_16_with_imm_rotr.isle b/cranelift/isle/veri/veri_engine/examples/rotr/fits_in_16_with_imm_rotr.isle index f530068171be..2f0be123dc94 100644 --- a/cranelift/isle/veri/veri_engine/examples/rotr/fits_in_16_with_imm_rotr.isle +++ b/cranelift/isle/veri/veri_engine/examples/rotr/fits_in_16_with_imm_rotr.isle @@ -3,7 +3,7 @@ (type Imm12 (primitive Imm12)) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -13,7 +13,7 @@ ;; Add an assertion that the value fits, using the constand with 56 1's then 6 0's (~63) ;;@ (spec (sig (args ty, x) (r)) -;;@ (assertions +;;@ (assume ;;@ (= (r) (extract 5 0 (& (x) (- (int2bv 64 (ty)) (1i64:bv64))))), ;;@ (ult (& (x) (- (int2bv 64 (ty)) (1i64:bv64))) (64i64:bv64)) ;;@ ) @@ -23,7 +23,7 @@ ;; Place a `Value` into a register, zero extending it to 32-bits ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions ( +;;@ (assume ( ;;@ if (<= (32i0:isleType) (widthof (arg))) ;;@ (= (ret) (conv_to (regwidth) (arg))) ;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) @@ -33,7 +33,7 @@ (extern constructor put_in_reg_zext32 put_in_reg_zext32) ;;@ (spec (sig (args t, x, y) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (t) ;;@ ((8i8: isleType) (conv_to (regwidth) (rotr (extract 7 0 (x)) (zero_ext (8) (y))))) diff --git a/cranelift/isle/veri/veri_engine/examples/rotr/small_rotr_imm_to_shifts.isle b/cranelift/isle/veri/veri_engine/examples/rotr/small_rotr_imm_to_shifts.isle index a1906d2a8040..3e838d8a9f79 100644 --- a/cranelift/isle/veri/veri_engine/examples/rotr/small_rotr_imm_to_shifts.isle +++ b/cranelift/isle/veri/veri_engine/examples/rotr/small_rotr_imm_to_shifts.isle @@ -3,7 +3,7 @@ (type Imm12 (primitive Imm12)) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions +;;@ (assume ;;@ (= (r) ;;@ (switch (ty) ;;@ ((32i8: isleType) (conv_to (regwidth) (| (extract 31 0 (a)) (extract 31 0 (b))))) @@ -15,7 +15,7 @@ (extern constructor orr orr) ;;@ (spec (sig (args t, x, y) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (t) ;;@ ((8i8: isleType) (conv_to (regwidth) (rotr (extract 7 0 (x)) (zero_ext (8) (y))))) @@ -34,7 +34,7 @@ ;; Helper for generating `lsr` instructions. ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions +;;@ (assume ;;@ (= (r) ;;@ (switch (ty) ;;@ ((32i8: isleType) (conv_to (regwidth) (shr (extract 31 0 (a)) (zero_ext (32) (b))))) @@ -47,7 +47,7 @@ (extern extractor lsr_imm lsr_imm) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions +;;@ (assume ;;@ (= (r) ;;@ (switch (ty) ;;@ ((32i8: isleType) (conv_to (regwidth) (shl (extract 31 0 (a)) (zero_ext (32) (b))))) @@ -65,7 +65,7 @@ ;; } ;;@ (spec (sig (args ty, x) (ret)) -;;@ (assertions (= (- (int2bv 6 (ty)) (& (x) (- (int2bv 6 (ty)) (1i6:bv)))) (ret)))) +;;@ (assume (= (- (int2bv 6 (ty)) (& (x) (- (int2bv 6 (ty)) (1i6:bv)))) (ret)))) (decl rotr_opposite_amount (Type ImmShift) ImmShift) (extern constructor rotr_opposite_amount rotr_opposite_amount) diff --git a/cranelift/isle/veri/veri_engine/examples/rotr/small_rotr_to_shifts.isle b/cranelift/isle/veri/veri_engine/examples/rotr/small_rotr_to_shifts.isle index c9822de68679..a65b8adf1e6c 100644 --- a/cranelift/isle/veri/veri_engine/examples/rotr/small_rotr_to_shifts.isle +++ b/cranelift/isle/veri/veri_engine/examples/rotr/small_rotr_to_shifts.isle @@ -2,17 +2,17 @@ (type Imm12 (primitive Imm12)) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (- (a) (b)) (r)))) +;;@ (assume (= (- (a) (b)) (r)))) (decl sub (Type Reg Reg) Reg) (extern constructor sub sub) ;;@ (spec (sig (args) (r)) -;;@ (assertions (= (zero_ext (regwidth) (0i1:bv)) (r)))) +;;@ (assume (= (zero_ext (regwidth) (0i1:bv)) (r)))) (decl zero_reg () Reg) (extern constructor zero_reg zero_reg) ;;@ (spec (sig (args a, b, c, d) (ret)) -;;@ (assertions (if (b) +;;@ (assume (if (b) ;;@ (= (ret) (sign_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) ;;@ (= (ret) (zero_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) ;;@ ) @@ -21,7 +21,7 @@ (extern constructor extend extend) ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) ;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) ;;@ (= (extract 2 0 (y)) (0i3:bv)) ;;@ )), @@ -37,7 +37,7 @@ ;; Place a `Value` into a register, zero extending it to 32-bits ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions ( +;;@ (assume ( ;;@ if (<= (32i0:isleType) (widthof (arg))) ;;@ (= (ret) (conv_to (regwidth) (arg))) ;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) @@ -52,13 +52,13 @@ ;; } ;; ;;@ (spec (sig (args x) (ret)) -;;@ (assertions (= (- (int2bv 64 (x)) (1i64:bv64)) (ret)))) +;;@ (assume (= (- (int2bv 64 (x)) (1i64:bv64)) (ret)))) (decl rotr_mask (Type) ImmLogic) (extern constructor rotr_mask rotr_mask) ;; Note that 4094 = 0xffe and 16773119 = 0xffefff ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) ;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) ;;@ (= (extract 2 0 (y)) (0i3:bv)) ;;@ )), @@ -73,12 +73,12 @@ (extern constructor sub_imm sub_imm) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (ret) (zero_ext (24) (arg))))) +;;@ (assume (= (ret) (zero_ext (24) (arg))))) (decl u8_into_imm12 (u8) Imm12) (extern constructor u8_into_imm12 u8_into_imm12) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions +;;@ (assume ;;@ (= (r) ;;@ (switch (ty) ;;@ ((32i8: isleType) (conv_to (regwidth) (shr (extract 31 0 (a)) (extract 31 0 (b))))) @@ -90,7 +90,7 @@ (extern constructor lsr lsr) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions +;;@ (assume ;;@ (= (r) ;;@ (switch (ty) ;;@ ((32i8: isleType) (conv_to (regwidth) (shl (extract 31 0 (a)) (extract 31 0 (b))))) @@ -102,7 +102,7 @@ (extern constructor lsl lsl) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions +;;@ (assume ;;@ (= (r) ;;@ (switch (ty) ;;@ ((32i8: isleType) (conv_to (regwidth) (| (extract 31 0 (a)) (extract 31 0 (b))))) @@ -120,7 +120,7 @@ ;;@ (spec (sig (args t, x, y) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (t) ;;@ ((8i8: isleType) (conv_to (regwidth) (rotr (extract 7 0 (x)) (extract 7 0 (y))))) diff --git a/cranelift/isle/veri/veri_engine/examples/sdiv/sdiv.isle b/cranelift/isle/veri/veri_engine/examples/sdiv/sdiv.isle index 5f65a440b386..6baaf9087b81 100644 --- a/cranelift/isle/veri/veri_engine/examples/sdiv/sdiv.isle +++ b/cranelift/isle/veri/veri_engine/examples/sdiv/sdiv.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst (enum)) @@ -14,7 +14,7 @@ ;; Place a `Value` into a register, sign extending it to 64-bits ;;@ (spec (sig (args x) (ret)) -;;@ (assertions (= (sign_ext (64) (x)) (ret)))) +;;@ (assume (= (sign_ext (64) (x)) (ret)))) (decl put_in_reg_sext64 (Value) Reg) (extern constructor put_in_reg_sext64 put_in_reg_sext64) ;; (rule 1 (put_in_reg_sext64 val @ (value_type (fits_in_32 ty))) @@ -23,7 +23,7 @@ ;; Helper for placing a `Value` into a `Reg` and validating that it's nonzero. ;;@ (spec (sig (args x) (ret)) -;;@ (assertions (= (sign_ext (64) (x)) (ret)), +;;@ (assume (= (sign_ext (64) (x)) (ret)), ;;@ (! (= (0i64:bv) (ret))))) (decl put_nonzero_in_reg_sext64 (Value) Reg) (extern constructor put_nonzero_in_reg_sext64 put_nonzero_in_reg_sext64) @@ -43,7 +43,7 @@ ;; (imm ty (ImmExtend.Sign) n)) ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (= (sdiv (x) (y)) (ret)), +;;@ (assume (= (sdiv (x) (y)) (ret)), ;;@ (= (ty) (64i0: isleType)) ;;@ )) (decl a64_sdiv (Type Reg Reg) Reg) @@ -56,7 +56,7 @@ ;; on the input type. ;; ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (= (x) (ret)), +;;@ (assume (= (x) (ret)), ;;@ (if (= (ty) (32i0:isleType)) ;;@ (! (&& (= (0i32:bv) (extract 31 0 (y))) ;;@ (= (2147483648i32:bv) (extract 31 0 (y))))) diff --git a/cranelift/isle/veri/veri_engine/examples/sdiv/sdiv_safe_const.isle b/cranelift/isle/veri/veri_engine/examples/sdiv/sdiv_safe_const.isle index facdf945e1b8..7325a17f1600 100644 --- a/cranelift/isle/veri/veri_engine/examples/sdiv/sdiv_safe_const.isle +++ b/cranelift/isle/veri/veri_engine/examples/sdiv/sdiv_safe_const.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst (enum)) @@ -18,7 +18,7 @@ )) ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (1i0: isleType) (ret)))) +;;@ (assume (= (1i0: isleType) (ret)))) (decl ImmExtend.Sign () ImmExtend) (extern constructor ImmExtend.Sign ImmExtend.Sign) @@ -26,14 +26,14 @@ (extern constructor alu_rrr alu_rrr) ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (= (sdiv (x) (y)) (ret)), +;;@ (assume (= (sdiv (x) (y)) (ret)), ;;@ (= (ty) (64i0: isleType)) ;;@ )) (decl a64_sdiv (Type Reg Reg) Reg) (rule (a64_sdiv ty x y) (alu_rrr (ALUOp.SDiv) ty x y)) ;;@ (spec (sig (args ty, ext, x) (ret)) -;;@ (assertions (|| (= (ext) (0i0:isleType)) (= (ext) (1i0:isleType))), +;;@ (assume (|| (= (ext) (0i0:isleType)) (= (ext) (1i0:isleType))), ;;@ (if (= (ext) (0i0:isleType)) ;;@ (= (ret) (zero_ext (regwidth) (conv_to (ty) (x)))) ;;@ (= (ret) (sign_ext (regwidth) (conv_to (ty) (x)))) @@ -44,7 +44,7 @@ ;; Place a `Value` into a register, sign extending it to 64-bits ;;@ (spec (sig (args x) (ret)) -;;@ (assertions (= (sign_ext (64) (x)) (ret)))) +;;@ (assume (= (sign_ext (64) (x)) (ret)))) (decl put_in_reg_sext64 (Value) Reg) (extern constructor put_in_reg_sext64 put_in_reg_sext64) ;; (rule 1 (put_in_reg_sext64 val @ (value_type (fits_in_32 ty))) @@ -52,7 +52,7 @@ ;; Helper for placing a `Value` into a `Reg` and validating that it's nonzero. ;;@ (spec (sig (args x) (ret)) -;;@ (assertions (= (sign_ext (64) (x)) (ret)), +;;@ (assume (= (sign_ext (64) (x)) (ret)), ;;@ (! (= (0i64:bv) (ret))))) (decl put_nonzero_in_reg_sext64 (Value) Reg) (extern constructor put_nonzero_in_reg_sext64 put_nonzero_in_reg_sext64) @@ -61,7 +61,7 @@ ;; Helper for extracting an immediate that's not 0 and not -1 from an imm64. ;;@ (spec (sig (args x) (ret)) -;;@ (assertions (= (x) (ret)), +;;@ (assume (= (x) (ret)), ;;@ (! (= (0i64:bv) (ret))), ;;@ (! (= (18446744073709551615i64:bv) (ret))) ;;@ )) diff --git a/cranelift/isle/veri/veri_engine/examples/sextend/sextend.isle b/cranelift/isle/veri/veri_engine/examples/sextend/sextend.isle index ebefc228dd66..9e49bb20b1fc 100644 --- a/cranelift/isle/veri/veri_engine/examples/sextend/sextend.isle +++ b/cranelift/isle/veri/veri_engine/examples/sextend/sextend.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -15,7 +15,7 @@ )) ;;@ (spec (sig (args a, b, c, d) (ret)) -;;@ (assertions (if (b) +;;@ (assume (if (b) ;;@ (= (ret) (sign_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) ;;@ (= (ret) (zero_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) ;;@ ) diff --git a/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_32.isle b/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_32.isle index 3fe4abd7db34..f48ca5e80fb2 100644 --- a/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_32.isle +++ b/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_32.isle @@ -4,15 +4,15 @@ )) ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (0i64:bv) (ret)))) +;;@ (assume (= (0i64:bv) (ret)))) ;;decl ALUOp.Lsl ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (1i64:bv) (ret)))) +;;@ (assume (= (1i64:bv) (ret)))) ;;decl ALUOp.Lsr ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (2i64:bv) (ret)))) +;;@ (assume (= (2i64:bv) (ret)))) ;;decl ALUOp.Asr ;; An ALU operation. This can be paired with several instruction formats @@ -55,7 +55,7 @@ )) ;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (op) ;;@ ((0i64:bv) (conv_to (regwidth) @@ -94,7 +94,7 @@ (decl do_shift (ALUOp Type Reg Value) Reg) ;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) (switch (op) ;;@ ((0i64:bv) ;;@ (if (<= (t) (32i8: isleType)) diff --git a/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_64.isle b/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_64.isle index d749d18f26e2..d58d842194f3 100644 --- a/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_64.isle +++ b/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_64.isle @@ -4,15 +4,15 @@ )) ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (0i64:bv) (ret)))) +;;@ (assume (= (0i64:bv) (ret)))) ;;decl ALUOp.Lsl ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (1i64:bv) (ret)))) +;;@ (assume (= (1i64:bv) (ret)))) ;;decl ALUOp.Lsr ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (2i64:bv) (ret)))) +;;@ (assume (= (2i64:bv) (ret)))) ;;decl ALUOp.Asr ;; An ALU operation. This can be paired with several instruction formats @@ -55,7 +55,7 @@ )) ;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (op) ;;@ ((0i64:bv) (conv_to (regwidth) @@ -94,7 +94,7 @@ (decl do_shift (ALUOp Type Reg Value) Reg) ;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) (switch (op) ;;@ ((0i64:bv) ;;@ (if (<= (t) (32i8: isleType)) diff --git a/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_fits_in_16.isle b/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_fits_in_16.isle index be15fe6d695e..95ac0c0bc629 100644 --- a/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_fits_in_16.isle +++ b/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_fits_in_16.isle @@ -6,15 +6,15 @@ )) ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (0i64:bv) (ret)))) +;;@ (assume (= (0i64:bv) (ret)))) ;;decl ALUOp.Lsl ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (1i64:bv) (ret)))) +;;@ (assume (= (1i64:bv) (ret)))) ;;decl ALUOp.Lsr ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (2i64:bv) (ret)))) +;;@ (assume (= (2i64:bv) (ret)))) ;;decl ALUOp.Asr ;; An ALU operation. This can be paired with several instruction formats @@ -57,7 +57,7 @@ )) ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) ;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) ;;@ (= (extract 2 0 (y)) (0i3:bv)) ;;@ )), @@ -72,7 +72,7 @@ (extern constructor and_imm and_imm) ;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (op) ;;@ ((0i64:bv) (conv_to (regwidth) @@ -111,7 +111,7 @@ (decl do_shift (ALUOp Type Reg Value) Reg) ;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) (switch (op) ;;@ ((0i64:bv) ;;@ (if (<= (t) (32i8: isleType)) @@ -139,7 +139,7 @@ (extern constructor alu_rrr alu_rrr) ;;@ (spec (sig (args x) (ret)) -;;@ (assertions (= (- (int2bv 64 (x)) (1i64:bv)) (ret)))) +;;@ (assume (= (- (int2bv 64 (x)) (1i64:bv)) (ret)))) (decl shift_mask (Type) ImmLogic) (extern constructor shift_mask shift_mask) diff --git a/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_with_imm.isle b/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_with_imm.isle index b8ad62f9a831..c72bcbaf43a0 100644 --- a/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_with_imm.isle +++ b/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_with_imm.isle @@ -6,15 +6,15 @@ )) ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (0i64:bv) (ret)))) +;;@ (assume (= (0i64:bv) (ret)))) ;;decl ALUOp.Lsl ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (1i64:bv) (ret)))) +;;@ (assume (= (1i64:bv) (ret)))) ;;decl ALUOp.Lsr ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (2i64:bv) (ret)))) +;;@ (assume (= (2i64:bv) (ret)))) ;;decl ALUOp.Asr ;; An ALU operation. This can be paired with several instruction formats @@ -58,7 +58,7 @@ ;; Add an assertion that the value fits, using the constand with 56 1's then 6 0's (~63) ;;@ (spec (sig (args ty, x) (r)) -;;@ (assertions +;;@ (assume ;;@ (= (r) (extract 5 0 (& (x) (- (int2bv 64 (ty)) (1i64:bv64))))), ;;@ (ult (& (x) (- (int2bv 64 (ty)) (1i64:bv64))) (64i64:bv64)) ;;@ ) @@ -67,7 +67,7 @@ (extern constructor imm_shift_from_imm64 imm_shift_from_imm64) ;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (op) ;;@ ((0i64:bv) (conv_to (regwidth) @@ -110,7 +110,7 @@ ;; (if (<= (t) (32i8: isleType)) (32i8: isleType) (64i8: isleType)) ;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) (switch (op) ;;@ ((0i64:bv) ;;@ (if (<= (t) (32i8: isleType)) diff --git a/cranelift/isle/veri/veri_engine/examples/shifts/ishl_to_do_shift_64.isle b/cranelift/isle/veri/veri_engine/examples/shifts/ishl_to_do_shift_64.isle index e8ae2a9a1fd0..4da0963fd569 100644 --- a/cranelift/isle/veri/veri_engine/examples/shifts/ishl_to_do_shift_64.isle +++ b/cranelift/isle/veri/veri_engine/examples/shifts/ishl_to_do_shift_64.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -8,15 +8,15 @@ )) ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (0i64:bv) (ret)))) +;;@ (assume (= (0i64:bv) (ret)))) ;;decl ALUOp.Lsl ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (1i64:bv) (ret)))) +;;@ (assume (= (1i64:bv) (ret)))) ;;decl ALUOp.Lsr ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (2i64:bv) (ret)))) +;;@ (assume (= (2i64:bv) (ret)))) ;;decl ALUOp.Asr ;; An ALU operation. This can be paired with several instruction formats @@ -59,7 +59,7 @@ )) ;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (op) ;;@ ((0i64:bv) (conv_to (regwidth) @@ -74,13 +74,15 @@ ;;@ (ashr (conv_to (t) (a)) ;;@ (conv_to (t) (zero_ext (regwidth) ;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ )), +;;@ )) +;;@ ) +;;@ (assert ;;@ (|| (= (op) (0i64:bv)) (|| (= (op) (1i64:bv)) (= (op) (2i64:bv)))), ;;@ (= (t) (widthof (b))), ;;@ (|| (= (t) (8i8: isleType)) ;;@ (|| (= (t) (16i8: isleType)) ;;@ (|| (= (t) (32i8: isleType)) -;;@ (= (t) (64i8: isleType))))), +;;@ (= (t) (64i8: isleType))))), ;;@ (switch (op) ;;@ ((0i64:bv) (true)) ;;@ ((1i64:bv) (switch (t) @@ -93,7 +95,7 @@ ;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) ;;@ ((32i32: isleType) (true)) ;;@ ((64i32: isleType) (true)))) -;;@ ), +;;@ ) ;;@ )) (decl do_shift (ALUOp Type Reg Value) Reg) (extern constructor do_shift do_shift) diff --git a/cranelift/isle/veri/veri_engine/examples/shifts/ishl_to_do_shift_fits_in_32.isle b/cranelift/isle/veri/veri_engine/examples/shifts/ishl_to_do_shift_fits_in_32.isle index eebfdf3c08be..2bb7ef73ea33 100644 --- a/cranelift/isle/veri/veri_engine/examples/shifts/ishl_to_do_shift_fits_in_32.isle +++ b/cranelift/isle/veri/veri_engine/examples/shifts/ishl_to_do_shift_fits_in_32.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -8,15 +8,15 @@ )) ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (0i64:bv) (ret)))) +;;@ (assume (= (0i64:bv) (ret)))) ;;decl ALUOp.Lsl ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (1i64:bv) (ret)))) +;;@ (assume (= (1i64:bv) (ret)))) ;;decl ALUOp.Lsr ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (2i64:bv) (ret)))) +;;@ (assume (= (2i64:bv) (ret)))) ;;decl ALUOp.Asr ;; An ALU operation. This can be paired with several instruction formats @@ -59,7 +59,7 @@ )) ;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (op) ;;@ ((0i64:bv) (conv_to (regwidth) diff --git a/cranelift/isle/veri/veri_engine/examples/shifts/sshr_to_do_shift_64.isle b/cranelift/isle/veri/veri_engine/examples/shifts/sshr_to_do_shift_64.isle index 90f354089507..94bca4b44bc7 100644 --- a/cranelift/isle/veri/veri_engine/examples/shifts/sshr_to_do_shift_64.isle +++ b/cranelift/isle/veri/veri_engine/examples/shifts/sshr_to_do_shift_64.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -8,15 +8,15 @@ )) ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (0i64:bv) (ret)))) +;;@ (assume (= (0i64:bv) (ret)))) ;;decl ALUOp.Lsl ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (1i64:bv) (ret)))) +;;@ (assume (= (1i64:bv) (ret)))) ;;decl ALUOp.Lsr ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (2i64:bv) (ret)))) +;;@ (assume (= (2i64:bv) (ret)))) ;;decl ALUOp.Asr ;; An ALU operation. This can be paired with several instruction formats @@ -59,7 +59,7 @@ )) ;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (op) ;;@ ((0i64:bv) (conv_to (regwidth) @@ -99,7 +99,7 @@ (extern constructor do_shift do_shift) ;;@ (spec (sig (args x) (ret)) -;;@ (assertions (= (sign_ext (64) (x)) (ret)))) +;;@ (assume (= (sign_ext (64) (x)) (ret)))) (decl put_in_reg_sext64 (Value) Reg) (extern constructor put_in_reg_sext64 put_in_reg_sext64) diff --git a/cranelift/isle/veri/veri_engine/examples/shifts/sshr_to_do_shift_fits_in_32.isle b/cranelift/isle/veri/veri_engine/examples/shifts/sshr_to_do_shift_fits_in_32.isle index 3ccff11b60cb..47119109e13a 100644 --- a/cranelift/isle/veri/veri_engine/examples/shifts/sshr_to_do_shift_fits_in_32.isle +++ b/cranelift/isle/veri/veri_engine/examples/shifts/sshr_to_do_shift_fits_in_32.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -8,15 +8,15 @@ )) ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (0i64:bv) (ret)))) +;;@ (assume (= (0i64:bv) (ret)))) ;;decl ALUOp.Lsl ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (1i64:bv) (ret)))) +;;@ (assume (= (1i64:bv) (ret)))) ;;decl ALUOp.Lsr ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (2i64:bv) (ret)))) +;;@ (assume (= (2i64:bv) (ret)))) ;;decl ALUOp.Asr ;; An ALU operation. This can be paired with several instruction formats @@ -59,7 +59,7 @@ )) ;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (op) ;;@ ((0i64:bv) (conv_to (regwidth) @@ -99,7 +99,7 @@ (extern constructor do_shift do_shift) ;;@ (spec (sig (args x) (ret)) -;;@ (assertions (= (sign_ext (32) (x)) (ret)))) +;;@ (assume (= (sign_ext (32) (x)) (ret)))) (decl put_in_reg_sext32 (Value) Reg) (extern constructor put_in_reg_sext32 put_in_reg_sext32) diff --git a/cranelift/isle/veri/veri_engine/examples/shifts/ushr_to_do_shift_64.isle b/cranelift/isle/veri/veri_engine/examples/shifts/ushr_to_do_shift_64.isle index c91df7e80e62..dfe8b1e0eb73 100644 --- a/cranelift/isle/veri/veri_engine/examples/shifts/ushr_to_do_shift_64.isle +++ b/cranelift/isle/veri/veri_engine/examples/shifts/ushr_to_do_shift_64.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -8,15 +8,15 @@ )) ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (0i64:bv) (ret)))) +;;@ (assume (= (0i64:bv) (ret)))) ;;decl ALUOp.Lsl ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (1i64:bv) (ret)))) +;;@ (assume (= (1i64:bv) (ret)))) ;;decl ALUOp.Lsr ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (2i64:bv) (ret)))) +;;@ (assume (= (2i64:bv) (ret)))) ;;decl ALUOp.Asr ;; An ALU operation. This can be paired with several instruction formats @@ -59,7 +59,7 @@ )) ;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (op) ;;@ ((0i64:bv) (conv_to (regwidth) @@ -99,7 +99,7 @@ (extern constructor do_shift do_shift) ;;@ (spec (sig (args x) (ret)) -;;@ (assertions (= (zero_ext (64) (x)) (ret)))) +;;@ (assume (= (zero_ext (64) (x)) (ret)))) (decl put_in_reg_zext64 (Value) Reg) (extern constructor put_in_reg_zext64 put_in_reg_zext64) diff --git a/cranelift/isle/veri/veri_engine/examples/shifts/ushr_to_do_shift_fits_in_32.isle b/cranelift/isle/veri/veri_engine/examples/shifts/ushr_to_do_shift_fits_in_32.isle index 0a2cad97d1d3..b1ca03099417 100644 --- a/cranelift/isle/veri/veri_engine/examples/shifts/ushr_to_do_shift_fits_in_32.isle +++ b/cranelift/isle/veri/veri_engine/examples/shifts/ushr_to_do_shift_fits_in_32.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -8,15 +8,15 @@ )) ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (0i64:bv) (ret)))) +;;@ (assume (= (0i64:bv) (ret)))) ;;decl ALUOp.Lsl ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (1i64:bv) (ret)))) +;;@ (assume (= (1i64:bv) (ret)))) ;;decl ALUOp.Lsr ;;@ (spec (sig (args) (ret)) -;;@ (assertions (= (2i64:bv) (ret)))) +;;@ (assume (= (2i64:bv) (ret)))) ;;decl ALUOp.Asr ;; An ALU operation. This can be paired with several instruction formats @@ -59,7 +59,7 @@ )) ;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (switch (op) ;;@ ((0i64:bv) (conv_to (regwidth) @@ -100,7 +100,7 @@ ;; Place a `Value` into a register, zero extending it to 32-bits ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions ( +;;@ (assume ( ;;@ if (<= (32i0:isleType) (widthof (arg))) ;;@ (= (ret) (conv_to (regwidth) (arg))) ;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) diff --git a/cranelift/isle/veri/veri_engine/examples/srem/srem.isle b/cranelift/isle/veri/veri_engine/examples/srem/srem.isle index e52c9ec6ec2a..a1b6955a0c0d 100644 --- a/cranelift/isle/veri/veri_engine/examples/srem/srem.isle +++ b/cranelift/isle/veri/veri_engine/examples/srem/srem.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst (enum)) @@ -21,25 +21,25 @@ (extern constructor alu_rrrr alu_rrrr) ;;@ (spec (sig (args ty, a, b, c) (r)) -;;@ (assertions (= (- (c) (* (a) (b))) (r)))) +;;@ (assume (= (- (c) (* (a) (b))) (r)))) (decl msub (Type Reg Reg Reg) Reg) (rule (msub ty x y z) (alu_rrrr (ALUOp3.MSub) ty x y z)) ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (= (sdiv (x) (y)) (ret)), +;;@ (assume (= (sdiv (x) (y)) (ret)), ;;@ (= (ty) (64i0: isleType)) ;;@ )) (decl a64_sdiv (Type Reg Reg) Reg) (rule (a64_sdiv ty x y) (alu_rrr (ALUOp.SDiv) ty x y)) ;;@ (spec (sig (args x) (ret)) -;;@ (assertions (= (sign_ext (64) (x)) (ret)), +;;@ (assume (= (sign_ext (64) (x)) (ret)), ;;@ (! (= (0i64:bv) (ret))))) (decl put_nonzero_in_reg_sext64 (Value) Reg) (extern constructor put_nonzero_in_reg_sext64 put_nonzero_in_reg_sext64) ;;@ (spec (sig (args x) (ret)) -;;@ (assertions (= (sign_ext (64) (x)) (ret)))) +;;@ (assume (= (sign_ext (64) (x)) (ret)))) (decl put_in_reg_sext64 (Value) Reg) (extern constructor put_in_reg_sext64 put_in_reg_sext64) diff --git a/cranelift/isle/veri/veri_engine/examples/udiv/udiv.isle b/cranelift/isle/veri/veri_engine/examples/udiv/udiv.isle index 823dc4e34f03..044710eebdd9 100644 --- a/cranelift/isle/veri/veri_engine/examples/udiv/udiv.isle +++ b/cranelift/isle/veri/veri_engine/examples/udiv/udiv.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst (enum)) @@ -13,19 +13,19 @@ (extern constructor alu_rrr alu_rrr) ;;@ (spec (sig (args x) (ret)) -;;@ (assertions (= (zero_ext (64) (x)) (ret)))) +;;@ (assume (= (zero_ext (64) (x)) (ret)))) (decl put_in_reg_zext64 (Value) Reg) (extern constructor put_in_reg_zext64 put_in_reg_zext64) ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (= (/ (x) (y)) (ret)), +;;@ (assume (= (/ (x) (y)) (ret)), ;;@ (= (ty) (64i0: isleType)) ;;@ )) (decl a64_udiv (Type Reg Reg) Reg) (rule (a64_udiv ty x y) (alu_rrr (ALUOp.UDiv) ty x y)) ;;@ (spec (sig (args x) (ret)) -;;@ (assertions (= (zero_ext (64) (x)) (ret)), +;;@ (assume (= (zero_ext (64) (x)) (ret)), ;;@ (! (= (0i64:bv) (ret))))) (decl put_nonzero_in_reg_zext64 (Value) Reg) (extern constructor put_nonzero_in_reg_zext64 put_nonzero_in_reg_zext64) diff --git a/cranelift/isle/veri/veri_engine/examples/uextend/uextend.isle b/cranelift/isle/veri/veri_engine/examples/uextend/uextend.isle index 0d12d8e2459f..b7d1c2a2fd0a 100644 --- a/cranelift/isle/veri/veri_engine/examples/uextend/uextend.isle +++ b/cranelift/isle/veri/veri_engine/examples/uextend/uextend.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -15,7 +15,7 @@ )) ;;@ (spec (sig (args a, b, c, d) (ret)) -;;@ (assertions (if (b) +;;@ (assume (if (b) ;;@ (= (ret) (sign_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) ;;@ (= (ret) (zero_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) ;;@ ) diff --git a/cranelift/isle/veri/veri_engine/examples/urem/urem.isle b/cranelift/isle/veri/veri_engine/examples/urem/urem.isle index 99354dea504f..136a1943579c 100644 --- a/cranelift/isle/veri/veri_engine/examples/urem/urem.isle +++ b/cranelift/isle/veri/veri_engine/examples/urem/urem.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst (enum)) @@ -21,25 +21,25 @@ (extern constructor alu_rrrr alu_rrrr) ;;@ (spec (sig (args ty, a, b, c) (r)) -;;@ (assertions (= (- (c) (* (a) (b))) (r)))) +;;@ (assume (= (- (c) (* (a) (b))) (r)))) (decl msub (Type Reg Reg Reg) Reg) (rule (msub ty x y z) (alu_rrrr (ALUOp3.MSub) ty x y z)) ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions (= (/ (x) (y)) (ret)), +;;@ (assume (= (/ (x) (y)) (ret)), ;;@ (= (ty) (64i0: isleType)) ;;@ )) (decl a64_udiv (Type Reg Reg) Reg) (rule (a64_udiv ty x y) (alu_rrr (ALUOp.UDiv) ty x y)) ;;@ (spec (sig (args x) (ret)) -;;@ (assertions (= (zero_ext (64) (x)) (ret)), +;;@ (assume (= (zero_ext (64) (x)) (ret)), ;;@ (! (= (0i64:bv) (ret))))) (decl put_nonzero_in_reg_zext64 (Value) Reg) (extern constructor put_nonzero_in_reg_zext64 put_nonzero_in_reg_zext64) ;;@ (spec (sig (args x) (ret)) -;;@ (assertions (= (zero_ext (64) (x)) (ret)))) +;;@ (assume (= (zero_ext (64) (x)) (ret)))) (decl put_in_reg_zext64 (Value) Reg) (extern constructor put_in_reg_zext64 put_in_reg_zext64) diff --git a/cranelift/isle/veri/veri_engine/src/solver.rs b/cranelift/isle/veri/veri_engine/src/solver.rs index 7bd184772ec3..fe3b2952fbc1 100644 --- a/cranelift/isle/veri/veri_engine/src/solver.rs +++ b/cranelift/isle/veri/veri_engine/src/solver.rs @@ -1745,6 +1745,13 @@ pub fn run_solver( .assert(ctx.smt.named(format!("conceq"), eq)) .unwrap(); + for (i, a) in rule_sem.rhs_assertions.iter().enumerate() { + let p = ctx.vir_expr_to_sexp(a.clone()); + ctx.smt + .assert(ctx.smt.named(format!("rhs_assert{i}"), p)) + .unwrap(); + } + if !matches!(ctx.smt.check(), Ok(Response::Sat)) { // Bad! This is a bug! // Pop the output assertion @@ -1809,8 +1816,23 @@ pub fn run_solver( side_equality }; + // Look at RHS assertions, which are checked, not trusted + let rhs_assertions: Vec = rule_sem.rhs_assertions.iter().map(|a| { + ctx.vir_expr_to_sexp(a.clone()) + }).collect(); + let assumption_conjunction = ctx.smt.and_many(assumptions); - let query = ctx.smt.not(ctx.smt.imp(assumption_conjunction, condition)); + let full_condition = if rhs_assertions.len() > 1 { + let assertion_conjunction = ctx.smt.and_many(rhs_assertions); + ctx.smt.and(condition, assertion_conjunction) + } else { + condition + }; + println!( + "Full verification condition:\n\t{}\n", + ctx.smt.display(full_condition) + ); + let query = ctx.smt.not(ctx.smt.imp(assumption_conjunction, full_condition)); println!("Running query"); ctx.smt.assert(query).unwrap(); diff --git a/cranelift/isle/veri/veri_engine/src/type_inference.rs b/cranelift/isle/veri/veri_engine/src/type_inference.rs index d4f56f0064a3..3aea8054fe76 100644 --- a/cranelift/isle/veri/veri_engine/src/type_inference.rs +++ b/cranelift/isle/veri/veri_engine/src/type_inference.rs @@ -36,6 +36,7 @@ struct RuleParseTree<'a> { // Used for custom verification conditions term_args: Vec, assumptions: Vec, + rhs_assertions: Vec, concrete: Option, } @@ -91,6 +92,7 @@ pub struct RuleSemantics { // Used for custom verification conditions pub term_args: Vec, pub assumptions: Vec, + pub rhs_assertions: Vec, pub tyctx: TypeContext, } @@ -194,6 +196,7 @@ fn type_annotations_using_rule<'a>( term_input_bvs: vec![], term_args: vec![], assumptions: vec![], + rhs_assertions: vec![], concrete: concrete.clone(), }; @@ -218,6 +221,7 @@ fn type_annotations_using_rule<'a>( iflet_lhs, annotation_env, &mut annotation_infos, + false, ); if iflet_lhs_expr.is_none() { return None; @@ -228,6 +232,7 @@ fn type_annotations_using_rule<'a>( iflet_rhs, annotation_env, &mut annotation_infos, + false, ); if iflet_rhs_expr.is_none() { return None; @@ -262,13 +267,13 @@ fn type_annotations_using_rule<'a>( println!("Typing rule:"); print!("\tLHS:"); let lhs_expr = - add_rule_constraints(&mut parse_tree, lhs, annotation_env, &mut annotation_infos); + add_rule_constraints(&mut parse_tree, lhs, annotation_env, &mut annotation_infos, false); if lhs_expr.is_none() { return None; } print!("\n\tRHS:"); let rhs_expr = - add_rule_constraints(&mut parse_tree, rhs, annotation_env, &mut annotation_infos); + add_rule_constraints(&mut parse_tree, rhs, annotation_env, &mut annotation_infos, true); if rhs_expr.is_none() { return None; } @@ -331,6 +336,7 @@ fn type_annotations_using_rule<'a>( lhs: lhs_expr, rhs: rhs_expr, assumptions: parse_tree.assumptions, + rhs_assertions: parse_tree.rhs_assertions, quantified_vars, free_vars, term_input_bvs: parse_tree.term_input_bvs, @@ -1410,12 +1416,13 @@ fn add_rule_constraints( curr: &mut TypeVarNode, annotation_env: &AnnotationEnv, annotation_infos: &mut Vec, + rhs: bool, ) -> Option { // Only relate args to annotations for terms. For leaves, return immediately. // For recursive definitions without annotations (like And and Let), recur. let mut children = vec![]; for child in &mut curr.children { - if let Some(e) = add_rule_constraints(tree, child, annotation_env, annotation_infos) { + if let Some(e) = add_rule_constraints(tree, child, annotation_env, annotation_infos, rhs) { children.push(e); } else { return None; @@ -1525,7 +1532,7 @@ fn add_rule_constraints( term: curr.ident.clone(), var_to_type_var: HashMap::new(), }; - for expr in annotation.assertions { + for expr in annotation.assumptions { let (typed_expr, _) = add_annotation_constraints(*expr, tree, &mut annotation_info); curr.assertions.push(typed_expr.clone()); tree.assumptions.push(typed_expr); @@ -1538,6 +1545,24 @@ fn add_rule_constraints( ); } } + // For assertions, global assume if not RHS, otherwise assert + for expr in annotation.assertions { + let (typed_expr, _) = add_annotation_constraints(*expr, tree, &mut annotation_info); + curr.assertions.push(typed_expr.clone()); + if tree.decls.contains_key(t) { + add_isle_constraints( + cranelift_isle::ast::Def::Decl(tree.decls[t].clone()), + tree, + &mut annotation_info, + annotation.sig.clone(), + ); + } + if rhs { + tree.rhs_assertions.push(typed_expr); + } else { + tree.assumptions.push(typed_expr); + } + } // set args in rule equal to args in annotation for (child, arg) in curr.children.iter().zip(&annotation.sig.args) { diff --git a/cranelift/isle/veri/veri_engine/tests/code/selfcontained/let.isle b/cranelift/isle/veri/veri_engine/tests/code/selfcontained/let.isle index 2e808ade6873..0ba500a703b3 100644 --- a/cranelift/isle/veri/veri_engine/tests/code/selfcontained/let.isle +++ b/cranelift/isle/veri/veri_engine/tests/code/selfcontained/let.isle @@ -11,21 +11,21 @@ ;; EXTRACTORS ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) ValueRegs) ;;@ (spec (sig (args ty, arg) (ret)) -;;@ (assertions (= (ty) (widthof (arg))), (= (arg) (ret)))) +;;@ (assume (= (ty) (widthof (arg))), (= (arg) (ret)))) (decl has_type (Type Inst) Inst) (extern extractor has_type has_type) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)), (<= (arg) (64i128: isleType)))) +;;@ (assume (= (arg) (ret)), (<= (arg) (64i128: isleType)))) (decl fits_in_64 (Type) Type) (extern extractor fits_in_64 fits_in_64) ;;@ (spec (sig (args a, b) (r)) -;;@ (assertions (= (+ (a) (b)) (r)))) +;;@ (assume (= (+ (a) (b)) (r)))) (decl iadd (Value Value) Inst) (extern extractor iadd iadd) @@ -35,23 +35,23 @@ ;; CONSTRUCTORS ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl value_reg (Reg) ValueRegs) (extern constructor value_reg value_reg) ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions +;;@ (assume ;;@ (= (+ (conv_to (ty) (a)) (conv_to (ty) (b))) (r)))) (decl add (Type Reg Reg) Reg) (extern constructor add add) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (conv_to (regwidth) (arg)) (ret)))) +;;@ (assume (= (conv_to (regwidth) (arg)) (ret)))) (decl put_in_reg (Value) Reg) (extern constructor put_in_reg put_in_reg) ;;@ (spec (sig (args) (r)) -;;@ (assertions (= (zero_ext (regwidth) (0i1:bv)) (r)))) +;;@ (assume (= (zero_ext (regwidth) (0i1:bv)) (r)))) (decl zero_reg () Reg) (extern constructor zero_reg zero_reg) diff --git a/cranelift/isle/veri/veri_engine/tests/code/selfcontained/prelude.isle b/cranelift/isle/veri/veri_engine/tests/code/selfcontained/prelude.isle index 1f89d57dc822..dfdda5d2f9e8 100644 --- a/cranelift/isle/veri/veri_engine/tests/code/selfcontained/prelude.isle +++ b/cranelift/isle/veri/veri_engine/tests/code/selfcontained/prelude.isle @@ -22,11 +22,11 @@ ;; EXTRACTORS ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;;@ (spec (sig (args ty, arg) (ret)) -;;@ (assertions (= (ty) (widthof (arg))), (= (arg) (ret)))) +;;@ (assume (= (ty) (widthof (arg))), (= (arg) (ret)))) (decl has_type (Type Inst) Inst) (extern extractor has_type has_type) @@ -34,7 +34,7 @@ ;; {((a : Type) b : Type) | a = b, a.ty.width <= 64} ;; (decl fits_in_64 (Type) Type) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)), (<= (arg) (64i128: isleType)))) +;;@ (assume (= (arg) (ret)), (<= (arg) (64i128: isleType)))) (decl fits_in_64 (Type) Type) (extern extractor fits_in_64 fits_in_64) @@ -43,13 +43,13 @@ ;; (decl (a b) c bvX) (assert (= c (+ a b))) ;;@ (spec (sig (args a, b) (r)) -;;@ (assertions (= (+ (a) (b)) (r)))) +;;@ (assume (= (+ (a) (b)) (r)))) (decl iadd (Value Value) Inst) (extern extractor iadd iadd) ;; Note that 4095 = 0xfff and 16773120 = 0xfff000 ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (|| (< (- (zero_ext (regwidth) (ret))) (4095i64:bv)) +;;@ (assume (|| (< (- (zero_ext (regwidth) (ret))) (4095i64:bv)) ;;@ (&& (< (- (zero_ext (regwidth) (ret))) (16773120i64:bv)) ;;@ (= (extract 2 0 (- (zero_ext (regwidth) (ret)))) (0i3:bv)) ;;@ )), @@ -61,40 +61,40 @@ ;; CONSTRUCTORS ;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assertions (= (+ (a) (b)) (r)))) +;;@ (assume (= (+ (a) (b)) (r)))) (decl add (Type Reg Reg) Reg) (extern constructor add add) ;;@ (spec (sig (args ty, reg, imm_arg) (ret)) -;;@ (assertions (= (- (reg) (zero_ext (regwidth) (imm_arg))) (ret)))) +;;@ (assume (= (- (reg) (zero_ext (regwidth) (imm_arg))) (ret)))) (decl sub_imm (Type Reg Imm12) Reg) (extern constructor sub_imm sub_imm) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl value_reg (Reg) ValueRegs) (extern constructor value_reg value_reg) ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (conv_to (regwidth) (arg)) (ret)))) +;;@ (assume (= (conv_to (regwidth) (arg)) (ret)))) (decl put_in_reg (Value) Reg) (extern constructor put_in_reg put_in_reg) ;; Construct a single-element `InstOutput`. ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl output (ValueRegs) InstOutput) (extern constructor output output) ;; Construct a single-element `InstOutput` from a single register. ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (conv_to (widthof (arg)) (ret))))) +;;@ (assume (= (arg) (conv_to (widthof (arg)) (ret))))) (decl output_reg (Reg) InstOutput) (rule (output_reg reg) (output (value_reg reg))) ;; Construct a single-element `InstOutput` from a value. ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl output_value (Value) InstOutput) (rule (output_value val) (output (put_in_regs val))) @@ -102,6 +102,6 @@ ;; ;; As a side effect, this marks the value as used. ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl put_in_regs (Value) ValueRegs) (extern constructor put_in_regs put_in_regs) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/tests/code/selfcontained/simple_prelude.isle b/cranelift/isle/veri/veri_engine/tests/code/selfcontained/simple_prelude.isle index 48735e2ce02e..38eaca214437 100644 --- a/cranelift/isle/veri/veri_engine/tests/code/selfcontained/simple_prelude.isle +++ b/cranelift/isle/veri/veri_engine/tests/code/selfcontained/simple_prelude.isle @@ -14,16 +14,16 @@ ;; AVH todo: leave the upper bits undefined ;;@ (spec (sig (args arg) (ret)) - ;;@ (assertions (= (conv_to (regwidth) (arg)) (ret)))) + ;;@ (assume (= (conv_to (regwidth) (arg)) (ret)))) (decl lower (Inst) ValueRegs) ;;@ (spec (sig (args ty, arg) (ret)) - ;;@ (assertions (= (ty) (widthof (arg))), (= (arg) (ret)))) + ;;@ (assume (= (ty) (widthof (arg))), (= (arg) (ret)))) (decl has_type (Type Inst) Inst) (extern extractor has_type has_type) ;;@ (spec (sig (args arg) (ret)) - ;;@ (assertions (= (arg) (ret)), (<= (arg) (64i128: isleType)))) + ;;@ (assume (= (arg) (ret)), (<= (arg) (64i128: isleType)))) (decl fits_in_64 (Type) Type) (extern extractor fits_in_64 fits_in_64) @@ -32,13 +32,13 @@ ;; (decl (a b) c bvX) (assert (= c (+ a b))) ;;@ (spec (sig (args a, b) (r)) - ;;@ (assertions (= (+ (a) (b)) (r)))) + ;;@ (assume (= (+ (a) (b)) (r)))) (decl iadd (Value Value) Inst) (extern extractor iadd iadd) ;; Note that 4095 = 0xfff and 16773120 = 0xfff000 ;;@ (spec (sig (args arg) (ret)) - ;;@ (assertions (|| (< (- (zero_ext (regwidth) (ret))) (4095i64:bv)) + ;;@ (assume (|| (< (- (zero_ext (regwidth) (ret))) (4095i64:bv)) ;;@ (&& (< (- (zero_ext (regwidth) (ret))) (16773120i64:bv)) ;;@ (= (extract 2 0 (- (zero_ext (regwidth) (ret)))) (0i3:bv)) ;;@ )), @@ -49,22 +49,22 @@ ;; CONSTRUCTORS ;;@ (spec (sig (args arg) (ret)) - ;;@ (assertions (= (arg) (ret)))) + ;;@ (assume (= (arg) (ret)))) (decl value_reg (Reg) ValueRegs) (extern constructor value_reg value_reg) ;;@ (spec (sig (args ty, a, b) (r)) - ;;@ (assertions (= (+ (a) (b)) (r)))) + ;;@ (assume (= (+ (a) (b)) (r)))) (decl add (Type Reg Reg) Reg) (extern constructor add add) ;; AVH todo: leave the upper bits undefined ;;@ (spec (sig (args arg) (ret)) - ;;@ (assertions (= (conv_to (regwidth) (arg)) (ret)))) + ;;@ (assume (= (conv_to (regwidth) (arg)) (ret)))) (decl put_in_reg (Value) Reg) (extern constructor put_in_reg put_in_reg) ;;@ (spec (sig (args ty, reg, imm_arg) (ret)) - ;;@ (assertions (= (- (reg) (conv_to (widthof (ret)) (imm_arg))) (ret)))) + ;;@ (assume (= (- (reg) (conv_to (widthof (ret)) (imm_arg))) (ret)))) (decl sub_imm (Type Reg Imm12) Reg) (extern constructor sub_imm sub_imm) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_ir/src/annotation_ir.rs b/cranelift/isle/veri/veri_ir/src/annotation_ir.rs index 14b74ac16b95..7e398ca10d91 100644 --- a/cranelift/isle/veri/veri_ir/src/annotation_ir.rs +++ b/cranelift/isle/veri/veri_ir/src/annotation_ir.rs @@ -47,15 +47,19 @@ pub struct TermSignature { pub struct TermAnnotation { pub sig: TermSignature, // Note: extra Box for now for ease of parsing + #[allow(clippy::vec_box)] + pub assumptions: Vec>, + #[allow(clippy::vec_box)] pub assertions: Vec>, } impl TermAnnotation { /// New annotation - pub fn new(sig: TermSignature, assertions: Vec) -> Self { + pub fn new(sig: TermSignature, assumptions: Vec, assertions: Vec) -> Self { TermAnnotation { sig, + assumptions: assumptions.iter().map(|x| Box::new(x.clone())).collect(), assertions: assertions.iter().map(|x| Box::new(x.clone())).collect(), } } @@ -65,7 +69,7 @@ impl TermAnnotation { } pub fn assertions(&self) -> Vec { - self.assertions.iter().map(|x| *x.clone()).collect() + self.assumptions.iter().map(|x| *x.clone()).collect() } } diff --git a/cranelift/isle/veri/veri_ir/src/isle_annotations.rs b/cranelift/isle/veri/veri_ir/src/isle_annotations.rs index 74e9fbc03861..6f27890a7531 100644 --- a/cranelift/isle/veri/veri_ir/src/isle_annotations.rs +++ b/cranelift/isle/veri/veri_ir/src/isle_annotations.rs @@ -5,7 +5,7 @@ use crate::annotation_ir::{BoundVar, Const, Expr, TermAnnotation, TermSignature, pub fn isle_annotation_for_term(term: &str) -> Option { match term { // (spec (sig (args (x: bvX) (ret: bvX)) - // (assumptions (= x ret))) + // (assume (= x ret))) "lower" | "put_in_reg" | "value_reg" | "first_result" | "inst_data" => { // No-op for now let arg = BoundVar::new("arg"); @@ -15,7 +15,7 @@ pub fn isle_annotation_for_term(term: &str) -> Option { args: vec![arg], ret: result, }; - Some(TermAnnotation::new(func, vec![identity])) + Some(TermAnnotation::new(func, vec![identity], vec![])) } "value_type" => { let arg = BoundVar::new("arg"); @@ -25,10 +25,10 @@ pub fn isle_annotation_for_term(term: &str) -> Option { args: vec![arg], ret: result, }; - Some(TermAnnotation::new(func, vec![ty_eq])) + Some(TermAnnotation::new(func, vec![ty_eq], vec![])) } // (spec (sig (args x: bvX) (ret: bvX)) - // (assumptions (= x ret))) + // (assume (= x ret))) "has_type" => { // Add an assertion on the type let ty_arg = BoundVar::new("ty"); @@ -40,7 +40,7 @@ pub fn isle_annotation_for_term(term: &str) -> Option { args: vec![ty_arg, arg], ret: result, }; - Some(TermAnnotation::new(func, vec![ty_eq, identity])) + Some(TermAnnotation::new(func, vec![ty_eq, identity], vec![])) } "fits_in_64" => { // Identity, but add assertion on type @@ -63,7 +63,7 @@ pub fn isle_annotation_for_term(term: &str) -> Option { args: vec![arg], ret: result, }; - Some(TermAnnotation::new(func, vec![identity, ty_fits])) + Some(TermAnnotation::new(func, vec![identity, ty_fits], vec![])) } "iadd" => { let a = BoundVar::new("a"); @@ -78,7 +78,7 @@ pub fn isle_annotation_for_term(term: &str) -> Option { args: vec![a, b], ret: r, }; - Some(TermAnnotation::new(func, vec![sem])) + Some(TermAnnotation::new(func, vec![sem], vec![])) } // "imm12_from_negated_value" => { // // Width: bv12 From fae0d842da2892476e71a8591ac4c1de68743085 Mon Sep 17 00:00:00 2001 From: Alexa VanHattum Date: Mon, 10 Apr 2023 19:45:25 -0400 Subject: [PATCH 02/30] tests on named rules --- cranelift/codegen/src/clif_lower.isle | 2 - cranelift/codegen/src/isa/aarch64/inst.isle | 45 +++++++++++++ cranelift/codegen/src/isa/aarch64/lower.isle | 14 ++-- cranelift/isle/isle/src/ast.rs | 1 + cranelift/isle/isle/src/parser.rs | 9 +++ cranelift/isle/isle/src/sema.rs | 3 + .../broken/shifts/broken_do_shift_32.isle | 9 +-- .../shifts/broken_ishl_to_do_shift_64.isle | 12 ++-- .../broken_sshr_to_do_shift_fits_in_32.isle | 6 +- .../broken_ushr_to_do_shift_fits_in_32.isle | 12 ++-- .../examples/shifts/do_shift_32.isle | 12 ++-- .../examples/shifts/do_shift_64.isle | 12 ++-- .../examples/shifts/do_shift_fits_in_16.isle | 12 ++-- .../examples/shifts/do_shift_with_imm.isle | 12 ++-- .../examples/shifts/ishl_to_do_shift_64.isle | 4 +- .../shifts/ishl_to_do_shift_fits_in_32.isle | 8 ++- .../examples/shifts/sshr_to_do_shift_64.isle | 12 ++-- .../shifts/sshr_to_do_shift_fits_in_32.isle | 12 ++-- .../examples/shifts/ushr_to_do_shift_64.isle | 24 ++++--- .../shifts/ushr_to_do_shift_fits_in_32.isle | 12 ++-- cranelift/isle/veri/veri_engine/src/lib.rs | 1 + cranelift/isle/veri/veri_engine/src/main.rs | 49 +++++++++++--- cranelift/isle/veri/veri_engine/src/solver.rs | 12 ++-- .../veri/veri_engine/src/type_inference.rs | 35 +++++++--- cranelift/isle/veri/veri_engine/src/verify.rs | 11 ++- .../isle/veri/veri_engine/tests/utils/mod.rs | 43 +++++++++--- cranelift/isle/veri/veri_engine/tests/veri.rs | 67 ++++++++++++++++++- 27 files changed, 340 insertions(+), 111 deletions(-) diff --git a/cranelift/codegen/src/clif_lower.isle b/cranelift/codegen/src/clif_lower.isle index 4cf40d2cd921..5f93f733dab1 100644 --- a/cranelift/codegen/src/clif_lower.isle +++ b/cranelift/codegen/src/clif_lower.isle @@ -918,8 +918,6 @@ (inst_data (InstructionData.Binary (Opcode.Srem) (value_array_2 x y))) ) -;;@ (spec (sig (args x, y) (ret)) -;;@ (assume (= (+ (sign_ext (64) (x)) (y)) (ret)))) (decl iadd_imm (Value Imm64) Inst) (extractor (iadd_imm x Y) diff --git a/cranelift/codegen/src/isa/aarch64/inst.isle b/cranelift/codegen/src/isa/aarch64/inst.isle index 03c19d8cf7e7..37aa307df77d 100644 --- a/cranelift/codegen/src/isa/aarch64/inst.isle +++ b/cranelift/codegen/src/isa/aarch64/inst.isle @@ -1700,12 +1700,29 @@ (extern constructor is_zero_uimm12 is_zero_uimm12) ;; Helper to go directly from a `Value`, when it's an `iconst`, to an `Imm12`. +;; Note that 4095 = 0xfff and 16773120 = 0xfff000 +;;@ (spec (sig (args arg) (ret)) +;;@ (assume (|| (< (zero_ext (regwidth) (ret)) (4095i64:bv)) +;;@ (&& (< (zero_ext (regwidth) (ret)) (16773120i64:bv)) +;;@ (= (extract 2 0 (zero_ext (regwidth) (ret))) (0i3:bv)) +;;@ )), +;;@ (= (ret) (conv_to (widthof (ret)) (zero_ext (regwidth) (arg)))), +;;@ (= (arg) (conv_to (widthof (arg)) (zero_ext (regwidth) (ret)))) +;;@ )) (decl imm12_from_value (Imm12) Value) (extractor (imm12_from_value n) (iconst (u64_from_imm64 (imm12_from_u64 n)))) ;; Same as `imm12_from_value`, but tries negating the constant value. +;; Note that 4095 = 0xfff and 16773120 = 0xfff000 +;;@ (spec (sig (args arg) (ret)) +;;@ (assume (|| (< (- (zero_ext (regwidth) (ret))) (4095i64:bv)) +;;@ (&& (< (- (zero_ext (regwidth) (ret))) (16773120i64:bv)) +;;@ (= (extract 2 0 (- (zero_ext (regwidth) (ret)))) (0i3:bv)) +;;@ )), +;;@ (= (ret) (conv_to (widthof (ret)) (- (zero_ext (regwidth) (arg))))) +;;@ )) (decl imm12_from_negated_value (Imm12) Value) (extractor (imm12_from_negated_value n) @@ -2284,9 +2301,26 @@ ;; Helpers for generating `add` instructions. +;;@ (spec (sig (args ty, a, b) (r)) +;;@ (assume +;;@ (= (r) +;;@ (if (<= (ty) (32i8: isleType)) +;;@ (conv_to (regwidth) (+ (extract 31 0 (a)) (extract 31 0 (b)))) +;;@ (+ (a) (b)))))) (decl add (Type Reg Reg) Reg) (rule (add ty x y) (alu_rrr (ALUOp.Add) ty x y)) +;;@ (spec (sig (args ty, a, b) (r)) +;;@ (assume +;;@ (= (r) +;;@ (if (<= (ty) (32i8: isleType)) +;;@ (conv_to (regwidth) (+ (extract 31 0 (a)) (zero_ext (32) (b)))) +;;@ (+ (a) (zero_ext (regwidth) (b)))))) +;;@ (assert (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) +;;@ (= (extract 2 0 (y)) (0i3:bv)) +;;@ ))) +;;@ ) (decl add_imm (Type Reg Imm12) Reg) (rule (add_imm ty x y) (alu_rr_imm12 (ALUOp.Add) ty x y)) @@ -2307,6 +2341,17 @@ (decl sub (Type Reg Reg) Reg) (rule (sub ty x y) (alu_rrr (ALUOp.Sub) ty x y)) +;;@ (spec (sig (args ty, a, b) (r)) +;;@ (assume +;;@ (= (r) +;;@ (if (<= (ty) (32i8: isleType)) +;;@ (conv_to (regwidth) (- (extract 31 0 (a)) (zero_ext (32) (b)))) +;;@ (- (a) (zero_ext (regwidth) (b)))))) +;;@ (assert (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) +;;@ (= (extract 2 0 (y)) (0i3:bv)) +;;@ ))) +;;@ ) (decl sub_imm (Type Reg Imm12) Reg) (rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) diff --git a/cranelift/codegen/src/isa/aarch64/lower.isle b/cranelift/codegen/src/isa/aarch64/lower.isle index dafffe4b4715..263ea0b92c08 100644 --- a/cranelift/codegen/src/isa/aarch64/lower.isle +++ b/cranelift/codegen/src/isa/aarch64/lower.isle @@ -2,6 +2,8 @@ ;; The main lowering constructor term: takes a clif `Inst` and returns the ;; register(s) within which the lowered instruction's result values live. +;;@ (spec (sig (args arg) (ret)) +;;@ (assume (= (arg) (ret)))) (decl partial lower (Inst) InstOutput) ;; Variant of the main lowering constructor term, which receives an @@ -44,22 +46,22 @@ ;; `i64` and smaller ;; Base case, simply adding things in registers. -(rule -1 (lower (has_type (fits_in_64 ty) (iadd x y))) +(rule iadd_base_case -1 (lower (has_type (fits_in_64 ty) (iadd x y))) (add ty x y)) ;; Special cases for when one operand is an immediate that fits in 12 bits. -(rule 4 (lower (has_type (fits_in_64 ty) (iadd x (imm12_from_value y)))) +(rule iadd_imm12_right 4 (lower (has_type (fits_in_64 ty) (iadd x (imm12_from_value y)))) (add_imm ty x y)) -(rule 5 (lower (has_type (fits_in_64 ty) (iadd (imm12_from_value x) y))) +(rule iadd_imm12_left 5 (lower (has_type (fits_in_64 ty) (iadd (imm12_from_value x) y))) (add_imm ty y x)) ;; Same as the previous special cases, except we can switch the addition to a ;; subtraction if the negated immediate fits in 12 bits. -(rule 2 (lower (has_type (fits_in_64 ty) (iadd x (imm12_from_negated_value y)))) +(rule iadd_imm12_neg_right -1 (lower (has_type (fits_in_64 ty) (iadd x (imm12_from_negated_value y)))) (sub_imm ty x y)) -(rule 3 (lower (has_type (fits_in_64 ty) (iadd (imm12_from_negated_value x) y))) +(rule iadd_imm12_neg_left -2 (lower (has_type (fits_in_64 ty) (iadd (imm12_from_negated_value x) y))) (sub_imm ty y x)) ;; Special cases for when we're adding an extended register where the extending @@ -1419,8 +1421,6 @@ (val_lshift Reg (lsl $I32 val neg_amt))) (orr $I32 val_lshift val_rshift))) -;;@ (spec (sig (args x) (ret)) -;;@ (assertions (= (ret) (- (int2bv (x) 12) (1i32:bv24))))) (decl rotr_mask (Type) ImmLogic) (extern constructor rotr_mask rotr_mask) diff --git a/cranelift/isle/isle/src/ast.rs b/cranelift/isle/isle/src/ast.rs index a94c85659a6a..6bbe5447c94c 100644 --- a/cranelift/isle/isle/src/ast.rs +++ b/cranelift/isle/isle/src/ast.rs @@ -95,6 +95,7 @@ pub struct Rule { pub expr: Expr, pub pos: Pos, pub prio: Option, + pub name: Option, } #[derive(Clone, PartialEq, Eq, Debug)] diff --git a/cranelift/isle/isle/src/parser.rs b/cranelift/isle/isle/src/parser.rs index a305d6ce9903..ba6d5b902cc7 100644 --- a/cranelift/isle/isle/src/parser.rs +++ b/cranelift/isle/isle/src/parser.rs @@ -398,6 +398,14 @@ impl<'a> Parser<'a> { fn parse_rule(&mut self) -> Result { let pos = self.pos(); + let name = if self.is_sym() { + Some( + self.symbol() + .map_err(|err| self.error(pos, format!("Invalid rule name: {:?}", err)))?, + ) + } else { + None + }; let prio = if self.is_int() { Some( i64::try_from(self.int()?) @@ -420,6 +428,7 @@ impl<'a> Parser<'a> { expr, pos, prio, + name, }); } } diff --git a/cranelift/isle/isle/src/sema.rs b/cranelift/isle/isle/src/sema.rs index 6fc66fa80399..4f0a4b1c2fd1 100644 --- a/cranelift/isle/isle/src/sema.rs +++ b/cranelift/isle/isle/src/sema.rs @@ -477,6 +477,8 @@ pub struct Rule { pub prio: i64, /// The source position where this rule is defined. pub pos: Pos, + /// The optional name for this rule. + pub name: Option, } /// A name bound in a pattern or let-expression. @@ -1778,6 +1780,7 @@ impl TermEnv { vars: bindings.seen, prio: rule.prio.unwrap_or(0), pos, + name: rule.name.clone() }); } _ => {} diff --git a/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_do_shift_32.isle b/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_do_shift_32.isle index 9a43be343417..c836d8419dcd 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_do_shift_32.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_do_shift_32.isle @@ -71,13 +71,8 @@ ;;@ (ashr (conv_to (t) (a)) ;;@ (conv_to (t) (zero_ext (regwidth) ;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ )), -;;@ (= (t) (widthof (b))), -;;@ (|| (= (t) (8i8: isleType)) -;;@ (|| (= (t) (16i8: isleType)) -;;@ (|| (= (t) (32i8: isleType)) -;;@ (= (t) (64i8: isleType))))), -;;@ )) +;;@ )) +;;@ )) (decl do_shift (ALUOp Type Reg Value) Reg) ;; BROKEN: no restriction on op in annotation diff --git a/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_ishl_to_do_shift_64.isle b/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_ishl_to_do_shift_64.isle index 10eec7abcd0a..00ba1a1198f6 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_ishl_to_do_shift_64.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_ishl_to_do_shift_64.isle @@ -74,26 +74,28 @@ ;;@ (ashr (conv_to (t) (a)) ;;@ (conv_to (t) (zero_ext (regwidth) ;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ )), +;;@ )) +;;@ ) +;;@ (assert ;;@ (|| (= (op) (0i64:bv)) (|| (= (op) (1i64:bv)) (= (op) (2i64:bv)))), ;;@ (= (t) (widthof (b))), ;;@ (|| (= (t) (8i8: isleType)) ;;@ (|| (= (t) (16i8: isleType)) ;;@ (|| (= (t) (32i8: isleType)) -;;@ (= (t) (64i8: isleType))))), +;;@ (= (t) (64i8: isleType))))), ;;@ (switch (op) ;;@ ((0i64:bv) (true)) ;;@ ((1i64:bv) (switch (t) ;;@ ((8i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) +;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 15 0 (a))))) ;;@ ((32i32: isleType) (true)) ;;@ ((64i32: isleType) (true)))) ;;@ ((2i64:bv) (switch (t) ;;@ ((8i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) +;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 15 0 (a))))) ;;@ ((32i32: isleType) (true)) ;;@ ((64i32: isleType) (true)))) -;;@ ), +;;@ ) ;;@ )) (decl do_shift (ALUOp Type Reg Value) Reg) (extern constructor do_shift do_shift) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_sshr_to_do_shift_fits_in_32.isle b/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_sshr_to_do_shift_fits_in_32.isle index feb96203fd2e..edef8e733d70 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_sshr_to_do_shift_fits_in_32.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_sshr_to_do_shift_fits_in_32.isle @@ -75,13 +75,15 @@ ;;@ (ashr (conv_to (t) (a)) ;;@ (conv_to (t) (zero_ext (regwidth) ;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ )), +;;@ )) +;;@ ) +;;@ (assert ;;@ (|| (= (op) (0i64:bv)) (|| (= (op) (1i64:bv)) (= (op) (2i64:bv)))), ;;@ (= (t) (widthof (b))), ;;@ (|| (= (t) (8i8: isleType)) ;;@ (|| (= (t) (16i8: isleType)) ;;@ (|| (= (t) (32i8: isleType)) -;;@ (= (t) (64i8: isleType))))), +;;@ (= (t) (64i8: isleType))))), ;;@ )) (decl do_shift (ALUOp Type Reg Value) Reg) (extern constructor do_shift do_shift) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_ushr_to_do_shift_fits_in_32.isle b/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_ushr_to_do_shift_fits_in_32.isle index 447b7b5f9a82..707e25783e4c 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_ushr_to_do_shift_fits_in_32.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_ushr_to_do_shift_fits_in_32.isle @@ -74,26 +74,28 @@ ;;@ (ashr (conv_to (t) (a)) ;;@ (conv_to (t) (zero_ext (regwidth) ;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ )), +;;@ )) +;;@ ) +;;@ (assert ;;@ (|| (= (op) (0i64:bv)) (|| (= (op) (1i64:bv)) (= (op) (2i64:bv)))), ;;@ (= (t) (widthof (b))), ;;@ (|| (= (t) (8i8: isleType)) ;;@ (|| (= (t) (16i8: isleType)) ;;@ (|| (= (t) (32i8: isleType)) -;;@ (= (t) (64i8: isleType))))), +;;@ (= (t) (64i8: isleType))))), ;;@ (switch (op) ;;@ ((0i64:bv) (true)) ;;@ ((1i64:bv) (switch (t) ;;@ ((8i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) +;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 15 0 (a))))) ;;@ ((32i32: isleType) (true)) ;;@ ((64i32: isleType) (true)))) ;;@ ((2i64:bv) (switch (t) ;;@ ((8i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) +;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 15 0 (a))))) ;;@ ((32i32: isleType) (true)) ;;@ ((64i32: isleType) (true)))) -;;@ ), +;;@ ) ;;@ )) (decl do_shift (ALUOp Type Reg Value) Reg) (extern constructor do_shift do_shift) diff --git a/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_32.isle b/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_32.isle index f48ca5e80fb2..c71b8310fe87 100644 --- a/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_32.isle +++ b/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_32.isle @@ -70,26 +70,28 @@ ;;@ (ashr (conv_to (t) (a)) ;;@ (conv_to (t) (zero_ext (regwidth) ;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ )), +;;@ )) +;;@ ) +;;@ (assert ;;@ (|| (= (op) (0i64:bv)) (|| (= (op) (1i64:bv)) (= (op) (2i64:bv)))), ;;@ (= (t) (widthof (b))), ;;@ (|| (= (t) (8i8: isleType)) ;;@ (|| (= (t) (16i8: isleType)) ;;@ (|| (= (t) (32i8: isleType)) -;;@ (= (t) (64i8: isleType))))), +;;@ (= (t) (64i8: isleType))))), ;;@ (switch (op) ;;@ ((0i64:bv) (true)) ;;@ ((1i64:bv) (switch (t) ;;@ ((8i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) +;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 15 0 (a))))) ;;@ ((32i32: isleType) (true)) ;;@ ((64i32: isleType) (true)))) ;;@ ((2i64:bv) (switch (t) ;;@ ((8i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) +;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 15 0 (a))))) ;;@ ((32i32: isleType) (true)) ;;@ ((64i32: isleType) (true)))) -;;@ ), +;;@ ) ;;@ )) (decl do_shift (ALUOp Type Reg Value) Reg) diff --git a/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_64.isle b/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_64.isle index d58d842194f3..12a1d3193a3a 100644 --- a/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_64.isle +++ b/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_64.isle @@ -70,26 +70,28 @@ ;;@ (ashr (conv_to (t) (a)) ;;@ (conv_to (t) (zero_ext (regwidth) ;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ )), +;;@ )) +;;@ ) +;;@ (assert ;;@ (|| (= (op) (0i64:bv)) (|| (= (op) (1i64:bv)) (= (op) (2i64:bv)))), ;;@ (= (t) (widthof (b))), ;;@ (|| (= (t) (8i8: isleType)) ;;@ (|| (= (t) (16i8: isleType)) ;;@ (|| (= (t) (32i8: isleType)) -;;@ (= (t) (64i8: isleType))))), +;;@ (= (t) (64i8: isleType))))), ;;@ (switch (op) ;;@ ((0i64:bv) (true)) ;;@ ((1i64:bv) (switch (t) ;;@ ((8i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) +;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 15 0 (a))))) ;;@ ((32i32: isleType) (true)) ;;@ ((64i32: isleType) (true)))) ;;@ ((2i64:bv) (switch (t) ;;@ ((8i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) +;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 15 0 (a))))) ;;@ ((32i32: isleType) (true)) ;;@ ((64i32: isleType) (true)))) -;;@ ), +;;@ ) ;;@ )) (decl do_shift (ALUOp Type Reg Value) Reg) diff --git a/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_fits_in_16.isle b/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_fits_in_16.isle index 95ac0c0bc629..33fd0de340e8 100644 --- a/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_fits_in_16.isle +++ b/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_fits_in_16.isle @@ -87,26 +87,28 @@ ;;@ (ashr (conv_to (t) (a)) ;;@ (conv_to (t) (zero_ext (regwidth) ;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ )), +;;@ )) +;;@ ) +;;@ (assert ;;@ (|| (= (op) (0i64:bv)) (|| (= (op) (1i64:bv)) (= (op) (2i64:bv)))), ;;@ (= (t) (widthof (b))), ;;@ (|| (= (t) (8i8: isleType)) ;;@ (|| (= (t) (16i8: isleType)) ;;@ (|| (= (t) (32i8: isleType)) -;;@ (= (t) (64i8: isleType))))), +;;@ (= (t) (64i8: isleType))))), ;;@ (switch (op) ;;@ ((0i64:bv) (true)) ;;@ ((1i64:bv) (switch (t) ;;@ ((8i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) +;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 15 0 (a))))) ;;@ ((32i32: isleType) (true)) ;;@ ((64i32: isleType) (true)))) ;;@ ((2i64:bv) (switch (t) ;;@ ((8i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) +;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 15 0 (a))))) ;;@ ((32i32: isleType) (true)) ;;@ ((64i32: isleType) (true)))) -;;@ ), +;;@ ) ;;@ )) (decl do_shift (ALUOp Type Reg Value) Reg) diff --git a/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_with_imm.isle b/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_with_imm.isle index c72bcbaf43a0..0d0de74b6687 100644 --- a/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_with_imm.isle +++ b/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_with_imm.isle @@ -82,26 +82,28 @@ ;;@ (ashr (conv_to (t) (a)) ;;@ (conv_to (t) (zero_ext (regwidth) ;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ )), +;;@ )) +;;@ ) +;;@ (assert ;;@ (|| (= (op) (0i64:bv)) (|| (= (op) (1i64:bv)) (= (op) (2i64:bv)))), ;;@ (= (t) (widthof (b))), ;;@ (|| (= (t) (8i8: isleType)) ;;@ (|| (= (t) (16i8: isleType)) ;;@ (|| (= (t) (32i8: isleType)) -;;@ (= (t) (64i8: isleType))))), +;;@ (= (t) (64i8: isleType))))), ;;@ (switch (op) ;;@ ((0i64:bv) (true)) ;;@ ((1i64:bv) (switch (t) ;;@ ((8i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) +;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 15 0 (a))))) ;;@ ((32i32: isleType) (true)) ;;@ ((64i32: isleType) (true)))) ;;@ ((2i64:bv) (switch (t) ;;@ ((8i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) +;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 15 0 (a))))) ;;@ ((32i32: isleType) (true)) ;;@ ((64i32: isleType) (true)))) -;;@ ), +;;@ ) ;;@ )) (decl do_shift (ALUOp Type Reg Value) Reg) (extern extractor do_shift do_shift) diff --git a/cranelift/isle/veri/veri_engine/examples/shifts/ishl_to_do_shift_64.isle b/cranelift/isle/veri/veri_engine/examples/shifts/ishl_to_do_shift_64.isle index 4da0963fd569..ec6e192674ca 100644 --- a/cranelift/isle/veri/veri_engine/examples/shifts/ishl_to_do_shift_64.isle +++ b/cranelift/isle/veri/veri_engine/examples/shifts/ishl_to_do_shift_64.isle @@ -87,12 +87,12 @@ ;;@ ((0i64:bv) (true)) ;;@ ((1i64:bv) (switch (t) ;;@ ((8i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) +;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 15 0 (a))))) ;;@ ((32i32: isleType) (true)) ;;@ ((64i32: isleType) (true)))) ;;@ ((2i64:bv) (switch (t) ;;@ ((8i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) +;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 15 0 (a))))) ;;@ ((32i32: isleType) (true)) ;;@ ((64i32: isleType) (true)))) ;;@ ) diff --git a/cranelift/isle/veri/veri_engine/examples/shifts/ishl_to_do_shift_fits_in_32.isle b/cranelift/isle/veri/veri_engine/examples/shifts/ishl_to_do_shift_fits_in_32.isle index 2bb7ef73ea33..521527d6e0c7 100644 --- a/cranelift/isle/veri/veri_engine/examples/shifts/ishl_to_do_shift_fits_in_32.isle +++ b/cranelift/isle/veri/veri_engine/examples/shifts/ishl_to_do_shift_fits_in_32.isle @@ -74,13 +74,15 @@ ;;@ (ashr (conv_to (t) (a)) ;;@ (conv_to (t) (zero_ext (regwidth) ;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ )), +;;@ )) +;;@ ) +;;@ (assert ;;@ (|| (= (op) (0i64:bv)) (|| (= (op) (1i64:bv)) (= (op) (2i64:bv)))), ;;@ (= (t) (widthof (b))), ;;@ (|| (= (t) (8i8: isleType)) ;;@ (|| (= (t) (16i8: isleType)) ;;@ (|| (= (t) (32i8: isleType)) -;;@ (= (t) (64i8: isleType))))), +;;@ (= (t) (64i8: isleType))))), ;;@ (switch (op) ;;@ ((0i64:bv) (true)) ;;@ ((1i64:bv) (switch (t) @@ -93,7 +95,7 @@ ;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) ;;@ ((32i32: isleType) (true)) ;;@ ((64i32: isleType) (true)))) -;;@ ), +;;@ ) ;;@ )) (decl do_shift (ALUOp Type Reg Value) Reg) (extern constructor do_shift do_shift) diff --git a/cranelift/isle/veri/veri_engine/examples/shifts/sshr_to_do_shift_64.isle b/cranelift/isle/veri/veri_engine/examples/shifts/sshr_to_do_shift_64.isle index 94bca4b44bc7..5d6debd9e02d 100644 --- a/cranelift/isle/veri/veri_engine/examples/shifts/sshr_to_do_shift_64.isle +++ b/cranelift/isle/veri/veri_engine/examples/shifts/sshr_to_do_shift_64.isle @@ -74,26 +74,28 @@ ;;@ (ashr (conv_to (t) (a)) ;;@ (conv_to (t) (zero_ext (regwidth) ;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ )), +;;@ )) +;;@ ) +;;@ (assert ;;@ (|| (= (op) (0i64:bv)) (|| (= (op) (1i64:bv)) (= (op) (2i64:bv)))), ;;@ (= (t) (widthof (b))), ;;@ (|| (= (t) (8i8: isleType)) ;;@ (|| (= (t) (16i8: isleType)) ;;@ (|| (= (t) (32i8: isleType)) -;;@ (= (t) (64i8: isleType))))), +;;@ (= (t) (64i8: isleType))))), ;;@ (switch (op) ;;@ ((0i64:bv) (true)) ;;@ ((1i64:bv) (switch (t) ;;@ ((8i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) +;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 15 0 (a))))) ;;@ ((32i32: isleType) (true)) ;;@ ((64i32: isleType) (true)))) ;;@ ((2i64:bv) (switch (t) ;;@ ((8i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) +;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 15 0 (a))))) ;;@ ((32i32: isleType) (true)) ;;@ ((64i32: isleType) (true)))) -;;@ ), +;;@ ) ;;@ )) (decl do_shift (ALUOp Type Reg Value) Reg) (extern constructor do_shift do_shift) diff --git a/cranelift/isle/veri/veri_engine/examples/shifts/sshr_to_do_shift_fits_in_32.isle b/cranelift/isle/veri/veri_engine/examples/shifts/sshr_to_do_shift_fits_in_32.isle index 47119109e13a..41f2d7bc91df 100644 --- a/cranelift/isle/veri/veri_engine/examples/shifts/sshr_to_do_shift_fits_in_32.isle +++ b/cranelift/isle/veri/veri_engine/examples/shifts/sshr_to_do_shift_fits_in_32.isle @@ -74,26 +74,28 @@ ;;@ (ashr (conv_to (t) (a)) ;;@ (conv_to (t) (zero_ext (regwidth) ;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ )), +;;@ )) +;;@ ) +;;@ (assert ;;@ (|| (= (op) (0i64:bv)) (|| (= (op) (1i64:bv)) (= (op) (2i64:bv)))), ;;@ (= (t) (widthof (b))), ;;@ (|| (= (t) (8i8: isleType)) ;;@ (|| (= (t) (16i8: isleType)) ;;@ (|| (= (t) (32i8: isleType)) -;;@ (= (t) (64i8: isleType))))), +;;@ (= (t) (64i8: isleType))))), ;;@ (switch (op) ;;@ ((0i64:bv) (true)) ;;@ ((1i64:bv) (switch (t) ;;@ ((8i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) +;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 15 0 (a))))) ;;@ ((32i32: isleType) (true)) ;;@ ((64i32: isleType) (true)))) ;;@ ((2i64:bv) (switch (t) ;;@ ((8i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) +;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 15 0 (a))))) ;;@ ((32i32: isleType) (true)) ;;@ ((64i32: isleType) (true)))) -;;@ ), +;;@ ) ;;@ )) (decl do_shift (ALUOp Type Reg Value) Reg) (extern constructor do_shift do_shift) diff --git a/cranelift/isle/veri/veri_engine/examples/shifts/ushr_to_do_shift_64.isle b/cranelift/isle/veri/veri_engine/examples/shifts/ushr_to_do_shift_64.isle index dfe8b1e0eb73..485c3bdbd4b8 100644 --- a/cranelift/isle/veri/veri_engine/examples/shifts/ushr_to_do_shift_64.isle +++ b/cranelift/isle/veri/veri_engine/examples/shifts/ushr_to_do_shift_64.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) ;; Instruction formats. @@ -8,15 +8,15 @@ )) ;;@ (spec (sig (args) (ret)) -;;@ (assume (= (0i64:bv) (ret)))) +;;@ (assume (= (0i64:bv) (ret)))) ;;decl ALUOp.Lsl ;;@ (spec (sig (args) (ret)) -;;@ (assume (= (1i64:bv) (ret)))) +;;@ (assume (= (1i64:bv) (ret)))) ;;decl ALUOp.Lsr ;;@ (spec (sig (args) (ret)) -;;@ (assume (= (2i64:bv) (ret)))) +;;@ (assume (= (2i64:bv) (ret)))) ;;decl ALUOp.Asr ;; An ALU operation. This can be paired with several instruction formats @@ -74,35 +74,37 @@ ;;@ (ashr (conv_to (t) (a)) ;;@ (conv_to (t) (zero_ext (regwidth) ;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ )), +;;@ )) +;;@ ) +;;@ (assert ;;@ (|| (= (op) (0i64:bv)) (|| (= (op) (1i64:bv)) (= (op) (2i64:bv)))), ;;@ (= (t) (widthof (b))), ;;@ (|| (= (t) (8i8: isleType)) ;;@ (|| (= (t) (16i8: isleType)) ;;@ (|| (= (t) (32i8: isleType)) -;;@ (= (t) (64i8: isleType))))), +;;@ (= (t) (64i8: isleType))))), ;;@ (switch (op) ;;@ ((0i64:bv) (true)) ;;@ ((1i64:bv) (switch (t) ;;@ ((8i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) +;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 15 0 (a))))) ;;@ ((32i32: isleType) (true)) ;;@ ((64i32: isleType) (true)))) ;;@ ((2i64:bv) (switch (t) ;;@ ((8i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) +;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 15 0 (a))))) ;;@ ((32i32: isleType) (true)) ;;@ ((64i32: isleType) (true)))) -;;@ ), +;;@ ) ;;@ )) (decl do_shift (ALUOp Type Reg Value) Reg) (extern constructor do_shift do_shift) ;;@ (spec (sig (args x) (ret)) -;;@ (assume (= (zero_ext (64) (x)) (ret)))) +;;@ (assume (= (zero_ext (64) (x)) (ret)))) (decl put_in_reg_zext64 (Value) Reg) (extern constructor put_in_reg_zext64 put_in_reg_zext64) ;; Shift for i64. -(rule (lower (has_type $I64 (ushr x y))) +(rule ushr_64 (lower (has_type $I64 (ushr x y))) (do_shift (ALUOp.Lsr) $I64 (put_in_reg_zext64 x) y)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/shifts/ushr_to_do_shift_fits_in_32.isle b/cranelift/isle/veri/veri_engine/examples/shifts/ushr_to_do_shift_fits_in_32.isle index b1ca03099417..acb55d82e688 100644 --- a/cranelift/isle/veri/veri_engine/examples/shifts/ushr_to_do_shift_fits_in_32.isle +++ b/cranelift/isle/veri/veri_engine/examples/shifts/ushr_to_do_shift_fits_in_32.isle @@ -74,26 +74,28 @@ ;;@ (ashr (conv_to (t) (a)) ;;@ (conv_to (t) (zero_ext (regwidth) ;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ )), +;;@ )) +;;@ ) +;;@ (assert ;;@ (|| (= (op) (0i64:bv)) (|| (= (op) (1i64:bv)) (= (op) (2i64:bv)))), ;;@ (= (t) (widthof (b))), ;;@ (|| (= (t) (8i8: isleType)) ;;@ (|| (= (t) (16i8: isleType)) ;;@ (|| (= (t) (32i8: isleType)) -;;@ (= (t) (64i8: isleType))))), +;;@ (= (t) (64i8: isleType))))), ;;@ (switch (op) ;;@ ((0i64:bv) (true)) ;;@ ((1i64:bv) (switch (t) ;;@ ((8i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) +;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 15 0 (a))))) ;;@ ((32i32: isleType) (true)) ;;@ ((64i32: isleType) (true)))) ;;@ ((2i64:bv) (switch (t) ;;@ ((8i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) +;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 15 0 (a))))) ;;@ ((32i32: isleType) (true)) ;;@ ((64i32: isleType) (true)))) -;;@ ), +;;@ ) ;;@ )) (decl do_shift (ALUOp Type Reg Value) Reg) (extern constructor do_shift do_shift) diff --git a/cranelift/isle/veri/veri_engine/src/lib.rs b/cranelift/isle/veri/veri_engine/src/lib.rs index 481c8f931bc5..307df1e2376c 100644 --- a/cranelift/isle/veri/veri_engine/src/lib.rs +++ b/cranelift/isle/veri/veri_engine/src/lib.rs @@ -17,6 +17,7 @@ pub const FLAGS_WIDTH: usize = 4; pub struct Config { pub term: String, + pub names: Option>, pub dyn_width: bool, pub distinct_check: bool, diff --git a/cranelift/isle/veri/veri_engine/src/main.rs b/cranelift/isle/veri/veri_engine/src/main.rs index 69389a039b63..1fe5ef5b1a34 100644 --- a/cranelift/isle/veri/veri_engine/src/main.rs +++ b/cranelift/isle/veri/veri_engine/src/main.rs @@ -10,16 +10,24 @@ use veri_engine_lib::Config; #[clap(about, version, author)] struct Args { /// Sets the input file - #[clap(value_name = "INPUT")] - input: String, + #[clap(short, long)] + input: Option, /// Which LHS root to verify #[clap(short, long, default_value = "lower")] term: String, - /// Don't use the aarch64 and prelude ISLE files + /// Which named rule to verify + #[clap(long)] + names: Option>, + + /// Don't use the prelude ISLE files + #[clap(short, long, action=ArgAction::SetTrue)] + noprelude: bool, + + /// Include the aarch64 files #[clap(short, long, action=ArgAction::SetTrue)] - noaarch64: bool, + aarch64: bool, /// Don't check for distinct possible models #[clap(long, action=ArgAction::SetTrue)] @@ -38,7 +46,7 @@ fn main() { let args = Args::parse(); let mut inputs = vec![]; - if !args.noaarch64 { + if !args.noprelude { // TODO: clean up path logic inputs.push(cur_dir.join("../../../codegen/src").join("clif_lower.isle")); inputs.push(cur_dir.join("../../../codegen/src").join("prelude.isle")); @@ -47,15 +55,40 @@ fn main() { .join("../../../codegen/src") .join("prelude_lower.isle"), ); + } - // Disable for now to not have to consider all rules - // inputs.push(cur_dir.join("../../../codegen/src/isa/aarch64").join("inst.isle")); + if args.aarch64 { + inputs.push( + cur_dir + .join("../../../codegen/src/isa/aarch64") + .join("inst.isle"), + ); + inputs.push( + cur_dir + .join("../../../codegen/src/isa/aarch64") + .join("lower.isle"), + ); + } else { + if let Some(i) = args.input { + inputs.push(PathBuf::from(i)); + } else { + panic!("Missing input file in non-aarch64 mode"); + } } - inputs.push(PathBuf::from(args.input)); + let names = if let Some(names) = args.names { + let mut names = names; + names.sort(); + names.dedup(); + Some(names) + } else { + None + }; + let config = Config { dyn_width: args.dynwidths, term: args.term, + names: names, distinct_check: !args.nodistinct, custom_verification_condition: None, }; diff --git a/cranelift/isle/veri/veri_engine/src/solver.rs b/cranelift/isle/veri/veri_engine/src/solver.rs index fe3b2952fbc1..b1a3e372523a 100644 --- a/cranelift/isle/veri/veri_engine/src/solver.rs +++ b/cranelift/isle/veri/veri_engine/src/solver.rs @@ -1817,9 +1817,11 @@ pub fn run_solver( }; // Look at RHS assertions, which are checked, not trusted - let rhs_assertions: Vec = rule_sem.rhs_assertions.iter().map(|a| { - ctx.vir_expr_to_sexp(a.clone()) - }).collect(); + let rhs_assertions: Vec = rule_sem + .rhs_assertions + .iter() + .map(|a| ctx.vir_expr_to_sexp(a.clone())) + .collect(); let assumption_conjunction = ctx.smt.and_many(assumptions); let full_condition = if rhs_assertions.len() > 1 { @@ -1832,7 +1834,9 @@ pub fn run_solver( "Full verification condition:\n\t{}\n", ctx.smt.display(full_condition) ); - let query = ctx.smt.not(ctx.smt.imp(assumption_conjunction, full_condition)); + let query = ctx + .smt + .not(ctx.smt.imp(assumption_conjunction, full_condition)); println!("Running query"); ctx.smt.assert(query).unwrap(); diff --git a/cranelift/isle/veri/veri_engine/src/type_inference.rs b/cranelift/isle/veri/veri_engine/src/type_inference.rs index 3aea8054fe76..53eb0dd1b07d 100644 --- a/cranelift/isle/veri/veri_engine/src/type_inference.rs +++ b/cranelift/isle/veri/veri_engine/src/type_inference.rs @@ -10,7 +10,7 @@ use itertools::izip; use veri_annotation::parser_wrapper::AnnotationEnv; use veri_ir::{annotation_ir, ConcreteTest, Expr, TermSignature, Type, TypeContext}; -use crate::{FLAGS_WIDTH, REG_WIDTH}; +use crate::{Config, FLAGS_WIDTH, REG_WIDTH}; #[derive(Clone, Debug)] struct RuleParseTree<'a> { @@ -101,7 +101,7 @@ pub fn type_rules_with_term_and_types( termenv: &TermEnv, typeenv: &TypeEnv, annotation_env: &AnnotationEnv, - term: &String, + config: &Config, types: &TermSignature, concrete: &Option, ) -> HashMap { @@ -118,19 +118,24 @@ pub fn type_rules_with_term_and_types( rule.root_term, rule.args.clone(), ), - &term, + &config.term, termenv, typeenv, ) { continue; } + if let Some(names) = &config.names { + if rule.name.is_none() || !names.contains(rule.name.as_ref().unwrap()) { + continue; + } + } if let Some(s) = type_annotations_using_rule( rule, annotation_env, &decls, typeenv, termenv, - term, + &config.term, &types, concrete, ) { @@ -266,14 +271,24 @@ fn type_annotations_using_rule<'a>( println!("Typing rule:"); print!("\tLHS:"); - let lhs_expr = - add_rule_constraints(&mut parse_tree, lhs, annotation_env, &mut annotation_infos, false); + let lhs_expr = add_rule_constraints( + &mut parse_tree, + lhs, + annotation_env, + &mut annotation_infos, + false, + ); if lhs_expr.is_none() { return None; } print!("\n\tRHS:"); - let rhs_expr = - add_rule_constraints(&mut parse_tree, rhs, annotation_env, &mut annotation_infos, true); + let rhs_expr = add_rule_constraints( + &mut parse_tree, + rhs, + annotation_env, + &mut annotation_infos, + true, + ); if rhs_expr.is_none() { return None; } @@ -1495,7 +1510,7 @@ fn add_rule_constraints( .insert((curr.ident.clone(), curr.type_var)); let a = annotation_env.get_annotation_for_term(t); if a.is_none() { - println!("\nSKIPPING RULE with unannotated term: {}", t); + println!("\nSkipping rule with unannotated term: {}", t); return None; } let annotation = a.unwrap(); @@ -2081,6 +2096,8 @@ fn create_parse_tree_pattern( "I8" => 8, "true" => 1, "false" => 0, + // Not currently used, but parsed + "I128" => 16, _ => todo!("{:?}", &name), }; let name = format!("{}__{}", name, type_var); diff --git a/cranelift/isle/veri/veri_engine/src/verify.rs b/cranelift/isle/veri/veri_engine/src/verify.rs index 16b7029a6503..54734fb9f90b 100644 --- a/cranelift/isle/veri/veri_engine/src/verify.rs +++ b/cranelift/isle/veri/veri_engine/src/verify.rs @@ -37,7 +37,7 @@ pub fn verify_rules(inputs: Vec, config: &Config) { &termenv, &typeenv, &annotation_env, - &config.term, + &config, &type_instantiation, &None, ); @@ -74,11 +74,18 @@ pub fn verify_rules_for_term( termenv, typeenv, ) { - log::debug!("skipping rule that doesn't meet filter"); continue; } + if let Some(names) = &config.names { + if rule.name.is_none() || !names.contains(rule.name.as_ref().unwrap()) { + continue; + } else { + println!("VERIFYING rule with name: {}", rule.name.as_ref().unwrap()); + } + } let ctx = Context::new(typesols); if ctx.typesols.get(&rule.id).is_none() { + println!("ABORTING rule not found in the context"); continue; } let rule_sem = &ctx.typesols[&rule.id]; diff --git a/cranelift/isle/veri/veri_engine/tests/utils/mod.rs b/cranelift/isle/veri/veri_engine/tests/utils/mod.rs index 57b7227a13ad..c00eaa160a0e 100644 --- a/cranelift/isle/veri/veri_engine/tests/utils/mod.rs +++ b/cranelift/isle/veri/veri_engine/tests/utils/mod.rs @@ -11,12 +11,6 @@ use veri_engine_lib::widths::isle_inst_types; use veri_engine_lib::Config; use veri_ir::{ConcreteTest, Counterexample, TermSignature, VerificationResult}; -// TODO FB: once the opcode situation is resolved, return and: -// - add nice output -// - create a standard prelude and figure out if its more intuitive to send -// in rule strings or files -// - intermediate tests? - #[derive(Debug, EnumIter, PartialEq, Eq, PartialOrd, Ord, Copy, Clone)] pub enum Bitwidth { I8 = 8, @@ -162,7 +156,7 @@ fn test_rules_with_term(inputs: Vec, tr: TestResult, config: Config) -> &termenv, &typeenv, &annotation_env, - &config.term, + &config, type_instantiation, &None, ); @@ -195,6 +189,37 @@ pub fn test_from_file_with_lhs_termname(file: &str, termname: String, tr: TestRe term: termname, distinct_check: true, custom_verification_condition: None, + names: None, + }; + test_rules_with_term(inputs, tr, config); +} + +pub fn test_aarch64_rule_with_lhs_termname(rulename: &str, termname: &str, tr: TestResult) -> () { + println!("Verifying rule `{}` with termname {} ", rulename, termname); + // TODO: clean up path logic + let cur_dir = env::current_dir().expect("Can't access current working directory"); + let clif_isle = cur_dir.join("../../../codegen/src").join("clif_lower.isle"); + let prelude_isle = cur_dir.join("../../../codegen/src").join("prelude.isle"); + let prelude_lower_isle = cur_dir + .join("../../../codegen/src") + .join("prelude_lower.isle"); + let mut inputs = vec![prelude_isle, prelude_lower_isle, clif_isle]; + inputs.push( + cur_dir + .join("../../../codegen/src/isa/aarch64") + .join("inst.isle"), + ); + inputs.push( + cur_dir + .join("../../../codegen/src/isa/aarch64") + .join("lower.isle"), + ); + let config = Config { + dyn_width: false, + term: termname.to_string(), + distinct_check: true, + custom_verification_condition: None, + names: Some(vec![rulename.to_string()]), }; test_rules_with_term(inputs, tr, config); } @@ -243,6 +268,7 @@ pub fn test_concrete_input_from_file_with_lhs_termname( term: termname.clone(), distinct_check: false, custom_verification_condition: None, + names: None, }; // Get the types/widths for this particular term @@ -259,7 +285,7 @@ pub fn test_concrete_input_from_file_with_lhs_termname( &termenv, &typeenv, &annotation_env, - &termname, + &config, &t, &Some(concrete.clone()), ); @@ -287,6 +313,7 @@ pub fn test_from_file_with_lhs_termname_dynwidth( term: termname.clone(), distinct_check: false, custom_verification_condition: None, + names: None, }; test_rules_with_term(inputs, tr, config); } diff --git a/cranelift/isle/veri/veri_engine/tests/veri.rs b/cranelift/isle/veri/veri_engine/tests/veri.rs index f2786b9146a8..48a434950ad9 100644 --- a/cranelift/isle/veri/veri_engine/tests/veri.rs +++ b/cranelift/isle/veri/veri_engine/tests/veri.rs @@ -1,7 +1,8 @@ mod utils; use utils::{all_failure_result, all_success_result, custom_result, lte_64_success_result}; use utils::{ - run_and_retry, test_concrete_input_from_file_with_lhs_termname, test_from_file_with_config, + run_and_retry, test_aarch64_rule_with_lhs_termname, + test_concrete_input_from_file_with_lhs_termname, test_from_file_with_config, test_from_file_with_lhs_termname, test_from_file_with_lhs_termname_dynwidth, Bitwidth, }; use veri_engine_lib::Config; @@ -46,6 +47,13 @@ fn test_iadd_base() { }); } +#[test] +fn test_named_iadd_base() { + run_and_retry(|| { + test_aarch64_rule_with_lhs_termname("iadd_base_case", "iadd", lte_64_success_result()) + }); +} + #[test] fn test_iadd_imm12() { run_and_retry(|| { @@ -57,6 +65,13 @@ fn test_iadd_imm12() { }); } +#[test] +fn test_named_iadd_imm12_right() { + run_and_retry(|| { + test_aarch64_rule_with_lhs_termname("iadd_imm12_right", "iadd", lte_64_success_result()) + }); +} + #[test] fn test_iadd_imm12_2() { run_and_retry(|| { @@ -68,6 +83,13 @@ fn test_iadd_imm12_2() { }); } +#[test] +fn test_named_iadd_imm12_left() { + run_and_retry(|| { + test_aarch64_rule_with_lhs_termname("iadd_imm12_left", "iadd", lte_64_success_result()) + }); +} + #[test] fn test_iadd_imm12neg_not_distinct() { run_and_retry(|| { @@ -84,6 +106,38 @@ fn test_iadd_imm12neg_not_distinct() { }); } +#[test] +fn test_named_iadd_imm12_neg_left() { + run_and_retry(|| { + test_aarch64_rule_with_lhs_termname( + "iadd_imm12_neg_left", + "iadd", + vec![ + (Bitwidth::I8, VerificationResult::NoDistinctModels), + (Bitwidth::I16, VerificationResult::NoDistinctModels), + (Bitwidth::I32, VerificationResult::NoDistinctModels), + (Bitwidth::I64, VerificationResult::Success), + ], + ) + }); +} + +#[test] +fn test_named_iadd_imm12_neg_right() { + run_and_retry(|| { + test_aarch64_rule_with_lhs_termname( + "iadd_imm12_neg_right", + "iadd", + vec![ + (Bitwidth::I8, VerificationResult::NoDistinctModels), + (Bitwidth::I16, VerificationResult::NoDistinctModels), + (Bitwidth::I32, VerificationResult::NoDistinctModels), + (Bitwidth::I64, VerificationResult::Success), + ], + ) + }); +} + #[test] fn test_imm12_from_negated_value() { run_and_retry(|| { @@ -1289,6 +1343,7 @@ fn test_small_rotr_to_shifts() { lower_16_bits_eq, ) })), + names: None, }; test_from_file_with_config( "./examples/rotr/small_rotr_to_shifts.isle", @@ -1321,6 +1376,7 @@ fn test_small_rotr_to_shifts_broken() { lower_16_bits_eq, ) })), + names: None, }; test_from_file_with_config( "./examples/broken/broken_mask_small_rotr.isle", @@ -1356,6 +1412,7 @@ fn test_small_rotr_to_shifts_broken2() { lower_16_bits_eq, ) })), + names: None, }; test_from_file_with_config( "./examples/broken/broken_rule_or_small_rotr.isle", @@ -1391,6 +1448,7 @@ fn test_small_rotr_imm_to_shifts() { lower_16_bits_eq, ) })), + names: None, }; test_from_file_with_config( "./examples/rotr/small_rotr_imm_to_shifts.isle", @@ -1995,6 +2053,7 @@ fn test_do_shift_with_imm() { }; lower_8_bits_eq })), + names: None, }; test_from_file_with_config( "./examples/shifts/do_shift_with_imm.isle", @@ -2012,6 +2071,7 @@ fn test_do_shift_with_imm() { }; lower_16_bits_eq })), + names: None, }; test_from_file_with_config( "./examples/shifts/do_shift_with_imm.isle", @@ -2029,6 +2089,7 @@ fn test_do_shift_with_imm() { }; lower_32_bits_eq })), + names: None, }; test_from_file_with_config( "./examples/shifts/do_shift_with_imm.isle", @@ -2065,6 +2126,7 @@ fn test_do_shift_fits_in_16() { lower_16_bits_eq, ) })), + names: None, }; test_from_file_with_config( "./examples/shifts/do_shift_fits_in_16.isle", @@ -2149,6 +2211,7 @@ fn test_do_shift_32() { }; lower_32_bits_eq })), + names: None, }; test_from_file_with_config( "./examples/shifts/do_shift_32.isle", @@ -2502,6 +2565,7 @@ fn test_lower_icmp_const_32_64_sgte() { term: "lower_icmp_const".to_string(), distinct_check: false, custom_verification_condition: None, + names: None, }; test_from_file_with_config( "./examples/icmp/lower_icmp_const_32_64_sgte.isle", @@ -2533,6 +2597,7 @@ fn test_lower_icmp_const_32_64_ugte() { term: "lower_icmp_const".to_string(), distinct_check: false, custom_verification_condition: None, + names: None, }; test_from_file_with_config( "./examples/icmp/lower_icmp_const_32_64_ugte.isle", From 07bb0fcba205a6ebe0d0bd8812d05aec84f07fac Mon Sep 17 00:00:00 2001 From: Alexa VanHattum Date: Mon, 10 Apr 2023 20:02:11 -0400 Subject: [PATCH 03/30] more iadd --- .../veri_engine/examples/iadd/imm12neg2_new.isle | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg2_new.isle b/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg2_new.isle index 46eeda21564d..84523b5e4577 100644 --- a/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg2_new.isle +++ b/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg2_new.isle @@ -15,10 +15,17 @@ (Sub) )) -;; Note that 4094 = 0xffe and 16773119 = 0xffefff -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (= (ret) (- (x) (zero_ext (regwidth) (y)))) -;;@ )) +;;@ (spec (sig (args ty, a, b) (r)) +;;@ (assume +;;@ (= (r) +;;@ (if (<= (ty) (32i8: isleType)) +;;@ (conv_to (regwidth) (- (extract 31 0 (a)) (zero_ext (32) (b)))) +;;@ (- (a) (zero_ext (regwidth) (b)))))) +;;@ (assert (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) +;;@ (= (extract 2 0 (y)) (0i3:bv)) +;;@ ))) +;;@ ) (decl sub_imm (Type Reg Imm12) Reg) (rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) From 2de1f4978a5e877f102075d7753c444da22dc274 Mon Sep 17 00:00:00 2001 From: Alexa VanHattum Date: Mon, 10 Apr 2023 20:22:38 -0400 Subject: [PATCH 04/30] kill moved files --- cranelift/codegen/src/isa/aarch64/inst.isle | 10 +-- .../veri_engine/examples/iadd/base_case.isle | 29 --------- .../veri/veri_engine/examples/iadd/imm12.isle | 45 ------------- .../veri_engine/examples/iadd/imm12_2.isle | 46 ------------- .../veri/veri_engine/src/type_inference.rs | 4 +- cranelift/isle/veri/veri_engine/src/verify.rs | 2 +- .../isle/veri/veri_engine/tests/utils/mod.rs | 64 +++++++++++++++++++ cranelift/isle/veri/veri_engine/tests/veri.rs | 62 ++---------------- 8 files changed, 79 insertions(+), 183 deletions(-) delete mode 100644 cranelift/isle/veri/veri_engine/examples/iadd/base_case.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/iadd/imm12.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/iadd/imm12_2.isle diff --git a/cranelift/codegen/src/isa/aarch64/inst.isle b/cranelift/codegen/src/isa/aarch64/inst.isle index 37aa307df77d..142688294b49 100644 --- a/cranelift/codegen/src/isa/aarch64/inst.isle +++ b/cranelift/codegen/src/isa/aarch64/inst.isle @@ -3529,20 +3529,20 @@ (let ((cc Cond (cond_code cond))) (flags_and_cc_to_bool (lower_icmp cond rn rm in_ty)))) -(rule 1 (lower_icmp cond rn rm (fits_in_16 ty)) +(rule lower_icmp_8_16_signed 1 (lower_icmp cond rn rm (fits_in_16 ty)) (if (signed_cond_code cond)) (let ((rn Reg (put_in_reg_sext32 rn))) (flags_and_cc (cmp_extend (operand_size ty) rn rm (lower_extend_op ty $true)) cond))) -(rule -1 (lower_icmp cond rn (imm12_from_value rm) (fits_in_16 ty)) +(rule lower_icmp_8_16_unsigned_imm -1 (lower_icmp cond rn (imm12_from_value rm) (fits_in_16 ty)) (let ((rn Reg (put_in_reg_zext32 rn))) (flags_and_cc (cmp_imm (operand_size ty) rn rm) cond))) -(rule -2 (lower_icmp cond rn rm (fits_in_16 ty)) +(rule lower_icmp_8_16_unsigned -2 (lower_icmp cond rn rm (fits_in_16 ty)) (let ((rn Reg (put_in_reg_zext32 rn))) (flags_and_cc (cmp_extend (operand_size ty) rn rm (lower_extend_op ty $false)) cond))) -(rule -3 (lower_icmp cond rn (u64_from_iconst c) ty) +(rule lower_icmp_32_64_const -3 (lower_icmp cond rn (u64_from_iconst c) ty) (if (ty_int_ref_scalar_64 ty)) (lower_icmp_const cond rn c ty)) -(rule -4 (lower_icmp cond rn rm ty) +(rule lower_icmp_32_64 -4 (lower_icmp cond rn rm ty) (if (ty_int_ref_scalar_64 ty)) (flags_and_cc (cmp (operand_size ty) rn rm) cond)) diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/base_case.isle b/cranelift/isle/veri/veri_engine/examples/iadd/base_case.isle deleted file mode 100644 index f162d2314334..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/iadd/base_case.isle +++ /dev/null @@ -1,29 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -;; Instruction formats. -(type MInst - (enum - ;; An ALU operation with two register sources and a register destination. - (AluRRR - (alu_op ALUOp) -))) - -;; An ALU operation. This can be paired with several instruction formats -;; below (see `Inst`) in any combination. -(type ALUOp - (enum - (Add) -)) - -(decl alu_rrr (ALUOp Type Reg Reg) Reg) -(extern constructor alu_rrr alu_rrr) - -;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assume (= (+ (a) (b)) (r)))) -(decl add (Type Reg Reg) Reg) -(rule (add ty x y) (alu_rrr (ALUOp.Add) ty x y)) - -(rule (lower (has_type (fits_in_64 ty) (iadd x y))) - (add ty x y)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/imm12.isle b/cranelift/isle/veri/veri_engine/examples/iadd/imm12.isle deleted file mode 100644 index 1721c1293ab0..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/iadd/imm12.isle +++ /dev/null @@ -1,45 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst - (enum -)) - -;; We will represent this with a msb shift bit -;; and a 12 bit value -(type Imm12 (primitive Imm12)) - -(type ALUOp - (enum - (Add) -)) - -;; Note that 4094 = 0xffe and 16773119 = 0xffefff -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) -;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) -;;@ (= (extract 2 0 (y)) (0i3:bv)) -;;@ )), -;;@ (= (ret) (+ (x) (zero_ext (regwidth) (y)))) -;;@ )) -(decl add_imm (Type Reg Imm12) Reg) -(rule (add_imm ty x y) (alu_rr_imm12 (ALUOp.Add) ty x y)) - -(decl alu_rr_imm12 (ALUOp Type Reg Imm12) Reg) -(extern constructor alu_rr_imm12 alu_rr_imm12) - -;; Note that 4095 = 0xfff and 16773120 = 0xfff000 -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (|| (< (zero_ext (regwidth) (ret)) (4095i64:bv)) -;;@ (&& (< (zero_ext (regwidth) (ret)) (16773120i64:bv)) -;;@ (= (extract 2 0 (zero_ext (regwidth) (ret))) (0i3:bv)) -;;@ )), -;;@ (= (ret) (conv_to (widthof (ret)) (zero_ext (regwidth) (arg)))), -;;@ (= (arg) (conv_to (widthof (arg)) (zero_ext (regwidth) (ret)))) -;;@ )) -(decl imm12_from_value (Imm12) Value) -(extern extractor imm12_from_value imm12_from_value) - -(rule (lower (has_type (fits_in_64 ty) (iadd x (imm12_from_value y)))) - (add_imm ty x y)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/imm12_2.isle b/cranelift/isle/veri/veri_engine/examples/iadd/imm12_2.isle deleted file mode 100644 index 6638a304e154..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/iadd/imm12_2.isle +++ /dev/null @@ -1,46 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst - (enum -)) - -;; We will represent this with a msb shift bit -;; and a 12 bit value -(type Imm12 (primitive Imm12)) - -(type ALUOp - (enum - (Add) -)) - -;; Note that 4094 = 0xffe and 16773119 = 0xffefff -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) -;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) -;;@ (= (extract 2 0 (y)) (0i3:bv)) -;;@ )), -;;@ (= (ret) (+ (x) (zero_ext (regwidth) (y)))), -;;@ )) -(decl add_imm (Type Reg Imm12) Reg) -(rule (add_imm ty x y) (alu_rr_imm12 (ALUOp.Add) ty x y)) - -(decl alu_rr_imm12 (ALUOp Type Reg Imm12) Reg) -(extern constructor alu_rr_imm12 alu_rr_imm12) - -;; Note that 4095 = 0xfff and 16773120 = 0xfff000 -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (|| (< (zero_ext (regwidth) (ret)) (4095i64:bv)) -;;@ (&& (< (zero_ext (regwidth) (ret)) (16773120i64:bv)) -;;@ (= (extract 2 0 (zero_ext (regwidth) (ret))) (0i3:bv)) -;;@ )), -;;@ (= (ret) (conv_to (widthof (ret)) (zero_ext (regwidth) (arg)))), -;;@ (= (arg) (conv_to (widthof (arg)) (zero_ext (regwidth) (ret)))) -;;@ )) -(decl imm12_from_value (Imm12) Value) -(extern extractor imm12_from_value imm12_from_value) - -(rule (lower (has_type (fits_in_64 ty) (iadd (imm12_from_value x) y))) - (add_imm ty y x)) - diff --git a/cranelift/isle/veri/veri_engine/src/type_inference.rs b/cranelift/isle/veri/veri_engine/src/type_inference.rs index 53eb0dd1b07d..d8ef342a51a2 100644 --- a/cranelift/isle/veri/veri_engine/src/type_inference.rs +++ b/cranelift/isle/veri/veri_engine/src/type_inference.rs @@ -127,8 +127,8 @@ pub fn type_rules_with_term_and_types( if let Some(names) = &config.names { if rule.name.is_none() || !names.contains(rule.name.as_ref().unwrap()) { continue; - } - } + } + } if let Some(s) = type_annotations_using_rule( rule, annotation_env, diff --git a/cranelift/isle/veri/veri_engine/src/verify.rs b/cranelift/isle/veri/veri_engine/src/verify.rs index 54734fb9f90b..a5c807b113b9 100644 --- a/cranelift/isle/veri/veri_engine/src/verify.rs +++ b/cranelift/isle/veri/veri_engine/src/verify.rs @@ -82,7 +82,7 @@ pub fn verify_rules_for_term( } else { println!("VERIFYING rule with name: {}", rule.name.as_ref().unwrap()); } - } + } let ctx = Context::new(typesols); if ctx.typesols.get(&rule.id).is_none() { println!("ABORTING rule not found in the context"); diff --git a/cranelift/isle/veri/veri_engine/tests/utils/mod.rs b/cranelift/isle/veri/veri_engine/tests/utils/mod.rs index c00eaa160a0e..26daeda5c563 100644 --- a/cranelift/isle/veri/veri_engine/tests/utils/mod.rs +++ b/cranelift/isle/veri/veri_engine/tests/utils/mod.rs @@ -238,6 +238,70 @@ pub fn test_from_file_with_config(file: &str, config: Config, tr: TestResult) -> test_rules_with_term(inputs, tr, config); } +pub fn test_concrete_aarch64_rule_with_lhs_termname( + rulename: &str, + termname: &str, + dynwidth: bool, + concrete: ConcreteTest, +) -> () { + println!( + "Verifying concrete input rule `{}` with termname {} ", + rulename, termname + ); + // TODO: clean up path logic + let cur_dir = env::current_dir().expect("Can't access current working directory"); + let clif_isle = cur_dir.join("../../../codegen/src").join("clif_lower.isle"); + let prelude_isle = cur_dir.join("../../../codegen/src").join("prelude.isle"); + let prelude_lower_isle = cur_dir + .join("../../../codegen/src") + .join("prelude_lower.isle"); + let mut inputs = vec![prelude_isle, prelude_lower_isle, clif_isle]; + inputs.push( + cur_dir + .join("../../../codegen/src/isa/aarch64") + .join("inst.isle"), + ); + inputs.push( + cur_dir + .join("../../../codegen/src/isa/aarch64") + .join("lower.isle"), + ); + + let lexer = cranelift_isle::lexer::Lexer::from_files(&inputs).unwrap(); + let defs = cranelift_isle::parser::parse(lexer).expect("should parse"); + let (typeenv, termenv) = create_envs(&defs).unwrap(); + let annotation_env = parse_annotations(&inputs); + + let config = Config { + dyn_width: dynwidth, + term: termname.to_string(), + distinct_check: false, + custom_verification_condition: None, + names: Some(vec![rulename.to_string()]), + }; + + // Get the types/widths for this particular term + let args = concrete.args.iter().map(|i| i.ty.clone()).collect(); + let ret = concrete.output.ty; + let t = TermSignature { + args, + ret, + canonical_type: None, + }; + + let type_sols = type_rules_with_term_and_types( + defs.clone(), + &termenv, + &typeenv, + &annotation_env, + &config, + &t, + &Some(concrete.clone()), + ); + let result = verify_rules_for_term(&termenv, &typeenv, &type_sols, t, &Some(concrete), &config); + assert_eq!(result, VerificationResult::Success); +} + pub fn test_concrete_input_from_file_with_lhs_termname( file: &str, termname: String, diff --git a/cranelift/isle/veri/veri_engine/tests/veri.rs b/cranelift/isle/veri/veri_engine/tests/veri.rs index 48a434950ad9..cce33fafd6a5 100644 --- a/cranelift/isle/veri/veri_engine/tests/veri.rs +++ b/cranelift/isle/veri/veri_engine/tests/veri.rs @@ -2,18 +2,19 @@ mod utils; use utils::{all_failure_result, all_success_result, custom_result, lte_64_success_result}; use utils::{ run_and_retry, test_aarch64_rule_with_lhs_termname, - test_concrete_input_from_file_with_lhs_termname, test_from_file_with_config, - test_from_file_with_lhs_termname, test_from_file_with_lhs_termname_dynwidth, Bitwidth, + test_concrete_aarch64_rule_with_lhs_termname, test_concrete_input_from_file_with_lhs_termname, + test_from_file_with_config, test_from_file_with_lhs_termname, + test_from_file_with_lhs_termname_dynwidth, Bitwidth, }; use veri_engine_lib::Config; use veri_ir::{ConcreteInput, ConcreteTest, Counterexample, VerificationResult}; #[test] -fn test_iadd_base_concrete() { +fn test_named_iadd_base_concrete() { run_and_retry(|| { - test_concrete_input_from_file_with_lhs_termname( - "./examples/iadd/base_case.isle", - "iadd".to_string(), + test_concrete_aarch64_rule_with_lhs_termname( + "iadd_base_case", + "iadd", false, ConcreteTest { termname: "iadd".to_string(), @@ -36,17 +37,6 @@ fn test_iadd_base_concrete() { }); } -#[test] -fn test_iadd_base() { - run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/iadd/base_case.isle", - "iadd".to_string(), - lte_64_success_result(), - ) - }); -} - #[test] fn test_named_iadd_base() { run_and_retry(|| { @@ -54,17 +44,6 @@ fn test_named_iadd_base() { }); } -#[test] -fn test_iadd_imm12() { - run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/iadd/imm12.isle", - "iadd".to_string(), - lte_64_success_result(), - ) - }); -} - #[test] fn test_named_iadd_imm12_right() { run_and_retry(|| { @@ -72,17 +51,6 @@ fn test_named_iadd_imm12_right() { }); } -#[test] -fn test_iadd_imm12_2() { - run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/iadd/imm12_2.isle", - "iadd".to_string(), - lte_64_success_result(), - ) - }); -} - #[test] fn test_named_iadd_imm12_left() { run_and_retry(|| { @@ -90,22 +58,6 @@ fn test_named_iadd_imm12_left() { }); } -#[test] -fn test_iadd_imm12neg_not_distinct() { - run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/iadd/imm12neg.isle", - "iadd".to_string(), - vec![ - (Bitwidth::I8, VerificationResult::NoDistinctModels), - (Bitwidth::I16, VerificationResult::NoDistinctModels), - (Bitwidth::I32, VerificationResult::NoDistinctModels), - (Bitwidth::I64, VerificationResult::Success), - ], - ) - }); -} - #[test] fn test_named_iadd_imm12_neg_left() { run_and_retry(|| { From d35d5d47ddba04a3244a3f741e31ded7274172ae Mon Sep 17 00:00:00 2001 From: Alexa VanHattum Date: Mon, 10 Apr 2023 20:25:02 -0400 Subject: [PATCH 05/30] more test movement --- cranelift/isle/veri/veri_engine/tests/veri.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cranelift/isle/veri/veri_engine/tests/veri.rs b/cranelift/isle/veri/veri_engine/tests/veri.rs index cce33fafd6a5..ecca53d5efbc 100644 --- a/cranelift/isle/veri/veri_engine/tests/veri.rs +++ b/cranelift/isle/veri/veri_engine/tests/veri.rs @@ -90,6 +90,7 @@ fn test_named_iadd_imm12_neg_right() { }); } +// Need a file test because this is a change on top of our latest rebase #[test] fn test_imm12_from_negated_value() { run_and_retry(|| { @@ -101,6 +102,7 @@ fn test_imm12_from_negated_value() { }); } +// Need a file test because this is a change on top of our latest rebase #[test] fn test_iadd_imm12neg_new() { run_and_retry(|| { @@ -112,6 +114,7 @@ fn test_iadd_imm12neg_new() { }); } +// Need a file test because this is a change on top of our latest rebase #[test] fn test_iadd_imm12neg2_new() { run_and_retry(|| { From 7611976c1c20fc66eb575e4e68b7fcc7c5cd6e7b Mon Sep 17 00:00:00 2001 From: Alexa VanHattum Date: Mon, 10 Apr 2023 20:53:25 -0400 Subject: [PATCH 06/30] broken_do_shift --- cranelift/codegen/src/isa/aarch64/inst.isle | 43 +++++++++ cranelift/codegen/src/isa/aarch64/lower.isle | 4 +- .../broken/iadd/broken_add_extend.isle | 6 +- .../broken/shifts/broken_do_shift_32.isle | 3 +- .../veri_engine/examples/iadd/add_extend.isle | 87 ------------------- .../examples/iadd/add_extend_2.isle | 87 ------------------- .../iadd/imm12_from_negated_value.isle | 37 -------- cranelift/isle/veri/veri_engine/tests/veri.rs | 66 +++++++------- 8 files changed, 83 insertions(+), 250 deletions(-) delete mode 100644 cranelift/isle/veri/veri_engine/examples/iadd/add_extend.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/iadd/add_extend_2.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/iadd/imm12_from_negated_value.isle diff --git a/cranelift/codegen/src/isa/aarch64/inst.isle b/cranelift/codegen/src/isa/aarch64/inst.isle index 142688294b49..418fe7b18e09 100644 --- a/cranelift/codegen/src/isa/aarch64/inst.isle +++ b/cranelift/codegen/src/isa/aarch64/inst.isle @@ -1730,6 +1730,21 @@ ;; Helper type to represent a value and an extend operation fused together. (type ExtendedValue extern (enum)) + +;; Only including the i8 to i32 opcodes, based on the impl of extended_value_from_value +;;@ (spec (sig (args x) (ret)) +;;@ (assume +;;@ (switch (extract 66 64 (x)) +;;@ ((0i3:bv) (= (extract 63 0 (x)) (zero_ext (64) (extract 7 0 (zero_ext (64) (ret)))))) +;;@ ((1i3:bv) (= (extract 63 0 (x)) (zero_ext (64) (extract 15 0 (zero_ext (64) (ret)))))) +;;@ ((2i3:bv) (= (extract 63 0 (x)) (zero_ext (64) (extract 31 0 (zero_ext (64) (ret)))))) +;;@ ((4i3:bv) (= (extract 63 0 (x)) (sign_ext (64) (extract 7 0 (zero_ext (64) (ret)))))) +;;@ ((5i3:bv) (= (extract 63 0 (x)) (sign_ext (64) (extract 15 0 (zero_ext (64) (ret)))))) +;;@ ((6i3:bv) (= (extract 63 0 (x)) (sign_ext (64) (extract 31 0 (zero_ext (64) (ret)))))) +;;@ ), +;;@ (= (ret) (conv_to (widthof (ret)) (x))), +;;@ (|| (= (8i32:isleType) (widthof (ret))) (|| (= (16i32:isleType) (widthof (ret))) (= (32i32:isleType) (widthof (ret))))) +;;@ )) (decl extended_value_from_value (ExtendedValue) Value) (extern extractor extended_value_from_value extended_value_from_value) @@ -2324,6 +2339,34 @@ (decl add_imm (Type Reg Imm12) Reg) (rule (add_imm ty x y) (alu_rr_imm12 (ALUOp.Add) ty x y)) +;;@ (spec (sig (args ty, x, y) (ret)) +;;@ (assume +;;@ (= (ret) +;;@ (if (<= (ty) (32i32:isleType)) +;;@ (conv_to (regwidth) (+ (extract 31 0 (x)) +;;@ (switch (extract 66 64 (y)) +;;@ ((0i3:bv) (zero_ext (32) (extract 7 0 (y)))) +;;@ ((1i3:bv) (zero_ext (32) (extract 15 0 (y)))) +;;@ ((2i3:bv) (zero_ext (32) (extract 31 0 (y)))) +;;@ ((3i3:bv) (zero_ext (32) (extract 31 0 (y)))) +;;@ ((4i3:bv) (sign_ext (32) (extract 7 0 (y)))) +;;@ ((5i3:bv) (sign_ext (32) (extract 15 0 (y)))) +;;@ ((6i3:bv) (sign_ext (32) (extract 31 0 (y)))) +;;@ ((7i3:bv) (sign_ext (32) (extract 31 0 (y)))) +;;@ ))) +;;@ (+ (x) +;;@ (switch (extract 66 64 (y)) +;;@ ((0i3:bv) (zero_ext (regwidth) (extract 7 0 (y)))) +;;@ ((1i3:bv) (zero_ext (regwidth) (extract 15 0 (y)))) +;;@ ((2i3:bv) (zero_ext (regwidth) (extract 31 0 (y)))) +;;@ ((3i3:bv) (zero_ext (regwidth) (extract 63 0 (y)))) +;;@ ((4i3:bv) (sign_ext (regwidth) (extract 7 0 (y)))) +;;@ ((5i3:bv) (sign_ext (regwidth) (extract 15 0 (y)))) +;;@ ((6i3:bv) (sign_ext (regwidth) (extract 31 0 (y)))) +;;@ ((7i3:bv) (sign_ext (regwidth) (extract 63 0 (y)))) +;;@ )) +;;@ )), +;;@ )) (decl add_extend (Type Reg ExtendedValue) Reg) (rule (add_extend ty x y) (alu_rr_extend_reg (ALUOp.Add) ty x y)) diff --git a/cranelift/codegen/src/isa/aarch64/lower.isle b/cranelift/codegen/src/isa/aarch64/lower.isle index 263ea0b92c08..4d35adeed840 100644 --- a/cranelift/codegen/src/isa/aarch64/lower.isle +++ b/cranelift/codegen/src/isa/aarch64/lower.isle @@ -66,10 +66,10 @@ ;; Special cases for when we're adding an extended register where the extending ;; operation can get folded into the add itself. -(rule 0 (lower (has_type (fits_in_64 ty) (iadd x (extended_value_from_value y)))) +(rule iadd_extend_right 0 (lower (has_type (fits_in_64 ty) (iadd x (extended_value_from_value y)))) (add_extend ty x y)) -(rule 1 (lower (has_type (fits_in_64 ty) (iadd (extended_value_from_value x) y))) +(rule iadd_extend_left 1 (lower (has_type (fits_in_64 ty) (iadd (extended_value_from_value x) y))) (add_extend ty y x)) ;; Special cases for when we're adding the shift of a different diff --git a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_add_extend.isle b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_add_extend.isle index 9641e5a72386..86d7a8aa5337 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_add_extend.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_add_extend.isle @@ -1,5 +1,5 @@ ;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) +;;@ (assume (= (arg) (ret)))) (decl lower (Inst) InstOutput) (type MInst @@ -37,7 +37,7 @@ ;; Only including the i8 to i32 opcodes, based on the impl of extended_value_from_value ;;@ (spec (sig (args x) (ret)) -;;@ (assertions +;;@ (assume ;;@ (switch (extract 66 64 (x)) ;;@ ((0i3:bv) (= (extract 63 0 (x)) (zero_ext (64) (extract 7 0 (zero_ext (64) (ret)))))) ;;@ ((1i3:bv) (= (extract 63 0 (x)) (zero_ext (64) (extract 15 0 (zero_ext (64) (ret)))))) @@ -54,7 +54,7 @@ ;; BROKEN: all sign_extend with no zero_extend ;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions +;;@ (assume ;;@ (= (ret) ;;@ (if (<= (ty) (32i32:isleType)) ;;@ (conv_to (regwidth) (+ (extract 31 0 (x)) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_do_shift_32.isle b/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_do_shift_32.isle index c836d8419dcd..875c222ca300 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_do_shift_32.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_do_shift_32.isle @@ -71,7 +71,8 @@ ;;@ (ashr (conv_to (t) (a)) ;;@ (conv_to (t) (zero_ext (regwidth) ;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ )) +;;@ )), +;;@ (= (t) (widthof (b))), ;;@ )) (decl do_shift (ALUOp Type Reg Value) Reg) diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/add_extend.isle b/cranelift/isle/veri/veri_engine/examples/iadd/add_extend.isle deleted file mode 100644 index e49115ffed12..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/iadd/add_extend.isle +++ /dev/null @@ -1,87 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst - (enum -)) - -(type ALUOp - (enum - (Add) -)) - -;; Helper type to represent a value and an extend operation fused together. -(type ExtendedValue extern (enum)) - -;; We represent ExtendedValue as a bv -;; where the three most significant bits -;; encode an extend op as follows: -;; UXTB = 0b000, -;; UXTH = 0b001, -;; UXTW = 0b010, -;; UXTX = 0b011, -;; SXTB = 0b100, -;; SXTH = 0b101, -;; SXTW = 0b110, -;; SXTX = 0b111, -;; and the remaining bits encode the value. - -(decl alu_rr_extend_reg (ALUOp Type Reg ExtendedValue) Reg) -(extern constructor alu_rr_extend_reg alu_rr_extend_reg) - -;; (rule (alu_rr_extend_reg op ty src1 extended_reg) -;; (let ((src2 Reg (put_extended_in_reg extended_reg)) -;; (extend ExtendOp (get_extended_op extended_reg))) -;; (alu_rrr_extend op ty src1 src2 extend))) - -;; Only including the i8 to i32 opcodes, based on the impl of extended_value_from_value -;;@ (spec (sig (args x) (ret)) -;;@ (assertions -;;@ (switch (extract 66 64 (x)) -;;@ ((0i3:bv) (= (extract 63 0 (x)) (zero_ext (64) (extract 7 0 (zero_ext (64) (ret)))))) -;;@ ((1i3:bv) (= (extract 63 0 (x)) (zero_ext (64) (extract 15 0 (zero_ext (64) (ret)))))) -;;@ ((2i3:bv) (= (extract 63 0 (x)) (zero_ext (64) (extract 31 0 (zero_ext (64) (ret)))))) -;;@ ((4i3:bv) (= (extract 63 0 (x)) (sign_ext (64) (extract 7 0 (zero_ext (64) (ret)))))) -;;@ ((5i3:bv) (= (extract 63 0 (x)) (sign_ext (64) (extract 15 0 (zero_ext (64) (ret)))))) -;;@ ((6i3:bv) (= (extract 63 0 (x)) (sign_ext (64) (extract 31 0 (zero_ext (64) (ret)))))) -;;@ ), -;;@ (= (ret) (conv_to (widthof (ret)) (x))), -;;@ (|| (= (8i32:isleType) (widthof (ret))) (|| (= (16i32:isleType) (widthof (ret))) (= (32i32:isleType) (widthof (ret))))) -;;@ )) -(decl extended_value_from_value (ExtendedValue) Value) -(extern extractor extended_value_from_value extended_value_from_value) - -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions -;;@ (= (ret) -;;@ (if (<= (ty) (32i32:isleType)) -;;@ (conv_to (regwidth) (+ (extract 31 0 (x)) -;;@ (switch (extract 66 64 (y)) -;;@ ((0i3:bv) (zero_ext (32) (extract 7 0 (y)))) -;;@ ((1i3:bv) (zero_ext (32) (extract 15 0 (y)))) -;;@ ((2i3:bv) (zero_ext (32) (extract 31 0 (y)))) -;;@ ((3i3:bv) (zero_ext (32) (extract 31 0 (y)))) -;;@ ((4i3:bv) (sign_ext (32) (extract 7 0 (y)))) -;;@ ((5i3:bv) (sign_ext (32) (extract 15 0 (y)))) -;;@ ((6i3:bv) (sign_ext (32) (extract 31 0 (y)))) -;;@ ((7i3:bv) (sign_ext (32) (extract 31 0 (y)))) -;;@ ))) -;;@ (+ (x) -;;@ (switch (extract 66 64 (y)) -;;@ ((0i3:bv) (zero_ext (regwidth) (extract 7 0 (y)))) -;;@ ((1i3:bv) (zero_ext (regwidth) (extract 15 0 (y)))) -;;@ ((2i3:bv) (zero_ext (regwidth) (extract 31 0 (y)))) -;;@ ((3i3:bv) (zero_ext (regwidth) (extract 63 0 (y)))) -;;@ ((4i3:bv) (sign_ext (regwidth) (extract 7 0 (y)))) -;;@ ((5i3:bv) (sign_ext (regwidth) (extract 15 0 (y)))) -;;@ ((6i3:bv) (sign_ext (regwidth) (extract 31 0 (y)))) -;;@ ((7i3:bv) (sign_ext (regwidth) (extract 63 0 (y)))) -;;@ )) -;;@ )), -;;@ )) -(decl add_extend (Type Reg ExtendedValue) Reg) -(rule (add_extend ty x y) (alu_rr_extend_reg (ALUOp.Add) ty x y)) - -(rule 0 (lower (has_type (fits_in_64 ty) (iadd x (extended_value_from_value y)))) - (add_extend ty x y)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/add_extend_2.isle b/cranelift/isle/veri/veri_engine/examples/iadd/add_extend_2.isle deleted file mode 100644 index a5cd79eb79ae..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/iadd/add_extend_2.isle +++ /dev/null @@ -1,87 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assertions (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst - (enum -)) - -(type ALUOp - (enum - (Add) -)) - -;; Helper type to represent a value and an extend operation fused together. -(type ExtendedValue extern (enum)) - -;; We represent ExtendedValue as a bv -;; where the three most significant bits -;; encode an extend op as follows: -;; UXTB = 0b000, -;; UXTH = 0b001, -;; UXTW = 0b010, -;; UXTX = 0b011, -;; SXTB = 0b100, -;; SXTH = 0b101, -;; SXTW = 0b110, -;; SXTX = 0b111, -;; and the remaining bits encode the value. - -(decl alu_rr_extend_reg (ALUOp Type Reg ExtendedValue) Reg) -(extern constructor alu_rr_extend_reg alu_rr_extend_reg) - -;; (rule (alu_rr_extend_reg op ty src1 extended_reg) -;; (let ((src2 Reg (put_extended_in_reg extended_reg)) -;; (extend ExtendOp (get_extended_op extended_reg))) -;; (alu_rrr_extend op ty src1 src2 extend))) - -;; Only including the i8 to i32 opcodes, based on the impl of extended_value_from_value -;;@ (spec (sig (args x) (ret)) -;;@ (assertions -;;@ (switch (extract 66 64 (x)) -;;@ ((0i3:bv) (= (extract 63 0 (x)) (zero_ext (64) (extract 7 0 (zero_ext (64) (ret)))))) -;;@ ((1i3:bv) (= (extract 63 0 (x)) (zero_ext (64) (extract 15 0 (zero_ext (64) (ret)))))) -;;@ ((2i3:bv) (= (extract 63 0 (x)) (zero_ext (64) (extract 31 0 (zero_ext (64) (ret)))))) -;;@ ((4i3:bv) (= (extract 63 0 (x)) (sign_ext (64) (extract 7 0 (zero_ext (64) (ret)))))) -;;@ ((5i3:bv) (= (extract 63 0 (x)) (sign_ext (64) (extract 15 0 (zero_ext (64) (ret)))))) -;;@ ((6i3:bv) (= (extract 63 0 (x)) (sign_ext (64) (extract 31 0 (zero_ext (64) (ret)))))) -;;@ ), -;;@ (= (ret) (conv_to (widthof (ret)) (x))), -;;@ (|| (= (8i32:isleType) (widthof (ret))) (|| (= (16i32:isleType) (widthof (ret))) (= (32i32:isleType) (widthof (ret))))) -;;@ )) -(decl extended_value_from_value (ExtendedValue) Value) -(extern extractor extended_value_from_value extended_value_from_value) - -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assertions -;;@ (= (ret) -;;@ (if (<= (ty) (32i32:isleType)) -;;@ (conv_to (regwidth) (+ (extract 31 0 (x)) -;;@ (switch (extract 66 64 (y)) -;;@ ((0i3:bv) (zero_ext (32) (extract 7 0 (y)))) -;;@ ((1i3:bv) (zero_ext (32) (extract 15 0 (y)))) -;;@ ((2i3:bv) (zero_ext (32) (extract 31 0 (y)))) -;;@ ((3i3:bv) (zero_ext (32) (extract 31 0 (y)))) -;;@ ((4i3:bv) (sign_ext (32) (extract 7 0 (y)))) -;;@ ((5i3:bv) (sign_ext (32) (extract 15 0 (y)))) -;;@ ((6i3:bv) (sign_ext (32) (extract 31 0 (y)))) -;;@ ((7i3:bv) (sign_ext (32) (extract 31 0 (y)))) -;;@ ))) -;;@ (+ (x) -;;@ (switch (extract 66 64 (y)) -;;@ ((0i3:bv) (zero_ext (regwidth) (extract 7 0 (y)))) -;;@ ((1i3:bv) (zero_ext (regwidth) (extract 15 0 (y)))) -;;@ ((2i3:bv) (zero_ext (regwidth) (extract 31 0 (y)))) -;;@ ((3i3:bv) (zero_ext (regwidth) (extract 63 0 (y)))) -;;@ ((4i3:bv) (sign_ext (regwidth) (extract 7 0 (y)))) -;;@ ((5i3:bv) (sign_ext (regwidth) (extract 15 0 (y)))) -;;@ ((6i3:bv) (sign_ext (regwidth) (extract 31 0 (y)))) -;;@ ((7i3:bv) (sign_ext (regwidth) (extract 63 0 (y)))) -;;@ )) -;;@ )), -;;@ )) -(decl add_extend (Type Reg ExtendedValue) Reg) -(rule (add_extend ty x y) (alu_rr_extend_reg (ALUOp.Add) ty x y)) - -(rule 1 (lower (has_type (fits_in_64 ty) (iadd (extended_value_from_value x) y))) - (add_extend ty y x)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/imm12_from_negated_value.isle b/cranelift/isle/veri/veri_engine/examples/iadd/imm12_from_negated_value.isle deleted file mode 100644 index c1b0c27e2b07..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/iadd/imm12_from_negated_value.isle +++ /dev/null @@ -1,37 +0,0 @@ -(type MInst - (enum -)) - -(type Imm12 (primitive Imm12)) - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (zero_ext (regwidth) (arg)) (ret)))) -(decl imm12_from_u64 (Imm12) u64) -(extern extractor imm12_from_u64 imm12_from_u64) - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (ret) (- (arg))))) -(decl pure i64_neg (i64) i64) -(extern constructor i64_neg i64_neg) - -;;@ (spec (sig (args ty, arg) (ret)) -;;@ (assume (= (ret) (sign_ext (regwidth) (conv_to (ty) (arg)))))) -(decl pure i64_sextend_imm64 (Type Imm64) i64) -(extern constructor i64_sextend_imm64 i64_sextend_imm64) - - ;; Conceptually the same as `imm12_from_value`, but tries negating the constant - ;; value (first sign-extending to handle narrow widths). - - ;; Note that 4095 = 0xfff and 16773120 = 0xfff000 -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (|| (< (- (sign_ext (regwidth) (arg))) (4095i64:bv)) -;;@ (&& (< (- (sign_ext (regwidth) (arg))) (16773120i64:bv)) -;;@ (= (extract 2 0 (- (sign_ext (regwidth) (arg)))) (0i3:bv)) -;;@ )), -;;@ (= (ret) (extract 23 0 (- (sign_ext (regwidth) (arg))))) -;;@ )) - (decl pure imm12_from_negated_value (Value) Imm12) - (rule - (imm12_from_negated_value (has_type ty (iconst n))) - (if-let (imm12_from_u64 imm) (i64_as_u64 (i64_neg (i64_sextend_imm64 ty n)))) - imm) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/tests/veri.rs b/cranelift/isle/veri/veri_engine/tests/veri.rs index ecca53d5efbc..6edf3bdaf79a 100644 --- a/cranelift/isle/veri/veri_engine/tests/veri.rs +++ b/cranelift/isle/veri/veri_engine/tests/veri.rs @@ -75,7 +75,7 @@ fn test_named_iadd_imm12_neg_left() { } #[test] -fn test_named_iadd_imm12_neg_right() { +fn test_named_iadd_imm12_neg_right_not_distinct() { run_and_retry(|| { test_aarch64_rule_with_lhs_termname( "iadd_imm12_neg_right", @@ -90,12 +90,28 @@ fn test_named_iadd_imm12_neg_right() { }); } +#[test] +fn test_named_iadd_imm12_neg_left_not_distinct() { + run_and_retry(|| { + test_aarch64_rule_with_lhs_termname( + "iadd_imm12_neg_left", + "iadd", + vec![ + (Bitwidth::I8, VerificationResult::NoDistinctModels), + (Bitwidth::I16, VerificationResult::NoDistinctModels), + (Bitwidth::I32, VerificationResult::NoDistinctModels), + (Bitwidth::I64, VerificationResult::Success), + ], + ) + }); +} + // Need a file test because this is a change on top of our latest rebase #[test] fn test_imm12_from_negated_value() { run_and_retry(|| { test_from_file_with_lhs_termname( - "./examples/iadd/imm12_from_negated_value.isle", + "./examples/iadd/imm12_from_negated_value_new.isle", "imm12_from_negated_value".to_string(), all_success_result(), ) @@ -127,27 +143,11 @@ fn test_iadd_imm12neg2_new() { } #[test] -fn test_iadd_imm12neg2_not_distinct() { +fn test_named_iadd_extend_right() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/iadd/imm12neg2.isle", - "iadd".to_string(), - vec![ - (Bitwidth::I8, VerificationResult::NoDistinctModels), - (Bitwidth::I16, VerificationResult::NoDistinctModels), - (Bitwidth::I32, VerificationResult::NoDistinctModels), - (Bitwidth::I64, VerificationResult::Success), - ], - ) - }); -} - -#[test] -fn test_iadd_extend() { - run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/iadd/add_extend.isle", - "iadd".to_string(), + test_aarch64_rule_with_lhs_termname( + "iadd_extend_right", + "iadd", vec![ (Bitwidth::I8, VerificationResult::Success), (Bitwidth::I16, VerificationResult::Success), @@ -159,10 +159,10 @@ fn test_iadd_extend() { } #[test] -fn test_iadd_extend_concrete() { - test_concrete_input_from_file_with_lhs_termname( - "./examples/iadd/add_extend.isle", - "iadd".to_string(), +fn test_named_iadd_extend_right_concrete() { + test_concrete_aarch64_rule_with_lhs_termname( + "iadd_extend_right", + "iadd", false, ConcreteTest { termname: "iadd".to_string(), @@ -182,9 +182,9 @@ fn test_iadd_extend_concrete() { }, }, ); - test_concrete_input_from_file_with_lhs_termname( - "./examples/iadd/add_extend.isle", - "iadd".to_string(), + test_concrete_aarch64_rule_with_lhs_termname( + "iadd_extend_right", + "iadd", false, ConcreteTest { termname: "iadd".to_string(), @@ -207,11 +207,11 @@ fn test_iadd_extend_concrete() { } #[test] -fn test_iadd_extend_2() { +fn test_named_iadd_extend_left() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/iadd/add_extend_2.isle", - "iadd".to_string(), + test_aarch64_rule_with_lhs_termname( + "iadd_extend_left", + "iadd", vec![ (Bitwidth::I8, VerificationResult::Success), (Bitwidth::I16, VerificationResult::Success), From 2e5ec5c721ea8784842448320f92e88c491bd899 Mon Sep 17 00:00:00 2001 From: Alexa VanHattum Date: Mon, 10 Apr 2023 21:58:17 -0400 Subject: [PATCH 07/30] isub --- cranelift/codegen/src/isa/aarch64/inst.isle | 88 +++++++++++-- cranelift/codegen/src/isa/aarch64/lower.isle | 20 +-- .../examples/broken/broken_imul.isle | 6 +- .../examples/broken/iadd/broken_madd.isle | 6 +- .../examples/broken/iadd/broken_madd2.isle | 6 +- .../examples/broken/iadd/broken_msub.isle | 6 +- .../examples/broken/iadd/broken_shift2.isle | 18 +-- .../examples/broken/imul/broken_imul.isle | 6 +- .../iadd/imm12_from_negated_value_new.isle | 37 ++++++ .../veri/veri_engine/examples/iadd/madd.isle | 23 ---- .../veri/veri_engine/examples/iadd/madd2.isle | 23 ---- .../veri/veri_engine/examples/iadd/shift.isle | 51 -------- .../veri_engine/examples/iadd/shift2.isle | 51 -------- .../veri_engine/examples/isub/base_case.isle | 23 ---- .../veri/veri_engine/examples/isub/imm12.isle | 41 ------ .../veri_engine/examples/isub/imm12neg.isle | 40 ------ .../veri/veri_engine/examples/isub/isub.isle | 88 ------------- .../veri/veri_engine/examples/isub/msub.isle | 24 ---- .../veri/veri_engine/examples/isub/shift.isle | 51 -------- cranelift/isle/veri/veri_engine/tests/veri.rs | 119 ++++++++++-------- 20 files changed, 232 insertions(+), 495 deletions(-) create mode 100644 cranelift/isle/veri/veri_engine/examples/iadd/imm12_from_negated_value_new.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/iadd/madd.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/iadd/madd2.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/iadd/shift.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/iadd/shift2.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/isub/base_case.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/isub/imm12.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/isub/imm12neg.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/isub/isub.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/isub/msub.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/isub/shift.isle diff --git a/cranelift/codegen/src/isa/aarch64/inst.isle b/cranelift/codegen/src/isa/aarch64/inst.isle index 418fe7b18e09..c8c0e7543a04 100644 --- a/cranelift/codegen/src/isa/aarch64/inst.isle +++ b/cranelift/codegen/src/isa/aarch64/inst.isle @@ -1681,6 +1681,9 @@ (decl pure partial lshr_from_u64 (Type u64) ShiftOpAndAmt) (extern constructor lshr_from_u64 lshr_from_u64) +;;@ (spec (sig (args ty, a) (ret)) +;;@ (assume (= (extract 63 8 (a)) (0i56:bv)), +;;@ (= (ret) (zero_ext (10) (extract 7 0 (a)))))) (decl pure partial lshl_from_imm64 (Type Imm64) ShiftOpAndAmt) (extern constructor lshl_from_imm64 lshl_from_imm64) @@ -2331,9 +2334,9 @@ ;;@ (if (<= (ty) (32i8: isleType)) ;;@ (conv_to (regwidth) (+ (extract 31 0 (a)) (zero_ext (32) (b)))) ;;@ (+ (a) (zero_ext (regwidth) (b)))))) -;;@ (assert (|| (<= (bv2int (y)) (4094i0:isleType)) -;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) -;;@ (= (extract 2 0 (y)) (0i3:bv)) +;;@ (assert (|| (<= (bv2int (b)) (4094i0:isleType)) +;;@ (&& (<= (bv2int (b)) (16773119i0:isleType)) +;;@ (= (extract 2 0 (b)) (0i3:bv)) ;;@ ))) ;;@ ) (decl add_imm (Type Reg Imm12) Reg) @@ -2373,6 +2376,20 @@ (decl add_extend_op (Type Reg Reg ExtendOp) Reg) (rule (add_extend_op ty x y extend) (alu_rrr_extend (ALUOp.Add) ty x y extend)) +;;@ (spec (sig (args ty, a, b, shift) (ret)) +;;@ (assume +;;@ (= (ret) (if (<= (ty) (32i32:isleType)) +;;@ (conv_to (regwidth) (+ (extract 31 0 (a)) (switch (extract 9 8 (shift)) +;;@ ((0i2:bv) (shl (extract 31 0 (b)) (zero_ext (32) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift)))))) +;;@ ((1i2:bv) (shr (extract 31 0 (b)) (zero_ext (32) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift)))))) +;;@ ((2i2:bv) (ashr (extract 31 0 (b)) (zero_ext (32) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift)))))) +;;@ ))) +;;@ (+ (a) (switch (extract 9 8 (shift)) +;;@ ((0i2:bv) (shl (b) (zero_ext (64) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift)))))) +;;@ ((1i2:bv) (shr (b) (zero_ext (64) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift)))))) +;;@ ((2i2:bv) (ashr (b) (zero_ext (64) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift)))))) +;;@ )))), +;;@ )) (decl add_shift (Type Reg Reg ShiftOpAndAmt) Reg) (rule (add_shift ty x y z) (alu_rrr_shift (ALUOp.Add) ty x y z)) @@ -2380,7 +2397,8 @@ (rule (add_vec x y size) (vec_rrr (VecALUOp.Add) x y size)) ;; Helpers for generating `sub` instructions. - +;;@ (spec (sig (args ty, a, b) (r)) +;;@ (assume (= (- (a) (b)) (r)))) (decl sub (Type Reg Reg) Reg) (rule (sub ty x y) (alu_rrr (ALUOp.Sub) ty x y)) @@ -2390,17 +2408,59 @@ ;;@ (if (<= (ty) (32i8: isleType)) ;;@ (conv_to (regwidth) (- (extract 31 0 (a)) (zero_ext (32) (b)))) ;;@ (- (a) (zero_ext (regwidth) (b)))))) -;;@ (assert (|| (<= (bv2int (y)) (4094i0:isleType)) -;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) -;;@ (= (extract 2 0 (y)) (0i3:bv)) +;;@ (assert (|| (<= (bv2int (b)) (4094i0:isleType)) +;;@ (&& (<= (bv2int (b)) (16773119i0:isleType)) +;;@ (= (extract 2 0 (b)) (0i3:bv)) ;;@ ))) ;;@ ) (decl sub_imm (Type Reg Imm12) Reg) (rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) +;;@ (spec (sig (args ty, x, y) (ret)) +;;@ (assume +;;@ (= (ret) +;;@ (if (<= (ty) (32i32:isleType)) +;;@ (conv_to (regwidth) (- (extract 31 0 (x)) +;;@ (switch (extract 66 64 (y)) +;;@ ((0i3:bv) (zero_ext (32) (extract 7 0 (y)))) +;;@ ((1i3:bv) (zero_ext (32) (extract 15 0 (y)))) +;;@ ((2i3:bv) (zero_ext (32) (extract 31 0 (y)))) +;;@ ((3i3:bv) (zero_ext (32) (extract 31 0 (y)))) +;;@ ((4i3:bv) (sign_ext (32) (extract 7 0 (y)))) +;;@ ((5i3:bv) (sign_ext (32) (extract 15 0 (y)))) +;;@ ((6i3:bv) (sign_ext (32) (extract 31 0 (y)))) +;;@ ((7i3:bv) (sign_ext (32) (extract 31 0 (y)))) +;;@ ))) +;;@ (- (x) +;;@ (switch (extract 66 64 (y)) +;;@ ((0i3:bv) (zero_ext (regwidth) (extract 7 0 (y)))) +;;@ ((1i3:bv) (zero_ext (regwidth) (extract 15 0 (y)))) +;;@ ((2i3:bv) (zero_ext (regwidth) (extract 31 0 (y)))) +;;@ ((3i3:bv) (zero_ext (regwidth) (extract 63 0 (y)))) +;;@ ((4i3:bv) (sign_ext (regwidth) (extract 7 0 (y)))) +;;@ ((5i3:bv) (sign_ext (regwidth) (extract 15 0 (y)))) +;;@ ((6i3:bv) (sign_ext (regwidth) (extract 31 0 (y)))) +;;@ ((7i3:bv) (sign_ext (regwidth) (extract 63 0 (y)))) +;;@ )) +;;@ )), +;;@ )) (decl sub_extend (Type Reg ExtendedValue) Reg) (rule (sub_extend ty x y) (alu_rr_extend_reg (ALUOp.Sub) ty x y)) +;;@ (spec (sig (args ty, a, b, shift) (ret)) +;;@ (assume +;;@ (= (ret) (if (<= (ty) (32i32:isleType)) +;;@ (conv_to (regwidth) (- (extract 31 0 (a)) (switch (extract 9 8 (shift)) +;;@ ((0i2:bv) (shl (extract 31 0 (b)) (zero_ext (32) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift)))))) +;;@ ((1i2:bv) (shr (extract 31 0 (b)) (zero_ext (32) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift)))))) +;;@ ((2i2:bv) (ashr (extract 31 0 (b)) (zero_ext (32) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift)))))) +;;@ ))) +;;@ (- (a) (switch (extract 9 8 (shift)) +;;@ ((0i2:bv) (shl (b) (zero_ext (64) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift)))))) +;;@ ((1i2:bv) (shr (b) (zero_ext (64) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift)))))) +;;@ ((2i2:bv) (ashr (b) (zero_ext (64) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift)))))) +;;@ )))), +;;@ )) (decl sub_shift (Type Reg Reg ShiftOpAndAmt) Reg) (rule (sub_shift ty x y z) (alu_rrr_shift (ALUOp.Sub) ty x y z)) @@ -2426,12 +2486,22 @@ (sbc_paired $I64 x_hi y_hi)))) ;; Helpers for generating `madd` instructions. - +;;@ (spec (sig (args ty, a, b, c) (r)) +;;@ (assume +;;@ (= (r) +;;@ (if (<= (ty) (32i8: isleType)) +;;@ (conv_to (regwidth) (+ (extract 31 0 (c)) (* (extract 31 0 (a)) (extract 31 0 (b))))) +;;@ (+ (c) (* (a) (b))))))) (decl madd (Type Reg Reg Reg) Reg) (rule (madd ty x y z) (alu_rrrr (ALUOp3.MAdd) ty x y z)) ;; Helpers for generating `msub` instructions. - +;;@ (spec (sig (args ty, a, b, c) (r)) +;;@ (assume +;;@ (= (r) +;;@ (if (<= (ty) (32i8: isleType)) +;;@ (conv_to (regwidth) (- (extract 31 0 (c)) (* (extract 31 0 (a)) (extract 31 0 (b))))) +;;@ (- (c) (* (a) (b))))))) (decl msub (Type Reg Reg Reg) Reg) (rule (msub ty x y z) (alu_rrrr (ALUOp3.MSub) ty x y z)) diff --git a/cranelift/codegen/src/isa/aarch64/lower.isle b/cranelift/codegen/src/isa/aarch64/lower.isle index 4d35adeed840..1d852a74b3f4 100644 --- a/cranelift/codegen/src/isa/aarch64/lower.isle +++ b/cranelift/codegen/src/isa/aarch64/lower.isle @@ -74,25 +74,25 @@ ;; Special cases for when we're adding the shift of a different ;; register by a constant amount and the shift can get folded into the add. -(rule 7 (lower (has_type (fits_in_64 ty) +(rule iadd_ishl_right 7 (lower (has_type (fits_in_64 ty) (iadd x (ishl y (iconst k))))) (if-let amt (lshl_from_imm64 ty k)) (add_shift ty x y amt)) -(rule 6 (lower (has_type (fits_in_64 ty) +(rule iadd_ishl_left 6 (lower (has_type (fits_in_64 ty) (iadd (ishl x (iconst k)) y))) (if-let amt (lshl_from_imm64 ty k)) (add_shift ty y x amt)) ;; Fold an `iadd` and `imul` combination into a `madd` instruction. -(rule 7 (lower (has_type (fits_in_64 ty) (iadd x (imul y z)))) +(rule iadd_imul_right 7 (lower (has_type (fits_in_64 ty) (iadd x (imul y z)))) (madd ty y z x)) -(rule 6 (lower (has_type (fits_in_64 ty) (iadd (imul x y) z))) +(rule iadd_imul_left 6 (lower (has_type (fits_in_64 ty) (iadd (imul x y) z))) (madd ty x y z)) ;; Fold an `isub` and `imul` combination into a `msub` instruction. -(rule (lower (has_type (fits_in_64 ty) (isub x (imul y z)))) +(rule isub_imul (lower (has_type (fits_in_64 ty) (isub x (imul y z)))) (msub ty y z x)) ;; vectors @@ -523,26 +523,26 @@ ;; `i64` and smaller ;; Base case, simply subtracting things in registers. -(rule -4 (lower (has_type (fits_in_64 ty) (isub x y))) +(rule isub_base_case -4 (lower (has_type (fits_in_64 ty) (isub x y))) (sub ty x y)) ;; Special case for when one operand is an immediate that fits in 12 bits. -(rule 0 (lower (has_type (fits_in_64 ty) (isub x (imm12_from_value y)))) +(rule isub_imm12 0 (lower (has_type (fits_in_64 ty) (isub x (imm12_from_value y)))) (sub_imm ty x y)) ;; Same as the previous special case, except we can switch the subtraction to an ;; addition if the negated immediate fits in 12 bits. -(rule 2 (lower (has_type (fits_in_64 ty) (isub x (imm12_from_negated_value y)))) +(rule isub_imm12_neg 2 (lower (has_type (fits_in_64 ty) (isub x (imm12_from_negated_value y)))) (add_imm ty x y)) ;; Special cases for when we're subtracting an extended register where the ;; extending operation can get folded into the sub itself. -(rule 1 (lower (has_type (fits_in_64 ty) (isub x (extended_value_from_value y)))) +(rule isub_extend 1 (lower (has_type (fits_in_64 ty) (isub x (extended_value_from_value y)))) (sub_extend ty x y)) ;; Finally a special case for when we're subtracting the shift of a different ;; register by a constant amount and the shift can get folded into the sub. -(rule -3 (lower (has_type (fits_in_64 ty) +(rule isub_ishl -3 (lower (has_type (fits_in_64 ty) (isub x (ishl y (iconst k))))) (if-let amt (lshl_from_imm64 ty k)) (sub_shift ty x y amt)) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/broken_imul.isle b/cranelift/isle/veri/veri_engine/examples/broken/broken_imul.isle index 89d23fb16497..b03ae33cf41b 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/broken_imul.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/broken_imul.isle @@ -46,7 +46,11 @@ ;; Helpers for generating `madd` instructions. ;;@ (spec (sig (args ty, a, b, c) (r)) -;;@ (assume (= (+ (c) (* (a) (b))) (r)))) +;;@ (assume +;;@ (= (r) +;;@ (if (<= (ty) (32i8: isleType)) +;;@ (conv_to (regwidth) (+ (extract 31 0 (c)) (* (extract 31 0 (a)) (extract 31 0 (b))))) +;;@ (+ (c) (* (a) (b))))))) (decl madd (Type Reg Reg Reg) Reg) (rule (madd ty x y z) (alu_rrrr (ALUOp3.MAdd) ty x y z)) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_madd.isle b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_madd.isle index 990726d77688..9da4ea814fb7 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_madd.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_madd.isle @@ -13,7 +13,11 @@ )) ;;@ (spec (sig (args ty, a, b, c) (r)) -;;@ (assume (= (+ (c) (* (a) (b))) (r)))) +;;@ (assume +;;@ (= (r) +;;@ (if (<= (ty) (32i8: isleType)) +;;@ (conv_to (regwidth) (+ (extract 31 0 (c)) (* (extract 31 0 (a)) (extract 31 0 (b))))) +;;@ (+ (c) (* (a) (b))))))) (decl madd (Type Reg Reg Reg) Reg) (rule (madd ty x y z) (alu_rrrr (ALUOp3.MAdd) ty x y z)) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_madd2.isle b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_madd2.isle index 4346ad87eb05..2f6884a33da9 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_madd2.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_madd2.isle @@ -13,7 +13,11 @@ )) ;;@ (spec (sig (args ty, a, b, c) (r)) -;;@ (assume (= (+ (c) (* (a) (b))) (r)))) +;;@ (assume +;;@ (= (r) +;;@ (if (<= (ty) (32i8: isleType)) +;;@ (conv_to (regwidth) (+ (extract 31 0 (c)) (* (extract 31 0 (a)) (extract 31 0 (b))))) +;;@ (+ (c) (* (a) (b))))))) (decl madd (Type Reg Reg Reg) Reg) (rule (madd ty x y z) (alu_rrrr (ALUOp3.MAdd) ty x y z)) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_msub.isle b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_msub.isle index 3df75dcb789b..9532539fbda3 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_msub.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_msub.isle @@ -13,7 +13,11 @@ )) ;;@ (spec (sig (args ty, a, b, c) (r)) -;;@ (assume (= (- (c) (* (a) (b))) (r)))) +;;@ (assume +;;@ (= (r) +;;@ (if (<= (ty) (32i8: isleType)) +;;@ (conv_to (regwidth) (- (extract 31 0 (c)) (* (extract 31 0 (a)) (extract 31 0 (b))))) +;;@ (- (c) (* (a) (b))))))) (decl msub (Type Reg Reg Reg) Reg) (rule (msub ty x y z) (alu_rrrr (ALUOp3.MSub) ty x y z)) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_shift2.isle b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_shift2.isle index bdc4fe507cb3..3dd96f8bdc77 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_shift2.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_shift2.isle @@ -28,13 +28,17 @@ ;;@ (spec (sig (args ty, a, b, shift) (ret)) ;;@ (assume -;;@ (switch (extract 9 8 (shift)) -;;@ ((0i2:bv) (= (ret) (+ (a) (shl (b) (zero_ext (widthof (b)) (extract 7 0 (shift))))))) -;;@ ((1i2:bv) (= (ret) (+ (a) (shr (b) (zero_ext (widthof (b)) (extract 7 0 (shift))))))) -;;@ ((2i2:bv) (= (ret) (+ (a) (ashr (b) (zero_ext (widthof (b)) (extract 7 0 (shift)))))))), -;;@ (|| (= (extract 9 8 (shift)) (0i2:bv)) -;;@ (|| (= (extract 9 8 (shift)) (1i2:bv)) -;;@ (= (extract 9 8 (shift)) (2i2:bv)))) +;;@ (= (ret) (if (<= (ty) (32i32:isleType)) +;;@ (conv_to (regwidth) (+ (extract 31 0 (a)) (switch (extract 9 8 (shift)) +;;@ ((0i2:bv) (shl (extract 31 0 (b)) (zero_ext (32) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift)))))) +;;@ ((1i2:bv) (shr (extract 31 0 (b)) (zero_ext (32) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift)))))) +;;@ ((2i2:bv) (ashr (extract 31 0 (b)) (zero_ext (32) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift)))))) +;;@ ))) +;;@ (+ (a) (switch (extract 9 8 (shift)) +;;@ ((0i2:bv) (shl (b) (zero_ext (64) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift)))))) +;;@ ((1i2:bv) (shr (b) (zero_ext (64) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift)))))) +;;@ ((2i2:bv) (ashr (b) (zero_ext (64) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift)))))) +;;@ )))), ;;@ )) (decl add_shift (Type Reg Reg ShiftOpAndAmt) Reg) (rule (add_shift ty x y z) (alu_rrr_shift (ALUOp.Add) ty x y z)) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/imul/broken_imul.isle b/cranelift/isle/veri/veri_engine/examples/broken/imul/broken_imul.isle index 89d23fb16497..b03ae33cf41b 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/imul/broken_imul.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/imul/broken_imul.isle @@ -46,7 +46,11 @@ ;; Helpers for generating `madd` instructions. ;;@ (spec (sig (args ty, a, b, c) (r)) -;;@ (assume (= (+ (c) (* (a) (b))) (r)))) +;;@ (assume +;;@ (= (r) +;;@ (if (<= (ty) (32i8: isleType)) +;;@ (conv_to (regwidth) (+ (extract 31 0 (c)) (* (extract 31 0 (a)) (extract 31 0 (b))))) +;;@ (+ (c) (* (a) (b))))))) (decl madd (Type Reg Reg Reg) Reg) (rule (madd ty x y z) (alu_rrrr (ALUOp3.MAdd) ty x y z)) diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/imm12_from_negated_value_new.isle b/cranelift/isle/veri/veri_engine/examples/iadd/imm12_from_negated_value_new.isle new file mode 100644 index 000000000000..c1b0c27e2b07 --- /dev/null +++ b/cranelift/isle/veri/veri_engine/examples/iadd/imm12_from_negated_value_new.isle @@ -0,0 +1,37 @@ +(type MInst + (enum +)) + +(type Imm12 (primitive Imm12)) + +;;@ (spec (sig (args arg) (ret)) +;;@ (assume (= (zero_ext (regwidth) (arg)) (ret)))) +(decl imm12_from_u64 (Imm12) u64) +(extern extractor imm12_from_u64 imm12_from_u64) + +;;@ (spec (sig (args arg) (ret)) +;;@ (assume (= (ret) (- (arg))))) +(decl pure i64_neg (i64) i64) +(extern constructor i64_neg i64_neg) + +;;@ (spec (sig (args ty, arg) (ret)) +;;@ (assume (= (ret) (sign_ext (regwidth) (conv_to (ty) (arg)))))) +(decl pure i64_sextend_imm64 (Type Imm64) i64) +(extern constructor i64_sextend_imm64 i64_sextend_imm64) + + ;; Conceptually the same as `imm12_from_value`, but tries negating the constant + ;; value (first sign-extending to handle narrow widths). + + ;; Note that 4095 = 0xfff and 16773120 = 0xfff000 +;;@ (spec (sig (args arg) (ret)) +;;@ (assume (|| (< (- (sign_ext (regwidth) (arg))) (4095i64:bv)) +;;@ (&& (< (- (sign_ext (regwidth) (arg))) (16773120i64:bv)) +;;@ (= (extract 2 0 (- (sign_ext (regwidth) (arg)))) (0i3:bv)) +;;@ )), +;;@ (= (ret) (extract 23 0 (- (sign_ext (regwidth) (arg))))) +;;@ )) + (decl pure imm12_from_negated_value (Value) Imm12) + (rule + (imm12_from_negated_value (has_type ty (iconst n))) + (if-let (imm12_from_u64 imm) (i64_as_u64 (i64_neg (i64_sextend_imm64 ty n)))) + imm) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/madd.isle b/cranelift/isle/veri/veri_engine/examples/iadd/madd.isle deleted file mode 100644 index df71ca36487d..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/iadd/madd.isle +++ /dev/null @@ -1,23 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst - (enum -)) - -(type ALUOp3 - (enum - (MAdd) -)) - -;;@ (spec (sig (args ty, a, b, c) (r)) -;;@ (assume (= (+ (c) (* (a) (b))) (r)))) -(decl madd (Type Reg Reg Reg) Reg) -(rule (madd ty x y z) (alu_rrrr (ALUOp3.MAdd) ty x y z)) - -(decl alu_rrrr (ALUOp3 Type Reg Reg Reg) Reg) -(extern constructor alu_rrrr alu_rrrr) - -(rule 7 (lower (has_type (fits_in_64 ty) (iadd x (imul y z)))) - (madd ty y z x)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/madd2.isle b/cranelift/isle/veri/veri_engine/examples/iadd/madd2.isle deleted file mode 100644 index 7135beb774ec..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/iadd/madd2.isle +++ /dev/null @@ -1,23 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst - (enum -)) - -(type ALUOp3 - (enum - (MAdd) -)) - -;;@ (spec (sig (args ty, a, b, c) (r)) -;;@ (assume (= (+ (c) (* (a) (b))) (r)))) -(decl madd (Type Reg Reg Reg) Reg) -(rule (madd ty x y z) (alu_rrrr (ALUOp3.MAdd) ty x y z)) - -(decl alu_rrrr (ALUOp3 Type Reg Reg Reg) Reg) -(extern constructor alu_rrrr alu_rrrr) - -(rule 6 (lower (has_type (fits_in_64 ty) (iadd (imul x y) z))) - (madd ty x y z)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/shift.isle b/cranelift/isle/veri/veri_engine/examples/iadd/shift.isle deleted file mode 100644 index 3f9274853c73..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/iadd/shift.isle +++ /dev/null @@ -1,51 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst - (enum - (AluRRRShift - (shiftop ShiftOpAndAmt)) -)) - -;; ASSUMING 64 BIT MODE!!! -;; annotations will interpret this as an 10 bit field -;; the two msb encode the type of shift as follows: -;; 00: lsl -;; 01: lsr -;; 10: asr -;; 11: invalid -;; the rest will encode a 8-bit shift amount -(type ShiftOpAndAmt (primitive ShiftOpAndAmt)) - -(type ALUOp - (enum - (Add) -)) - -(decl alu_rrr_shift (ALUOp Type Reg Reg ShiftOpAndAmt) Reg) -(extern constructor alu_rrr_shift alu_rrr_shift) - -;;@ (spec (sig (args ty, a, b, shift) (ret)) -;;@ (assume -;;@ (switch (extract 9 8 (shift)) -;;@ ((0i2:bv) (= (ret) (+ (a) (shl (b) (zero_ext (widthof (b)) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift)))))))) -;;@ ((1i2:bv) (= (ret) (+ (a) (shr (b) (zero_ext (widthof (b)) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift)))))))) -;;@ ((2i2:bv) (= (ret) (+ (a) (ashr (b) (zero_ext (widthof (b)) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift))))))))), -;;@ (|| (= (extract 9 8 (shift)) (0i2:bv)) -;;@ (|| (= (extract 9 8 (shift)) (1i2:bv)) -;;@ (= (extract 9 8 (shift)) (2i2:bv)))) -;;@ )) -(decl add_shift (Type Reg Reg ShiftOpAndAmt) Reg) -(rule (add_shift ty x y z) (alu_rrr_shift (ALUOp.Add) ty x y z)) - -;;@ (spec (sig (args ty, a) (ret)) -;;@ (assume (= (extract 63 8 (a)) (0i56:bv)), -;;@ (= (ret) (zero_ext (10) (extract 7 0 (a)))))) -(decl pure lshl_from_imm64 (Type Imm64) ShiftOpAndAmt) -(extern constructor lshl_from_imm64 lshl_from_imm64) - -(rule 7 (lower (has_type (fits_in_64 ty) - (iadd x (ishl y (iconst k))))) - (if-let amt (lshl_from_imm64 ty k)) - (add_shift ty x y amt)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/shift2.isle b/cranelift/isle/veri/veri_engine/examples/iadd/shift2.isle deleted file mode 100644 index ae8a6bf994f0..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/iadd/shift2.isle +++ /dev/null @@ -1,51 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst - (enum - (AluRRRShift - (shiftop ShiftOpAndAmt)) -)) - -;; ASSUMING 64 BIT MODE!!! -;; annotations will interpret this as an 8 bit field -;; the two msb encode the type of shift as follows: -;; 00: lsl -;; 01: lsr -;; 10: asr -;; 11: invalid -;; the rest will encode a 6-bit shift amount -(type ShiftOpAndAmt (primitive ShiftOpAndAmt)) - -(type ALUOp - (enum - (Add) -)) - -(decl alu_rrr_shift (ALUOp Type Reg Reg ShiftOpAndAmt) Reg) -(extern constructor alu_rrr_shift alu_rrr_shift) - -;;@ (spec (sig (args ty, a, b, shift) (ret)) -;;@ (assume -;;@ (switch (extract 9 8 (shift)) -;;@ ((0i2:bv) (= (ret) (+ (a) (shl (b) (zero_ext (widthof (b)) (extract 7 0 (shift))))))) -;;@ ((1i2:bv) (= (ret) (+ (a) (shr (b) (zero_ext (widthof (b)) (extract 7 0 (shift))))))) -;;@ ((2i2:bv) (= (ret) (+ (a) (ashr (b) (zero_ext (widthof (b)) (extract 7 0 (shift)))))))), -;;@ (|| (= (extract 9 8 (shift)) (0i2:bv)) -;;@ (|| (= (extract 9 8 (shift)) (1i2:bv)) -;;@ (= (extract 9 8 (shift)) (2i2:bv)))) -;;@ )) -(decl add_shift (Type Reg Reg ShiftOpAndAmt) Reg) -(rule (add_shift ty x y z) (alu_rrr_shift (ALUOp.Add) ty x y z)) - -;;@ (spec (sig (args ty, a) (ret)) -;;@ (assume (= (extract 63 8 (a)) (0i56:bv)), -;;@ (= (ret) (zero_ext (10) (extract 7 0 (a)))))) -(decl pure lshl_from_imm64 (Type Imm64) ShiftOpAndAmt) -(extern constructor lshl_from_imm64 lshl_from_imm64) - -(rule 6 (lower (has_type (fits_in_64 ty) - (iadd (ishl x (iconst k)) y))) - (if-let amt (lshl_from_imm64 ty k)) - (add_shift ty y x amt)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/isub/base_case.isle b/cranelift/isle/veri/veri_engine/examples/isub/base_case.isle deleted file mode 100644 index 71676a8711d1..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/isub/base_case.isle +++ /dev/null @@ -1,23 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst - (enum -)) - -(type ALUOp - (enum - (Sub) -)) - -;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assume (= (- (a) (b)) (r)))) -(decl sub (Type Reg Reg) Reg) -(rule (sub ty x y) (alu_rrr (ALUOp.Sub) ty x y)) - -(decl alu_rrr (ALUOp Type Reg Reg) Reg) -(extern constructor alu_rrr alu_rrr) - -(rule -4 (lower (has_type (fits_in_64 ty) (isub x y))) - (sub ty x y)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/isub/imm12.isle b/cranelift/isle/veri/veri_engine/examples/isub/imm12.isle deleted file mode 100644 index 5decad44a5dc..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/isub/imm12.isle +++ /dev/null @@ -1,41 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst - (enum -)) - -;; We will represent this with a msb shift bit -;; and a 12 bit value -(type Imm12 (primitive Imm12)) - -(type ALUOp - (enum - (Sub) -)) - -;; Note that 4094 = 0xffe and 16773119 = 0xffefff -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (= (ret) (- (x) (zero_ext (regwidth) (y)))) -;;@ )) -(decl sub_imm (Type Reg Imm12) Reg) -(rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) - -(decl alu_rr_imm12 (ALUOp Type Reg Imm12) Reg) -(extern constructor alu_rr_imm12 alu_rr_imm12) - -;; Note that 4095 = 0xfff and 16773120 = 0xfff000 -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (|| (< (zero_ext (regwidth) (ret)) (4095i64:bv)) -;;@ (&& (< (zero_ext (regwidth) (ret)) (16773120i64:bv)) -;;@ (= (extract 2 0 (zero_ext (regwidth) (ret))) (0i3:bv)) -;;@ )), -;;@ (= (ret) (conv_to (widthof (ret)) (zero_ext (regwidth) (arg)))), -;;@ (= (arg) (conv_to (widthof (arg)) (zero_ext (regwidth) (ret)))) -;;@ )) -(decl imm12_from_value (Imm12) Value) -(extern extractor imm12_from_value imm12_from_value) - -(rule 0 (lower (has_type (fits_in_64 ty) (isub x (imm12_from_value y)))) - (sub_imm ty x y)) diff --git a/cranelift/isle/veri/veri_engine/examples/isub/imm12neg.isle b/cranelift/isle/veri/veri_engine/examples/isub/imm12neg.isle deleted file mode 100644 index f08a6e068845..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/isub/imm12neg.isle +++ /dev/null @@ -1,40 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst - (enum -)) - -;; We will represent this with a msb shift bit -;; and a 12 bit value -(type Imm12 (primitive Imm12)) - -(type ALUOp - (enum - (Add) -)) - -;; Note that 4094 = 0xffe and 16773119 = 0xffefff -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (= (ret) (+ (x) (zero_ext (regwidth) (y)))) -;;@ )) -(decl add_imm (Type Reg Imm12) Reg) -(rule (add_imm ty x y) (alu_rr_imm12 (ALUOp.Add) ty x y)) - -(decl alu_rr_imm12 (ALUOp Type Reg Imm12) Reg) -(extern constructor alu_rr_imm12 alu_rr_imm12) - -;; Note that 4095 = 0xfff and 16773120 = 0xfff000 -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (|| (< (- (zero_ext (regwidth) (ret))) (4095i64:bv)) -;;@ (&& (< (- (zero_ext (regwidth) (ret))) (16773120i64:bv)) -;;@ (= (extract 2 0 (- (zero_ext (regwidth) (ret)))) (0i3:bv)) -;;@ )), -;;@ (= (ret) (conv_to (widthof (ret)) (- (zero_ext (regwidth) (arg))))) -;;@ )) -(decl imm12_from_negated_value (Imm12) Value) -(extern extractor imm12_from_negated_value imm12_from_negated_value) - -(rule 2 (lower (has_type (fits_in_64 ty) (isub x (imm12_from_negated_value y)))) - (add_imm ty x y)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/isub/isub.isle b/cranelift/isle/veri/veri_engine/examples/isub/isub.isle deleted file mode 100644 index 18bb5273be60..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/isub/isub.isle +++ /dev/null @@ -1,88 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -;; Instruction formats. -(type MInst - (enum - ;; A no-op of zero size. - (Nop0) - - ;; A no-op that is one instruction large. - (Nop4) - - ;; An ALU operation with two register sources and a register destination. - (AluRRR - (alu_op ALUOp) - (size OperandSize) - (rd WritableReg) - (rn Reg) - (rm Reg)) -)) - -(type Imm12 (primitive Imm12)) - -;; An ALU operation. This can be paired with several instruction formats -;; below (see `Inst`) in any combination. -(type ALUOp - (enum - (Add) - (Sub) - (Orr) - (OrrNot) - (And))) - -(type ALUOp3 - (enum - ;; Multiply-add - (MAdd) - ;; Multiply-sub - (MSub) -)) - -(type OperandSize extern - (enum Size32 - Size64)) - -;; Helper for calculating the `OperandSize` corresponding to a type -(decl operand_size (Type) OperandSize) -(rule (operand_size (fits_in_32 _ty)) (OperandSize.Size32)) -(rule (operand_size (fits_in_64 _ty)) (OperandSize.Size64)) - -;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assume (= (- (a) (b)) (r)))) -(decl sub (Type Reg Reg) Reg) -(rule (sub ty x y) (alu_rrr (ALUOp.Sub) ty x y)) - -;; Note that 4094 = 0xffe and 16773119 = 0xffefff -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) -;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) -;;@ (= (extract 2 0 (y)) (0i3:bv)) -;;@ )), -;;@ (= (ret) (- (x) (zero_ext (regwidth) (y)))) -;;@ )) -(decl sub_imm (Type Reg Imm12) Reg) -(rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) - -;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assume (= (+ (a) (sign_ext (a) (b))) (r)))) -(decl add_imm (Type Reg Imm12) Reg) -(rule (add_imm ty x y) (alu_rr_imm12 (ALUOp.Add) ty x y)) - -(decl alu_rr_imm12 (ALUOp Type Reg Imm12) Reg) -(extern constructor alu_rr_imm12 alu_rr_imm12) - -(decl alu_rrr (ALUOp Type Reg Reg) Reg) -(extern constructor alu_rrr alu_rrr) - -(decl imm12_from_negated_value (Imm12) Value) -(extern extractor imm12_from_negated_value imm12_from_negated_value) - -(decl imm12_from_value (Imm12) Value) -(extern extractor imm12_from_value imm12_from_value) - -;; Rules - -(rule (lower (has_type (fits_in_64 ty) (isub x y))) - (sub ty x y)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/isub/msub.isle b/cranelift/isle/veri/veri_engine/examples/isub/msub.isle deleted file mode 100644 index 763c6c621190..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/isub/msub.isle +++ /dev/null @@ -1,24 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -;; Instruction formats. -(type MInst - (enum -)) - -(type ALUOp3 - (enum - (MSub) -)) - -;;@ (spec (sig (args ty, a, b, c) (r)) -;;@ (assume (= (- (c) (* (a) (b))) (r)))) -(decl msub (Type Reg Reg Reg) Reg) -(rule (msub ty x y z) (alu_rrrr (ALUOp3.MSub) ty x y z)) - -(decl alu_rrrr (ALUOp3 Type Reg Reg Reg) Reg) -(extern constructor alu_rrrr alu_rrrr) - -(rule (lower (has_type (fits_in_64 ty) (isub x (imul y z)))) - (msub ty y z x)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/isub/shift.isle b/cranelift/isle/veri/veri_engine/examples/isub/shift.isle deleted file mode 100644 index 505aacb57e46..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/isub/shift.isle +++ /dev/null @@ -1,51 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst - (enum - (AluRRRShift - (shiftop ShiftOpAndAmt)) -)) - -;; ASSUMING 64 BIT MODE!!! -;; annotations will interpret this as an 10 bit field -;; the two msb encode the type of shift as follows: -;; 00: lsl -;; 01: lsr -;; 10: asr -;; 11: invalid -;; the rest will encode a 8-bit shift amount -(type ShiftOpAndAmt (primitive ShiftOpAndAmt)) - -(type ALUOp - (enum - (Sub) -)) - -(decl alu_rrr_shift (ALUOp Type Reg Reg ShiftOpAndAmt) Reg) -(extern constructor alu_rrr_shift alu_rrr_shift) - -;;@ (spec (sig (args ty, a, b, shift) (ret)) -;;@ (assume -;;@ (switch (extract 9 8 (shift)) -;;@ ((0i2:bv) (= (ret) (- (a) (shl (b) (zero_ext (widthof (b)) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift)))))))) -;;@ ((1i2:bv) (= (ret) (- (a) (shr (b) (zero_ext (widthof (b)) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift)))))))) -;;@ ((2i2:bv) (= (ret) (- (a) (ashr (b) (zero_ext (widthof (b)) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift))))))))), -;;@ (|| (= (extract 9 8 (shift)) (0i2:bv)) -;;@ (|| (= (extract 9 8 (shift)) (1i2:bv)) -;;@ (= (extract 9 8 (shift)) (2i2:bv)))) -;;@ )) -(decl sub_shift (Type Reg Reg ShiftOpAndAmt) Reg) -(rule (sub_shift ty x y z) (alu_rrr_shift (ALUOp.Sub) ty x y z)) - -;;@ (spec (sig (args ty, a) (ret)) -;;@ (assume (= (extract 63 8 (a)) (0i56:bv)), -;;@ (= (ret) (zero_ext (10) (extract 7 0 (a)))))) -(decl pure lshl_from_imm64 (Type Imm64) ShiftOpAndAmt) -(extern constructor lshl_from_imm64 lshl_from_imm64) - -(rule -3 (lower (has_type (fits_in_64 ty) - (isub x (ishl y (iconst k))))) - (if-let amt (lshl_from_imm64 ty k)) - (sub_shift ty x y amt)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/tests/veri.rs b/cranelift/isle/veri/veri_engine/tests/veri.rs index 6edf3bdaf79a..cfcbda22f92d 100644 --- a/cranelift/isle/veri/veri_engine/tests/veri.rs +++ b/cranelift/isle/veri/veri_engine/tests/veri.rs @@ -246,22 +246,33 @@ fn test_broken_iadd_extend() { } #[test] -fn test_iadd_shift() { +fn test_named_iadd_ishl_left() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/iadd/shift.isle", - "iadd".to_string(), + test_aarch64_rule_with_lhs_termname( + "iadd_ishl_left", + "iadd", lte_64_success_result(), ) }); } #[test] -fn test_iadd_madd() { +fn test_named_iadd_ishl_right() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/iadd/madd.isle", - "iadd".to_string(), + test_aarch64_rule_with_lhs_termname( + "iadd_ishl_right", + "iadd", + lte_64_success_result(), + ) + }); +} + +#[test] +fn test_named_iadd_imul_right() { + run_and_retry(|| { + test_aarch64_rule_with_lhs_termname( + "iadd_imul_right", + "iadd", vec![ (Bitwidth::I8, VerificationResult::Success), // Too slow right now: https://github.com/avanhatt/wasmtime/issues/36 @@ -274,11 +285,11 @@ fn test_iadd_madd() { } #[test] -fn test_iadd_madd2() { +fn test_named_iadd_imul_left() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/iadd/madd2.isle", - "iadd".to_string(), + test_aarch64_rule_with_lhs_termname( + "iadd_imul_left", + "iadd", vec![ (Bitwidth::I8, VerificationResult::Success), // Too slow right now: https://github.com/avanhatt/wasmtime/issues/36 @@ -291,11 +302,11 @@ fn test_iadd_madd2() { } #[test] -fn test_isub_msub() { +fn test_named_isub_imul() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/isub/msub.isle", - "isub".to_string(), + test_aarch64_rule_with_lhs_termname( + "isub_imul", + "isub", vec![ (Bitwidth::I8, VerificationResult::Success), // Too slow right now: https://github.com/avanhatt/wasmtime/issues/36 @@ -407,7 +418,7 @@ fn test_broken_iadd_imm12neg_2_not_distinct() { } #[test] -fn test_broken_iadd_madd() { +fn test_broken_iadd_imul_right() { run_and_retry(|| { test_from_file_with_lhs_termname( "./examples/broken/iadd/broken_madd.isle", @@ -418,7 +429,7 @@ fn test_broken_iadd_madd() { } #[test] -fn test_broken_iadd_madd2() { +fn test_broken_iadd_imul_left() { run_and_retry(|| { test_from_file_with_lhs_termname( "./examples/broken/iadd/broken_madd2.isle", @@ -476,33 +487,33 @@ fn test_broken_iadd_shift2() { } #[test] -fn test_isub_base_case() { +fn test_named_isub_base_case() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/isub/base_case.isle", - "isub".to_string(), + test_aarch64_rule_with_lhs_termname( + "isub_base_case", + "isub", lte_64_success_result(), ) }) } #[test] -fn test_isub_imm12() { +fn test_named_isub_imm12() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/isub/imm12.isle", - "isub".to_string(), + test_aarch64_rule_with_lhs_termname( + "isub_imm12", + "isub", lte_64_success_result(), ) }) } #[test] -fn test_isub_imm12_concrete() { +fn test_named_isub_imm12_concrete() { run_and_retry(|| { - test_concrete_input_from_file_with_lhs_termname( - "./examples/isub/imm12.isle", - "isub".to_string(), + test_concrete_aarch64_rule_with_lhs_termname( + "isub_imm12", + "isub", false, ConcreteTest { termname: "isub".to_string(), @@ -526,11 +537,11 @@ fn test_isub_imm12_concrete() { } #[test] -fn test_isub_imm12neg_not_distinct() { +fn test_named_isub_imm12_neg_not_distinct() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/isub/imm12neg.isle", - "isub".to_string(), + test_aarch64_rule_with_lhs_termname( + "isub_imm12_neg", + "isub", vec![ (Bitwidth::I8, VerificationResult::NoDistinctModels), (Bitwidth::I16, VerificationResult::NoDistinctModels), @@ -541,6 +552,7 @@ fn test_isub_imm12neg_not_distinct() { }) } +// Need a file test because this is a change on top of our latest rebase #[test] fn test_isub_imm12neg_new() { run_and_retry(|| { @@ -553,11 +565,11 @@ fn test_isub_imm12neg_new() { } #[test] -fn test_isub_imm12neg_concrete32() { +fn test_named_isub_imm12_neg_concrete32() { run_and_retry(|| { - test_concrete_input_from_file_with_lhs_termname( - "./examples/isub/imm12neg.isle", - "isub".to_string(), + test_concrete_aarch64_rule_with_lhs_termname( + "isub_imm12_neg", + "isub", false, ConcreteTest { termname: "isub".to_string(), @@ -586,11 +598,11 @@ fn test_isub_imm12neg_concrete32() { } #[test] -fn test_isub_imm12neg_concrete_64() { +fn test_named_isub_imm12_neg_concrete64() { run_and_retry(|| { - test_concrete_input_from_file_with_lhs_termname( - "./examples/isub/imm12neg.isle", - "isub".to_string(), + test_concrete_aarch64_rule_with_lhs_termname( + "isub_imm12_neg", + "isub", false, ConcreteTest { termname: "isub".to_string(), @@ -619,20 +631,29 @@ fn test_isub_imm12neg_concrete_64() { } #[test] -fn test_isub_extend() { +fn test_named_isub_extend() { run_and_retry(|| { - //test_from_file_with_lhs_termname("./examples/isub/extend.isle", lte_64_success_result()); + test_aarch64_rule_with_lhs_termname( + "isub_extend", + "isub", + vec![ + (Bitwidth::I8, VerificationResult::Success), + (Bitwidth::I16, VerificationResult::Success), + (Bitwidth::I32, VerificationResult::Success), + (Bitwidth::I64, VerificationResult::InapplicableRule), + ], + ) }) } #[test] -fn test_isub_shift() { +fn test_named_isub_ishl() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/isub/shift.isle", - "isub".to_string(), + test_aarch64_rule_with_lhs_termname( + "isub_ishl", + "isub", lte_64_success_result(), - ); + ) }) } From 03cbbd61cb8ecfac56c4b124dda71ec31a76191d Mon Sep 17 00:00:00 2001 From: Alexa VanHattum Date: Mon, 10 Apr 2023 23:06:04 -0400 Subject: [PATCH 08/30] ineg, div --- cranelift/codegen/src/isa/aarch64/inst.isle | 48 ++++++++++ cranelift/codegen/src/isa/aarch64/lower.isle | 25 +++-- .../veri/veri_engine/examples/imul/imul.isle | 29 ------ .../veri/veri_engine/examples/ineg/ineg.isle | 28 ------ .../veri/veri_engine/examples/sdiv/sdiv.isle | 92 ------------------- .../examples/sdiv/sdiv_safe_const.isle | 80 ---------------- .../veri/veri_engine/examples/udiv/udiv.isle | 43 --------- cranelift/isle/veri/veri_engine/tests/veri.rs | 41 +++++---- 8 files changed, 87 insertions(+), 299 deletions(-) delete mode 100644 cranelift/isle/veri/veri_engine/examples/imul/imul.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/ineg/ineg.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/sdiv/sdiv.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/sdiv/sdiv_safe_const.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/udiv/udiv.isle diff --git a/cranelift/codegen/src/isa/aarch64/inst.isle b/cranelift/codegen/src/isa/aarch64/inst.isle index c8c0e7543a04..9c2ceb05fc66 100644 --- a/cranelift/codegen/src/isa/aarch64/inst.isle +++ b/cranelift/codegen/src/isa/aarch64/inst.isle @@ -1775,6 +1775,8 @@ ;; Instruction creation helpers ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Helper for creating the zero register. +;;@ (spec (sig (args) (r)) +;;@ (assume (= (zero_ext (regwidth) (0i1:bv)) (r)))) (decl zero_reg () Reg) (extern constructor zero_reg zero_reg) @@ -2679,10 +2681,22 @@ (rule (lsl_imm ty x imm) (alu_rr_imm_shift (ALUOp.Lsl) ty x imm)) ;; Helper for generating `udiv` instructions. +;;@ (spec (sig (args ty, a, b) (r)) +;;@ (assume +;;@ (= (r) +;;@ (if (<= (ty) (32i8: isleType)) +;;@ (conv_to (regwidth) (/ (extract 31 0 (a)) (extract 31 0 (b)))) +;;@ (/ (a) (b)))))) (decl a64_udiv (Type Reg Reg) Reg) (rule (a64_udiv ty x y) (alu_rrr (ALUOp.UDiv) ty x y)) ;; Helper for generating `sdiv` instructions. +;;@ (spec (sig (args ty, a, b) (r)) +;;@ (assume +;;@ (= (r) +;;@ (if (<= (ty) (32i8: isleType)) +;;@ (conv_to (regwidth) (sdiv (extract 31 0 (a)) (extract 31 0 (b)))) +;;@ (sdiv (a) (b)))))) (decl a64_sdiv (Type Reg Reg) Reg) (rule (a64_sdiv ty x y) (alu_rrr (ALUOp.SDiv) ty x y)) @@ -2899,6 +2913,14 @@ (Sign) (Zero))) +;;@ (spec (sig (args) (ret)) +;;@ (assume (= (0i1: isleType) (ret)))) +;;decl ImmExtend.Zero + +;;@ (spec (sig (args) (ret)) +;;@ (assume (= (1i1: isleType) (ret)))) +;;decl ImmExtend.Sign + ;; Arguments: ;; * Immediate type ;; * Way to extend the immediate value to the full width of the destination @@ -2909,6 +2931,13 @@ ;; Note that, unlike the convention in the AArch64 backend, this helper leaves ;; all bits in the destination register in a defined state, i.e. smaller types ;; such as `I8` are either sign- or zero-extended. +;;@ (spec (sig (args ty, ext, x) (ret)) +;;@ (assume (|| (= (ext) (0i0:isleType)) (= (ext) (1i0:isleType))), +;;@ (if (= (ext) (0i0:isleType)) +;;@ (= (ret) (zero_ext (regwidth) (conv_to (ty) (x)))) +;;@ (= (ret) (sign_ext (regwidth) (conv_to (ty) (x)))) +;;@ ) +;;@ )) (decl imm (Type ImmExtend u64) Reg) ;; Move wide immediate instructions; to simplify, we only match when we @@ -2954,6 +2983,8 @@ (rule (put_in_reg_zext32 val @ (value_type $I64)) val) ;; Place a `Value` into a register, sign extending it to 64-bits +;;@ (spec (sig (args x) (ret)) +;;@ (assume (= (sign_ext (64) (x)) (ret)))) (decl put_in_reg_sext64 (Value) Reg) (rule 1 (put_in_reg_sext64 val @ (value_type (fits_in_32 ty))) (extend val $true (ty_bits ty) 64)) @@ -2962,6 +2993,8 @@ (rule (put_in_reg_sext64 val @ (value_type $I64)) val) ;; Place a `Value` into a register, zero extending it to 64-bits +;;@ (spec (sig (args x) (ret)) +;;@ (assume (= (zero_ext (64) (x)) (ret)))) (decl put_in_reg_zext64 (Value) Reg) (rule 1 (put_in_reg_zext64 val @ (value_type (fits_in_32 ty))) (extend val $false (ty_bits ty) 64)) @@ -2983,6 +3016,21 @@ ;; Check for signed overflow. The only case is min_value / -1. ;; The following checks must be done in 32-bit or 64-bit, depending ;; on the input type. +;; Verification note: operand type converts to 32/64, so no explicit +;; check for those types needed +;; Check for signed overflow. The only case is min_value / -1. +;; The following checks must be done in 32-bit or 64-bit, depending +;; on the input type. +;; +;;@ (spec (sig (args ty, x, y) (ret)) +;;@ (assume (= (x) (ret)), +;;@ (if (= (ty) (32i0:isleType)) +;;@ (! (&& (= (0i32:bv) (extract 31 0 (y))) +;;@ (= (2147483648i32:bv) (extract 31 0 (y))))) +;;@ (! (&& (= (0i64:bv) (y)) +;;@ (= (9223372036854775808i64:bv) (y)))) +;;@ ) +;;@ )) (decl trap_if_div_overflow (Type Reg Reg) Reg) (rule (trap_if_div_overflow ty x y) (let ( diff --git a/cranelift/codegen/src/isa/aarch64/lower.isle b/cranelift/codegen/src/isa/aarch64/lower.isle index 1d852a74b3f4..52c69a078f3d 100644 --- a/cranelift/codegen/src/isa/aarch64/lower.isle +++ b/cranelift/codegen/src/isa/aarch64/lower.isle @@ -578,7 +578,7 @@ ;;;; Rules for `ineg` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; `i64` and smaller. -(rule 1 (lower (has_type (fits_in_64 ty) (ineg x))) +(rule ineg_base_case 1 (lower (has_type (fits_in_64 ty) (ineg x))) (sub ty (zero_reg) x)) ;; `i128` @@ -592,7 +592,7 @@ ;;;; Rules for `imul` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; `i64` and smaller. -(rule -3 (lower (has_type (fits_in_64 ty) (imul x y))) +(rule imul_base_case -3 (lower (has_type (fits_in_64 ty) (imul x y))) (madd ty x y (zero_reg))) ;; `i128`. @@ -799,10 +799,13 @@ ;; ;; Note that aarch64's `udiv` doesn't trap so to respect the semantics of ;; CLIF's `udiv` the check for zero needs to be manually performed. -(rule (lower (has_type (fits_in_64 ty) (udiv x y))) +(rule udiv (lower (has_type (fits_in_64 ty) (udiv x y))) (a64_udiv $I64 (put_in_reg_zext64 x) (put_nonzero_in_reg_zext64 y))) ;; Helper for placing a `Value` into a `Reg` and validating that it's nonzero. +;;@ (spec (sig (args x) (ret)) +;;@ (assume (= (zero_ext (64) (x)) (ret))) +;;@ (assert (! (= (0i64:bv) (ret))))) (decl put_nonzero_in_reg_zext64 (Value) Reg) (rule -1 (put_nonzero_in_reg_zext64 val) (trap_if_zero_divisor (put_in_reg_zext64 val))) @@ -832,7 +835,7 @@ ;; ;; TODO: if `y` is -1 then a check that `x` is not INT_MIN is all that's ;; necessary, but right now `y` is checked to not be -1 as well. -(rule (lower (has_type (fits_in_64 ty) (sdiv x y))) +(rule sdiv_base_case (lower (has_type (fits_in_64 ty) (sdiv x y))) (let ((x64 Reg (put_in_reg_sext64 x)) (y64 Reg (put_nonzero_in_reg_sext64 y)) (valid_x64 Reg (trap_if_div_overflow ty x64 y64)) @@ -840,15 +843,23 @@ result)) ;; Helper for extracting an immediate that's not 0 and not -1 from an imm64. +;;@ (spec (sig (args x) (ret)) +;;@ (assume (= (x) (ret)), +;;@ (! (= (0i64:bv) (ret))), +;;@ (! (= (18446744073709551615i64:bv) (ret))) +;;@ )) (decl safe_divisor_from_imm64 (u64) Imm64) (extern extractor safe_divisor_from_imm64 safe_divisor_from_imm64) ;; Special case for `sdiv` where no checks are needed due to division by a ;; constant meaning the checks are always passed. -(rule 1 (lower (has_type (fits_in_64 ty) (sdiv x (iconst (safe_divisor_from_imm64 y))))) +(rule sdiv_safe_divisor 1 (lower (has_type (fits_in_64 ty) (sdiv x (iconst (safe_divisor_from_imm64 y))))) (a64_sdiv $I64 (put_in_reg_sext64 x) (imm ty (ImmExtend.Sign) y))) ;; Helper for placing a `Value` into a `Reg` and validating that it's nonzero. +;;@ (spec (sig (args x) (ret)) +;;@ (assume (= (sign_ext (64) (x)) (ret))) +;;@ (assert (! (= (0i64:bv) (ret))))) (decl put_nonzero_in_reg_sext64 (Value) Reg) (rule -1 (put_nonzero_in_reg_sext64 val) (trap_if_zero_divisor (put_in_reg_sext64 val))) @@ -873,14 +884,14 @@ ;; div rd, x, y ; rd = x / y ;; msub rd, rd, y, x ; rd = x - rd * y -(rule (lower (has_type (fits_in_64 ty) (urem x y))) +(rule urem (lower (has_type (fits_in_64 ty) (urem x y))) (let ((x64 Reg (put_in_reg_zext64 x)) (y64 Reg (put_nonzero_in_reg_zext64 y)) (div Reg (a64_udiv $I64 x64 y64)) (result Reg (msub $I64 div y64 x64))) result)) -(rule (lower (has_type (fits_in_64 ty) (srem x y))) +(rule srem (lower (has_type (fits_in_64 ty) (srem x y))) (let ((x64 Reg (put_in_reg_sext64 x)) (y64 Reg (put_nonzero_in_reg_sext64 y)) (div Reg (a64_sdiv $I64 x64 y64)) diff --git a/cranelift/isle/veri/veri_engine/examples/imul/imul.isle b/cranelift/isle/veri/veri_engine/examples/imul/imul.isle deleted file mode 100644 index 702fa960c9ac..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/imul/imul.isle +++ /dev/null @@ -1,29 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst - (enum -)) - -(type ALUOp3 - (enum - (MAdd) -)) - -(decl alu_rrrr (ALUOp3 Type Reg Reg Reg) Reg) -(extern constructor alu_rrrr alu_rrrr) - -;;@ (spec (sig (args) (r)) -;;@ (assume (= (zero_ext (regwidth) (0i1:bv)) (r)))) -(decl zero_reg () Reg) -(extern constructor zero_reg zero_reg) - -;;@ (spec (sig (args ty, a, b, c) (r)) -;;@ (assume (= (+ (c) (* (a) (b))) (r)))) -(decl madd (Type Reg Reg Reg) Reg) -(rule (madd ty x y z) (alu_rrrr (ALUOp3.MAdd) ty x y z)) - -;; `i64` and smaller. -(rule -3 (lower (has_type (fits_in_64 ty) (imul x y))) - (madd ty x y (zero_reg))) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/ineg/ineg.isle b/cranelift/isle/veri/veri_engine/examples/ineg/ineg.isle deleted file mode 100644 index d39818c98619..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/ineg/ineg.isle +++ /dev/null @@ -1,28 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst - (enum -)) - -(type ALUOp - (enum - (Sub) -)) - -(decl alu_rrr (ALUOp Type Reg Reg) Reg) -(extern constructor alu_rrr alu_rrr) - -;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assume (= (- (a) (b)) (r)))) -(decl sub (Type Reg Reg) Reg) -(rule (sub ty x y) (alu_rrr (ALUOp.Sub) ty x y)) - -;;@ (spec (sig (args) (r)) -;;@ (assume (= (zero_ext (regwidth) (0i1:bv)) (r)))) -(decl zero_reg () Reg) -(extern constructor zero_reg zero_reg) - -(rule (lower (has_type (fits_in_64 ty) (ineg x))) - (sub ty (zero_reg) (put_in_reg x))) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/sdiv/sdiv.isle b/cranelift/isle/veri/veri_engine/examples/sdiv/sdiv.isle deleted file mode 100644 index 6baaf9087b81..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/sdiv/sdiv.isle +++ /dev/null @@ -1,92 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst (enum)) - -(type ALUOp - (enum - (SDiv) -)) - -(decl alu_rrr (ALUOp Type Reg Reg) Reg) -(extern constructor alu_rrr alu_rrr) - -;; Place a `Value` into a register, sign extending it to 64-bits -;;@ (spec (sig (args x) (ret)) -;;@ (assume (= (sign_ext (64) (x)) (ret)))) -(decl put_in_reg_sext64 (Value) Reg) -(extern constructor put_in_reg_sext64 put_in_reg_sext64) -;; (rule 1 (put_in_reg_sext64 val @ (value_type (fits_in_32 ty))) -;; (extend val $true (ty_bits ty) 64)) -;; - -;; Helper for placing a `Value` into a `Reg` and validating that it's nonzero. -;;@ (spec (sig (args x) (ret)) -;;@ (assume (= (sign_ext (64) (x)) (ret)), -;;@ (! (= (0i64:bv) (ret))))) -(decl put_nonzero_in_reg_sext64 (Value) Reg) -(extern constructor put_nonzero_in_reg_sext64 put_nonzero_in_reg_sext64) - -;; (rule -1 (put_nonzero_in_reg_sext64 val) -;; (trap_if_zero_divisor (put_in_reg_sext64 val))) -;; -;; Note that this has a special case where if the `Value` is a constant that's -;; not zero we can skip the zero check. -;;(rule (put_nonzero_in_reg_sext64 (and (value_type ty) -;; (iconst (nonzero_u64_from_imm64 n)))) -;; (imm ty (ImmExtend.Sign) n)) -;; Note that this has a special case where if the `Value` is a constant that's -;; not zero we can skip the zero check. -;;(rule (put_nonzero_in_reg_sext64 (and (value_type ty) -;; (iconst (nonzero_u64_from_imm64 n)))) -;; (imm ty (ImmExtend.Sign) n)) - -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (= (sdiv (x) (y)) (ret)), -;;@ (= (ty) (64i0: isleType)) -;;@ )) -(decl a64_sdiv (Type Reg Reg) Reg) -(rule (a64_sdiv ty x y) (alu_rrr (ALUOp.SDiv) ty x y)) - -;; Verification note: operand type converts to 32/64, so no explicit -;; check for those types needed -;; Check for signed overflow. The only case is min_value / -1. -;; The following checks must be done in 32-bit or 64-bit, depending -;; on the input type. -;; -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (= (x) (ret)), -;;@ (if (= (ty) (32i0:isleType)) -;;@ (! (&& (= (0i32:bv) (extract 31 0 (y))) -;;@ (= (2147483648i32:bv) (extract 31 0 (y))))) -;;@ (! (&& (= (0i64:bv) (y)) -;;@ (= (9223372036854775808i64:bv) (y)))) -;;@ ) -;;@ )) -(decl trap_if_div_overflow (Type Reg Reg) Reg) -(extern constructor trap_if_div_overflow trap_if_div_overflow) - -;; (rule (trap_if_div_overflow ty x y) -;; (let ( -;; ;; Check RHS is -1. -;; (_ Unit (emit (MInst.AluRRImm12 (ALUOp.AddS) (operand_size ty) (writable_zero_reg) y (u8_into_imm12 1)))) - -;; ;; Check LHS is min_value, by subtracting 1 and branching if -;; ;; there is overflow. -;; (_ Unit (emit (MInst.CCmpImm (size_from_ty ty) -;; x -;; (u8_into_uimm5 1) -;; (nzcv $false $false $false $false) -;; (Cond.Eq)))) -;; (_ Unit (emit (MInst.TrapIf (cond_br_cond (Cond.Vs)) -;; (trap_code_integer_overflow)))) -;; ) -;; x)) - -(rule (lower (has_type (fits_in_64 ty) (sdiv x y))) - (let ((x64 Reg (put_in_reg_sext64 x)) - (y64 Reg (put_nonzero_in_reg_sext64 y)) - (valid_x64 Reg (trap_if_div_overflow ty x64 y64)) - (result Reg (a64_sdiv $I64 valid_x64 y64))) - result)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/sdiv/sdiv_safe_const.isle b/cranelift/isle/veri/veri_engine/examples/sdiv/sdiv_safe_const.isle deleted file mode 100644 index 7325a17f1600..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/sdiv/sdiv_safe_const.isle +++ /dev/null @@ -1,80 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst (enum)) - -(type ALUOp - (enum - (SDiv) -)) - -;; Model ImmExtend as an Int, where -;; Sign == 1 and Zero == 0 -(type ImmExtend - (enum - (Zero) - ;;(Sign) -)) - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (1i0: isleType) (ret)))) -(decl ImmExtend.Sign () ImmExtend) -(extern constructor ImmExtend.Sign ImmExtend.Sign) - -(decl alu_rrr (ALUOp Type Reg Reg) Reg) -(extern constructor alu_rrr alu_rrr) - -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (= (sdiv (x) (y)) (ret)), -;;@ (= (ty) (64i0: isleType)) -;;@ )) -(decl a64_sdiv (Type Reg Reg) Reg) -(rule (a64_sdiv ty x y) (alu_rrr (ALUOp.SDiv) ty x y)) - -;;@ (spec (sig (args ty, ext, x) (ret)) -;;@ (assume (|| (= (ext) (0i0:isleType)) (= (ext) (1i0:isleType))), -;;@ (if (= (ext) (0i0:isleType)) -;;@ (= (ret) (zero_ext (regwidth) (conv_to (ty) (x)))) -;;@ (= (ret) (sign_ext (regwidth) (conv_to (ty) (x)))) -;;@ ) -;;@ )) -(decl imm (Type ImmExtend u64) Reg) -(extern constructor imm imm) - -;; Place a `Value` into a register, sign extending it to 64-bits -;;@ (spec (sig (args x) (ret)) -;;@ (assume (= (sign_ext (64) (x)) (ret)))) -(decl put_in_reg_sext64 (Value) Reg) -(extern constructor put_in_reg_sext64 put_in_reg_sext64) -;; (rule 1 (put_in_reg_sext64 val @ (value_type (fits_in_32 ty))) -;; (extend val $true (ty_bits ty) 64)) - -;; Helper for placing a `Value` into a `Reg` and validating that it's nonzero. -;;@ (spec (sig (args x) (ret)) -;;@ (assume (= (sign_ext (64) (x)) (ret)), -;;@ (! (= (0i64:bv) (ret))))) -(decl put_nonzero_in_reg_sext64 (Value) Reg) -(extern constructor put_nonzero_in_reg_sext64 put_nonzero_in_reg_sext64) -;; (rule -1 (put_nonzero_in_reg_sext64 val) -;; (trap_if_zero_divisor (put_in_reg_sext64 val))) - -;; Helper for extracting an immediate that's not 0 and not -1 from an imm64. -;;@ (spec (sig (args x) (ret)) -;;@ (assume (= (x) (ret)), -;;@ (! (= (0i64:bv) (ret))), -;;@ (! (= (18446744073709551615i64:bv) (ret))) -;;@ )) -(decl safe_divisor_from_imm64 (u64) Imm64) -(extern extractor safe_divisor_from_imm64 safe_divisor_from_imm64) - -;; Note that this has a special case where if the `Value` is a constant that's -;; not zero we can skip the zero check. -;;(rule (put_nonzero_in_reg_sext64 (and (value_type ty) -;; (iconst (nonzero_u64_from_imm64 n)))) -;; (imm ty (ImmExtend.Sign) n)) - -;; Special case for `sdiv` where no checks are needed due to division by a -;; constant meaning the checks are always passed. -(rule 1 (lower (has_type (fits_in_64 ty) (sdiv x (iconst (safe_divisor_from_imm64 y))))) - (a64_sdiv $I64 (put_in_reg_sext64 x) (imm ty (ImmExtend.Sign) y))) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/udiv/udiv.isle b/cranelift/isle/veri/veri_engine/examples/udiv/udiv.isle deleted file mode 100644 index 044710eebdd9..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/udiv/udiv.isle +++ /dev/null @@ -1,43 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst (enum)) - -(type ALUOp - (enum - (UDiv) -)) - -(decl alu_rrr (ALUOp Type Reg Reg) Reg) -(extern constructor alu_rrr alu_rrr) - -;;@ (spec (sig (args x) (ret)) -;;@ (assume (= (zero_ext (64) (x)) (ret)))) -(decl put_in_reg_zext64 (Value) Reg) -(extern constructor put_in_reg_zext64 put_in_reg_zext64) - -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (= (/ (x) (y)) (ret)), -;;@ (= (ty) (64i0: isleType)) -;;@ )) -(decl a64_udiv (Type Reg Reg) Reg) -(rule (a64_udiv ty x y) (alu_rrr (ALUOp.UDiv) ty x y)) - -;;@ (spec (sig (args x) (ret)) -;;@ (assume (= (zero_ext (64) (x)) (ret)), -;;@ (! (= (0i64:bv) (ret))))) -(decl put_nonzero_in_reg_zext64 (Value) Reg) -(extern constructor put_nonzero_in_reg_zext64 put_nonzero_in_reg_zext64) - -;; (rule -1 (put_nonzero_in_reg_zext64 val) -;; (trap_if_zero_divisor (put_in_reg_zext64 val))) -;; -;; (rule (put_nonzero_in_reg_zext64 (and (value_type ty) -;; (iconst (nonzero_u64_from_imm64 n)))) -;; (imm ty (ImmExtend.Zero) n)) - -;; Note that aarch64's `udiv` doesn't trap so to respect the semantics of -;; CLIF's `udiv` the check for zero needs to be manually performed. -(rule (lower (has_type (fits_in_64 ty) (udiv x y))) - (a64_udiv $I64 (put_in_reg_zext64 x) (put_nonzero_in_reg_zext64 y))) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/tests/veri.rs b/cranelift/isle/veri/veri_engine/tests/veri.rs index cfcbda22f92d..22148d5009f3 100644 --- a/cranelift/isle/veri/veri_engine/tests/veri.rs +++ b/cranelift/isle/veri/veri_engine/tests/veri.rs @@ -730,22 +730,22 @@ fn test_broken_isub_shift() { } #[test] -fn test_ineg() { +fn test_named_ineg_base_case() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/ineg/ineg.isle", - "ineg".to_string(), + test_aarch64_rule_with_lhs_termname( + "ineg_base_case", + "ineg", lte_64_success_result(), ) }) } #[test] -fn test_mul() { +fn test_imul_base_case() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/imul/imul.isle", - "imul".to_string(), + test_aarch64_rule_with_lhs_termname( + "imul_base_case", + "imul", // Too slow right now: https://github.com/avanhatt/wasmtime/issues/36 vec![ (Bitwidth::I8, VerificationResult::Success), @@ -757,12 +757,13 @@ fn test_mul() { }); } +// TODO traps https://github.com/avanhatt/wasmtime/issues/31 #[test] -fn test_udiv() { +fn test_named_udiv() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/udiv/udiv.isle", - "udiv".to_string(), + test_aarch64_rule_with_lhs_termname( + "udiv", + "udiv", // Too slow right now: https://github.com/avanhatt/wasmtime/issues/36 vec![ (Bitwidth::I8, VerificationResult::Success), @@ -797,11 +798,11 @@ fn test_broken_udiv() { } #[test] -fn test_sdiv() { +fn test_named_sdiv_base_case() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/sdiv/sdiv.isle", - "sdiv".to_string(), + test_aarch64_rule_with_lhs_termname( + "sdiv_base_case", + "sdiv", vec![ (Bitwidth::I8, VerificationResult::Success), // Too slow right now: https://github.com/avanhatt/wasmtime/issues/36 @@ -814,11 +815,11 @@ fn test_sdiv() { } #[test] -fn test_sdiv_safe_const() { +fn test_named_sdiv_safe_divisor() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/sdiv/sdiv_safe_const.isle", - "sdiv".to_string(), + test_aarch64_rule_with_lhs_termname( + "sdiv_safe_divisor", + "sdiv", vec![ (Bitwidth::I8, VerificationResult::Success), // Too slow right now: https://github.com/avanhatt/wasmtime/issues/36 From 211dc84992cd742f7d77fc9db3e71ea263ae1a53 Mon Sep 17 00:00:00 2001 From: Alexa VanHattum Date: Mon, 10 Apr 2023 23:15:49 -0400 Subject: [PATCH 09/30] rem --- .../veri/veri_engine/examples/srem/srem.isle | 51 ------------------- .../veri/veri_engine/examples/urem/urem.isle | 51 ------------------- cranelift/isle/veri/veri_engine/tests/veri.rs | 24 ++++----- 3 files changed, 12 insertions(+), 114 deletions(-) delete mode 100644 cranelift/isle/veri/veri_engine/examples/srem/srem.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/urem/urem.isle diff --git a/cranelift/isle/veri/veri_engine/examples/srem/srem.isle b/cranelift/isle/veri/veri_engine/examples/srem/srem.isle deleted file mode 100644 index a1b6955a0c0d..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/srem/srem.isle +++ /dev/null @@ -1,51 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst (enum)) - -(type ALUOp - (enum - (SDiv) -)) - -(type ALUOp3 - (enum - (MSub) -)) - -(decl alu_rrr (ALUOp Type Reg Reg) Reg) -(extern constructor alu_rrr alu_rrr) - -(decl alu_rrrr (ALUOp3 Type Reg Reg Reg) Reg) -(extern constructor alu_rrrr alu_rrrr) - -;;@ (spec (sig (args ty, a, b, c) (r)) -;;@ (assume (= (- (c) (* (a) (b))) (r)))) -(decl msub (Type Reg Reg Reg) Reg) -(rule (msub ty x y z) (alu_rrrr (ALUOp3.MSub) ty x y z)) - -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (= (sdiv (x) (y)) (ret)), -;;@ (= (ty) (64i0: isleType)) -;;@ )) -(decl a64_sdiv (Type Reg Reg) Reg) -(rule (a64_sdiv ty x y) (alu_rrr (ALUOp.SDiv) ty x y)) - -;;@ (spec (sig (args x) (ret)) -;;@ (assume (= (sign_ext (64) (x)) (ret)), -;;@ (! (= (0i64:bv) (ret))))) -(decl put_nonzero_in_reg_sext64 (Value) Reg) -(extern constructor put_nonzero_in_reg_sext64 put_nonzero_in_reg_sext64) - -;;@ (spec (sig (args x) (ret)) -;;@ (assume (= (sign_ext (64) (x)) (ret)))) -(decl put_in_reg_sext64 (Value) Reg) -(extern constructor put_in_reg_sext64 put_in_reg_sext64) - -(rule (lower (has_type (fits_in_64 ty) (srem x y))) - (let ((x64 Reg (put_in_reg_sext64 x)) - (y64 Reg (put_nonzero_in_reg_sext64 y)) - (div Reg (a64_sdiv $I64 x64 y64)) - (result Reg (msub $I64 div y64 x64))) - result)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/urem/urem.isle b/cranelift/isle/veri/veri_engine/examples/urem/urem.isle deleted file mode 100644 index 136a1943579c..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/urem/urem.isle +++ /dev/null @@ -1,51 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst (enum)) - -(type ALUOp - (enum - (UDiv) -)) - -(type ALUOp3 - (enum - (MSub) -)) - -(decl alu_rrr (ALUOp Type Reg Reg) Reg) -(extern constructor alu_rrr alu_rrr) - -(decl alu_rrrr (ALUOp3 Type Reg Reg Reg) Reg) -(extern constructor alu_rrrr alu_rrrr) - -;;@ (spec (sig (args ty, a, b, c) (r)) -;;@ (assume (= (- (c) (* (a) (b))) (r)))) -(decl msub (Type Reg Reg Reg) Reg) -(rule (msub ty x y z) (alu_rrrr (ALUOp3.MSub) ty x y z)) - -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (= (/ (x) (y)) (ret)), -;;@ (= (ty) (64i0: isleType)) -;;@ )) -(decl a64_udiv (Type Reg Reg) Reg) -(rule (a64_udiv ty x y) (alu_rrr (ALUOp.UDiv) ty x y)) - -;;@ (spec (sig (args x) (ret)) -;;@ (assume (= (zero_ext (64) (x)) (ret)), -;;@ (! (= (0i64:bv) (ret))))) -(decl put_nonzero_in_reg_zext64 (Value) Reg) -(extern constructor put_nonzero_in_reg_zext64 put_nonzero_in_reg_zext64) - -;;@ (spec (sig (args x) (ret)) -;;@ (assume (= (zero_ext (64) (x)) (ret)))) -(decl put_in_reg_zext64 (Value) Reg) -(extern constructor put_in_reg_zext64 put_in_reg_zext64) - -(rule (lower (has_type (fits_in_64 ty) (urem x y))) - (let ((x64 Reg (put_in_reg_zext64 x)) - (y64 Reg (put_nonzero_in_reg_zext64 y)) - (div Reg (a64_udiv $I64 x64 y64)) - (result Reg (msub $I64 div y64 x64))) - result)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/tests/veri.rs b/cranelift/isle/veri/veri_engine/tests/veri.rs index 22148d5009f3..649c9077c778 100644 --- a/cranelift/isle/veri/veri_engine/tests/veri.rs +++ b/cranelift/isle/veri/veri_engine/tests/veri.rs @@ -879,11 +879,11 @@ fn test_broken_sdiv() { } #[test] -fn test_srem() { +fn test_named_srem() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/srem/srem.isle", - "srem".to_string(), + test_aarch64_rule_with_lhs_termname( + "srem", + "srem", vec![ (Bitwidth::I8, VerificationResult::Success), // Too slow right now: https://github.com/avanhatt/wasmtime/issues/36 @@ -896,11 +896,11 @@ fn test_srem() { } #[test] -fn test_urem() { +fn test_named_urem() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/urem/urem.isle", - "urem".to_string(), + test_aarch64_rule_with_lhs_termname( + "urem", + "urem", vec![ (Bitwidth::I8, VerificationResult::Success), // Too slow right now: https://github.com/avanhatt/wasmtime/issues/36 @@ -913,11 +913,11 @@ fn test_urem() { } #[test] -fn test_urem_concrete() { +fn test_named_urem_concrete() { run_and_retry(|| { - test_concrete_input_from_file_with_lhs_termname( - "./examples/urem/urem.isle", - "urem".to_string(), + test_concrete_aarch64_rule_with_lhs_termname( + "urem", + "urem", false, ConcreteTest { termname: "urem".to_string(), From 4f9ff293e1071aec4776ef35aaa73f4d5bc15a6c Mon Sep 17 00:00:00 2001 From: Alexa VanHattum Date: Tue, 11 Apr 2023 10:57:20 -0400 Subject: [PATCH 10/30] more b-logic --- cranelift/codegen/src/clif_lower.isle | 2 + cranelift/codegen/src/isa/aarch64/inst.isle | 73 +++++++++++++ cranelift/codegen/src/isa/aarch64/lower.isle | 20 ++-- .../veri_engine/examples/band/64_band.isle | 73 ------------- .../examples/band/fits_in_32_band.isle | 75 ------------- .../veri/veri_engine/examples/bor/64_bor.isle | 73 ------------- .../examples/bor/fits_in_32_bor.isle | 73 ------------- .../veri_engine/examples/bxor/64_bxor.isle | 73 ------------- .../examples/bxor/fits_in_32_bxor.isle | 73 ------------- .../veri_engine/examples/sextend/sextend.isle | 31 ------ .../veri_engine/examples/uextend/uextend.isle | 32 ------ cranelift/isle/veri/veri_engine/src/widths.rs | 1 + cranelift/isle/veri/veri_engine/tests/veri.rs | 100 ++++++++++++------ 13 files changed, 152 insertions(+), 547 deletions(-) delete mode 100644 cranelift/isle/veri/veri_engine/examples/band/64_band.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/band/fits_in_32_band.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/bor/64_bor.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/bor/fits_in_32_bor.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/bxor/64_bxor.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/bxor/fits_in_32_bxor.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/sextend/sextend.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/uextend/uextend.isle diff --git a/cranelift/codegen/src/clif_lower.isle b/cranelift/codegen/src/clif_lower.isle index 5f93f733dab1..f6c15e73b0c2 100644 --- a/cranelift/codegen/src/clif_lower.isle +++ b/cranelift/codegen/src/clif_lower.isle @@ -1038,6 +1038,8 @@ (inst_data (InstructionData.Unary (Opcode.Bnot) x)) ) +;;@ (spec (sig (args x, y) (ret)) +;;@ (assume (= (& (x) (~ (y))) (ret)))) (decl band_not (Value Value) Inst) (extractor (band_not x y) diff --git a/cranelift/codegen/src/isa/aarch64/inst.isle b/cranelift/codegen/src/isa/aarch64/inst.isle index 9c2ceb05fc66..f6cd128e81cf 100644 --- a/cranelift/codegen/src/isa/aarch64/inst.isle +++ b/cranelift/codegen/src/isa/aarch64/inst.isle @@ -985,6 +985,54 @@ (SbcS) )) +;; Verification annotations: +;;@ (spec (sig (args) (r)) (assume (= (0i8:bv8) (r)))) +;;decl ALUOp.Add +;;@ (spec (sig (args) (r)) (assume (= (1i8:bv8) (r)))) +;;decl ALUOp.Sub +;;@ (spec (sig (args) (r)) (assume (= (2i8:bv8) (r)))) +;;decl ALUOp.Orr +;;@ (spec (sig (args) (r)) (assume (= (3i8:bv8) (r)))) +;;decl ALUOp.OrrNot +;;@ (spec (sig (args) (r)) (assume (= (4i8:bv8) (r)))) +;;decl ALUOp.And +;;@ (spec (sig (args) (r)) (assume (= (5i8:bv8) (r)))) +;;decl ALUOp.AndS +;;@ (spec (sig (args) (r)) (assume (= (6i8:bv8) (r)))) +;;decl ALUOp.AndNot +;;@ (spec (sig (args) (r)) (assume (= (7i8:bv8) (r)))) +;;decl ALUOp.Eor +;;@ (spec (sig (args) (r)) (assume (= (8i8:bv8) (r)))) +;;decl ALUOp.EorNot +;;@ (spec (sig (args) (r)) (assume (= (9i8:bv8) (r)))) +;;decl ALUOp.AddS +;;@ (spec (sig (args) (r)) (assume (= (10i8:bv8) (r)))) +;;decl ALUOp.SubS +;;@ (spec (sig (args) (r)) (assume (= (11i8:bv8) (r)))) +;;decl ALUOp.SMulH +;;@ (spec (sig (args) (r)) (assume (= (12i8:bv8) (r)))) +;;decl ALUOp.UMulH +;;@ (spec (sig (args) (r)) (assume (= (13i8:bv8) (r)))) +;;decl ALUOp.SDiv +;;@ (spec (sig (args) (r)) (assume (= (14i8:bv8) (r)))) +;;decl ALUOp.UDiv +;;@ (spec (sig (args) (r)) (assume (= (15i8:bv8) (r)))) +;;decl ALUOp.RotR +;;@ (spec (sig (args) (r)) (assume (= (16i8:bv8) (r)))) +;;decl ALUOp.Lsr +;;@ (spec (sig (args) (r)) (assume (= (17i8:bv8) (r)))) +;;decl ALUOp.Asr +;;@ (spec (sig (args) (r)) (assume (= (18i8:bv8) (r)))) +;;decl ALUOp.Lsl +;;@ (spec (sig (args) (r)) (assume (= (19i8:bv8) (r)))) +;;decl ALUOp.Adc +;;@ (spec (sig (args) (r)) (assume (= (20i8:bv8) (r)))) +;;decl ALUOp.AdcS +;;@ (spec (sig (args) (r)) (assume (= (21i8:bv8) (r)))) +;;decl ALUOp.Sbc +;;@ (spec (sig (args) (r)) (assume (= (22i8:bv8) (r)))) +;;decl ALUOp.SbcS + ;; An ALU operation with three arguments. (type ALUOp3 (enum @@ -2208,6 +2256,12 @@ dst)) ;; Helper for emitting `MInst.Extend` instructions. +;;@ (spec (sig (args a, b, c, d) (ret)) +;;@ (assume (if (b) +;;@ (= (ret) (sign_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) +;;@ (= (ret) (zero_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) +;;@ ) +;;@ )) (decl extend (Reg bool u8 u8) Reg) (rule (extend rn signed from_bits to_bits) (let ((dst WritableReg (temp_writable_reg $I64)) @@ -3065,6 +3119,16 @@ ;; Helper for generating either an `AluRRR`, `AluRRRShift`, or `AluRRImmLogic` ;; instruction depending on the input. Note that this requires that the `ALUOp` ;; specified is commutative. +;;@ (spec (sig (args op, t, a, b) (ret)) +;;@ (assume +;;@ (= (ret) +;;@ (conv_to (regwidth) +;;@ (switch (op) +;;@ ((2i8:bv8) (| (a) (b))) +;;@ ((4i8:bv8) (& (a) (b))) +;;@ ((7i8:bv8) (xor (a) (b))) +;;@ ))) +;;@ )) (decl alu_rs_imm_logic_commutative (ALUOp Type Value Value) Reg) ;; Base case of operating on registers. @@ -3089,6 +3153,15 @@ ;; Same as `alu_rs_imm_logic_commutative` above, except that it doesn't require ;; that the operation is commutative. +;;@ (spec (sig (args op, t, a, b) (ret)) +;;@ (assume +;;@ (= (ret) +;;@ (conv_to (regwidth) +;;@ (switch (op) +;;@ ((3i8:bv8) (| (a) (~ (b)))) +;;@ ((6i8:bv8) (& (a) (~ (b)))) +;;@ ))) +;;@ )) (decl alu_rs_imm_logic (ALUOp Type Value Value) Reg) (rule -1 (alu_rs_imm_logic op ty x y) (alu_rrr op ty x y)) diff --git a/cranelift/codegen/src/isa/aarch64/lower.isle b/cranelift/codegen/src/isa/aarch64/lower.isle index 52c69a078f3d..4d67ca58d40e 100644 --- a/cranelift/codegen/src/isa/aarch64/lower.isle +++ b/cranelift/codegen/src/isa/aarch64/lower.isle @@ -958,7 +958,7 @@ ;; General rule for extending input to an output which fits in a single ;; register. -(rule -2 (lower (has_type (fits_in_64 out) (uextend x @ (value_type in)))) +(rule uextend -2 (lower (has_type (fits_in_64 out) (uextend x @ (value_type in)))) (extend x $false (ty_bits in) (ty_bits out))) ;; Extraction of a vector lane automatically extends as necessary, so we can @@ -991,7 +991,7 @@ ;; General rule for extending input to an output which fits in a single ;; register. -(rule -4 (lower (has_type (fits_in_64 out) (sextend x @ (value_type in)))) +(rule sextend -4 (lower (has_type (fits_in_64 out) (sextend x @ (value_type in)))) (extend x $true (ty_bits in) (ty_bits out))) ;; Extraction of a vector lane automatically extends as necessary, so we can @@ -1067,10 +1067,10 @@ ;;;; Rules for `band` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(rule -1 (lower (has_type (fits_in_32 ty) (band x y))) +(rule band_fits_in_32 -1 (lower (has_type (fits_in_32 ty) (band x y))) (alu_rs_imm_logic_commutative (ALUOp.And) ty x y)) -(rule (lower (has_type $I64 (band x y))) +(rule band_64 (lower (has_type $I64 (band x y))) (alu_rs_imm_logic_commutative (ALUOp.And) $I64 x y)) (rule (lower (has_type $I128 (band x y))) (i128_alu_bitop (ALUOp.And) $I64 x y)) @@ -1080,10 +1080,10 @@ ;;;; Rules for `bor` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(rule -1 (lower (has_type (fits_in_32 ty) (bor x y))) +(rule bor_fits_in_32 -1 (lower (has_type (fits_in_32 ty) (bor x y))) (alu_rs_imm_logic_commutative (ALUOp.Orr) ty x y)) -(rule (lower (has_type $I64 (bor x y))) +(rule bor_64 (lower (has_type $I64 (bor x y))) (alu_rs_imm_logic_commutative (ALUOp.Orr) $I64 x y)) (rule (lower (has_type $I128 (bor x y))) (i128_alu_bitop (ALUOp.Orr) $I64 x y)) @@ -1093,10 +1093,10 @@ ;;;; Rules for `bxor` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(rule -1 (lower (has_type (fits_in_32 ty) (bxor x y))) +(rule bxor_fits_in_32 -1 (lower (has_type (fits_in_32 ty) (bxor x y))) (alu_rs_imm_logic_commutative (ALUOp.Eor) ty x y)) -(rule (lower (has_type $I64 (bxor x y))) +(rule bxor_64 (lower (has_type $I64 (bxor x y))) (alu_rs_imm_logic_commutative (ALUOp.Eor) $I64 x y)) (rule (lower (has_type $I128 (bxor x y))) (i128_alu_bitop (ALUOp.Eor) $I64 x y)) @@ -1106,10 +1106,10 @@ ;;;; Rules for `band_not` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(rule -1 (lower (has_type (fits_in_32 ty) (band_not x y))) +(rule band_not_fits_in_32 -1 (lower (has_type (fits_in_32 ty) (band_not x y))) (alu_rs_imm_logic (ALUOp.AndNot) ty x y)) -(rule (lower (has_type $I64 (band_not x y))) +(rule band_not_64 (lower (has_type $I64 (band_not x y))) (alu_rs_imm_logic (ALUOp.AndNot) $I64 x y)) (rule (lower (has_type $I128 (band_not x y))) (i128_alu_bitop (ALUOp.AndNot) $I64 x y)) diff --git a/cranelift/isle/veri/veri_engine/examples/band/64_band.isle b/cranelift/isle/veri/veri_engine/examples/band/64_band.isle deleted file mode 100644 index b7c5a6a10a78..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/band/64_band.isle +++ /dev/null @@ -1,73 +0,0 @@ - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -;; Instruction formats. -(type MInst - (enum -)) - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (0i64:bv) (ret)))) -;;decl ALUOp.And - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (1i64:bv) (ret)))) -;;decl ALUOp.Orr - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (2i64:bv) (ret)))) -;;decl ALUOp.Eor - -;; An ALU operation. This can be paired with several instruction formats -;; below (see `Inst`) in any combination. -(type ALUOp - (enum - (Add) - (Sub) - (Orr) - (OrrNot) - (And) - (AndS) - (AndNot) - ;; XOR (AArch64 calls this "EOR") - (Eor) - ;; XNOR (AArch64 calls this "EOR-NOT") - (EorNot) - ;; Add, setting flags - (AddS) - ;; Sub, setting flags - (SubS) - ;; Signed multiply, high-word result - (SMulH) - ;; Unsigned multiply, high-word result - (UMulH) - (SDiv) - (UDiv) - (RotR) - (Lsr) - (Asr) - (Lsl) - ;; Add with carry - (Adc) - ;; Add with carry, settings flags - (AdcS) - ;; Subtract with carry - (Sbc) - ;; Subtract with carry, settings flags - (SbcS) -)) - -;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assume (= (ret) (switch (op) -;;@ ((0i64:bv) (& (a) (b))) -;;@ ((1i64:bv) (| (a) (b))) -;;@ ((2i64:bv) (xor (a) (b))) -;;@ )) -;;@ )) -(decl alu_rs_imm_logic_commutative (ALUOp Type Value Value) Reg) -(extern constructor alu_rs_imm_logic_commutative alu_rs_imm_logic_commutative) - -(rule (lower (has_type $I64 (band x y))) - (alu_rs_imm_logic_commutative (ALUOp.And) $I64 x y)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/band/fits_in_32_band.isle b/cranelift/isle/veri/veri_engine/examples/band/fits_in_32_band.isle deleted file mode 100644 index 02021a345a05..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/band/fits_in_32_band.isle +++ /dev/null @@ -1,75 +0,0 @@ - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -;; Instruction formats. -(type MInst - (enum -)) - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (0i64:bv) (ret)))) -;;decl ALUOp.And - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (1i64:bv) (ret)))) -;;decl ALUOp.Orr - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (2i64:bv) (ret)))) -;;decl ALUOp.Eor - -;; An ALU operation. This can be paired with several instruction formats -;; below (see `Inst`) in any combination. -(type ALUOp - (enum - (Add) - (Sub) - (Orr) - (OrrNot) - (And) - (AndS) - (AndNot) - ;; XOR (AArch64 calls this "EOR") - (Eor) - ;; XNOR (AArch64 calls this "EOR-NOT") - (EorNot) - ;; Add, setting flags - (AddS) - ;; Sub, setting flags - (SubS) - ;; Signed multiply, high-word result - (SMulH) - ;; Unsigned multiply, high-word result - (UMulH) - (SDiv) - (UDiv) - (RotR) - (Lsr) - (Asr) - (Lsl) - ;; Add with carry - (Adc) - ;; Add with carry, settings flags - (AdcS) - ;; Subtract with carry - (Sbc) - ;; Subtract with carry, settings flags - (SbcS) -)) - -;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assume (= (ret) (switch (op) -;;@ ((0i64:bv) (& (a) (b))) -;;@ ((1i64:bv) (| (a) (b))) -;;@ ((2i64:bv) (xor (a) (b))) -;;@ )) -;;@ )) -(decl alu_rs_imm_logic_commutative (ALUOp Type Value Value) Reg) -(extern constructor alu_rs_imm_logic_commutative alu_rs_imm_logic_commutative) - -(rule -1 (lower (has_type (fits_in_32 ty) (band x y))) - (alu_rs_imm_logic_commutative (ALUOp.And) ty x y)) - -;; Should we approach this as a dependent types problem? \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/bor/64_bor.isle b/cranelift/isle/veri/veri_engine/examples/bor/64_bor.isle deleted file mode 100644 index 52541db81297..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/bor/64_bor.isle +++ /dev/null @@ -1,73 +0,0 @@ - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -;; Instruction formats. -(type MInst - (enum -)) - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (0i64:bv) (ret)))) -;;decl ALUOp.And - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (1i64:bv) (ret)))) -;;decl ALUOp.Orr - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (2i64:bv) (ret)))) -;;decl ALUOp.Eor - -;; An ALU operation. This can be paired with several instruction formats -;; below (see `Inst`) in any combination. -(type ALUOp - (enum - (Add) - (Sub) - (Orr) - (OrrNot) - (And) - (AndS) - (AndNot) - ;; XOR (AArch64 calls this "EOR") - (Eor) - ;; XNOR (AArch64 calls this "EOR-NOT") - (EorNot) - ;; Add, setting flags - (AddS) - ;; Sub, setting flags - (SubS) - ;; Signed multiply, high-word result - (SMulH) - ;; Unsigned multiply, high-word result - (UMulH) - (SDiv) - (UDiv) - (RotR) - (Lsr) - (Asr) - (Lsl) - ;; Add with carry - (Adc) - ;; Add with carry, settings flags - (AdcS) - ;; Subtract with carry - (Sbc) - ;; Subtract with carry, settings flags - (SbcS) -)) - -;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assume (= (ret) (switch (op) -;;@ ((0i64:bv) (& (a) (b))) -;;@ ((1i64:bv) (| (a) (b))) -;;@ ((2i64:bv) (xor (a) (b))) -;;@ )) -;;@ )) -(decl alu_rs_imm_logic_commutative (ALUOp Type Value Value) Reg) -(extern constructor alu_rs_imm_logic_commutative alu_rs_imm_logic_commutative) - -(rule (lower (has_type $I64 (bor x y))) - (alu_rs_imm_logic_commutative (ALUOp.Orr) $I64 x y)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/bor/fits_in_32_bor.isle b/cranelift/isle/veri/veri_engine/examples/bor/fits_in_32_bor.isle deleted file mode 100644 index 9f0e77393259..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/bor/fits_in_32_bor.isle +++ /dev/null @@ -1,73 +0,0 @@ - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -;; Instruction formats. -(type MInst - (enum -)) - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (0i64:bv) (ret)))) -;;decl ALUOp.And - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (1i64:bv) (ret)))) -;;decl ALUOp.Orr - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (2i64:bv) (ret)))) -;;decl ALUOp.Eor - -;; An ALU operation. This can be paired with several instruction formats -;; below (see `Inst`) in any combination. -(type ALUOp - (enum - (Add) - (Sub) - (Orr) - (OrrNot) - (And) - (AndS) - (AndNot) - ;; XOR (AArch64 calls this "EOR") - (Eor) - ;; XNOR (AArch64 calls this "EOR-NOT") - (EorNot) - ;; Add, setting flags - (AddS) - ;; Sub, setting flags - (SubS) - ;; Signed multiply, high-word result - (SMulH) - ;; Unsigned multiply, high-word result - (UMulH) - (SDiv) - (UDiv) - (RotR) - (Lsr) - (Asr) - (Lsl) - ;; Add with carry - (Adc) - ;; Add with carry, settings flags - (AdcS) - ;; Subtract with carry - (Sbc) - ;; Subtract with carry, settings flags - (SbcS) -)) - -;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assume (= (ret) (switch (op) -;;@ ((0i64:bv) (& (a) (b))) -;;@ ((1i64:bv) (| (a) (b))) -;;@ ((2i64:bv) (xor (a) (b))) -;;@ )) -;;@ )) -(decl alu_rs_imm_logic_commutative (ALUOp Type Value Value) Reg) -(extern constructor alu_rs_imm_logic_commutative alu_rs_imm_logic_commutative) - -(rule -1 (lower (has_type (fits_in_32 ty) (bor x y))) - (alu_rs_imm_logic_commutative (ALUOp.Orr) ty x y)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/bxor/64_bxor.isle b/cranelift/isle/veri/veri_engine/examples/bxor/64_bxor.isle deleted file mode 100644 index 90de4a0aa0a7..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/bxor/64_bxor.isle +++ /dev/null @@ -1,73 +0,0 @@ - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -;; Instruction formats. -(type MInst - (enum -)) - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (0i64:bv) (ret)))) -;;decl ALUOp.And - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (1i64:bv) (ret)))) -;;decl ALUOp.Orr - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (2i64:bv) (ret)))) -;;decl ALUOp.Eor - -;; An ALU operation. This can be paired with several instruction formats -;; below (see `Inst`) in any combination. -(type ALUOp - (enum - (Add) - (Sub) - (Orr) - (OrrNot) - (And) - (AndS) - (AndNot) - ;; XOR (AArch64 calls this "EOR") - (Eor) - ;; XNOR (AArch64 calls this "EOR-NOT") - (EorNot) - ;; Add, setting flags - (AddS) - ;; Sub, setting flags - (SubS) - ;; Signed multiply, high-word result - (SMulH) - ;; Unsigned multiply, high-word result - (UMulH) - (SDiv) - (UDiv) - (RotR) - (Lsr) - (Asr) - (Lsl) - ;; Add with carry - (Adc) - ;; Add with carry, settings flags - (AdcS) - ;; Subtract with carry - (Sbc) - ;; Subtract with carry, settings flags - (SbcS) -)) - -;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assume (= (ret) (switch (op) -;;@ ((0i64:bv) (& (a) (b))) -;;@ ((1i64:bv) (| (a) (b))) -;;@ ((2i64:bv) (xor (a) (b))) -;;@ )) -;;@ )) -(decl alu_rs_imm_logic_commutative (ALUOp Type Value Value) Reg) -(extern constructor alu_rs_imm_logic_commutative alu_rs_imm_logic_commutative) - -(rule (lower (has_type $I64 (bxor x y))) - (alu_rs_imm_logic_commutative (ALUOp.Eor) $I64 x y)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/bxor/fits_in_32_bxor.isle b/cranelift/isle/veri/veri_engine/examples/bxor/fits_in_32_bxor.isle deleted file mode 100644 index 75c01ad3fed1..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/bxor/fits_in_32_bxor.isle +++ /dev/null @@ -1,73 +0,0 @@ - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -;; Instruction formats. -(type MInst - (enum -)) - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (0i64:bv) (ret)))) -;;decl ALUOp.And - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (1i64:bv) (ret)))) -;;decl ALUOp.Orr - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (2i64:bv) (ret)))) -;;decl ALUOp.Eor - -;; An ALU operation. This can be paired with several instruction formats -;; below (see `Inst`) in any combination. -(type ALUOp - (enum - (Add) - (Sub) - (Orr) - (OrrNot) - (And) - (AndS) - (AndNot) - ;; XOR (AArch64 calls this "EOR") - (Eor) - ;; XNOR (AArch64 calls this "EOR-NOT") - (EorNot) - ;; Add, setting flags - (AddS) - ;; Sub, setting flags - (SubS) - ;; Signed multiply, high-word result - (SMulH) - ;; Unsigned multiply, high-word result - (UMulH) - (SDiv) - (UDiv) - (RotR) - (Lsr) - (Asr) - (Lsl) - ;; Add with carry - (Adc) - ;; Add with carry, settings flags - (AdcS) - ;; Subtract with carry - (Sbc) - ;; Subtract with carry, settings flags - (SbcS) -)) - -;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assume (= (ret) (switch (op) -;;@ ((0i64:bv) (& (a) (b))) -;;@ ((1i64:bv) (| (a) (b))) -;;@ ((2i64:bv) (xor (a) (b))) -;;@ )) -;;@ )) -(decl alu_rs_imm_logic_commutative (ALUOp Type Value Value) Reg) -(extern constructor alu_rs_imm_logic_commutative alu_rs_imm_logic_commutative) - -(rule -1 (lower (has_type (fits_in_32 ty) (bxor x y))) - (alu_rs_imm_logic_commutative (ALUOp.Eor) ty x y)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/sextend/sextend.isle b/cranelift/isle/veri/veri_engine/examples/sextend/sextend.isle deleted file mode 100644 index 9e49bb20b1fc..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/sextend/sextend.isle +++ /dev/null @@ -1,31 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -;; Instruction formats. -(type MInst - (enum - ;; A sign- or zero-extend operation. - (Extend - (rd WritableReg) - (rn Reg) - (signed bool) - (from_bits u8) - (to_bits u8)) -)) - -;;@ (spec (sig (args a, b, c, d) (ret)) -;;@ (assume (if (b) -;;@ (= (ret) (sign_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) -;;@ (= (ret) (zero_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) -;;@ ) -;;@ )) -(decl extend (Reg bool u8 u8) Reg) -(rule (extend rn signed from_bits to_bits) - (let ((dst WritableReg (temp_writable_reg $I64)) - (_ Unit (emit (MInst.Extend dst rn signed from_bits to_bits)))) - dst)) - - -(rule -4 (lower (has_type (fits_in_64 out) (sextend x @ (value_type in)))) - (extend x $true (ty_bits in) (ty_bits out))) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/uextend/uextend.isle b/cranelift/isle/veri/veri_engine/examples/uextend/uextend.isle deleted file mode 100644 index b7d1c2a2fd0a..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/uextend/uextend.isle +++ /dev/null @@ -1,32 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -;; Instruction formats. -(type MInst - (enum - ;; A sign- or zero-extend operation. - (Extend - (rd WritableReg) - (rn Reg) - (signed bool) - (from_bits u8) - (to_bits u8)) -)) - -;;@ (spec (sig (args a, b, c, d) (ret)) -;;@ (assume (if (b) -;;@ (= (ret) (sign_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) -;;@ (= (ret) (zero_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) -;;@ ) -;;@ )) -(decl extend (Reg bool u8 u8) Reg) -(rule (extend rn signed from_bits to_bits) - (let ((dst WritableReg (temp_writable_reg $I64)) - (_ Unit (emit (MInst.Extend dst rn signed from_bits to_bits)))) - dst)) - -;; General rule for extending input to an output which fits in a single -;; register. -(rule (lower (has_type (fits_in_64 out) (uextend x @ (value_type in)))) - (extend x $false (ty_bits in) (ty_bits out))) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/src/widths.rs b/cranelift/isle/veri/veri_engine/src/widths.rs index 19f16508f0b2..195198edc095 100644 --- a/cranelift/isle/veri/veri_engine/src/widths.rs +++ b/cranelift/isle/veri/veri_engine/src/widths.rs @@ -96,6 +96,7 @@ pub fn isle_inst_types() -> HashMap<&'static str, Vec> { widths.insert("isub", bv_binary_8_to_64.clone()); widths.insert("imul", bv_binary_8_to_64.clone()); widths.insert("band", bv_binary_8_to_64.clone()); + widths.insert("band_not", bv_binary_8_to_64.clone()); widths.insert("bor", bv_binary_8_to_64.clone()); widths.insert("bxor", bv_binary_8_to_64.clone()); widths.insert("ushr", bv_binary_8_to_64.clone()); diff --git a/cranelift/isle/veri/veri_engine/tests/veri.rs b/cranelift/isle/veri/veri_engine/tests/veri.rs index 649c9077c778..9755ce98a1e9 100644 --- a/cranelift/isle/veri/veri_engine/tests/veri.rs +++ b/cranelift/isle/veri/veri_engine/tests/veri.rs @@ -941,22 +941,22 @@ fn test_named_urem_concrete() { } #[test] -fn test_uextend() { +fn test_named_uextend() { run_and_retry(|| { - test_from_file_with_lhs_termname_dynwidth( - "./examples/uextend/uextend.isle", - "uextend".to_string(), + test_aarch64_rule_with_lhs_termname( + "uextend", + "uextend", all_success_result(), ) }) } #[test] -fn test_sextend() { +fn test_named_sextend() { run_and_retry(|| { - test_from_file_with_lhs_termname_dynwidth( - "./examples/sextend/sextend.isle", - "sextend".to_string(), + test_aarch64_rule_with_lhs_termname( + "sextend", + "sextend", all_success_result(), ) }) @@ -1681,11 +1681,11 @@ fn test_64_with_imm_rotr() { } #[test] -fn test_fits_in_32_band() { +fn test_named_band_fits_in_32() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/band/fits_in_32_band.isle", - "band".to_string(), + test_aarch64_rule_with_lhs_termname( + "band_fits_in_32", + "band", vec![ (Bitwidth::I8, VerificationResult::Success), (Bitwidth::I16, VerificationResult::Success), @@ -1697,7 +1697,7 @@ fn test_fits_in_32_band() { } #[test] -fn test_broken_fits_in_32_band() { +fn test_broken_band_fits_in_32() { run_and_retry(|| { test_from_file_with_lhs_termname( "./examples/broken/broken_fits_in_32_band.isle", @@ -1719,11 +1719,11 @@ fn test_broken_fits_in_32_band() { } #[test] -fn test_64_band() { +fn test_named_band_64() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/band/64_band.isle", - "band".to_string(), + test_aarch64_rule_with_lhs_termname( + "band_64", + "band", vec![ (Bitwidth::I8, VerificationResult::InapplicableRule), (Bitwidth::I16, VerificationResult::InapplicableRule), @@ -1735,11 +1735,11 @@ fn test_64_band() { } #[test] -fn test_fits_in_32_bor() { +fn test_named_bor_fits_in_32() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/bor/fits_in_32_bor.isle", - "bor".to_string(), + test_aarch64_rule_with_lhs_termname( + "bor_fits_in_32", + "bor", vec![ (Bitwidth::I8, VerificationResult::Success), (Bitwidth::I16, VerificationResult::Success), @@ -1751,11 +1751,11 @@ fn test_fits_in_32_bor() { } #[test] -fn test_64_bor() { +fn test_named_bor_64() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/bor/64_bor.isle", - "bor".to_string(), + test_aarch64_rule_with_lhs_termname( + "bor_64", + "bor", vec![ (Bitwidth::I8, VerificationResult::InapplicableRule), (Bitwidth::I16, VerificationResult::InapplicableRule), @@ -1767,7 +1767,7 @@ fn test_64_bor() { } #[test] -fn test_broken_fits_in_32_bor() { +fn test_broken_bor_fits_in_32() { run_and_retry(|| { test_from_file_with_lhs_termname( "./examples/broken/broken_fits_in_32_bor.isle", @@ -1789,11 +1789,11 @@ fn test_broken_fits_in_32_bor() { } #[test] -fn test_fits_in_32_bxor() { +fn test_named_bxor_fits_in_32() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/bxor/fits_in_32_bxor.isle", - "bxor".to_string(), + test_aarch64_rule_with_lhs_termname( + "bxor_fits_in_32", + "bxor", vec![ (Bitwidth::I8, VerificationResult::Success), (Bitwidth::I16, VerificationResult::Success), @@ -1805,11 +1805,43 @@ fn test_fits_in_32_bxor() { } #[test] -fn test_64_bxor() { +fn test_named_bxor_64() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/bxor/64_bxor.isle", - "bxor".to_string(), + test_aarch64_rule_with_lhs_termname( + "bxor_64", + "bxor", + vec![ + (Bitwidth::I8, VerificationResult::InapplicableRule), + (Bitwidth::I16, VerificationResult::InapplicableRule), + (Bitwidth::I32, VerificationResult::InapplicableRule), + (Bitwidth::I64, VerificationResult::Success), + ], + ) + }) +} + +#[test] +fn test_named_band_not_fits_in_32() { + run_and_retry(|| { + test_aarch64_rule_with_lhs_termname( + "band_not_fits_in_32", + "band_not", + vec![ + (Bitwidth::I8, VerificationResult::Success), + (Bitwidth::I16, VerificationResult::Success), + (Bitwidth::I32, VerificationResult::Success), + (Bitwidth::I64, VerificationResult::InapplicableRule), + ], + ) + }) +} + +#[test] +fn test_named_band_not_64() { + run_and_retry(|| { + test_aarch64_rule_with_lhs_termname( + "band_not_64", + "band_not", vec![ (Bitwidth::I8, VerificationResult::InapplicableRule), (Bitwidth::I16, VerificationResult::InapplicableRule), From 42262c16d2279069fb062db06f3dd31075461950 Mon Sep 17 00:00:00 2001 From: Alexa VanHattum Date: Tue, 11 Apr 2023 11:07:47 -0400 Subject: [PATCH 11/30] bnot --- cranelift/codegen/src/clif_lower.isle | 2 ++ cranelift/codegen/src/isa/aarch64/inst.isle | 14 +++++++++++- cranelift/codegen/src/isa/aarch64/lower.isle | 4 ++-- cranelift/isle/veri/veri_engine/src/widths.rs | 1 + cranelift/isle/veri/veri_engine/tests/veri.rs | 22 +++++++++++++++++++ 5 files changed, 40 insertions(+), 3 deletions(-) diff --git a/cranelift/codegen/src/clif_lower.isle b/cranelift/codegen/src/clif_lower.isle index f6c15e73b0c2..430e39dccde6 100644 --- a/cranelift/codegen/src/clif_lower.isle +++ b/cranelift/codegen/src/clif_lower.isle @@ -1032,6 +1032,8 @@ (inst_data (InstructionData.Binary (Opcode.Bxor) (value_array_2 x y))) ) +;;@ (spec (sig (args x) (ret)) +;;@ (assume (= (~ (x)) (ret)))) (decl bnot (Value) Inst) (extractor (bnot x) diff --git a/cranelift/codegen/src/isa/aarch64/inst.isle b/cranelift/codegen/src/isa/aarch64/inst.isle index f6cd128e81cf..7f79eebf6ecc 100644 --- a/cranelift/codegen/src/isa/aarch64/inst.isle +++ b/cranelift/codegen/src/isa/aarch64/inst.isle @@ -2759,10 +2759,22 @@ (rule (not x size) (vec_misc (VecMisc2.Not) x size)) ;; Helpers for generating `orr_not` instructions. - +;;@ (spec (sig (args ty, a, b) (r)) +;;@ (assume +;;@ (= (r) +;;@ (if (<= (ty) (32i8: isleType)) +;;@ (conv_to (regwidth) (| (extract 31 0 (a)) (~ (extract 31 0 (b))))) +;;@ (| (a) (~ (b))))))) (decl orr_not (Type Reg Reg) Reg) (rule (orr_not ty x y) (alu_rrr (ALUOp.OrrNot) ty x y)) +;;@ (spec (sig (args ty, a, b, shift) (ret)) +;;@ (assume +;;@ (= (ret) (if (<= (ty) (32i32:isleType)) +;;@ (conv_to (regwidth) (| (a) (~ (shl (b) (zero_ext (64) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift)))))))) +;;@ (| (a) (~ (shl (b) (zero_ext (64) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift))))))) +;;@ )) +;;@ )) (decl orr_not_shift (Type Reg Reg ShiftOpAndAmt) Reg) (rule (orr_not_shift ty x y shift) (alu_rrr_shift (ALUOp.OrrNot) ty x y shift)) diff --git a/cranelift/codegen/src/isa/aarch64/lower.isle b/cranelift/codegen/src/isa/aarch64/lower.isle index 4d67ca58d40e..5d444deb7ef5 100644 --- a/cranelift/codegen/src/isa/aarch64/lower.isle +++ b/cranelift/codegen/src/isa/aarch64/lower.isle @@ -1042,12 +1042,12 @@ ;; Note that bitwise negation is implemented here as ;; ;; NOT rd, rm ==> ORR_NOT rd, zero, rm -(rule -1 (lower (has_type (fits_in_64 ty) (bnot x))) +(rule bnot_base_case -1 (lower (has_type (fits_in_64 ty) (bnot x))) (orr_not ty (zero_reg) x)) ;; Special case to use `orr_not_shift` if it's a `bnot` of a const-left-shifted ;; value. -(rule 1 (lower (has_type (fits_in_64 ty) +(rule bnot_ishl 1 (lower (has_type (fits_in_64 ty) (bnot (ishl x (iconst k))))) (if-let amt (lshl_from_imm64 ty k)) (orr_not_shift ty (zero_reg) x amt)) diff --git a/cranelift/isle/veri/veri_engine/src/widths.rs b/cranelift/isle/veri/veri_engine/src/widths.rs index 195198edc095..7851c0f6d6a5 100644 --- a/cranelift/isle/veri/veri_engine/src/widths.rs +++ b/cranelift/isle/veri/veri_engine/src/widths.rs @@ -34,6 +34,7 @@ pub fn isle_inst_types() -> HashMap<&'static str, Vec> { // Simple unary widths.insert("ineg", bv_unary_8_to_64.clone()); + widths.insert("bnot", bv_unary_8_to_64.clone()); widths.insert("cls", bv_unary_8_to_64.clone()); widths.insert("clz", bv_unary_8_to_64.clone()); widths.insert("ctz", bv_unary_8_to_64.clone()); diff --git a/cranelift/isle/veri/veri_engine/tests/veri.rs b/cranelift/isle/veri/veri_engine/tests/veri.rs index 9755ce98a1e9..180de3c814ba 100644 --- a/cranelift/isle/veri/veri_engine/tests/veri.rs +++ b/cranelift/isle/veri/veri_engine/tests/veri.rs @@ -1852,6 +1852,28 @@ fn test_named_band_not_64() { }) } +#[test] +fn test_named_bnot() { + run_and_retry(|| { + test_aarch64_rule_with_lhs_termname( + "bnot_base_case", + "bnot", + all_success_result(), + ) + }) +} + +#[test] +fn test_named_bnot_ishl() { + run_and_retry(|| { + test_aarch64_rule_with_lhs_termname( + "bnot_ishl", + "bnot", + all_success_result(), + ) + }) +} + #[test] fn test_ishl_to_do_shift_64() { test_from_file_with_lhs_termname( From e5dfc3f063f8782a81d31f54a55caab8a1a6cbdf Mon Sep 17 00:00:00 2001 From: Alexa VanHattum Date: Tue, 11 Apr 2023 11:47:43 -0400 Subject: [PATCH 12/30] move switch some match check to assertion, not assumption --- cranelift/codegen/src/clif_lower.isle | 5 +- cranelift/codegen/src/isa/aarch64/inst.isle | 2 + cranelift/codegen/src/isa/aarch64/lower.isle | 4 +- .../broken/iadd/broken_add_extend.isle | 2 + cranelift/isle/veri/veri_engine/src/solver.rs | 68 ++++++++++++++----- .../veri_engine/src/solver/encoded_ops/mod.rs | 1 + 6 files changed, 61 insertions(+), 21 deletions(-) diff --git a/cranelift/codegen/src/clif_lower.isle b/cranelift/codegen/src/clif_lower.isle index 430e39dccde6..be583578f4e9 100644 --- a/cranelift/codegen/src/clif_lower.isle +++ b/cranelift/codegen/src/clif_lower.isle @@ -808,8 +808,9 @@ ;;@ ((7i8:bv8) (if (ugte (x) (y)) (1i8:bv8) (0i8:bv8))) ;;@ ((8i8:bv8) (if (ult (x) (y)) (1i8:bv8) (0i8:bv8))) ;;@ ((9i8:bv8) (if (ulte (x) (y)) (1i8:bv8) (0i8:bv8))) -;;@ ) -;;@ ))) +;;@ )), +;;@ (ulte (c) (9i8:bv8)) +;;@ )) (decl icmp (IntCC Value Value) Inst) (extractor (icmp Cond x y) diff --git a/cranelift/codegen/src/isa/aarch64/inst.isle b/cranelift/codegen/src/isa/aarch64/inst.isle index 7f79eebf6ecc..826e0a56bf60 100644 --- a/cranelift/codegen/src/isa/aarch64/inst.isle +++ b/cranelift/codegen/src/isa/aarch64/inst.isle @@ -1793,6 +1793,8 @@ ;;@ ((5i3:bv) (= (extract 63 0 (x)) (sign_ext (64) (extract 15 0 (zero_ext (64) (ret)))))) ;;@ ((6i3:bv) (= (extract 63 0 (x)) (sign_ext (64) (extract 31 0 (zero_ext (64) (ret)))))) ;;@ ), +;;@ (ulte (extract 66 64 (x)) (6i3:bv)), +;;@ (! (= (extract 66 64 (x)) (3i3:bv))), ;;@ (= (ret) (conv_to (widthof (ret)) (x))), ;;@ (|| (= (8i32:isleType) (widthof (ret))) (|| (= (16i32:isleType) (widthof (ret))) (= (32i32:isleType) (widthof (ret))))) ;;@ )) diff --git a/cranelift/codegen/src/isa/aarch64/lower.isle b/cranelift/codegen/src/isa/aarch64/lower.isle index 5d444deb7ef5..21b73a80baf8 100644 --- a/cranelift/codegen/src/isa/aarch64/lower.isle +++ b/cranelift/codegen/src/isa/aarch64/lower.isle @@ -1140,11 +1140,11 @@ ;;;; Rules for `ishl` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Shift for i8/i16/i32. -(rule -1 (lower (has_type (fits_in_32 ty) (ishl x y))) +(rule ishl_fits_in_32 -1 (lower (has_type (fits_in_32 ty) (ishl x y))) (do_shift (ALUOp.Lsl) ty x y)) ;; Shift for i64. -(rule (lower (has_type $I64 (ishl x y))) +(rule ishl_64 (lower (has_type $I64 (ishl x y))) (do_shift (ALUOp.Lsl) $I64 x y)) ;; Shift for i128. diff --git a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_add_extend.isle b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_add_extend.isle index 86d7a8aa5337..a035aaed2c47 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_add_extend.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/iadd/broken_add_extend.isle @@ -46,6 +46,8 @@ ;;@ ((5i3:bv) (= (extract 63 0 (x)) (sign_ext (64) (extract 15 0 (zero_ext (64) (ret)))))) ;;@ ((6i3:bv) (= (extract 63 0 (x)) (sign_ext (64) (extract 31 0 (zero_ext (64) (ret)))))) ;;@ ), +;;@ (ulte (extract 66 64 (x)) (6i3:bv)), +;;@ (! (= (extract 66 64 (x)) (3i3:bv))), ;;@ (= (ret) (conv_to (widthof (ret)) (x))), ;;@ (|| (= (8i32:isleType) (widthof (ret))) (|| (= (16i32:isleType) (widthof (ret))) (= (32i32:isleType) (widthof (ret))))) ;;@ )) diff --git a/cranelift/isle/veri/veri_engine/src/solver.rs b/cranelift/isle/veri/veri_engine/src/solver.rs index b1a3e372523a..caf83a2e3652 100644 --- a/cranelift/isle/veri/veri_engine/src/solver.rs +++ b/cranelift/isle/veri/veri_engine/src/solver.rs @@ -35,6 +35,7 @@ pub struct SolverCtx { width_assumptions: Vec, pub additional_decls: Vec<(String, SExpr)>, pub additional_assumptions: Vec, + pub additional_assertions: Vec, fresh_bits_idx: usize, } @@ -73,6 +74,10 @@ impl SolverCtx { self.additional_assumptions.push(expr); } + fn assert(&mut self, expr: SExpr) { + self.additional_assertions.push(expr); + } + /// Construct a constant bit-vector value of the given width. (This is used so pervasively that /// perhaps we should submit it for inclusion in the easy_smt library...) (Also, this is /// generic because we use it with several integer types, but it probably shouldn't be *this* @@ -146,7 +151,7 @@ impl SolverCtx { dest_width, source_width, ); - self.additional_assumptions.push(self.smt.false_()); + self.assert(self.smt.false_()); return self.bv( 0, if self.dynwidths { @@ -456,8 +461,7 @@ impl SolverCtx { narrow_name = format!("{}_{}", s, narrow_name); wide_name = format!("{}_{}", s, wide_name); } - self.additional_assumptions - .push(self.smt.eq(self.smt.atom(&narrow_name), narrow_decl)); + self.assume(self.smt.eq(self.smt.atom(&narrow_name), narrow_decl)); self.additional_decls.push(( narrow_name.clone(), self.smt.bit_vec_sort(self.smt.numeral(narrow_width)), @@ -467,7 +471,7 @@ impl SolverCtx { self.smt.bit_vec_sort(self.smt.numeral(self.bitwidth)), )); let padding = self.new_fresh_bits(width); - self.additional_assumptions.push(self.smt.eq( + self.assume(self.smt.eq( self.smt.atom(&wide_name), self.smt.concat(padding, self.smt.atom(narrow_name)), )); @@ -476,8 +480,7 @@ impl SolverCtx { if let Some(s) = name { // self.additional_decls // .push((s.clone(), format!("(_ BitVec {})", self.bitwidth))); - self.additional_assumptions - .push(self.smt.eq(self.smt.atom(&s), narrow_decl)); + self.assume(self.smt.eq(self.smt.atom(&s), narrow_decl)); self.smt.atom(&s) } else { narrow_decl @@ -1016,8 +1019,7 @@ impl SolverCtx { .iter() .map(|(m, _)| self.smt.eq(cs, *m)) .collect(); - self.additional_assumptions - .push(self.smt.or_many(some_case_matches.clone())); + self.assert(self.smt.or_many(some_case_matches.clone())); let (_, last_body) = case_sexprs.remove(case_sexprs.len() - 1); @@ -1048,12 +1050,12 @@ impl SolverCtx { Some(64) => clz::clz64(self, es, tyvar), Some(w) => { println!("Unexpected A64CLZ width {}", w); - self.additional_assumptions.push(self.smt.false_()); + self.assert(self.smt.false_()); es } None => { println!("Need static A64CLZ width"); - self.additional_assumptions.push(self.smt.false_()); + self.assert(self.smt.false_()); es } } @@ -1080,12 +1082,12 @@ impl SolverCtx { Some(64) => cls::cls64(self, es, tyvar), Some(w) => { println!("Unexpected A64CLS width {}", w); - self.additional_assumptions.push(self.smt.false_()); + self.assert(self.smt.false_()); es } None => { println!("Need static A64CLS width"); - self.additional_assumptions.push(self.smt.false_()); + self.assert(self.smt.false_()); es } } @@ -1112,12 +1114,12 @@ impl SolverCtx { Some(64) => rev::rev64(self, es, tyvar), Some(w) => { println!("Unexpected A64Rev width {}", w); - self.additional_assumptions.push(self.smt.false_()); + self.assert(self.smt.false_()); es } None => { println!("Need static A64Rev width"); - self.additional_assumptions.push(self.smt.false_()); + self.assert(self.smt.false_()); es } } @@ -1558,6 +1560,7 @@ pub fn run_solver( width_assumptions: vec![], additional_decls: vec![], additional_assumptions: vec![], + additional_assertions: vec![], fresh_bits_idx: 0, }; @@ -1685,6 +1688,7 @@ pub fn run_solver( width_assumptions: vec![], additional_decls: vec![], additional_assumptions: vec![], + additional_assertions: vec![], fresh_bits_idx: 0, }; assumptions = ctx.declare_variables(&rule_sem); @@ -1736,6 +1740,11 @@ pub fn run_solver( .assert(ctx.smt.named(format!("conc{i}"), *a)) .unwrap(); } + for (i, e) in ctx.additional_assertions.iter().enumerate() { + ctx.smt + .assert(ctx.smt.named(format!("conc_assert{i}"), *e)) + .unwrap(); + } ctx.smt.push().unwrap(); let eq = ctx .smt @@ -1817,15 +1826,19 @@ pub fn run_solver( }; // Look at RHS assertions, which are checked, not trusted - let rhs_assertions: Vec = rule_sem + let mut assertions: Vec = rule_sem .rhs_assertions .iter() .map(|a| ctx.vir_expr_to_sexp(a.clone())) .collect(); + for a in &ctx.additional_assertions { + assertions.push(*a); + } + let assumption_conjunction = ctx.smt.and_many(assumptions); - let full_condition = if rhs_assertions.len() > 1 { - let assertion_conjunction = ctx.smt.and_many(rhs_assertions); + let full_condition = if assertions.len() > 1 { + let assertion_conjunction = ctx.smt.and_many(assertions.clone()); ctx.smt.and(condition, assertion_conjunction) } else { condition @@ -1844,6 +1857,27 @@ pub fn run_solver( Ok(Response::Sat) => { println!("Verification failed"); ctx.display_model(termenv, typeenv, rule, lhs, rhs); + let vals = ctx.smt + .get_value(vec![condition]) + .unwrap(); + for (variable, value) in vals { + if value == ctx.smt.false_() { + println!("Failed condition:\n{}", ctx.smt.display(variable)); + } else if value == ctx.smt.true_() { + println!("Condition met, but failed some assertion(s).") + } + } + + if assertions.len() > 0 { + let vals = ctx.smt + .get_value(assertions) + .unwrap(); + for (variable, value) in vals { + if value == ctx.smt.false_() { + println!("Failed assertion:\n{}", ctx.smt.display(variable)); + } + } + } VerificationResult::Failure(Counterexample {}) } Ok(Response::Unsat) => { diff --git a/cranelift/isle/veri/veri_engine/src/solver/encoded_ops/mod.rs b/cranelift/isle/veri/veri_engine/src/solver/encoded_ops/mod.rs index 0c7b1885860d..35ce2259deee 100644 --- a/cranelift/isle/veri/veri_engine/src/solver/encoded_ops/mod.rs +++ b/cranelift/isle/veri/veri_engine/src/solver/encoded_ops/mod.rs @@ -33,6 +33,7 @@ mod tests { width_assumptions: vec![], additional_decls: vec![], additional_assumptions: vec![], + additional_assertions: vec![], fresh_bits_idx: 0, } } From e83802f1ac9b265534b203aca7a79d859a489359 Mon Sep 17 00:00:00 2001 From: Alexa VanHattum Date: Tue, 11 Apr 2023 12:23:30 -0400 Subject: [PATCH 13/30] start moving shifts --- cranelift/codegen/src/isa/aarch64/inst.isle | 26 +++++++++++++ cranelift/codegen/src/isa/aarch64/lower.isle | 39 +++++++++++++++++++ cranelift/isle/veri/veri_engine/tests/veri.rs | 8 ++-- 3 files changed, 69 insertions(+), 4 deletions(-) diff --git a/cranelift/codegen/src/isa/aarch64/inst.isle b/cranelift/codegen/src/isa/aarch64/inst.isle index 826e0a56bf60..4664a0ccdc95 100644 --- a/cranelift/codegen/src/isa/aarch64/inst.isle +++ b/cranelift/codegen/src/isa/aarch64/inst.isle @@ -1885,6 +1885,32 @@ dst)) ;; Helper for emitting `MInst.AluRRR` instructions. +;;@ (spec (sig (args op, t, a, b) (ret)) +;;@ (assume +;;@ (= (ret) (switch (op) +;;@ ((16i8:bv8) +;;@ (if (<= (t) (32i8: isleType)) +;;@ (conv_to (64) (shr (extract 31 0 (a)) (& (- (int2bv 32 (32i32:isleType)) (1i32:bv)) (extract 31 0 (b))))) +;;@ (shr (a) (& (- (int2bv 64 (64i64:isleType)) (1i64:bv)) (b)))) +;;@ ) +;;@ ((17i8:bv8) +;;@ (if (<= (t) (32i8: isleType)) +;;@ (conv_to (64) (ashr (extract 31 0 (a)) (& (- (int2bv 32 (32i32:isleType)) (1i32:bv)) (extract 31 0 (b))))) +;;@ (ashr (a) (& (- (int2bv 64 (64i64:isleType)) (1i64:bv)) (b)))) +;;@ ) +;;@ ((17i8:bv8) +;;@ (if (<= (t) (32i8: isleType)) +;;@ (conv_to (64) (shl (extract 31 0 (a)) (& (- (int2bv 32 (32i32:isleType)) (1i32:bv)) (extract 31 0 (b))))) +;;@ (shl (a) (& (- (int2bv 64 (64i64:isleType)) (1i64:bv)) (b)))) +;;@ ) +;;@ ))) +;;@ (assert +;;@ (|| (= (op) (16i8:bv8)) (|| (= (op) (17i8:bv8)) (= (op) (17i8:bv8)))), +;;@ (|| (= (t) (8i8: isleType)) +;;@ (|| (= (t) (16i8: isleType)) +;;@ (|| (= (t) (32i8: isleType)) +;;@ (= (t) (64i8: isleType))))) +;;@ )) (decl alu_rrr (ALUOp Type Reg Reg) Reg) (rule (alu_rrr op ty src1 src2) (let ((dst WritableReg (temp_writable_reg $I64)) diff --git a/cranelift/codegen/src/isa/aarch64/lower.isle b/cranelift/codegen/src/isa/aarch64/lower.isle index 21b73a80baf8..2cc56c1bc6ca 100644 --- a/cranelift/codegen/src/isa/aarch64/lower.isle +++ b/cranelift/codegen/src/isa/aarch64/lower.isle @@ -1190,6 +1190,45 @@ ;; ;; Note that this automatically handles the clif semantics of masking the ;; shift amount where necessary. +;;@ (spec (sig (args op, t, a, b) (ret)) +;;@ (assume +;;@ (= (ret) +;;@ (switch (op) +;;@ ((16i8:bv8) (conv_to (regwidth) +;;@ (shr (conv_to (t) (a)) +;;@ (conv_to (t) (zero_ext (regwidth) +;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) +;;@ ((17i8:bv8) (conv_to (regwidth) +;;@ (ashr (conv_to (t) (a)) +;;@ (conv_to (t) (zero_ext (regwidth) +;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) +;;@ ((18i8:bv8) (conv_to (regwidth) +;;@ (shl (conv_to (t) (a)) +;;@ (conv_to (t) (zero_ext (regwidth) +;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv64))) (b))))))) +;;@ )) +;;@ ) +;;@ (assert +;;@ (|| (= (op) (16i8:bv8)) (|| (= (op) (17i8:bv8)) (= (op) (18i8:bv8)))), +;;@ (= (t) (widthof (b))), +;;@ (|| (= (t) (8i8: isleType)) +;;@ (|| (= (t) (16i8: isleType)) +;;@ (|| (= (t) (32i8: isleType)) +;;@ (= (t) (64i8: isleType))))), +;;@ (switch (op) +;;@ ((16i8:bv8) (switch (t) +;;@ ((8i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) +;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 15 0 (a))))) +;;@ ((32i32: isleType) (true)) +;;@ ((64i32: isleType) (true)))) +;;@ ((17i8:bv8) (switch (t) +;;@ ((8i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) +;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 15 0 (a))))) +;;@ ((32i32: isleType) (true)) +;;@ ((64i32: isleType) (true)))) +;;@ ((18i8:bv8) (true)) +;;@ ) +;;@ )) (decl do_shift (ALUOp Type Reg Value) Reg) ;; 8/16-bit shift base case. diff --git a/cranelift/isle/veri/veri_engine/tests/veri.rs b/cranelift/isle/veri/veri_engine/tests/veri.rs index 180de3c814ba..f311395b0ad3 100644 --- a/cranelift/isle/veri/veri_engine/tests/veri.rs +++ b/cranelift/isle/veri/veri_engine/tests/veri.rs @@ -1922,10 +1922,10 @@ fn test_ishl_to_do_shift_64_concrete() { } #[test] -fn test_ishl_to_do_shift_fits_in_32() { - test_from_file_with_lhs_termname( - "./examples/shifts/ishl_to_do_shift_fits_in_32.isle", - "ishl".to_string(), +fn test_named_ishl_fits_in_32() { + test_aarch64_rule_with_lhs_termname( + "ishl_fits_in_32", + "ishl", vec![ (Bitwidth::I8, VerificationResult::Success), (Bitwidth::I16, VerificationResult::Success), From 3a413146a7a6ddd96a9dad205641aae07fbc58ec Mon Sep 17 00:00:00 2001 From: Alexa VanHattum Date: Tue, 11 Apr 2023 12:33:56 -0400 Subject: [PATCH 14/30] ishl --- cranelift/codegen/src/isa/aarch64/lower.isle | 38 +++---- .../examples/shifts/ishl_to_do_shift_64.isle | 106 ------------------ .../shifts/ishl_to_do_shift_fits_in_32.isle | 104 ----------------- cranelift/isle/veri/veri_engine/tests/veri.rs | 24 ++-- 4 files changed, 31 insertions(+), 241 deletions(-) delete mode 100644 cranelift/isle/veri/veri_engine/examples/shifts/ishl_to_do_shift_64.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/shifts/ishl_to_do_shift_fits_in_32.isle diff --git a/cranelift/codegen/src/isa/aarch64/lower.isle b/cranelift/codegen/src/isa/aarch64/lower.isle index 2cc56c1bc6ca..b826472c0c00 100644 --- a/cranelift/codegen/src/isa/aarch64/lower.isle +++ b/cranelift/codegen/src/isa/aarch64/lower.isle @@ -1209,25 +1209,25 @@ ;;@ )) ;;@ ) ;;@ (assert -;;@ (|| (= (op) (16i8:bv8)) (|| (= (op) (17i8:bv8)) (= (op) (18i8:bv8)))), -;;@ (= (t) (widthof (b))), -;;@ (|| (= (t) (8i8: isleType)) -;;@ (|| (= (t) (16i8: isleType)) -;;@ (|| (= (t) (32i8: isleType)) -;;@ (= (t) (64i8: isleType))))), -;;@ (switch (op) -;;@ ((16i8:bv8) (switch (t) -;;@ ((8i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 15 0 (a))))) -;;@ ((32i32: isleType) (true)) -;;@ ((64i32: isleType) (true)))) -;;@ ((17i8:bv8) (switch (t) -;;@ ((8i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 15 0 (a))))) -;;@ ((32i32: isleType) (true)) -;;@ ((64i32: isleType) (true)))) -;;@ ((18i8:bv8) (true)) -;;@ ) +;;@ (|| (= (op) (16i8:bv8)) (|| (= (op) (17i8:bv8)) (= (op) (18i8:bv8)))), +;;@ (= (t) (widthof (b))), +;;@ (|| (= (t) (8i8: isleType)) +;;@ (|| (= (t) (16i8: isleType)) +;;@ (|| (= (t) (32i8: isleType)) +;;@ (= (t) (64i8: isleType))))), +;;@ (switch (op) +;;@ ((16i8:bv8) (switch (t) +;;@ ((8i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) +;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 15 0 (a))))) +;;@ ((32i32: isleType) (true)) +;;@ ((64i32: isleType) (true)))) +;;@ ((17i8:bv8) (switch (t) +;;@ ((8i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) +;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 15 0 (a))))) +;;@ ((32i32: isleType) (true)) +;;@ ((64i32: isleType) (true)))) +;;@ ((18i8:bv8) (true)) +;;@ ) ;;@ )) (decl do_shift (ALUOp Type Reg Value) Reg) diff --git a/cranelift/isle/veri/veri_engine/examples/shifts/ishl_to_do_shift_64.isle b/cranelift/isle/veri/veri_engine/examples/shifts/ishl_to_do_shift_64.isle deleted file mode 100644 index ec6e192674ca..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/shifts/ishl_to_do_shift_64.isle +++ /dev/null @@ -1,106 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -;; Instruction formats. -(type MInst - (enum -)) - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (0i64:bv) (ret)))) -;;decl ALUOp.Lsl - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (1i64:bv) (ret)))) -;;decl ALUOp.Lsr - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (2i64:bv) (ret)))) -;;decl ALUOp.Asr - -;; An ALU operation. This can be paired with several instruction formats -;; below (see `Inst`) in any combination. -(type ALUOp - (enum - (Add) - (Sub) - (Orr) - (OrrNot) - (And) - (AndS) - (AndNot) - ;; XOR (AArch64 calls this "EOR") - (Eor) - ;; XNOR (AArch64 calls this "EOR-NOT") - (EorNot) - ;; Add, setting flags - (AddS) - ;; Sub, setting flags - (SubS) - ;; Signed multiply, high-word result - (SMulH) - ;; Unsigned multiply, high-word result - (UMulH) - (SDiv) - (UDiv) - (RotR) - (Lsr) - (Asr) - (Lsl) - ;; Add with carry - (Adc) - ;; Add with carry, settings flags - (AdcS) - ;; Subtract with carry - (Sbc) - ;; Subtract with carry, settings flags - (SbcS) -)) - -;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (switch (op) -;;@ ((0i64:bv) (conv_to (regwidth) -;;@ (shl (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv64))) (b))))))) -;;@ ((1i64:bv) (conv_to (regwidth) -;;@ (shr (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ ((2i64:bv) (conv_to (regwidth) -;;@ (ashr (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ )) -;;@ ) -;;@ (assert -;;@ (|| (= (op) (0i64:bv)) (|| (= (op) (1i64:bv)) (= (op) (2i64:bv)))), -;;@ (= (t) (widthof (b))), -;;@ (|| (= (t) (8i8: isleType)) -;;@ (|| (= (t) (16i8: isleType)) -;;@ (|| (= (t) (32i8: isleType)) -;;@ (= (t) (64i8: isleType))))), -;;@ (switch (op) -;;@ ((0i64:bv) (true)) -;;@ ((1i64:bv) (switch (t) -;;@ ((8i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 15 0 (a))))) -;;@ ((32i32: isleType) (true)) -;;@ ((64i32: isleType) (true)))) -;;@ ((2i64:bv) (switch (t) -;;@ ((8i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 15 0 (a))))) -;;@ ((32i32: isleType) (true)) -;;@ ((64i32: isleType) (true)))) -;;@ ) -;;@ )) -(decl do_shift (ALUOp Type Reg Value) Reg) -(extern constructor do_shift do_shift) - -;; Shift for i64. -(rule (lower (has_type $I64 (ishl x y))) - (do_shift (ALUOp.Lsl) $I64 x y)) - \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/shifts/ishl_to_do_shift_fits_in_32.isle b/cranelift/isle/veri/veri_engine/examples/shifts/ishl_to_do_shift_fits_in_32.isle deleted file mode 100644 index 521527d6e0c7..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/shifts/ishl_to_do_shift_fits_in_32.isle +++ /dev/null @@ -1,104 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -;; Instruction formats. -(type MInst - (enum -)) - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (0i64:bv) (ret)))) -;;decl ALUOp.Lsl - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (1i64:bv) (ret)))) -;;decl ALUOp.Lsr - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (2i64:bv) (ret)))) -;;decl ALUOp.Asr - -;; An ALU operation. This can be paired with several instruction formats -;; below (see `Inst`) in any combination. -(type ALUOp - (enum - (Add) - (Sub) - (Orr) - (OrrNot) - (And) - (AndS) - (AndNot) - ;; XOR (AArch64 calls this "EOR") - (Eor) - ;; XNOR (AArch64 calls this "EOR-NOT") - (EorNot) - ;; Add, setting flags - (AddS) - ;; Sub, setting flags - (SubS) - ;; Signed multiply, high-word result - (SMulH) - ;; Unsigned multiply, high-word result - (UMulH) - (SDiv) - (UDiv) - (RotR) - (Lsr) - (Asr) - (Lsl) - ;; Add with carry - (Adc) - ;; Add with carry, settings flags - (AdcS) - ;; Subtract with carry - (Sbc) - ;; Subtract with carry, settings flags - (SbcS) -)) - -;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (switch (op) -;;@ ((0i64:bv) (conv_to (regwidth) -;;@ (shl (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv64))) (b))))))) -;;@ ((1i64:bv) (conv_to (regwidth) -;;@ (shr (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ ((2i64:bv) (conv_to (regwidth) -;;@ (ashr (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ )) -;;@ ) -;;@ (assert -;;@ (|| (= (op) (0i64:bv)) (|| (= (op) (1i64:bv)) (= (op) (2i64:bv)))), -;;@ (= (t) (widthof (b))), -;;@ (|| (= (t) (8i8: isleType)) -;;@ (|| (= (t) (16i8: isleType)) -;;@ (|| (= (t) (32i8: isleType)) -;;@ (= (t) (64i8: isleType))))), -;;@ (switch (op) -;;@ ((0i64:bv) (true)) -;;@ ((1i64:bv) (switch (t) -;;@ ((8i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) -;;@ ((32i32: isleType) (true)) -;;@ ((64i32: isleType) (true)))) -;;@ ((2i64:bv) (switch (t) -;;@ ((8i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) -;;@ ((32i32: isleType) (true)) -;;@ ((64i32: isleType) (true)))) -;;@ ) -;;@ )) -(decl do_shift (ALUOp Type Reg Value) Reg) -(extern constructor do_shift do_shift) - -(rule -1 (lower (has_type (fits_in_32 ty) (ishl x y))) - (do_shift (ALUOp.Lsl) ty x y)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/tests/veri.rs b/cranelift/isle/veri/veri_engine/tests/veri.rs index f311395b0ad3..8e0eb47142bb 100644 --- a/cranelift/isle/veri/veri_engine/tests/veri.rs +++ b/cranelift/isle/veri/veri_engine/tests/veri.rs @@ -1875,10 +1875,10 @@ fn test_named_bnot_ishl() { } #[test] -fn test_ishl_to_do_shift_64() { - test_from_file_with_lhs_termname( - "./examples/shifts/ishl_to_do_shift_64.isle", - "ishl".to_string(), +fn test_named_ishl_64() { + test_aarch64_rule_with_lhs_termname( + "ishl_64", + "ishl", vec![ (Bitwidth::I8, VerificationResult::InapplicableRule), (Bitwidth::I16, VerificationResult::InapplicableRule), @@ -1889,11 +1889,11 @@ fn test_ishl_to_do_shift_64() { } #[test] -fn test_ishl_to_do_shift_64_concrete() { +fn test_named_ishl_64_concrete() { run_and_retry(|| { - test_concrete_input_from_file_with_lhs_termname( - "./examples/shifts/ishl_to_do_shift_64.isle", - "ishl".to_string(), + test_concrete_aarch64_rule_with_lhs_termname( + "ishl_64", + "ishl", false, ConcreteTest { termname: "ishl".to_string(), @@ -1936,11 +1936,11 @@ fn test_named_ishl_fits_in_32() { } #[test] -fn test_ishl_to_do_shift_fits_in_32_concrete() { +fn test_named_ishl_fits_in_32_concrete() { run_and_retry(|| { - test_concrete_input_from_file_with_lhs_termname( - "./examples/shifts/ishl_to_do_shift_fits_in_32.isle", - "ishl".to_string(), + test_concrete_aarch64_rule_with_lhs_termname( + "ishl_fits_in_32", + "ishl", false, ConcreteTest { termname: "ishl".to_string(), From ab4513b3b313a86bc4180e7a78b335ab4cc2fa3c Mon Sep 17 00:00:00 2001 From: Alexa VanHattum Date: Tue, 11 Apr 2023 12:47:44 -0400 Subject: [PATCH 15/30] ushr, sshr --- cranelift/codegen/src/isa/aarch64/inst.isle | 16 +++ cranelift/codegen/src/isa/aarch64/lower.isle | 8 +- .../examples/shifts/sshr_to_do_shift_64.isle | 110 ----------------- .../shifts/sshr_to_do_shift_fits_in_32.isle | 110 ----------------- .../examples/shifts/ushr_to_do_shift_64.isle | 110 ----------------- .../shifts/ushr_to_do_shift_fits_in_32.isle | 116 ------------------ cranelift/isle/veri/veri_engine/tests/veri.rs | 48 ++++---- 7 files changed, 44 insertions(+), 474 deletions(-) delete mode 100644 cranelift/isle/veri/veri_engine/examples/shifts/sshr_to_do_shift_64.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/shifts/sshr_to_do_shift_fits_in_32.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/shifts/ushr_to_do_shift_64.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/shifts/ushr_to_do_shift_fits_in_32.isle diff --git a/cranelift/codegen/src/isa/aarch64/inst.isle b/cranelift/codegen/src/isa/aarch64/inst.isle index 4664a0ccdc95..124380a0ab6a 100644 --- a/cranelift/codegen/src/isa/aarch64/inst.isle +++ b/cranelift/codegen/src/isa/aarch64/inst.isle @@ -3059,6 +3059,14 @@ ;; Sign extension helpers ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Place a `Value` into a register, sign extending it to 32-bits +;;@ (spec (sig (args arg) (ret)) +;;@ (assume +;;@ (= (ret) +;;@ (if (<= (widthof (arg)) (32i0:isleType)) +;;@ (conv_to (regwidth) (sign_ext (32) (arg))) +;;@ (conv_to (regwidth) (arg)) +;;@ )) +;;@ )) (decl put_in_reg_sext32 (Value) Reg) (rule -1 (put_in_reg_sext32 val @ (value_type (fits_in_32 ty))) (extend val $true (ty_bits ty) 32)) @@ -3068,6 +3076,14 @@ (rule (put_in_reg_sext32 val @ (value_type $I64)) val) ;; Place a `Value` into a register, zero extending it to 32-bits +;;@ (spec (sig (args arg) (ret)) +;;@ (assume +;;@ (= (ret) +;;@ (if (<= (widthof (arg)) (32i0:isleType)) +;;@ (conv_to (regwidth) (zero_ext (32) (arg))) +;;@ (conv_to (regwidth) (arg)) +;;@ )) +;;@ )) (decl put_in_reg_zext32 (Value) Reg) (rule -1 (put_in_reg_zext32 val @ (value_type (fits_in_32 ty))) (extend val $false (ty_bits ty) 32)) diff --git a/cranelift/codegen/src/isa/aarch64/lower.isle b/cranelift/codegen/src/isa/aarch64/lower.isle index b826472c0c00..735680f1a50b 100644 --- a/cranelift/codegen/src/isa/aarch64/lower.isle +++ b/cranelift/codegen/src/isa/aarch64/lower.isle @@ -1265,11 +1265,11 @@ ;;;; Rules for `ushr` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Shift for i8/i16/i32. -(rule -1 (lower (has_type (fits_in_32 ty) (ushr x y))) +(rule ushr_fits_in_32 -1 (lower (has_type (fits_in_32 ty) (ushr x y))) (do_shift (ALUOp.Lsr) ty (put_in_reg_zext32 x) y)) ;; Shift for i64. -(rule (lower (has_type $I64 (ushr x y))) +(rule ushr_64 (lower (has_type $I64 (ushr x y))) (do_shift (ALUOp.Lsr) $I64 (put_in_reg_zext64 x) y)) ;; Shift for i128. @@ -1313,11 +1313,11 @@ ;;;; Rules for `sshr` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Shift for i8/i16/i32. -(rule -2 (lower (has_type (fits_in_32 ty) (sshr x y))) +(rule sshr_fits_in_32 -2 (lower (has_type (fits_in_32 ty) (sshr x y))) (do_shift (ALUOp.Asr) ty (put_in_reg_sext32 x) y)) ;; Shift for i64. -(rule (lower (has_type $I64 (sshr x y))) +(rule sshr_64 (lower (has_type $I64 (sshr x y))) (do_shift (ALUOp.Asr) $I64 (put_in_reg_sext64 x) y)) ;; Shift for i128. diff --git a/cranelift/isle/veri/veri_engine/examples/shifts/sshr_to_do_shift_64.isle b/cranelift/isle/veri/veri_engine/examples/shifts/sshr_to_do_shift_64.isle deleted file mode 100644 index 5d6debd9e02d..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/shifts/sshr_to_do_shift_64.isle +++ /dev/null @@ -1,110 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -;; Instruction formats. -(type MInst - (enum -)) - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (0i64:bv) (ret)))) -;;decl ALUOp.Lsl - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (1i64:bv) (ret)))) -;;decl ALUOp.Lsr - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (2i64:bv) (ret)))) -;;decl ALUOp.Asr - -;; An ALU operation. This can be paired with several instruction formats -;; below (see `Inst`) in any combination. -(type ALUOp - (enum - (Add) - (Sub) - (Orr) - (OrrNot) - (And) - (AndS) - (AndNot) - ;; XOR (AArch64 calls this "EOR") - (Eor) - ;; XNOR (AArch64 calls this "EOR-NOT") - (EorNot) - ;; Add, setting flags - (AddS) - ;; Sub, setting flags - (SubS) - ;; Signed multiply, high-word result - (SMulH) - ;; Unsigned multiply, high-word result - (UMulH) - (SDiv) - (UDiv) - (RotR) - (Lsr) - (Asr) - (Lsl) - ;; Add with carry - (Adc) - ;; Add with carry, settings flags - (AdcS) - ;; Subtract with carry - (Sbc) - ;; Subtract with carry, settings flags - (SbcS) -)) - -;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (switch (op) -;;@ ((0i64:bv) (conv_to (regwidth) -;;@ (shl (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv64))) (b))))))) -;;@ ((1i64:bv) (conv_to (regwidth) -;;@ (shr (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ ((2i64:bv) (conv_to (regwidth) -;;@ (ashr (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ )) -;;@ ) -;;@ (assert -;;@ (|| (= (op) (0i64:bv)) (|| (= (op) (1i64:bv)) (= (op) (2i64:bv)))), -;;@ (= (t) (widthof (b))), -;;@ (|| (= (t) (8i8: isleType)) -;;@ (|| (= (t) (16i8: isleType)) -;;@ (|| (= (t) (32i8: isleType)) -;;@ (= (t) (64i8: isleType))))), -;;@ (switch (op) -;;@ ((0i64:bv) (true)) -;;@ ((1i64:bv) (switch (t) -;;@ ((8i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 15 0 (a))))) -;;@ ((32i32: isleType) (true)) -;;@ ((64i32: isleType) (true)))) -;;@ ((2i64:bv) (switch (t) -;;@ ((8i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 15 0 (a))))) -;;@ ((32i32: isleType) (true)) -;;@ ((64i32: isleType) (true)))) -;;@ ) -;;@ )) -(decl do_shift (ALUOp Type Reg Value) Reg) -(extern constructor do_shift do_shift) - -;;@ (spec (sig (args x) (ret)) -;;@ (assume (= (sign_ext (64) (x)) (ret)))) -(decl put_in_reg_sext64 (Value) Reg) -(extern constructor put_in_reg_sext64 put_in_reg_sext64) - -;; Shift for i64. -(rule (lower (has_type $I64 (sshr x y))) - (do_shift (ALUOp.Asr) $I64 (put_in_reg_sext64 x) y)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/shifts/sshr_to_do_shift_fits_in_32.isle b/cranelift/isle/veri/veri_engine/examples/shifts/sshr_to_do_shift_fits_in_32.isle deleted file mode 100644 index 41f2d7bc91df..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/shifts/sshr_to_do_shift_fits_in_32.isle +++ /dev/null @@ -1,110 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -;; Instruction formats. -(type MInst - (enum -)) - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (0i64:bv) (ret)))) -;;decl ALUOp.Lsl - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (1i64:bv) (ret)))) -;;decl ALUOp.Lsr - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (2i64:bv) (ret)))) -;;decl ALUOp.Asr - -;; An ALU operation. This can be paired with several instruction formats -;; below (see `Inst`) in any combination. -(type ALUOp - (enum - (Add) - (Sub) - (Orr) - (OrrNot) - (And) - (AndS) - (AndNot) - ;; XOR (AArch64 calls this "EOR") - (Eor) - ;; XNOR (AArch64 calls this "EOR-NOT") - (EorNot) - ;; Add, setting flags - (AddS) - ;; Sub, setting flags - (SubS) - ;; Signed multiply, high-word result - (SMulH) - ;; Unsigned multiply, high-word result - (UMulH) - (SDiv) - (UDiv) - (RotR) - (Lsr) - (Asr) - (Lsl) - ;; Add with carry - (Adc) - ;; Add with carry, settings flags - (AdcS) - ;; Subtract with carry - (Sbc) - ;; Subtract with carry, settings flags - (SbcS) -)) - -;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (switch (op) -;;@ ((0i64:bv) (conv_to (regwidth) -;;@ (shl (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv64))) (b))))))) -;;@ ((1i64:bv) (conv_to (regwidth) -;;@ (shr (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ ((2i64:bv) (conv_to (regwidth) -;;@ (ashr (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ )) -;;@ ) -;;@ (assert -;;@ (|| (= (op) (0i64:bv)) (|| (= (op) (1i64:bv)) (= (op) (2i64:bv)))), -;;@ (= (t) (widthof (b))), -;;@ (|| (= (t) (8i8: isleType)) -;;@ (|| (= (t) (16i8: isleType)) -;;@ (|| (= (t) (32i8: isleType)) -;;@ (= (t) (64i8: isleType))))), -;;@ (switch (op) -;;@ ((0i64:bv) (true)) -;;@ ((1i64:bv) (switch (t) -;;@ ((8i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 15 0 (a))))) -;;@ ((32i32: isleType) (true)) -;;@ ((64i32: isleType) (true)))) -;;@ ((2i64:bv) (switch (t) -;;@ ((8i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 15 0 (a))))) -;;@ ((32i32: isleType) (true)) -;;@ ((64i32: isleType) (true)))) -;;@ ) -;;@ )) -(decl do_shift (ALUOp Type Reg Value) Reg) -(extern constructor do_shift do_shift) - -;;@ (spec (sig (args x) (ret)) -;;@ (assume (= (sign_ext (32) (x)) (ret)))) -(decl put_in_reg_sext32 (Value) Reg) -(extern constructor put_in_reg_sext32 put_in_reg_sext32) - -;; Shift for i8/i16/i32. -(rule -2 (lower (has_type (fits_in_32 ty) (sshr x y))) - (do_shift (ALUOp.Asr) ty (put_in_reg_sext32 x) y)) diff --git a/cranelift/isle/veri/veri_engine/examples/shifts/ushr_to_do_shift_64.isle b/cranelift/isle/veri/veri_engine/examples/shifts/ushr_to_do_shift_64.isle deleted file mode 100644 index 485c3bdbd4b8..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/shifts/ushr_to_do_shift_64.isle +++ /dev/null @@ -1,110 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -;; Instruction formats. -(type MInst - (enum -)) - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (0i64:bv) (ret)))) -;;decl ALUOp.Lsl - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (1i64:bv) (ret)))) -;;decl ALUOp.Lsr - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (2i64:bv) (ret)))) -;;decl ALUOp.Asr - -;; An ALU operation. This can be paired with several instruction formats -;; below (see `Inst`) in any combination. -(type ALUOp - (enum - (Add) - (Sub) - (Orr) - (OrrNot) - (And) - (AndS) - (AndNot) - ;; XOR (AArch64 calls this "EOR") - (Eor) - ;; XNOR (AArch64 calls this "EOR-NOT") - (EorNot) - ;; Add, setting flags - (AddS) - ;; Sub, setting flags - (SubS) - ;; Signed multiply, high-word result - (SMulH) - ;; Unsigned multiply, high-word result - (UMulH) - (SDiv) - (UDiv) - (RotR) - (Lsr) - (Asr) - (Lsl) - ;; Add with carry - (Adc) - ;; Add with carry, settings flags - (AdcS) - ;; Subtract with carry - (Sbc) - ;; Subtract with carry, settings flags - (SbcS) -)) - -;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (switch (op) -;;@ ((0i64:bv) (conv_to (regwidth) -;;@ (shl (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv64))) (b))))))) -;;@ ((1i64:bv) (conv_to (regwidth) -;;@ (shr (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ ((2i64:bv) (conv_to (regwidth) -;;@ (ashr (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ )) -;;@ ) -;;@ (assert -;;@ (|| (= (op) (0i64:bv)) (|| (= (op) (1i64:bv)) (= (op) (2i64:bv)))), -;;@ (= (t) (widthof (b))), -;;@ (|| (= (t) (8i8: isleType)) -;;@ (|| (= (t) (16i8: isleType)) -;;@ (|| (= (t) (32i8: isleType)) -;;@ (= (t) (64i8: isleType))))), -;;@ (switch (op) -;;@ ((0i64:bv) (true)) -;;@ ((1i64:bv) (switch (t) -;;@ ((8i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 15 0 (a))))) -;;@ ((32i32: isleType) (true)) -;;@ ((64i32: isleType) (true)))) -;;@ ((2i64:bv) (switch (t) -;;@ ((8i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 15 0 (a))))) -;;@ ((32i32: isleType) (true)) -;;@ ((64i32: isleType) (true)))) -;;@ ) -;;@ )) -(decl do_shift (ALUOp Type Reg Value) Reg) -(extern constructor do_shift do_shift) - -;;@ (spec (sig (args x) (ret)) -;;@ (assume (= (zero_ext (64) (x)) (ret)))) -(decl put_in_reg_zext64 (Value) Reg) -(extern constructor put_in_reg_zext64 put_in_reg_zext64) - -;; Shift for i64. -(rule ushr_64 (lower (has_type $I64 (ushr x y))) - (do_shift (ALUOp.Lsr) $I64 (put_in_reg_zext64 x) y)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/shifts/ushr_to_do_shift_fits_in_32.isle b/cranelift/isle/veri/veri_engine/examples/shifts/ushr_to_do_shift_fits_in_32.isle deleted file mode 100644 index acb55d82e688..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/shifts/ushr_to_do_shift_fits_in_32.isle +++ /dev/null @@ -1,116 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -;; Instruction formats. -(type MInst - (enum -)) - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (0i64:bv) (ret)))) -;;decl ALUOp.Lsl - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (1i64:bv) (ret)))) -;;decl ALUOp.Lsr - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (2i64:bv) (ret)))) -;;decl ALUOp.Asr - -;; An ALU operation. This can be paired with several instruction formats -;; below (see `Inst`) in any combination. -(type ALUOp - (enum - (Add) - (Sub) - (Orr) - (OrrNot) - (And) - (AndS) - (AndNot) - ;; XOR (AArch64 calls this "EOR") - (Eor) - ;; XNOR (AArch64 calls this "EOR-NOT") - (EorNot) - ;; Add, setting flags - (AddS) - ;; Sub, setting flags - (SubS) - ;; Signed multiply, high-word result - (SMulH) - ;; Unsigned multiply, high-word result - (UMulH) - (SDiv) - (UDiv) - (RotR) - (Lsr) - (Asr) - (Lsl) - ;; Add with carry - (Adc) - ;; Add with carry, settings flags - (AdcS) - ;; Subtract with carry - (Sbc) - ;; Subtract with carry, settings flags - (SbcS) -)) - -;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (switch (op) -;;@ ((0i64:bv) (conv_to (regwidth) -;;@ (shl (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv64))) (b))))))) -;;@ ((1i64:bv) (conv_to (regwidth) -;;@ (shr (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ ((2i64:bv) (conv_to (regwidth) -;;@ (ashr (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ )) -;;@ ) -;;@ (assert -;;@ (|| (= (op) (0i64:bv)) (|| (= (op) (1i64:bv)) (= (op) (2i64:bv)))), -;;@ (= (t) (widthof (b))), -;;@ (|| (= (t) (8i8: isleType)) -;;@ (|| (= (t) (16i8: isleType)) -;;@ (|| (= (t) (32i8: isleType)) -;;@ (= (t) (64i8: isleType))))), -;;@ (switch (op) -;;@ ((0i64:bv) (true)) -;;@ ((1i64:bv) (switch (t) -;;@ ((8i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 15 0 (a))))) -;;@ ((32i32: isleType) (true)) -;;@ ((64i32: isleType) (true)))) -;;@ ((2i64:bv) (switch (t) -;;@ ((8i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 15 0 (a))))) -;;@ ((32i32: isleType) (true)) -;;@ ((64i32: isleType) (true)))) -;;@ ) -;;@ )) -(decl do_shift (ALUOp Type Reg Value) Reg) -(extern constructor do_shift do_shift) - -;; Place a `Value` into a register, zero extending it to 32-bits -;;@ (spec (sig (args arg) (ret)) -;;@ (assume ( -;;@ if (<= (32i0:isleType) (widthof (arg))) -;;@ (= (ret) (conv_to (regwidth) (arg))) -;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) -;;@ ) -;;@ )) -(decl put_in_reg_zext32 (Value) Reg) -(extern constructor put_in_reg_zext32 put_in_reg_zext32) - -;; Shift for i8/i16/i32. -(rule -1 (lower (has_type (fits_in_32 ty) (ushr x y))) - (do_shift (ALUOp.Lsr) ty (put_in_reg_zext32 x) y)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/tests/veri.rs b/cranelift/isle/veri/veri_engine/tests/veri.rs index 8e0eb47142bb..5046394e1e97 100644 --- a/cranelift/isle/veri/veri_engine/tests/veri.rs +++ b/cranelift/isle/veri/veri_engine/tests/veri.rs @@ -1964,10 +1964,10 @@ fn test_named_ishl_fits_in_32_concrete() { } #[test] -fn test_sshr_to_do_shift_64() { - test_from_file_with_lhs_termname( - "./examples/shifts/sshr_to_do_shift_64.isle", - "sshr".to_string(), +fn test_named_sshr_64() { + test_aarch64_rule_with_lhs_termname( + "sshr_64", + "sshr", vec![ (Bitwidth::I8, VerificationResult::InapplicableRule), (Bitwidth::I16, VerificationResult::InapplicableRule), @@ -1978,10 +1978,10 @@ fn test_sshr_to_do_shift_64() { } #[test] -fn test_sshr_to_do_shift_fits_in_32() { - test_from_file_with_lhs_termname( - "./examples/shifts/sshr_to_do_shift_fits_in_32.isle", - "sshr".to_string(), +fn test_named_sshr_fits_in_32() { + test_aarch64_rule_with_lhs_termname( + "sshr_fits_in_32", + "sshr", vec![ (Bitwidth::I8, VerificationResult::Success), (Bitwidth::I16, VerificationResult::Success), @@ -1992,10 +1992,10 @@ fn test_sshr_to_do_shift_fits_in_32() { } #[test] -fn test_sshr_to_do_shift_fits_in_32_concrete() { - test_concrete_input_from_file_with_lhs_termname( - "./examples/shifts/sshr_to_do_shift_fits_in_32.isle", - "sshr".to_string(), +fn test_named_sshr_fits_in_32_concrete() { + test_concrete_aarch64_rule_with_lhs_termname( + "sshr_fits_in_32", + "sshr", false, ConcreteTest { termname: "sshr".to_string(), @@ -2018,10 +2018,10 @@ fn test_sshr_to_do_shift_fits_in_32_concrete() { } #[test] -fn test_ushr_to_do_shift_64() { - test_from_file_with_lhs_termname( - "./examples/shifts/ushr_to_do_shift_64.isle", - "ushr".to_string(), +fn test_named_ushr_64() { + test_aarch64_rule_with_lhs_termname( + "ushr_64", + "ushr", vec![ (Bitwidth::I8, VerificationResult::InapplicableRule), (Bitwidth::I16, VerificationResult::InapplicableRule), @@ -2032,10 +2032,10 @@ fn test_ushr_to_do_shift_64() { } #[test] -fn test_ushr_to_do_shift_fits_in_32() { - test_from_file_with_lhs_termname( - "./examples/shifts/ushr_to_do_shift_fits_in_32.isle", - "ushr".to_string(), +fn test_named_ushr_fits_in_32() { + test_aarch64_rule_with_lhs_termname( + "ushr_fits_in_32", + "ushr", vec![ (Bitwidth::I8, VerificationResult::Success), (Bitwidth::I16, VerificationResult::Success), @@ -2046,10 +2046,10 @@ fn test_ushr_to_do_shift_fits_in_32() { } #[test] -fn test_ushr_to_do_shift_fits_in_32_concrete() { - test_concrete_input_from_file_with_lhs_termname( - "./examples/shifts/ushr_to_do_shift_fits_in_32.isle", - "ushr".to_string(), +fn test_named_ushr_fits_in_32_concrete() { + test_concrete_aarch64_rule_with_lhs_termname( + "ushr_fits_in_32", + "ushr", false, ConcreteTest { termname: "ushr".to_string(), From 81844d015398e295a283e5cdcb174967ee1bc8ec Mon Sep 17 00:00:00 2001 From: Alexa VanHattum Date: Tue, 11 Apr 2023 18:19:02 -0400 Subject: [PATCH 16/30] do_shift --- cranelift/codegen/src/isa/aarch64/inst.isle | 51 ++++- cranelift/codegen/src/isa/aarch64/lower.isle | 16 +- .../broken/shifts/broken_do_shift_32.isle | 70 ++++--- .../examples/shifts/do_shift_32.isle | 126 ----------- .../examples/shifts/do_shift_64.isle | 126 ----------- .../examples/shifts/do_shift_fits_in_16.isle | 151 -------------- .../examples/shifts/do_shift_with_imm.isle | 144 ------------- cranelift/isle/veri/veri_engine/src/solver.rs | 10 +- cranelift/isle/veri/veri_engine/src/widths.rs | 8 +- .../isle/veri/veri_engine/tests/utils/mod.rs | 26 +++ cranelift/isle/veri/veri_engine/tests/veri.rs | 197 +++++++----------- 11 files changed, 206 insertions(+), 719 deletions(-) delete mode 100644 cranelift/isle/veri/veri_engine/examples/shifts/do_shift_32.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/shifts/do_shift_64.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/shifts/do_shift_fits_in_16.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/shifts/do_shift_with_imm.isle diff --git a/cranelift/codegen/src/isa/aarch64/inst.isle b/cranelift/codegen/src/isa/aarch64/inst.isle index 124380a0ab6a..6424fa73dd88 100644 --- a/cranelift/codegen/src/isa/aarch64/inst.isle +++ b/cranelift/codegen/src/isa/aarch64/inst.isle @@ -1667,6 +1667,13 @@ (decl pure partial imm_logic_from_imm64 (Type Imm64) ImmLogic) (extern constructor imm_logic_from_imm64 imm_logic_from_imm64) +;; Add an assertion that the value fits, using the constand with 56 1's then 6 0's (~63) +;;@ (spec (sig (args ty, x) (r)) +;;@ (assume +;;@ (= (r) (extract 5 0 (& (x) (- (int2bv 64 (ty)) (1i64:bv64))))), +;;@ (ult (& (x) (- (int2bv 64 (ty)) (1i64:bv64))) (64i64:bv64)) +;;@ ) +;;@ ) (decl pure partial imm_shift_from_imm64 (Type Imm64) ImmShift) (extern constructor imm_shift_from_imm64 imm_shift_from_imm64) @@ -1878,6 +1885,32 @@ dst)) ;; Helper for emitting `MInst.AluRRImmShift` instructions. +;;@ (spec (sig (args op, t, a, b) (ret)) +;;@ (assume +;;@ (= (ret) (switch (op) +;;@ ((16i8:bv8) +;;@ (if (<= (t) (32i8: isleType)) +;;@ (conv_to (64) (shr (extract 31 0 (a)) (& (- (int2bv 32 (32i32:isleType)) (1i32:bv)) (extract 31 0 (zero_ext (regwidth) (b)))))) +;;@ (shr (a) (& (- (int2bv 64 (64i64:isleType)) (1i64:bv)) (zero_ext (regwidth) (b))))) +;;@ ) +;;@ ((17i8:bv8) +;;@ (if (<= (t) (32i8: isleType)) +;;@ (conv_to (64) (ashr (extract 31 0 (a)) (& (- (int2bv 32 (32i32:isleType)) (1i32:bv)) (extract 31 0 (zero_ext (regwidth) (b)))))) +;;@ (ashr (a) (& (- (int2bv 64 (64i64:isleType)) (1i64:bv)) (zero_ext (regwidth) (b))))) +;;@ ) +;;@ ((18i8:bv8) +;;@ (if (<= (t) (32i8: isleType)) +;;@ (conv_to (64) (shl (extract 31 0 (a)) (& (- (int2bv 32 (32i32:isleType)) (1i32:bv)) (extract 31 0 (zero_ext (regwidth) (b)))))) +;;@ (shl (a) (& (- (int2bv 64 (64i64:isleType)) (1i64:bv)) (zero_ext (regwidth) (b))))) +;;@ ) +;;@ ))) +;;@ (assert +;;@ (|| (= (op) (16i8:bv8)) (|| (= (op) (17i8:bv8)) (= (op) (18i8:bv8)))), +;;@ (|| (= (t) (8i8: isleType)) +;;@ (|| (= (t) (16i8: isleType)) +;;@ (|| (= (t) (32i8: isleType)) +;;@ (= (t) (64i8: isleType))))) +;;@ )) (decl alu_rr_imm_shift (ALUOp Type Reg ImmShift) Reg) (rule (alu_rr_imm_shift op ty src imm) (let ((dst WritableReg (temp_writable_reg $I64)) @@ -1898,14 +1931,14 @@ ;;@ (conv_to (64) (ashr (extract 31 0 (a)) (& (- (int2bv 32 (32i32:isleType)) (1i32:bv)) (extract 31 0 (b))))) ;;@ (ashr (a) (& (- (int2bv 64 (64i64:isleType)) (1i64:bv)) (b)))) ;;@ ) -;;@ ((17i8:bv8) +;;@ ((18i8:bv8) ;;@ (if (<= (t) (32i8: isleType)) ;;@ (conv_to (64) (shl (extract 31 0 (a)) (& (- (int2bv 32 (32i32:isleType)) (1i32:bv)) (extract 31 0 (b))))) ;;@ (shl (a) (& (- (int2bv 64 (64i64:isleType)) (1i64:bv)) (b)))) ;;@ ) ;;@ ))) ;;@ (assert -;;@ (|| (= (op) (16i8:bv8)) (|| (= (op) (17i8:bv8)) (= (op) (17i8:bv8)))), +;;@ (|| (= (op) (16i8:bv8)) (|| (= (op) (17i8:bv8)) (= (op) (18i8:bv8)))), ;;@ (|| (= (t) (8i8: isleType)) ;;@ (|| (= (t) (16i8: isleType)) ;;@ (|| (= (t) (32i8: isleType)) @@ -2822,6 +2855,20 @@ (decl and_reg (Type Reg Reg) Reg) (rule (and_reg ty x y) (alu_rrr (ALUOp.And) ty x y)) +;;@ (spec (sig (args ty, x, y) (ret)) +;;@ (assume +;;@ (= (ret) +;;@ (switch (ty) +;;@ ((32i8: isleType) (conv_to (regwidth) (& (extract 31 0 (x)) (extract 31 0 (y))))) +;;@ ((64i8: isleType) (& (x) (zero_ext (regwidth) (y)))) +;;@ ) +;;@ )) +;;@ (assert +;;@ (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) +;;@ (= (extract 2 0 (y)) (0i3:bv)) +;;@ )) +;;@ )) (decl and_imm (Type Reg ImmLogic) Reg) (rule (and_imm ty x y) (alu_rr_imm_logic (ALUOp.And) ty x y)) diff --git a/cranelift/codegen/src/isa/aarch64/lower.isle b/cranelift/codegen/src/isa/aarch64/lower.isle index 735680f1a50b..3dd445add79c 100644 --- a/cranelift/codegen/src/isa/aarch64/lower.isle +++ b/cranelift/codegen/src/isa/aarch64/lower.isle @@ -1226,9 +1226,9 @@ ;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 15 0 (a))))) ;;@ ((32i32: isleType) (true)) ;;@ ((64i32: isleType) (true)))) -;;@ ((18i8:bv8) (true)) -;;@ ) -;;@ )) +;;@ ((18i8:bv8) (true)) +;;@ ) +;;@ )) (decl do_shift (ALUOp Type Reg Value) Reg) ;; 8/16-bit shift base case. @@ -1240,17 +1240,19 @@ ;; On i32 and i64 types this matches what the aarch64 spec does, but on smaller ;; types (i16, i8) we need to do this manually, so we wrap the shift amount ;; with an AND instruction -(rule -1 (do_shift op (fits_in_16 ty) x y) +(rule do_shift_fits_in_16 -1 (do_shift op (fits_in_16 ty) x y) (let ((shift_amt Reg (value_regs_get y 0)) (masked_shift_amt Reg (and_imm $I32 shift_amt (shift_mask ty)))) (alu_rrr op $I32 x masked_shift_amt))) +;;@ (spec (sig (args t) (ret)) +;;@ (assume (= (- (int2bv 64 (t)) (1i64:bv)) (ret)))) (decl shift_mask (Type) ImmLogic) (extern constructor shift_mask shift_mask) ;; 32/64-bit shift base cases. -(rule (do_shift op $I32 x y) (alu_rrr op $I32 x (value_regs_get y 0))) -(rule (do_shift op $I64 x y) (alu_rrr op $I64 x (value_regs_get y 0))) +(rule do_shift_32_base_case (do_shift op $I32 x y) (alu_rrr op $I32 x (value_regs_get y 0))) +(rule do_shift_64_base_case (do_shift op $I64 x y) (alu_rrr op $I64 x (value_regs_get y 0))) ;; Special case for shifting by a constant value where the value can fit into an ;; `ImmShift`. @@ -1258,7 +1260,7 @@ ;; Note that this rule explicitly has a higher priority than the others ;; to ensure it's attempted first, otherwise the type-based filters on the ;; previous rules seem to take priority over this rule. -(rule 1 (do_shift op ty x (iconst k)) +(rule do_shift_imm 1 (do_shift op ty x (iconst k)) (if-let shift (imm_shift_from_imm64 ty k)) (alu_rr_imm_shift op ty x shift)) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_do_shift_32.isle b/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_do_shift_32.isle index 875c222ca300..3861c38e1fa2 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_do_shift_32.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_do_shift_32.isle @@ -4,17 +4,17 @@ )) ;;@ (spec (sig (args) (ret)) -;;@ (assume (= (0i64:bv) (ret)))) -;;decl ALUOp.Lsl - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (1i64:bv) (ret)))) +;;@ (assume (= (16i8:bv) (ret)))) ;;decl ALUOp.Lsr ;;@ (spec (sig (args) (ret)) -;;@ (assume (= (2i64:bv) (ret)))) +;;@ (assume (= (17i8:bv) (ret)))) ;;decl ALUOp.Asr +;;@ (spec (sig (args) (ret)) +;;@ (assume (= (18i8:bv) (ret)))) +;;decl ALUOp.Lsl + ;; An ALU operation. This can be paired with several instruction formats ;; below (see `Inst`) in any combination. (type ALUOp @@ -58,44 +58,52 @@ ;;@ (spec (sig (args op, t, a, b) (ret)) ;;@ (assume ;;@ (= (ret) -;;@ (switch (op) -;;@ ((0i64:bv) (conv_to (regwidth) -;;@ (shl (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv64))) (b))))))) -;;@ ((1i64:bv) (conv_to (regwidth) -;;@ (shr (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ ((2i64:bv) (conv_to (regwidth) -;;@ (ashr (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ )), -;;@ (= (t) (widthof (b))), -;;@ )) +;;@ (switch (op) +;;@ ((16i8:bv8) (conv_to (regwidth) +;;@ (shr (conv_to (t) (a)) +;;@ (conv_to (t) (zero_ext (regwidth) +;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) +;;@ ((17i8:bv8) (conv_to (regwidth) +;;@ (ashr (conv_to (t) (a)) +;;@ (conv_to (t) (zero_ext (regwidth) +;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) +;;@ ((18i8:bv8) (conv_to (regwidth) +;;@ (shl (conv_to (t) (a)) +;;@ (conv_to (t) (zero_ext (regwidth) +;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv64))) (b))))))) +;;@ )) +;;@ ) +;;@ (assert +;;@ (= (t) (widthof (b))), +;;@ (|| (= (t) (8i8: isleType)) +;;@ (|| (= (t) (16i8: isleType)) +;;@ (|| (= (t) (32i8: isleType)) +;;@ (= (t) (64i8: isleType))))), +;;@ )) (decl do_shift (ALUOp Type Reg Value) Reg) -;; BROKEN: no restriction on op in annotation +;; Helper for emitting `MInst.AluRRR` instructions. ;;@ (spec (sig (args op, t, a, b) (ret)) ;;@ (assume ;;@ (= (ret) (switch (op) -;;@ ((0i64:bv) -;;@ (if (<= (t) (32i8: isleType)) -;;@ (conv_to (64) (shl (extract 31 0 (a)) (& (- (int2bv 32 (32i32:isleType)) (1i32:bv)) (extract 31 0 (b))))) -;;@ (shl (a) (& (- (int2bv 64 (64i64:isleType)) (1i64:bv)) (b)))) -;;@ ) -;;@ ((1i64:bv) +;;@ ((16i8:bv8) ;;@ (if (<= (t) (32i8: isleType)) ;;@ (conv_to (64) (shr (extract 31 0 (a)) (& (- (int2bv 32 (32i32:isleType)) (1i32:bv)) (extract 31 0 (b))))) ;;@ (shr (a) (& (- (int2bv 64 (64i64:isleType)) (1i64:bv)) (b)))) ;;@ ) -;;@ ((2i64:bv) +;;@ ((17i8:bv8) ;;@ (if (<= (t) (32i8: isleType)) ;;@ (conv_to (64) (ashr (extract 31 0 (a)) (& (- (int2bv 32 (32i32:isleType)) (1i32:bv)) (extract 31 0 (b))))) ;;@ (ashr (a) (& (- (int2bv 64 (64i64:isleType)) (1i64:bv)) (b)))) ;;@ ) -;;@ )), +;;@ ((18i8:bv8) +;;@ (if (<= (t) (32i8: isleType)) +;;@ (conv_to (64) (shl (extract 31 0 (a)) (& (- (int2bv 32 (32i32:isleType)) (1i32:bv)) (extract 31 0 (b))))) +;;@ (shl (a) (& (- (int2bv 64 (64i64:isleType)) (1i64:bv)) (b)))) +;;@ ) +;;@ ))) +;;@ (assert +;;@ (|| (= (op) (16i8:bv8)) (|| (= (op) (17i8:bv8)) (= (op) (18i8:bv8)))), ;;@ (|| (= (t) (8i8: isleType)) ;;@ (|| (= (t) (16i8: isleType)) ;;@ (|| (= (t) (32i8: isleType)) diff --git a/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_32.isle b/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_32.isle deleted file mode 100644 index c71b8310fe87..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_32.isle +++ /dev/null @@ -1,126 +0,0 @@ -;; Instruction formats. -(type MInst - (enum -)) - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (0i64:bv) (ret)))) -;;decl ALUOp.Lsl - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (1i64:bv) (ret)))) -;;decl ALUOp.Lsr - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (2i64:bv) (ret)))) -;;decl ALUOp.Asr - -;; An ALU operation. This can be paired with several instruction formats -;; below (see `Inst`) in any combination. -(type ALUOp - (enum - (Add) - (Sub) - (Orr) - (OrrNot) - (And) - (AndS) - (AndNot) - ;; XOR (AArch64 calls this "EOR") - (Eor) - ;; XNOR (AArch64 calls this "EOR-NOT") - (EorNot) - ;; Add, setting flags - (AddS) - ;; Sub, setting flags - (SubS) - ;; Signed multiply, high-word result - (SMulH) - ;; Unsigned multiply, high-word result - (UMulH) - (SDiv) - (UDiv) - (RotR) - (Lsr) - (Asr) - (Lsl) - ;; Add with carry - (Adc) - ;; Add with carry, settings flags - (AdcS) - ;; Subtract with carry - (Sbc) - ;; Subtract with carry, settings flags - (SbcS) -)) - -;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (switch (op) -;;@ ((0i64:bv) (conv_to (regwidth) -;;@ (shl (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv64))) (b))))))) -;;@ ((1i64:bv) (conv_to (regwidth) -;;@ (shr (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ ((2i64:bv) (conv_to (regwidth) -;;@ (ashr (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ )) -;;@ ) -;;@ (assert -;;@ (|| (= (op) (0i64:bv)) (|| (= (op) (1i64:bv)) (= (op) (2i64:bv)))), -;;@ (= (t) (widthof (b))), -;;@ (|| (= (t) (8i8: isleType)) -;;@ (|| (= (t) (16i8: isleType)) -;;@ (|| (= (t) (32i8: isleType)) -;;@ (= (t) (64i8: isleType))))), -;;@ (switch (op) -;;@ ((0i64:bv) (true)) -;;@ ((1i64:bv) (switch (t) -;;@ ((8i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 15 0 (a))))) -;;@ ((32i32: isleType) (true)) -;;@ ((64i32: isleType) (true)))) -;;@ ((2i64:bv) (switch (t) -;;@ ((8i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 15 0 (a))))) -;;@ ((32i32: isleType) (true)) -;;@ ((64i32: isleType) (true)))) -;;@ ) -;;@ )) -(decl do_shift (ALUOp Type Reg Value) Reg) - -;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assume -;;@ (= (ret) (switch (op) -;;@ ((0i64:bv) -;;@ (if (<= (t) (32i8: isleType)) -;;@ (conv_to (64) (shl (extract 31 0 (a)) (& (- (int2bv 32 (32i32:isleType)) (1i32:bv)) (extract 31 0 (b))))) -;;@ (shl (a) (& (- (int2bv 64 (64i64:isleType)) (1i64:bv)) (b)))) -;;@ ) -;;@ ((1i64:bv) -;;@ (if (<= (t) (32i8: isleType)) -;;@ (conv_to (64) (shr (extract 31 0 (a)) (& (- (int2bv 32 (32i32:isleType)) (1i32:bv)) (extract 31 0 (b))))) -;;@ (shr (a) (& (- (int2bv 64 (64i64:isleType)) (1i64:bv)) (b)))) -;;@ ) -;;@ ((2i64:bv) -;;@ (if (<= (t) (32i8: isleType)) -;;@ (conv_to (64) (ashr (extract 31 0 (a)) (& (- (int2bv 32 (32i32:isleType)) (1i32:bv)) (extract 31 0 (b))))) -;;@ (ashr (a) (& (- (int2bv 64 (64i64:isleType)) (1i64:bv)) (b)))) -;;@ ) -;;@ )), -;;@ (|| (= (op) (0i64:bv)) (|| (= (op) (1i64:bv)) (= (op) (2i64:bv)))), -;;@ (|| (= (t) (8i8: isleType)) -;;@ (|| (= (t) (16i8: isleType)) -;;@ (|| (= (t) (32i8: isleType)) -;;@ (= (t) (64i8: isleType))))) -;;@ )) -(decl alu_rrr (ALUOp Type Reg Reg) Reg) -(extern constructor alu_rrr alu_rrr) - -(rule (do_shift op $I32 x y) (alu_rrr op $I32 x (value_regs_get y 0))) diff --git a/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_64.isle b/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_64.isle deleted file mode 100644 index 12a1d3193a3a..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_64.isle +++ /dev/null @@ -1,126 +0,0 @@ -;; Instruction formats. -(type MInst - (enum -)) - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (0i64:bv) (ret)))) -;;decl ALUOp.Lsl - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (1i64:bv) (ret)))) -;;decl ALUOp.Lsr - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (2i64:bv) (ret)))) -;;decl ALUOp.Asr - -;; An ALU operation. This can be paired with several instruction formats -;; below (see `Inst`) in any combination. -(type ALUOp - (enum - (Add) - (Sub) - (Orr) - (OrrNot) - (And) - (AndS) - (AndNot) - ;; XOR (AArch64 calls this "EOR") - (Eor) - ;; XNOR (AArch64 calls this "EOR-NOT") - (EorNot) - ;; Add, setting flags - (AddS) - ;; Sub, setting flags - (SubS) - ;; Signed multiply, high-word result - (SMulH) - ;; Unsigned multiply, high-word result - (UMulH) - (SDiv) - (UDiv) - (RotR) - (Lsr) - (Asr) - (Lsl) - ;; Add with carry - (Adc) - ;; Add with carry, settings flags - (AdcS) - ;; Subtract with carry - (Sbc) - ;; Subtract with carry, settings flags - (SbcS) -)) - -;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (switch (op) -;;@ ((0i64:bv) (conv_to (regwidth) -;;@ (shl (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv64))) (b))))))) -;;@ ((1i64:bv) (conv_to (regwidth) -;;@ (shr (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ ((2i64:bv) (conv_to (regwidth) -;;@ (ashr (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ )) -;;@ ) -;;@ (assert -;;@ (|| (= (op) (0i64:bv)) (|| (= (op) (1i64:bv)) (= (op) (2i64:bv)))), -;;@ (= (t) (widthof (b))), -;;@ (|| (= (t) (8i8: isleType)) -;;@ (|| (= (t) (16i8: isleType)) -;;@ (|| (= (t) (32i8: isleType)) -;;@ (= (t) (64i8: isleType))))), -;;@ (switch (op) -;;@ ((0i64:bv) (true)) -;;@ ((1i64:bv) (switch (t) -;;@ ((8i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 15 0 (a))))) -;;@ ((32i32: isleType) (true)) -;;@ ((64i32: isleType) (true)))) -;;@ ((2i64:bv) (switch (t) -;;@ ((8i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 15 0 (a))))) -;;@ ((32i32: isleType) (true)) -;;@ ((64i32: isleType) (true)))) -;;@ ) -;;@ )) -(decl do_shift (ALUOp Type Reg Value) Reg) - -;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assume -;;@ (= (ret) (switch (op) -;;@ ((0i64:bv) -;;@ (if (<= (t) (32i8: isleType)) -;;@ (conv_to (64) (shl (extract 31 0 (a)) (& (- (int2bv 32 (32i32:isleType)) (1i32:bv)) (extract 31 0 (b))))) -;;@ (shl (a) (& (- (int2bv 64 (64i64:isleType)) (1i64:bv)) (b)))) -;;@ ) -;;@ ((1i64:bv) -;;@ (if (<= (t) (32i8: isleType)) -;;@ (conv_to (64) (shr (extract 31 0 (a)) (& (- (int2bv 32 (32i32:isleType)) (1i32:bv)) (extract 31 0 (b))))) -;;@ (shr (a) (& (- (int2bv 64 (64i64:isleType)) (1i64:bv)) (b)))) -;;@ ) -;;@ ((2i64:bv) -;;@ (if (<= (t) (32i8: isleType)) -;;@ (conv_to (64) (ashr (extract 31 0 (a)) (& (- (int2bv 32 (32i32:isleType)) (1i32:bv)) (extract 31 0 (b))))) -;;@ (ashr (a) (& (- (int2bv 64 (64i64:isleType)) (1i64:bv)) (b)))) -;;@ ) -;;@ )), -;;@ (|| (= (op) (0i64:bv)) (|| (= (op) (1i64:bv)) (= (op) (2i64:bv)))), -;;@ (|| (= (t) (8i8: isleType)) -;;@ (|| (= (t) (16i8: isleType)) -;;@ (|| (= (t) (32i8: isleType)) -;;@ (= (t) (64i8: isleType))))) -;;@ )) -(decl alu_rrr (ALUOp Type Reg Reg) Reg) -(extern constructor alu_rrr alu_rrr) - -(rule (do_shift op $I64 x y) (alu_rrr op $I64 x (value_regs_get y 0))) diff --git a/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_fits_in_16.isle b/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_fits_in_16.isle deleted file mode 100644 index 33fd0de340e8..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_fits_in_16.isle +++ /dev/null @@ -1,151 +0,0 @@ -(type ImmLogic (primitive ImmLogic)) - -;; Instruction formats. -(type MInst - (enum -)) - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (0i64:bv) (ret)))) -;;decl ALUOp.Lsl - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (1i64:bv) (ret)))) -;;decl ALUOp.Lsr - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (2i64:bv) (ret)))) -;;decl ALUOp.Asr - -;; An ALU operation. This can be paired with several instruction formats -;; below (see `Inst`) in any combination. -(type ALUOp - (enum - (Add) - (Sub) - (Orr) - (OrrNot) - (And) - (AndS) - (AndNot) - ;; XOR (AArch64 calls this "EOR") - (Eor) - ;; XNOR (AArch64 calls this "EOR-NOT") - (EorNot) - ;; Add, setting flags - (AddS) - ;; Sub, setting flags - (SubS) - ;; Signed multiply, high-word result - (SMulH) - ;; Unsigned multiply, high-word result - (UMulH) - (SDiv) - (UDiv) - (RotR) - (Lsr) - (Asr) - (Lsl) - ;; Add with carry - (Adc) - ;; Add with carry, settings flags - (AdcS) - ;; Subtract with carry - (Sbc) - ;; Subtract with carry, settings flags - (SbcS) -)) - -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) -;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) -;;@ (= (extract 2 0 (y)) (0i3:bv)) -;;@ )), -;;@ (= (ret) -;;@ (switch (ty) -;;@ ((32i8: isleType) (conv_to (regwidth) (& (extract 31 0 (x)) (extract 31 0 (y))))) -;;@ ((64i8: isleType) (& (x) (zero_ext (regwidth) (y)))) -;;@ ) -;;@ ) -;;@ )) -(decl and_imm (Type Reg ImmLogic) Reg) -(extern constructor and_imm and_imm) - -;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (switch (op) -;;@ ((0i64:bv) (conv_to (regwidth) -;;@ (shl (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv64))) (b))))))) -;;@ ((1i64:bv) (conv_to (regwidth) -;;@ (shr (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ ((2i64:bv) (conv_to (regwidth) -;;@ (ashr (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ )) -;;@ ) -;;@ (assert -;;@ (|| (= (op) (0i64:bv)) (|| (= (op) (1i64:bv)) (= (op) (2i64:bv)))), -;;@ (= (t) (widthof (b))), -;;@ (|| (= (t) (8i8: isleType)) -;;@ (|| (= (t) (16i8: isleType)) -;;@ (|| (= (t) (32i8: isleType)) -;;@ (= (t) (64i8: isleType))))), -;;@ (switch (op) -;;@ ((0i64:bv) (true)) -;;@ ((1i64:bv) (switch (t) -;;@ ((8i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 15 0 (a))))) -;;@ ((32i32: isleType) (true)) -;;@ ((64i32: isleType) (true)))) -;;@ ((2i64:bv) (switch (t) -;;@ ((8i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 15 0 (a))))) -;;@ ((32i32: isleType) (true)) -;;@ ((64i32: isleType) (true)))) -;;@ ) -;;@ )) -(decl do_shift (ALUOp Type Reg Value) Reg) - -;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assume -;;@ (= (ret) (switch (op) -;;@ ((0i64:bv) -;;@ (if (<= (t) (32i8: isleType)) -;;@ (conv_to (64) (shl (extract 31 0 (a)) (& (- (int2bv 32 (32i32:isleType)) (1i32:bv)) (extract 31 0 (b))))) -;;@ (shl (a) (& (- (int2bv 64 (64i64:isleType)) (1i64:bv)) (b)))) -;;@ ) -;;@ ((1i64:bv) -;;@ (if (<= (t) (32i8: isleType)) -;;@ (conv_to (64) (shr (extract 31 0 (a)) (& (- (int2bv 32 (32i32:isleType)) (1i32:bv)) (extract 31 0 (b))))) -;;@ (shr (a) (& (- (int2bv 64 (64i64:isleType)) (1i64:bv)) (b)))) -;;@ ) -;;@ ((2i64:bv) -;;@ (if (<= (t) (32i8: isleType)) -;;@ (conv_to (64) (ashr (extract 31 0 (a)) (& (- (int2bv 32 (32i32:isleType)) (1i32:bv)) (extract 31 0 (b))))) -;;@ (ashr (a) (& (- (int2bv 64 (64i64:isleType)) (1i64:bv)) (b)))) -;;@ ) -;;@ )), -;;@ (|| (= (op) (0i64:bv)) (|| (= (op) (1i64:bv)) (= (op) (2i64:bv)))), -;;@ (|| (= (t) (8i8: isleType)) -;;@ (|| (= (t) (16i8: isleType)) -;;@ (|| (= (t) (32i8: isleType)) -;;@ (= (t) (64i8: isleType))))) -;;@ )) -(decl alu_rrr (ALUOp Type Reg Reg) Reg) -(extern constructor alu_rrr alu_rrr) - -;;@ (spec (sig (args x) (ret)) -;;@ (assume (= (- (int2bv 64 (x)) (1i64:bv)) (ret)))) -(decl shift_mask (Type) ImmLogic) -(extern constructor shift_mask shift_mask) - -(rule -1 (do_shift op (fits_in_16 ty) x y) - (let ((shift_amt Reg (value_regs_get y 0)) - (masked_shift_amt Reg (and_imm $I32 shift_amt (shift_mask ty)))) - (alu_rrr op $I32 x masked_shift_amt))) diff --git a/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_with_imm.isle b/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_with_imm.isle deleted file mode 100644 index 0d0de74b6687..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/shifts/do_shift_with_imm.isle +++ /dev/null @@ -1,144 +0,0 @@ -(type ImmShift (primitive ImmShift)) - -;; Instruction formats. -(type MInst - (enum -)) - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (0i64:bv) (ret)))) -;;decl ALUOp.Lsl - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (1i64:bv) (ret)))) -;;decl ALUOp.Lsr - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (2i64:bv) (ret)))) -;;decl ALUOp.Asr - -;; An ALU operation. This can be paired with several instruction formats -;; below (see `Inst`) in any combination. -(type ALUOp - (enum - (Add) - (Sub) - (Orr) - (OrrNot) - (And) - (AndS) - (AndNot) - ;; XOR (AArch64 calls this "EOR") - (Eor) - ;; XNOR (AArch64 calls this "EOR-NOT") - (EorNot) - ;; Add, setting flags - (AddS) - ;; Sub, setting flags - (SubS) - ;; Signed multiply, high-word result - (SMulH) - ;; Unsigned multiply, high-word result - (UMulH) - (SDiv) - (UDiv) - (RotR) - (Lsr) - (Asr) - (Lsl) - ;; Add with carry - (Adc) - ;; Add with carry, settings flags - (AdcS) - ;; Subtract with carry - (Sbc) - ;; Subtract with carry, settings flags - (SbcS) -)) - -;; Add an assertion that the value fits, using the constand with 56 1's then 6 0's (~63) -;;@ (spec (sig (args ty, x) (r)) -;;@ (assume -;;@ (= (r) (extract 5 0 (& (x) (- (int2bv 64 (ty)) (1i64:bv64))))), -;;@ (ult (& (x) (- (int2bv 64 (ty)) (1i64:bv64))) (64i64:bv64)) -;;@ ) -;;@ ) -(decl pure imm_shift_from_imm64 (Type Imm64) ImmShift) -(extern constructor imm_shift_from_imm64 imm_shift_from_imm64) - -;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (switch (op) -;;@ ((0i64:bv) (conv_to (regwidth) -;;@ (shl (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv64))) (b))))))) -;;@ ((1i64:bv) (conv_to (regwidth) -;;@ (shr (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ ((2i64:bv) (conv_to (regwidth) -;;@ (ashr (conv_to (t) (a)) -;;@ (conv_to (t) (zero_ext (regwidth) -;;@ (& (conv_to (widthof (b)) (- (int2bv 64 (widthof (b))) (1i64:bv))) (b))))))) -;;@ )) -;;@ ) -;;@ (assert -;;@ (|| (= (op) (0i64:bv)) (|| (= (op) (1i64:bv)) (= (op) (2i64:bv)))), -;;@ (= (t) (widthof (b))), -;;@ (|| (= (t) (8i8: isleType)) -;;@ (|| (= (t) (16i8: isleType)) -;;@ (|| (= (t) (32i8: isleType)) -;;@ (= (t) (64i8: isleType))))), -;;@ (switch (op) -;;@ ((0i64:bv) (true)) -;;@ ((1i64:bv) (switch (t) -;;@ ((8i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (zero_ext (32) (extract 15 0 (a))))) -;;@ ((32i32: isleType) (true)) -;;@ ((64i32: isleType) (true)))) -;;@ ((2i64:bv) (switch (t) -;;@ ((8i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 7 0 (a))))) -;;@ ((16i32: isleType) (= (extract 31 0 (a)) (sign_ext (32) (extract 15 0 (a))))) -;;@ ((32i32: isleType) (true)) -;;@ ((64i32: isleType) (true)))) -;;@ ) -;;@ )) -(decl do_shift (ALUOp Type Reg Value) Reg) -(extern extractor do_shift do_shift) - -;; types get bucketed for <= 32, <= 64 -;; (if (<= (t) (32i8: isleType)) (32i8: isleType) (64i8: isleType)) - -;;@ (spec (sig (args op, t, a, b) (ret)) -;;@ (assume -;;@ (= (ret) (switch (op) -;;@ ((0i64:bv) -;;@ (if (<= (t) (32i8: isleType)) -;;@ (conv_to (64) (shl (extract 31 0 (a)) (& (- (int2bv 32 (32i32:isleType)) (1i32:bv)) (extract 31 0 (zero_ext (regwidth) (b)))))) -;;@ (shl (a) (& (- (int2bv 64 (64i64:isleType)) (1i64:bv)) (zero_ext (regwidth) (b))))) -;;@ ) -;;@ ((1i64:bv) -;;@ (if (<= (t) (32i8: isleType)) -;;@ (conv_to (64) (shr (extract 31 0 (a)) (& (- (int2bv 32 (32i32:isleType)) (1i32:bv)) (extract 31 0 (zero_ext (regwidth) (b)))))) -;;@ (shr (a) (& (- (int2bv 64 (64i64:isleType)) (1i64:bv)) (zero_ext (regwidth) (b))))) -;;@ ) -;;@ ((2i64:bv) -;;@ (if (<= (t) (32i8: isleType)) -;;@ (conv_to (64) (ashr (extract 31 0 (a)) (& (- (int2bv 32 (32i32:isleType)) (1i32:bv)) (extract 31 0 (zero_ext (regwidth) (b)))))) -;;@ (ashr (a) (& (- (int2bv 64 (64i64:isleType)) (1i64:bv)) (zero_ext (regwidth) (b))))) -;;@ ) -;;@ )), -;;@ (|| (= (op) (0i64:bv)) (|| (= (op) (1i64:bv)) (= (op) (2i64:bv)))), -;;@ (|| (= (t) (8i8: isleType)) -;;@ (|| (= (t) (16i8: isleType)) -;;@ (|| (= (t) (32i8: isleType)) -;;@ (= (t) (64i8: isleType))))) -;;@ )) -(decl alu_rr_imm_shift (ALUOp Type Reg ImmShift) Reg) -(extern constructor alu_rr_imm_shift alu_rr_imm_shift) - -(rule 1 (do_shift op ty x (iconst k)) - (if-let shift (imm_shift_from_imm64 ty k)) - (alu_rr_imm_shift op ty x shift)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/src/solver.rs b/cranelift/isle/veri/veri_engine/src/solver.rs index caf83a2e3652..29cd0eb6b40a 100644 --- a/cranelift/isle/veri/veri_engine/src/solver.rs +++ b/cranelift/isle/veri/veri_engine/src/solver.rs @@ -922,7 +922,6 @@ impl SolverCtx { let expr_width = width.unwrap().clone(); let dyn_width = self.vir_expr_to_sexp(*x); let eq = self.smt.eq(expr_width, dyn_width); - println!("conv_to dyn: {}", self.smt.display(eq)); self.width_assumptions.push(eq); self.vir_expr_to_sexp(*y) } else { @@ -1580,6 +1579,7 @@ pub fn run_solver( let eq = ctx .smt .eq(ctx.smt.atom(&width_name), ctx.smt.numeral(bitwidth)); + println!("Width from inference {} ({})", width_name, bitwidth); ctx.width_assumptions.push(eq); } None => { @@ -1857,9 +1857,7 @@ pub fn run_solver( Ok(Response::Sat) => { println!("Verification failed"); ctx.display_model(termenv, typeenv, rule, lhs, rhs); - let vals = ctx.smt - .get_value(vec![condition]) - .unwrap(); + let vals = ctx.smt.get_value(vec![condition]).unwrap(); for (variable, value) in vals { if value == ctx.smt.false_() { println!("Failed condition:\n{}", ctx.smt.display(variable)); @@ -1869,9 +1867,7 @@ pub fn run_solver( } if assertions.len() > 0 { - let vals = ctx.smt - .get_value(assertions) - .unwrap(); + let vals = ctx.smt.get_value(assertions).unwrap(); for (variable, value) in vals { if value == ctx.smt.false_() { println!("Failed assertion:\n{}", ctx.smt.display(variable)); diff --git a/cranelift/isle/veri/veri_engine/src/widths.rs b/cranelift/isle/veri/veri_engine/src/widths.rs index 7851c0f6d6a5..76d6e42df85a 100644 --- a/cranelift/isle/veri/veri_engine/src/widths.rs +++ b/cranelift/isle/veri/veri_engine/src/widths.rs @@ -332,7 +332,7 @@ pub fn isle_inst_types() -> HashMap<&'static str, Vec> { vec![ TermSignature { args: vec![ - Type::BitVector(Some(64)), + Type::BitVector(Some(8)), Type::Int, Type::BitVector(Some(64)), Type::BitVector(Some(8)), @@ -342,7 +342,7 @@ pub fn isle_inst_types() -> HashMap<&'static str, Vec> { }, TermSignature { args: vec![ - Type::BitVector(Some(64)), + Type::BitVector(Some(8)), Type::Int, Type::BitVector(Some(64)), Type::BitVector(Some(16)), @@ -352,7 +352,7 @@ pub fn isle_inst_types() -> HashMap<&'static str, Vec> { }, TermSignature { args: vec![ - Type::BitVector(Some(64)), + Type::BitVector(Some(8)), Type::Int, Type::BitVector(Some(64)), Type::BitVector(Some(32)), @@ -362,7 +362,7 @@ pub fn isle_inst_types() -> HashMap<&'static str, Vec> { }, TermSignature { args: vec![ - Type::BitVector(Some(64)), + Type::BitVector(Some(8)), Type::Int, Type::BitVector(Some(64)), Type::BitVector(Some(64)), diff --git a/cranelift/isle/veri/veri_engine/tests/utils/mod.rs b/cranelift/isle/veri/veri_engine/tests/utils/mod.rs index 26daeda5c563..0cd9a4694260 100644 --- a/cranelift/isle/veri/veri_engine/tests/utils/mod.rs +++ b/cranelift/isle/veri/veri_engine/tests/utils/mod.rs @@ -238,6 +238,32 @@ pub fn test_from_file_with_config(file: &str, config: Config, tr: TestResult) -> test_rules_with_term(inputs, tr, config); } +pub fn test_aarch64_with_config(config: Config, tr: TestResult) -> () { + println!( + "Verifying rules {:?} with termname {}", + config.names, config.term + ); + // TODO: clean up path logic + let cur_dir = env::current_dir().expect("Can't access current working directory"); + let clif_isle = cur_dir.join("../../../codegen/src").join("clif_lower.isle"); + let prelude_isle = cur_dir.join("../../../codegen/src").join("prelude.isle"); + let prelude_lower_isle = cur_dir + .join("../../../codegen/src") + .join("prelude_lower.isle"); + let mut inputs = vec![prelude_isle, prelude_lower_isle, clif_isle]; + inputs.push( + cur_dir + .join("../../../codegen/src/isa/aarch64") + .join("inst.isle"), + ); + inputs.push( + cur_dir + .join("../../../codegen/src/isa/aarch64") + .join("lower.isle"), + ); + test_rules_with_term(inputs, tr, config); +} + pub fn test_concrete_aarch64_rule_with_lhs_termname( rulename: &str, termname: &str, diff --git a/cranelift/isle/veri/veri_engine/tests/veri.rs b/cranelift/isle/veri/veri_engine/tests/veri.rs index 5046394e1e97..c63abc7046d0 100644 --- a/cranelift/isle/veri/veri_engine/tests/veri.rs +++ b/cranelift/isle/veri/veri_engine/tests/veri.rs @@ -1,7 +1,7 @@ mod utils; use utils::{all_failure_result, all_success_result, custom_result, lte_64_success_result}; use utils::{ - run_and_retry, test_aarch64_rule_with_lhs_termname, + run_and_retry, test_aarch64_rule_with_lhs_termname, test_aarch64_with_config, test_concrete_aarch64_rule_with_lhs_termname, test_concrete_input_from_file_with_lhs_termname, test_from_file_with_config, test_from_file_with_lhs_termname, test_from_file_with_lhs_termname_dynwidth, Bitwidth, @@ -248,22 +248,14 @@ fn test_broken_iadd_extend() { #[test] fn test_named_iadd_ishl_left() { run_and_retry(|| { - test_aarch64_rule_with_lhs_termname( - "iadd_ishl_left", - "iadd", - lte_64_success_result(), - ) + test_aarch64_rule_with_lhs_termname("iadd_ishl_left", "iadd", lte_64_success_result()) }); } #[test] fn test_named_iadd_ishl_right() { run_and_retry(|| { - test_aarch64_rule_with_lhs_termname( - "iadd_ishl_right", - "iadd", - lte_64_success_result(), - ) + test_aarch64_rule_with_lhs_termname("iadd_ishl_right", "iadd", lte_64_success_result()) }); } @@ -489,22 +481,14 @@ fn test_broken_iadd_shift2() { #[test] fn test_named_isub_base_case() { run_and_retry(|| { - test_aarch64_rule_with_lhs_termname( - "isub_base_case", - "isub", - lte_64_success_result(), - ) + test_aarch64_rule_with_lhs_termname("isub_base_case", "isub", lte_64_success_result()) }) } #[test] fn test_named_isub_imm12() { run_and_retry(|| { - test_aarch64_rule_with_lhs_termname( - "isub_imm12", - "isub", - lte_64_success_result(), - ) + test_aarch64_rule_with_lhs_termname("isub_imm12", "isub", lte_64_success_result()) }) } @@ -649,11 +633,7 @@ fn test_named_isub_extend() { #[test] fn test_named_isub_ishl() { run_and_retry(|| { - test_aarch64_rule_with_lhs_termname( - "isub_ishl", - "isub", - lte_64_success_result(), - ) + test_aarch64_rule_with_lhs_termname("isub_ishl", "isub", lte_64_success_result()) }) } @@ -732,11 +712,7 @@ fn test_broken_isub_shift() { #[test] fn test_named_ineg_base_case() { run_and_retry(|| { - test_aarch64_rule_with_lhs_termname( - "ineg_base_case", - "ineg", - lte_64_success_result(), - ) + test_aarch64_rule_with_lhs_termname("ineg_base_case", "ineg", lte_64_success_result()) }) } @@ -943,22 +919,14 @@ fn test_named_urem_concrete() { #[test] fn test_named_uextend() { run_and_retry(|| { - test_aarch64_rule_with_lhs_termname( - "uextend", - "uextend", - all_success_result(), - ) + test_aarch64_rule_with_lhs_termname("uextend", "uextend", all_success_result()) }) } #[test] fn test_named_sextend() { run_and_retry(|| { - test_aarch64_rule_with_lhs_termname( - "sextend", - "sextend", - all_success_result(), - ) + test_aarch64_rule_with_lhs_termname("sextend", "sextend", all_success_result()) }) } @@ -1855,23 +1823,13 @@ fn test_named_band_not_64() { #[test] fn test_named_bnot() { run_and_retry(|| { - test_aarch64_rule_with_lhs_termname( - "bnot_base_case", - "bnot", - all_success_result(), - ) + test_aarch64_rule_with_lhs_termname("bnot_base_case", "bnot", all_success_result()) }) } #[test] fn test_named_bnot_ishl() { - run_and_retry(|| { - test_aarch64_rule_with_lhs_termname( - "bnot_ishl", - "bnot", - all_success_result(), - ) - }) + run_and_retry(|| test_aarch64_rule_with_lhs_termname("bnot_ishl", "bnot", all_success_result())) } #[test] @@ -2072,7 +2030,23 @@ fn test_named_ushr_fits_in_32_concrete() { } #[test] -fn test_do_shift_with_imm() { +fn test_named_do_shift_64_base_case() { + run_and_retry(|| { + test_aarch64_rule_with_lhs_termname( + "do_shift_64_base_case", + "do_shift", + vec![ + (Bitwidth::I8, VerificationResult::InapplicableRule), + (Bitwidth::I16, VerificationResult::InapplicableRule), + (Bitwidth::I32, VerificationResult::InapplicableRule), + (Bitwidth::I64, VerificationResult::Success), + ], + ) + }) +} + +#[test] +fn test_named_do_shift_imm() { let config = Config { dyn_width: false, term: "do_shift".to_string(), @@ -2084,13 +2058,9 @@ fn test_do_shift_with_imm() { }; lower_8_bits_eq })), - names: None, + names: Some(vec!["do_shift_imm".to_string()]), }; - test_from_file_with_config( - "./examples/shifts/do_shift_with_imm.isle", - config, - vec![(Bitwidth::I8, VerificationResult::Success)], - ); + test_aarch64_with_config(config, vec![(Bitwidth::I8, VerificationResult::Success)]); let config = Config { dyn_width: false, term: "do_shift".to_string(), @@ -2102,13 +2072,9 @@ fn test_do_shift_with_imm() { }; lower_16_bits_eq })), - names: None, + names: Some(vec!["do_shift_imm".to_string()]), }; - test_from_file_with_config( - "./examples/shifts/do_shift_with_imm.isle", - config, - vec![(Bitwidth::I16, VerificationResult::Success)], - ); + test_aarch64_with_config(config, vec![(Bitwidth::I16, VerificationResult::Success)]); let config = Config { dyn_width: false, term: "do_shift".to_string(), @@ -2120,22 +2086,18 @@ fn test_do_shift_with_imm() { }; lower_32_bits_eq })), - names: None, + names: Some(vec!["do_shift_imm".to_string()]), }; - test_from_file_with_config( - "./examples/shifts/do_shift_with_imm.isle", - config, - vec![(Bitwidth::I32, VerificationResult::Success)], - ); - test_from_file_with_lhs_termname( - "./examples/shifts/do_shift_with_imm.isle", - "do_shift".to_string(), + test_aarch64_with_config(config, vec![(Bitwidth::I32, VerificationResult::Success)]); + test_aarch64_rule_with_lhs_termname( + "do_shift_imm", + "do_shift", vec![(Bitwidth::I64, VerificationResult::Success)], ) } #[test] -fn test_do_shift_fits_in_16() { +fn test_named_do_shift_fits_in_16() { run_and_retry(|| { let config = Config { dyn_width: false, @@ -2157,10 +2119,9 @@ fn test_do_shift_fits_in_16() { lower_16_bits_eq, ) })), - names: None, + names: Some(vec!["do_shift_fits_in_16".to_string()]), }; - test_from_file_with_config( - "./examples/shifts/do_shift_fits_in_16.isle", + test_aarch64_with_config( config, vec![ (Bitwidth::I8, VerificationResult::Success), @@ -2168,9 +2129,9 @@ fn test_do_shift_fits_in_16() { ], ); }); - test_from_file_with_lhs_termname( - "./examples/shifts/do_shift_fits_in_16.isle", - "do_shift".to_string(), + test_aarch64_rule_with_lhs_termname( + "do_shift_fits_in_16", + "do_shift", vec![ (Bitwidth::I32, VerificationResult::InapplicableRule), (Bitwidth::I64, VerificationResult::InapplicableRule), @@ -2179,21 +2140,19 @@ fn test_do_shift_fits_in_16() { } #[test] -fn test_do_shift_fits_in_16_concrete() { +fn test_named_do_shift_fits_in_16_concrete() { // (decl do_shift (ALUOp Type Reg Value) Reg) run_and_retry(|| { - test_concrete_input_from_file_with_lhs_termname( - "./examples/shifts/do_shift_fits_in_16.isle", - "do_shift".to_string(), + test_concrete_aarch64_rule_with_lhs_termname( + "do_shift_fits_in_16", + "do_shift", false, ConcreteTest { termname: "do_shift".to_string(), args: vec![ ConcreteInput { - literal: - "#b0000000000000000000000000000000000000000000000000000000000000000" - .to_string(), - ty: veri_ir::Type::BitVector(Some(64)), + literal: "#b00010010".to_string(), + ty: veri_ir::Type::BitVector(Some(8)), }, ConcreteInput { literal: "16".to_string(), @@ -2221,10 +2180,10 @@ fn test_do_shift_fits_in_16_concrete() { } #[test] -fn test_do_shift_32() { - test_from_file_with_lhs_termname( - "./examples/shifts/do_shift_32.isle", - "do_shift".to_string(), +fn test_named_do_shift_32_base_case() { + test_aarch64_rule_with_lhs_termname( + "do_shift_32_base_case", + "do_shift", vec![ (Bitwidth::I8, VerificationResult::InapplicableRule), (Bitwidth::I16, VerificationResult::InapplicableRule), @@ -2242,13 +2201,9 @@ fn test_do_shift_32() { }; lower_32_bits_eq })), - names: None, + names: Some(vec!["do_shift_32_base_case".to_string()]), }; - test_from_file_with_config( - "./examples/shifts/do_shift_32.isle", - config, - vec![(Bitwidth::I32, VerificationResult::Success)], - ); + test_aarch64_with_config(config, vec![(Bitwidth::I32, VerificationResult::Success)]); } #[test] @@ -2259,13 +2214,29 @@ fn test_broken_do_shift_32() { vec![ (Bitwidth::I8, VerificationResult::InapplicableRule), (Bitwidth::I16, VerificationResult::InapplicableRule), - ( - Bitwidth::I32, - VerificationResult::Failure(Counterexample {}), - ), (Bitwidth::I64, VerificationResult::InapplicableRule), ], - ) + ); + let config = Config { + dyn_width: false, + term: "do_shift".to_string(), + distinct_check: true, + custom_verification_condition: Some(Box::new(|smt, _args, lhs, rhs| { + let lower_32_bits_eq = { + let mask = smt.atom("#x00000000FFFFFFFF"); + smt.eq(smt.bvand(mask, lhs), smt.bvand(mask, rhs)) + }; + lower_32_bits_eq + })), + names: None, + }; + test_aarch64_with_config( + config, + vec![( + Bitwidth::I32, + VerificationResult::Failure(Counterexample {}), + )], + ); } #[test] @@ -2352,22 +2323,6 @@ fn test_broken_ushr_to_do_shift_fits_in_32() { ) } -#[test] -fn test_do_shift_64() { - run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/shifts/do_shift_64.isle", - "do_shift".to_string(), - vec![ - (Bitwidth::I8, VerificationResult::InapplicableRule), - (Bitwidth::I16, VerificationResult::InapplicableRule), - (Bitwidth::I32, VerificationResult::InapplicableRule), - (Bitwidth::I64, VerificationResult::Success), - ], - ) - }) -} - #[test] fn test_if_let() { test_from_file_with_lhs_termname( From fa431767ffc252c3788aad57d280fa5e7d77e4d9 Mon Sep 17 00:00:00 2001 From: Alexa VanHattum Date: Tue, 11 Apr 2023 19:03:23 -0400 Subject: [PATCH 17/30] rotl --- cranelift/codegen/src/isa/aarch64/inst.isle | 26 ++- cranelift/codegen/src/isa/aarch64/lower.isle | 59 +++++- .../rotl/32_general_rotl_to_rotr.isle | 38 ---- .../rotl/32_with_imm_rotl_to_rotr.isle | 70 ------- .../rotl/64_general_rotl_to_rotr.isle | 38 ---- .../rotl/64_with_imm_rotl_to_rotr.isle | 77 -------- .../rotl/fits_in_16_rotl_to_rotr.isle | 122 ------------ .../fits_in_16_with_imm_rotl_to_rotr.isle | 174 ------------------ cranelift/isle/veri/veri_engine/tests/veri.rs | 48 ++--- 9 files changed, 99 insertions(+), 553 deletions(-) delete mode 100644 cranelift/isle/veri/veri_engine/examples/rotl/32_general_rotl_to_rotr.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/rotl/32_with_imm_rotl_to_rotr.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/rotl/64_general_rotl_to_rotr.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/rotl/64_with_imm_rotl_to_rotr.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/rotl/fits_in_16_rotl_to_rotr.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/rotl/fits_in_16_with_imm_rotl_to_rotr.isle diff --git a/cranelift/codegen/src/isa/aarch64/inst.isle b/cranelift/codegen/src/isa/aarch64/inst.isle index 6424fa73dd88..410718b0b0b4 100644 --- a/cranelift/codegen/src/isa/aarch64/inst.isle +++ b/cranelift/codegen/src/isa/aarch64/inst.isle @@ -2825,7 +2825,8 @@ ;;@ (= (r) ;;@ (if (<= (ty) (32i8: isleType)) ;;@ (conv_to (regwidth) (| (extract 31 0 (a)) (~ (extract 31 0 (b))))) -;;@ (| (a) (~ (b))))))) +;;@ (| (a) (~ (b)))))) +;;@ ) (decl orr_not (Type Reg Reg) Reg) (rule (orr_not ty x y) (alu_rrr (ALUOp.OrrNot) ty x y)) @@ -2834,8 +2835,8 @@ ;;@ (= (ret) (if (<= (ty) (32i32:isleType)) ;;@ (conv_to (regwidth) (| (a) (~ (shl (b) (zero_ext (64) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift)))))))) ;;@ (| (a) (~ (shl (b) (zero_ext (64) (& (- (int2bv 8 (ty)) (1i8:bv8)) (extract 7 0 (shift))))))) -;;@ )) -;;@ )) +;;@ ))) +;;@ ) (decl orr_not_shift (Type Reg Reg ShiftOpAndAmt) Reg) (rule (orr_not_shift ty x y shift) (alu_rrr_shift (ALUOp.OrrNot) ty x y shift)) @@ -2896,10 +2897,27 @@ (rule (ushl x y size) (vec_rrr (VecALUOp.Ushl) x y size)) ;; Helpers for generating `rotr` instructions. - +;;@ (spec (sig (args ty, x, y) (ret)) +;;@ (assume +;;@ (= (ret) +;;@ (if (= (ty) (32i0:isleType)) +;;@ (zero_ext (regwidth) (rotr (extract 31 0 (x)) (extract 31 0 (y)))) +;;@ (rotr (x) (y)) +;;@ ))) +;;@ (assert (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType)))) +;;@ ) (decl a64_rotr (Type Reg Reg) Reg) (rule (a64_rotr ty x y) (alu_rrr (ALUOp.RotR) ty x y)) +;;@ (spec (sig (args ty, x, y) (ret)) +;;@ (assume +;;@ (= (ret) +;;@ (if (= (ty) (32i0:isleType)) +;;@ (zero_ext (regwidth) (rotr (extract 31 0 (x)) (zero_ext (32i0:isleType) (y)))) +;;@ (rotr (x) (zero_ext (regwidth) (y))) +;;@ ))) +;;@ (assert (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType)))) +;;@ ) (decl a64_rotr_imm (Type Reg ImmShift) Reg) (rule (a64_rotr_imm ty x y) (alu_rr_imm_shift (ALUOp.RotR) ty x y)) diff --git a/cranelift/codegen/src/isa/aarch64/lower.isle b/cranelift/codegen/src/isa/aarch64/lower.isle index 3dd445add79c..accaa83d2edc 100644 --- a/cranelift/codegen/src/isa/aarch64/lower.isle +++ b/cranelift/codegen/src/isa/aarch64/lower.isle @@ -1367,13 +1367,13 @@ ;;;; Rules for `rotl` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; General 8/16-bit case. -(rule -2 (lower (has_type (fits_in_16 ty) (rotl x y))) +(rule rotl_fits_in_16 -2 (lower (has_type (fits_in_16 ty) (rotl x y))) (let ((amt Reg (value_regs_get y 0)) (neg_shift Reg (sub $I32 (zero_reg) amt))) (small_rotr ty (put_in_reg_zext32 x) neg_shift))) ;; Specialization for the 8/16-bit case when the rotation amount is an immediate. -(rule -1 (lower (has_type (fits_in_16 ty) (rotl x (iconst k)))) +(rule rotl_fits_in_16_imm -1 (lower (has_type (fits_in_16 ty) (rotl x (iconst k)))) (if-let n (imm_shift_from_imm64 ty k)) (small_rotr_imm ty (put_in_reg_zext32 x) (negate_imm_shift ty n))) @@ -1386,27 +1386,39 @@ ;; amount. ;; General 32-bit case. -(rule (lower (has_type $I32 (rotl x y))) +(rule rotl_32_base_case (lower (has_type $I32 (rotl x y))) (let ((amt Reg (value_regs_get y 0)) (neg_shift Reg (sub $I32 (zero_reg) amt))) (a64_rotr $I32 x neg_shift))) ;; General 64-bit case. -(rule (lower (has_type $I64 (rotl x y))) +(rule rotl_64_base_case (lower (has_type $I64 (rotl x y))) (let ((amt Reg (value_regs_get y 0)) (neg_shift Reg (sub $I64 (zero_reg) amt))) (a64_rotr $I64 x neg_shift))) ;; Specialization for the 32-bit case when the rotation amount is an immediate. -(rule 1 (lower (has_type $I32 (rotl x (iconst k)))) +(rule rotl_32_imm 1 (lower (has_type $I32 (rotl x (iconst k)))) (if-let n (imm_shift_from_imm64 $I32 k)) (a64_rotr_imm $I32 x (negate_imm_shift $I32 n))) ;; Specialization for the 64-bit case when the rotation amount is an immediate. -(rule 1 (lower (has_type $I64 (rotl x (iconst k)))) +(rule rotl_64_imm 1 (lower (has_type $I64 (rotl x (iconst k)))) (if-let n (imm_shift_from_imm64 $I64 k)) (a64_rotr_imm $I64 x (negate_imm_shift $I64 n))) +;; AVH TODO +;; fn negate_imm_shift(&mut self, ty: Type, mut imm: ImmShift) -> ImmShift { +;; let size = u8::try_from(ty.bits()).unwrap(); +;; imm.imm = size.wrapping_sub(imm.value()); +;; imm.imm &= size - 1; +;; imm +;; } +;;@ (spec (sig (args ty, x) (r)) +;;@ (assume +;;@ (= (r) (& (- (int2bv 6 (ty)) (x)) (- (int2bv 6 (ty)) (1i6:bv6)))) +;;@ ) +;;@ ) (decl negate_imm_shift (Type ImmShift) ImmShift) (extern constructor negate_imm_shift negate_imm_shift) @@ -1464,6 +1476,23 @@ ;; lsr val_rshift, val, masked_amt ;; lsl val_lshift, val, neg_amt ;; orr rd, val_lshift val_rshift +;;@ (spec (sig (args t, x, y) (ret)) +;;@ (assume +;;@ (= (ret) +;;@ (switch (t) +;;@ ((8i8: isleType) (conv_to (regwidth) (rotr (extract 7 0 (x)) (extract 7 0 (y))))) +;;@ ((16i8: isleType) (conv_to (regwidth) (rotr (extract 15 0 (x)) (extract 15 0 (y))))) +;;@ )) +;;@ ) +;;@ (assert +;;@ (|| (= (t) (8i8: isleType)) +;;@ (= (t) (16i8: isleType))), +;;@ (switch (t) +;;@ ((8i8: isleType) (= (extract 31 8 (x)) (0i32:bv24))) +;;@ ((16i8: isleType) (= (extract 31 16 (x)) (0i32:bv16))) +;;@ ), +;;@ ) +;;@ ) (decl small_rotr (Type Reg Reg) Reg) (rule (small_rotr ty val amt) (let ((masked_amt Reg (and_imm $I32 amt (rotr_mask ty))) @@ -1485,6 +1514,24 @@ ;; lsr val_rshift, val, # ;; lsl val_lshift, val, ;; orr rd, val_lshift, val_rshift + +;;@ (spec (sig (args t, x, y) (ret)) +;;@ (assume +;;@ (= (ret) +;;@ (switch (t) +;;@ ((8i8: isleType) (conv_to (regwidth) (rotr (extract 7 0 (x)) (zero_ext (8) (y))))) +;;@ ((16i8: isleType) (conv_to (regwidth) (rotr (extract 15 0 (x)) (zero_ext (16) (y))))) +;;@ ))) +;;@ (assert +;;@ (|| (= (t) (8i8: isleType)) +;;@ (= (t) (16i8: isleType))), +;;@ (switch (t) +;;@ ((8i8: isleType) (= (extract 31 8 (x)) (0i32:bv24))) +;;@ ((16i8: isleType) (= (extract 31 16 (x)) (0i32:bv16))) +;;@ ), +;;@ (ulte (zero_ext (regwidth) (y)) (int2bv 64 (t))) +;;@ ) +;;@ ) (decl small_rotr_imm (Type Reg ImmShift) Reg) (rule (small_rotr_imm ty val amt) (let ((val_rshift Reg (lsr_imm $I32 val amt)) diff --git a/cranelift/isle/veri/veri_engine/examples/rotl/32_general_rotl_to_rotr.isle b/cranelift/isle/veri/veri_engine/examples/rotl/32_general_rotl_to_rotr.isle deleted file mode 100644 index df30a1d82c42..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/rotl/32_general_rotl_to_rotr.isle +++ /dev/null @@ -1,38 +0,0 @@ - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -;; Instruction formats. -(type MInst - (enum -)) - -;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assume (= (- (a) (b)) (r)))) -(decl sub (Type Reg Reg) Reg) -(extern constructor sub sub) - -;;@ (spec (sig (args) (r)) -;;@ (assume (= (zero_ext (regwidth) (0i1:bv)) (r)))) -(decl zero_reg () Reg) -(extern constructor zero_reg zero_reg) - -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (= (ret) -;;@ (if (= (ty) (32i0:isleType)) -;;@ (zero_ext (regwidth) (rotr (extract 31 0 (x)) (extract 31 0 (y)))) -;;@ (rotr (x) (y)) -;;@ ) -;;@ ), -;;@ (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType))) -;;@ ) -;;@ ) -(decl a64_rotr (Type Reg Reg) Reg) -(extern constructor a64_rotr a64_rotr) - -;; General 32-bit case. -(rule (lower (has_type $I32 (rotl x y))) - (let ((amt Reg (value_regs_get y 0)) - (neg_shift Reg (sub $I32 (zero_reg) amt))) - (a64_rotr $I32 x neg_shift))) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/rotl/32_with_imm_rotl_to_rotr.isle b/cranelift/isle/veri/veri_engine/examples/rotl/32_with_imm_rotl_to_rotr.isle deleted file mode 100644 index e7320536ae5a..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/rotl/32_with_imm_rotl_to_rotr.isle +++ /dev/null @@ -1,70 +0,0 @@ -(type ImmLogic (primitive ImmLogic)) -(type ImmShift (primitive ImmShift)) -(type Imm12 (primitive Imm12)) - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -;; Instruction formats. -(type MInst - (enum -)) - -;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assume (= (- (a) (b)) (r)))) -(decl sub (Type Reg Reg) Reg) -(extern constructor sub sub) - -;;@ (spec (sig (args) (r)) -;;@ (assume (= (zero_ext (regwidth) (0i1:bv)) (r)))) -(decl zero_reg () Reg) -(extern constructor zero_reg zero_reg) - -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (= (ret) -;;@ (if (= (ty) (32i0:isleType)) -;;@ (zero_ext (regwidth) (rotr (extract 31 0 (x)) (zero_ext (32i0:isleType) (y)))) -;;@ (rotr (x) (zero_ext (regwidth) (y))) -;;@ ) -;;@ ), -;;@ (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType))) -;;@ ) -;;@ ) -(decl a64_rotr_imm (Type Reg ImmShift) Reg) -(extern constructor a64_rotr_imm a64_rotr_imm) - -;; fn imm_shift_from_imm64(&mut self, ty: Type, val: Imm64) -> Option { -;; let imm_value = (val.bits() as u64) & ((ty.bits() - 1) as u64); -;; ImmShift::maybe_from_u64(imm_value) -;; } - -;; Add an assertion that the value fits, using the constand with 56 1's then 6 0's (~63) -;;@ (spec (sig (args ty, x) (r)) -;;@ (assume -;;@ (= (r) (extract 5 0 (& (x) (- (int2bv 64 (ty)) (1i64:bv64))))), -;;@ (ult (& (x) (- (int2bv 64 (ty)) (1i64:bv64))) (64i64:bv64)) -;;@ ) -;;@ ) -(decl pure imm_shift_from_imm64 (Type Imm64) ImmShift) -(extern constructor imm_shift_from_imm64 imm_shift_from_imm64) - -;; fn negate_imm_shift(&mut self, ty: Type, mut imm: ImmShift) -> ImmShift { -;; let size = u8::try_from(ty.bits()).unwrap(); -;; imm.imm = size.wrapping_sub(imm.value()); -;; imm.imm &= size - 1; -;; imm -;; } - -;;@ (spec (sig (args ty, x) (r)) -;;@ (assume -;;@ (= (- (x)) (r)) -;;@ ) -;;@ ) -(decl negate_imm_shift (Type ImmShift) ImmShift) -(extern constructor negate_imm_shift negate_imm_shift) - -;; Specialization for the 32-bit case when the rotation amount is an immediate. -(rule 1 (lower (has_type $I32 (rotl x (iconst k)))) - (if-let n (imm_shift_from_imm64 $I32 k)) - (a64_rotr_imm $I32 x (negate_imm_shift $I32 n))) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/rotl/64_general_rotl_to_rotr.isle b/cranelift/isle/veri/veri_engine/examples/rotl/64_general_rotl_to_rotr.isle deleted file mode 100644 index 9a00c21e716d..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/rotl/64_general_rotl_to_rotr.isle +++ /dev/null @@ -1,38 +0,0 @@ - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -;; Instruction formats. -(type MInst - (enum -)) - -;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assume (= (- (a) (b)) (r)))) -(decl sub (Type Reg Reg) Reg) -(extern constructor sub sub) - -;;@ (spec (sig (args) (r)) -;;@ (assume (= (zero_ext (regwidth) (0i1:bv)) (r)))) -(decl zero_reg () Reg) -(extern constructor zero_reg zero_reg) - -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (= (ret) -;;@ (if (= (ty) (32i0:isleType)) -;;@ (zero_ext (regwidth) (rotr (extract 31 0 (x)) (extract 31 0 (y)))) -;;@ (rotr (x) (y)) -;;@ ) -;;@ ), -;;@ (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType))) -;;@ ) -;;@ ) -(decl a64_rotr (Type Reg Reg) Reg) -(extern constructor a64_rotr a64_rotr) - -;; General 64-bit case. -(rule (lower (has_type $I64 (rotl x y))) - (let ((amt Reg (value_regs_get y 0)) - (neg_shift Reg (sub $I64 (zero_reg) amt))) - (a64_rotr $I64 x neg_shift))) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/rotl/64_with_imm_rotl_to_rotr.isle b/cranelift/isle/veri/veri_engine/examples/rotl/64_with_imm_rotl_to_rotr.isle deleted file mode 100644 index 03763e6a8ef8..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/rotl/64_with_imm_rotl_to_rotr.isle +++ /dev/null @@ -1,77 +0,0 @@ -(type ImmLogic (primitive ImmLogic)) -(type ImmShift (primitive ImmShift)) -(type Imm12 (primitive Imm12)) - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -;; Instruction formats. -(type MInst - (enum -)) - -;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assume (= (- (a) (b)) (r)))) -(decl sub (Type Reg Reg) Reg) -(extern constructor sub sub) - -;;@ (spec (sig (args) (r)) -;;@ (assume (= (zero_ext (regwidth) (0i1:bv)) (r)))) -(decl zero_reg () Reg) -(extern constructor zero_reg zero_reg) - -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (= (ret) -;;@ (if (= (ty) (32i0:isleType)) -;;@ (zero_ext (regwidth) (rotr (extract 31 0 (x)) (zero_ext (32i0:isleType) (y)))) -;;@ (rotr (x) (zero_ext (regwidth) (y))) -;;@ ) -;;@ ), -;;@ (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType))) -;;@ ) -;;@ ) -(decl a64_rotr_imm (Type Reg ImmShift) Reg) -(extern constructor a64_rotr_imm a64_rotr_imm) - -;; fn imm_shift_from_imm64(&mut self, ty: Type, val: Imm64) -> Option { -;; let imm_value = (val.bits() as u64) & ((ty.bits() - 1) as u64); -;; ImmShift::maybe_from_u64(imm_value) -;; } - -;; (= (conv_to (widthof (r)) (& (x) (- (int2bv 64 (ty)) (1i64:bv)))) (r)), -;; (= (0i64:bv) (& (& (x) (- (int2bv 64 (ty)) (1i64:bv))) (~ (63i64:bv)))) - -;; Add an assertion that the value fits, using the constand with 56 1's then 6 0's (~63) -;;@ (spec (sig (args ty, x) (r)) -;;@ (assume -;;@ (= (r) (extract 5 0 (& (x) (- (int2bv 64 (ty)) (1i64:bv64))))), -;;@ (ult (& (x) (- (int2bv 64 (ty)) (1i64:bv64))) (64i64:bv64)) -;;@ ) -;;@ ) -(decl pure imm_shift_from_imm64 (Type Imm64) ImmShift) -(extern constructor imm_shift_from_imm64 imm_shift_from_imm64) - -;; fn negate_imm_shift(&mut self, ty: Type, mut imm: ImmShift) -> ImmShift { -;; let size = u8::try_from(ty.bits()).unwrap(); -;; imm.imm = size.wrapping_sub(imm.value()); -;; imm.imm &= size - 1; -;; imm -;; } - - -;; (= (& (- (int2bv 6 (ty)) (x)) (- (int2bv 6 (ty)) (1i6:bv 6))) (r)) - - -;;@ (spec (sig (args ty, x) (r)) -;;@ (assume -;;@ (= (- (x)) (r)) -;;@ ) -;;@ ) -(decl negate_imm_shift (Type ImmShift) ImmShift) -(extern constructor negate_imm_shift negate_imm_shift) - -;; Specialization for the 64-bit case when the rotation amount is an immediate. -(rule 1 (lower (has_type $I64 (rotl x (iconst k)))) - (if-let n (imm_shift_from_imm64 $I64 k)) - (a64_rotr_imm $I64 x (negate_imm_shift $I64 n))) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/rotl/fits_in_16_rotl_to_rotr.isle b/cranelift/isle/veri/veri_engine/examples/rotl/fits_in_16_rotl_to_rotr.isle deleted file mode 100644 index 3938b2d81528..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/rotl/fits_in_16_rotl_to_rotr.isle +++ /dev/null @@ -1,122 +0,0 @@ -(type ImmLogic (primitive ImmLogic)) -(type Imm12 (primitive Imm12)) - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assume (= (- (a) (b)) (r)))) -(decl sub (Type Reg Reg) Reg) -(extern constructor sub sub) - -;;@ (spec (sig (args) (r)) -;;@ (assume (= (zero_ext (regwidth) (0i1:bv)) (r)))) -(decl zero_reg () Reg) -(extern constructor zero_reg zero_reg) - -;;@ (spec (sig (args a, b, c, d) (ret)) -;;@ (assume (if (b) -;;@ (= (ret) (sign_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) -;;@ (= (ret) (zero_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) -;;@ ) -;;@ )) -(decl extend (Reg bool u8 u8) Reg) -(extern constructor extend extend) - -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) -;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) -;;@ (= (extract 2 0 (y)) (0i3:bv)) -;;@ )), -;;@ (= (ret) -;;@ (switch (ty) -;;@ ((32i8: isleType) (conv_to (regwidth) (& (extract 31 0 (x)) (extract 31 0 (y))))) -;;@ ((64i8: isleType) (& (x) (zero_ext (regwidth) (y)))) -;;@ ) -;;@ ) -;;@ )) -(decl and_imm (Type Reg ImmLogic) Reg) -(extern constructor and_imm and_imm) - -;; Place a `Value` into a register, zero extending it to 32-bits -;;@ (spec (sig (args arg) (ret)) -;;@ (assume ( -;;@ if (<= (32i0:isleType) (widthof (arg))) -;;@ (= (ret) (conv_to (regwidth) (arg))) -;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) -;;@ ) -;;@ )) -(decl put_in_reg_zext32 (Value) Reg) -(extern constructor put_in_reg_zext32 put_in_reg_zext32) - -;; Corresponding rust: -;; fn rotr_mask(&mut self, ty: Type) -> ImmLogic { -;; ImmLogic::maybe_from_u64((ty.bits() - 1) as u64, I32).unwrap() -;; } -;; -;;@ (spec (sig (args x) (ret)) -;;@ (assume (= (- (int2bv 64 (x)) (1i64:bv64)) (ret)))) -(decl rotr_mask (Type) ImmLogic) -(extern constructor rotr_mask rotr_mask) - -;; Note that 4094 = 0xffe and 16773119 = 0xffefff -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) -;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) -;;@ (= (extract 2 0 (y)) (0i3:bv)) -;;@ )), -;;@ (= (ret) (- (x) (zero_ext (regwidth) (y)))) -;;@ )) -(decl sub_imm (Type Reg Imm12) Reg) -(extern constructor sub_imm sub_imm) - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (ret) (zero_ext (24) (arg))))) -(decl u8_into_imm12 (u8) Imm12) -(extern constructor u8_into_imm12 u8_into_imm12) - -;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assume (= (shr (a) (b)) (r)))) -(decl lsr (Type Reg Reg) Reg) -(extern constructor lsr lsr) - -;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assume (= (shl (a) (b)) (r)))) -(decl lsl (Type Reg Reg) Reg) -(extern constructor lsl lsl) - -;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assume (= (| (a) (b)) (r)))) -(decl orr (Type Reg Reg) Reg) -(extern constructor orr orr) - -;; Instruction formats. -(type MInst - (enum -)) - -;; General 8/16-bit case. -(rule -2 (lower (has_type (fits_in_16 ty) (rotl x y))) - (let ((amt Reg (value_regs_get y 0)) - (neg_shift Reg (sub $I32 (zero_reg) amt))) - (small_rotr ty (put_in_reg_zext32 x) neg_shift))) - - -;;@ (spec (sig (args t, x, y) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (switch (t) -;;@ ((8i8: isleType) (conv_to (regwidth) (rotr (extract 7 0 (x)) (extract 7 0 (y))))) -;;@ ((16i8: isleType) (conv_to (regwidth) (rotr (extract 15 0 (x)) (extract 15 0 (y))))) -;;@ )), -;;@ (|| (= (t) (8i8: isleType)) -;;@ (= (t) (16i8: isleType))), -;;@ (switch (t) -;;@ ((8i8: isleType) (= (extract 31 8 (x)) (0i32:bv24))) -;;@ ((16i8: isleType) (= (extract 31 16 (x)) (0i32:bv16))) -;;@ ), -;;@ ) -;;@ ) -(decl small_rotr (Type Reg Reg) Reg) -(extern constructor small_rotr small_rotr) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/rotl/fits_in_16_with_imm_rotl_to_rotr.isle b/cranelift/isle/veri/veri_engine/examples/rotl/fits_in_16_with_imm_rotl_to_rotr.isle deleted file mode 100644 index e8b20d310c2d..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/rotl/fits_in_16_with_imm_rotl_to_rotr.isle +++ /dev/null @@ -1,174 +0,0 @@ -(type ImmLogic (primitive ImmLogic)) -(type ImmShift (primitive ImmShift)) -(type Imm12 (primitive Imm12)) - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assume (= (- (a) (b)) (r)))) -(decl sub (Type Reg Reg) Reg) -(extern constructor sub sub) - -;;@ (spec (sig (args) (r)) -;;@ (assume (= (zero_ext (regwidth) (0i1:bv)) (r)))) -(decl zero_reg () Reg) -(extern constructor zero_reg zero_reg) - -;;@ (spec (sig (args a, b, c, d) (ret)) -;;@ (assume (if (b) -;;@ (= (ret) (sign_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) -;;@ (= (ret) (zero_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) -;;@ ) -;;@ )) -(decl extend (Reg bool u8 u8) Reg) -(extern constructor extend extend) - -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) -;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) -;;@ (= (extract 2 0 (y)) (0i3:bv)) -;;@ )), -;;@ (= (ret) -;;@ (switch (ty) -;;@ ((32i8: isleType) (conv_to (regwidth) (& (extract 31 0 (x)) (extract 31 0 (y))))) -;;@ ((64i8: isleType) (& (x) (zero_ext (regwidth) (y)))) -;;@ ) -;;@ ) -;;@ )) -(decl and_imm (Type Reg ImmLogic) Reg) -(extern constructor and_imm and_imm) - -;; Place a `Value` into a register, zero extending it to 32-bits -;;@ (spec (sig (args arg) (ret)) -;;@ (assume ( -;;@ if (<= (32i0:isleType) (widthof (arg))) -;;@ (= (ret) (conv_to (regwidth) (arg))) -;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) -;;@ ) -;;@ )) -(decl put_in_reg_zext32 (Value) Reg) -(extern constructor put_in_reg_zext32 put_in_reg_zext32) - -;; Note that 4094 = 0xffe and 16773119 = 0xffefff -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) -;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) -;;@ (= (extract 2 0 (y)) (0i3:bv)) -;;@ )), -;;@ (= (ret) (- (x) (zero_ext (regwidth) (y)))) -;;@ )) -(decl sub_imm (Type Reg Imm12) Reg) -(extern constructor sub_imm sub_imm) - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (ret) (zero_ext (24) (arg))))) -(decl u8_into_imm12 (u8) Imm12) -(extern constructor u8_into_imm12 u8_into_imm12) - -;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assume (= (shr (a) (b)) (r)))) -(decl lsr (Type Reg Reg) Reg) -(extern constructor lsr lsr) - -;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assume (= (shl (a) (b)) (r)))) -(decl lsl (Type Reg Reg) Reg) -(extern constructor lsl lsl) - -;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assume (= (| (a) (b)) (r)))) -(decl orr (Type Reg Reg) Reg) -(extern constructor orr orr) - - -;; fn imm_shift_from_imm64(&mut self, ty: Type, val: Imm64) -> Option { -;; let imm_value = (val.bits() as u64) & ((ty.bits() - 1) as u64); -;; ImmShift::maybe_from_u64(imm_value) -;; } -;; /// Create an ImmShift from raw bits, if possible. -;; pub fn maybe_from_u64(val: u64) -> Option { -;; if val < 64 { -;; Some(ImmShift { imm: val as u8 }) -;; } else { -;; None -;; } -;; } - -;; Add an assertion that the value fits, using the constand with 56 1's then 6 0's (~63) -;;@ (spec (sig (args ty, x) (r)) -;;@ (assume -;;@ (= (r) (extract 5 0 (& (x) (- (int2bv 64 (ty)) (1i64:bv64))))), -;;@ (ult (& (x) (- (int2bv 64 (ty)) (1i64:bv64))) (64i64:bv64)) -;;@ ) -;;@ ) -(decl pure imm_shift_from_imm64 (Type Imm64) ImmShift) -(extern constructor imm_shift_from_imm64 imm_shift_from_imm64) - -;; fn negate_imm_shift(&mut self, ty: Type, mut imm: ImmShift) -> ImmShift { -;; let size = u8::try_from(ty.bits()).unwrap(); -;; imm.imm = size.wrapping_sub(imm.value()); -;; imm.imm &= size - 1; -;; imm -;; } - -;;@ (spec (sig (args ty, x) (r)) -;;@ (assume -;;@ (= (- (x)) (r)) -;;@ ) -;;@ ) -(decl negate_imm_shift (Type ImmShift) ImmShift) -(extern constructor negate_imm_shift negate_imm_shift) - -;; Helper for generating `lsr` instructions. -;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assume (= (shr (a) (b)) (r)))) -(decl lsr_imm (Type Reg ImmShift) Reg) -(extern constructor lsr_imm lsr_imm) -(extern extractor lsr_imm lsr_imm) - -;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assume (= (shl (a) (b)) (r)))) -(decl lsl_imm (Type Reg ImmShift) Reg) -(extern constructor lsl_imm lsl_imm) -(extern extractor lsl_imm lsl_imm) - -;; fn rotr_opposite_amount(&mut self, ty: Type, val: ImmShift) -> ImmShift { -;; let amount = val.value() & u8::try_from(ty.bits() - 1).unwrap(); -;; ImmShift::maybe_from_u64(u64::from(ty.bits()) - u64::from(amount)).unwrap() -;; } - -;;@ (spec (sig (args ty, x) (ret)) -;;@ (assume (= (- (int2bv 6 (ty)) (& (x) (- (int2bv 6 (ty)) (1i6:bv)))) (ret)))) -(decl rotr_opposite_amount (Type ImmShift) ImmShift) -(extern constructor rotr_opposite_amount rotr_opposite_amount) - -;; Instruction formats. -(type MInst - (enum -)) - -;; Specialization for the 8/16-bit case when the rotation amount is an immediate. -(rule -1 (lower (has_type (fits_in_16 ty) (rotl x (iconst k)))) - (if-let n (imm_shift_from_imm64 ty k)) - (small_rotr_imm ty (put_in_reg_zext32 x) (negate_imm_shift ty n))) - -;;@ (spec (sig (args t, x, y) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (switch (t) -;;@ ((8i8: isleType) (conv_to (regwidth) (rotr (extract 7 0 (x)) (zero_ext (8) (y))))) -;;@ ((16i8: isleType) (conv_to (regwidth) (rotr (extract 15 0 (x)) (zero_ext (16) (y))))) -;;@ )), -;;@ (|| (= (t) (8i8: isleType)) -;;@ (= (t) (16i8: isleType))), -;;@ (switch (t) -;;@ ((8i8: isleType) (= (extract 31 8 (x)) (0i32:bv24))) -;;@ ((16i8: isleType) (= (extract 31 16 (x)) (0i32:bv16))) -;;@ ), -;;@ (ult (zero_ext (regwidth) (y)) (- (int2bv 64 (t)) (1i64:bv64))) -;;@ ) -;;@ ) -(decl small_rotr_imm (Type Reg ImmShift) Reg) -(extern constructor small_rotr_imm small_rotr_imm) diff --git a/cranelift/isle/veri/veri_engine/tests/veri.rs b/cranelift/isle/veri/veri_engine/tests/veri.rs index c63abc7046d0..b5ad810d668b 100644 --- a/cranelift/isle/veri/veri_engine/tests/veri.rs +++ b/cranelift/isle/veri/veri_engine/tests/veri.rs @@ -1404,11 +1404,11 @@ fn test_small_rotr_imm_to_shifts() { } #[test] -fn test_fits_in_16_rotl_to_rotr() { +fn test_named_rotl_fits_in_16() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/rotl/fits_in_16_rotl_to_rotr.isle", - "rotl".to_string(), + test_aarch64_rule_with_lhs_termname( + "rotl_fits_in_16", + "rotl", vec![ (Bitwidth::I8, VerificationResult::Success), (Bitwidth::I16, VerificationResult::Success), @@ -1420,12 +1420,12 @@ fn test_fits_in_16_rotl_to_rotr() { } #[test] -fn test_32_general_rotl_to_rotr() { +fn test_named_rotl_32_base_case() { run_and_retry(|| { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/rotl/32_general_rotl_to_rotr.isle", - "rotl".to_string(), + test_aarch64_rule_with_lhs_termname( + "rotl_32_base_case", + "rotl", vec![ (Bitwidth::I8, VerificationResult::InapplicableRule), (Bitwidth::I16, VerificationResult::InapplicableRule), @@ -1457,11 +1457,11 @@ fn test_broken_32_general_rotl_to_rotr() { } #[test] -fn test_64_general_rotl_to_rotr() { +fn test_named_rotl_64_base_case() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/rotl/64_general_rotl_to_rotr.isle", - "rotl".to_string(), + test_aarch64_rule_with_lhs_termname( + "rotl_64_base_case", + "rotl", vec![ (Bitwidth::I8, VerificationResult::InapplicableRule), (Bitwidth::I16, VerificationResult::InapplicableRule), @@ -1492,11 +1492,11 @@ fn test_broken_fits_in_16_rotl_to_rotr() { } #[test] -fn test_fits_in_16_with_imm_rotl_to_rotr() { +fn test_named_rotl_fits_in_16_imm() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/rotl/fits_in_16_with_imm_rotl_to_rotr.isle", - "rotl".to_string(), + test_aarch64_rule_with_lhs_termname( + "rotl_fits_in_16_imm", + "rotl", vec![ (Bitwidth::I8, VerificationResult::Success), (Bitwidth::I16, VerificationResult::Success), @@ -1508,11 +1508,11 @@ fn test_fits_in_16_with_imm_rotl_to_rotr() { } #[test] -fn test_64_with_imm_rotl_to_rotr() { +fn test_named_rotl_64_imm() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/rotl/64_with_imm_rotl_to_rotr.isle", - "rotl".to_string(), + test_aarch64_rule_with_lhs_termname( + "rotl_64_imm", + "rotl", vec![ (Bitwidth::I8, VerificationResult::InapplicableRule), (Bitwidth::I16, VerificationResult::InapplicableRule), @@ -1524,11 +1524,11 @@ fn test_64_with_imm_rotl_to_rotr() { } #[test] -fn test_32_with_imm_rotl_to_rotr() { +fn test_named_rotl_32_imm() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/rotl/32_with_imm_rotl_to_rotr.isle", - "rotl".to_string(), + test_aarch64_rule_with_lhs_termname( + "rotl_32_imm", + "rotl", vec![ (Bitwidth::I8, VerificationResult::InapplicableRule), (Bitwidth::I16, VerificationResult::InapplicableRule), From 65c3ff5b48d5bcdaa40384a61980b873705a6244 Mon Sep 17 00:00:00 2001 From: Alexa VanHattum Date: Tue, 11 Apr 2023 19:33:32 -0400 Subject: [PATCH 18/30] rotr --- cranelift/codegen/src/isa/aarch64/inst.isle | 48 +++++- cranelift/codegen/src/isa/aarch64/lower.isle | 23 ++- .../veri_engine/examples/rotr/32_rotr.isle | 25 --- .../examples/rotr/32_with_imm_rotr.isle | 40 ----- .../veri_engine/examples/rotr/64_rotr.isle | 25 --- .../examples/rotr/64_with_imm_rotr.isle | 42 ----- .../examples/rotr/fits_in_16_rotr.isle | 42 ----- .../rotr/fits_in_16_with_imm_rotr.isle | 57 ------- .../rotr/small_rotr_imm_to_shifts.isle | 90 ---------- .../examples/rotr/small_rotr_to_shifts.isle | 157 ------------------ cranelift/isle/veri/veri_engine/tests/veri.rs | 66 ++++---- 11 files changed, 93 insertions(+), 522 deletions(-) delete mode 100644 cranelift/isle/veri/veri_engine/examples/rotr/32_rotr.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/rotr/32_with_imm_rotr.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/rotr/64_rotr.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/rotr/64_with_imm_rotr.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/rotr/fits_in_16_rotr.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/rotr/fits_in_16_with_imm_rotr.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/rotr/small_rotr_imm_to_shifts.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/rotr/small_rotr_to_shifts.isle diff --git a/cranelift/codegen/src/isa/aarch64/inst.isle b/cranelift/codegen/src/isa/aarch64/inst.isle index 410718b0b0b4..5129a35660d2 100644 --- a/cranelift/codegen/src/isa/aarch64/inst.isle +++ b/cranelift/codegen/src/isa/aarch64/inst.isle @@ -1686,6 +1686,8 @@ (decl u8_into_uimm5 (u8) UImm5) (extern constructor u8_into_uimm5 u8_into_uimm5) +;;@ (spec (sig (args arg) (ret)) +;;@ (assume (= (ret) (zero_ext (24) (arg))))) (decl u8_into_imm12 (u8) Imm12) (extern constructor u8_into_imm12 u8_into_imm12) @@ -2782,16 +2784,52 @@ (rule (asr_imm ty x imm) (alu_rr_imm_shift (ALUOp.Asr) ty x imm)) ;; Helper for generating `lsr` instructions. +;;@ (spec (sig (args ty, a, b) (r)) +;;@ (assume +;;@ (= (r) +;;@ (switch (ty) +;;@ ((32i8:isleType) (conv_to (regwidth) (shr (extract 31 0 (a)) (extract 31 0 (b))))) +;;@ ((64i8:isleType) (shr (a) (b))) +;;@ ) +;;@ ) +;;@ )) (decl lsr (Type Reg Reg) Reg) (rule (lsr ty x y) (alu_rrr (ALUOp.Lsr) ty x y)) +;;@ (spec (sig (args ty, a, b) (r)) +;;@ (assume +;;@ (= (r) +;;@ (switch (ty) +;;@ ((32i8: isleType) (conv_to (regwidth) (shr (extract 31 0 (a)) (zero_ext (32) (b))))) +;;@ ((64i8: isleType) (shr (a) (zero_ext (regwidth) (b)))) +;;@ ) +;;@ ) +;;@ )) (decl lsr_imm (Type Reg ImmShift) Reg) (rule (lsr_imm ty x imm) (alu_rr_imm_shift (ALUOp.Lsr) ty x imm)) ;; Helper for generating `lsl` instructions. +;;@ (spec (sig (args ty, a, b) (r)) +;;@ (assume +;;@ (= (r) +;;@ (switch (ty) +;;@ ((32i8: isleType) (conv_to (regwidth) (shl (extract 31 0 (a)) (extract 31 0 (b))))) +;;@ ((64i8: isleType) (shl (a) (b))) +;;@ ) +;;@ ) +;;@ )) (decl lsl (Type Reg Reg) Reg) (rule (lsl ty x y) (alu_rrr (ALUOp.Lsl) ty x y)) +;;@ (spec (sig (args ty, a, b) (r)) +;;@ (assume +;;@ (= (r) +;;@ (switch (ty) +;;@ ((32i8: isleType) (conv_to (regwidth) (shl (extract 31 0 (a)) (zero_ext (32) (b))))) +;;@ ((64i8: isleType) (shl (a) (zero_ext (regwidth) (b)))) +;;@ ) +;;@ ) +;;@ )) (decl lsl_imm (Type Reg ImmShift) Reg) (rule (lsl_imm ty x imm) (alu_rr_imm_shift (ALUOp.Lsl) ty x imm)) @@ -2841,7 +2879,15 @@ (rule (orr_not_shift ty x y shift) (alu_rrr_shift (ALUOp.OrrNot) ty x y shift)) ;; Helpers for generating `orr` instructions. - +;;@ (spec (sig (args ty, a, b) (r)) +;;@ (assume +;;@ (= (r) +;;@ (switch (ty) +;;@ ((32i8: isleType) (conv_to (regwidth) (| (extract 31 0 (a)) (extract 31 0 (b))))) +;;@ ((64i8: isleType) (| (a) (b))) +;;@ ) +;;@ ) +;;@ )) (decl orr (Type Reg Reg) Reg) (rule (orr ty x y) (alu_rrr (ALUOp.Orr) ty x y)) diff --git a/cranelift/codegen/src/isa/aarch64/lower.isle b/cranelift/codegen/src/isa/aarch64/lower.isle index accaa83d2edc..c389256c45e7 100644 --- a/cranelift/codegen/src/isa/aarch64/lower.isle +++ b/cranelift/codegen/src/isa/aarch64/lower.isle @@ -1438,29 +1438,29 @@ ;;;; Rules for `rotr` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; General 8/16-bit case. -(rule -3 (lower (has_type (fits_in_16 ty) (rotr x y))) +(rule rotr_fits_in_16 -3 (lower (has_type (fits_in_16 ty) (rotr x y))) (small_rotr ty (put_in_reg_zext32 x) (value_regs_get y 0))) ;; General 32-bit case. -(rule -1 (lower (has_type $I32 (rotr x y))) +(rule rotr_32_base_case -1 (lower (has_type $I32 (rotr x y))) (a64_rotr $I32 x (value_regs_get y 0))) ;; General 64-bit case. -(rule -1 (lower (has_type $I64 (rotr x y))) +(rule rotr_64_base_case -1 (lower (has_type $I64 (rotr x y))) (a64_rotr $I64 x (value_regs_get y 0))) ;; Specialization for the 8/16-bit case when the rotation amount is an immediate. -(rule -2 (lower (has_type (fits_in_16 ty) (rotr x (iconst k)))) +(rule rotr_fits_in_16_imm -2 (lower (has_type (fits_in_16 ty) (rotr x (iconst k)))) (if-let n (imm_shift_from_imm64 ty k)) (small_rotr_imm ty (put_in_reg_zext32 x) n)) ;; Specialization for the 32-bit case when the rotation amount is an immediate. -(rule (lower (has_type $I32 (rotr x (iconst k)))) +(rule rotr_32_imm (lower (has_type $I32 (rotr x (iconst k)))) (if-let n (imm_shift_from_imm64 $I32 k)) (a64_rotr_imm $I32 x n)) ;; Specialization for the 64-bit case when the rotation amount is an immediate. -(rule (lower (has_type $I64 (rotr x (iconst k)))) +(rule rotr_64_imm (lower (has_type $I64 (rotr x (iconst k)))) (if-let n (imm_shift_from_imm64 $I64 k)) (a64_rotr_imm $I64 x n)) @@ -1494,7 +1494,7 @@ ;;@ ) ;;@ ) (decl small_rotr (Type Reg Reg) Reg) -(rule (small_rotr ty val amt) +(rule small_rotr (small_rotr ty val amt) (let ((masked_amt Reg (and_imm $I32 amt (rotr_mask ty))) (tmp_sub Reg (sub_imm $I32 masked_amt (u8_into_imm12 (ty_bits ty)))) (neg_amt Reg (sub $I32 (zero_reg) tmp_sub)) @@ -1502,6 +1502,8 @@ (val_lshift Reg (lsl $I32 val neg_amt))) (orr $I32 val_lshift val_rshift))) +;;@ (spec (sig (args x) (ret)) +;;@ (assume (= (- (int2bv 64 (x)) (1i64:bv64)) (ret)))) (decl rotr_mask (Type) ImmLogic) (extern constructor rotr_mask rotr_mask) @@ -1529,15 +1531,18 @@ ;;@ ((8i8: isleType) (= (extract 31 8 (x)) (0i32:bv24))) ;;@ ((16i8: isleType) (= (extract 31 16 (x)) (0i32:bv16))) ;;@ ), -;;@ (ulte (zero_ext (regwidth) (y)) (int2bv 64 (t))) +;;@ (ult (y) (int2bv 6 (t))) ;;@ ) ;;@ ) (decl small_rotr_imm (Type Reg ImmShift) Reg) -(rule (small_rotr_imm ty val amt) +(rule small_rotr_imm (small_rotr_imm ty val amt) (let ((val_rshift Reg (lsr_imm $I32 val amt)) (val_lshift Reg (lsl_imm $I32 val (rotr_opposite_amount ty amt)))) (orr $I32 val_lshift val_rshift))) +;;@ (spec (sig (args ty, x) (ret)) +;;@ (assume +;;@ (= (- (int2bv 6 (ty)) (& (x) (- (int2bv 6 (ty)) (1i6:bv)))) (ret)))) (decl rotr_opposite_amount (Type ImmShift) ImmShift) (extern constructor rotr_opposite_amount rotr_opposite_amount) diff --git a/cranelift/isle/veri/veri_engine/examples/rotr/32_rotr.isle b/cranelift/isle/veri/veri_engine/examples/rotr/32_rotr.isle deleted file mode 100644 index b538dcc9425c..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/rotr/32_rotr.isle +++ /dev/null @@ -1,25 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -;; Instruction formats. -(type MInst - (enum -)) - -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (= (ret) -;;@ (if (= (ty) (32i0:isleType)) -;;@ (zero_ext (regwidth) (rotr (extract 31 0 (x)) (extract 31 0 (y)))) -;;@ (rotr (x) (y)) -;;@ ) -;;@ ), -;;@ (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType))) -;;@ ) -;;@ ) -(decl a64_rotr (Type Reg Reg) Reg) -(extern constructor a64_rotr a64_rotr) - -;; General 32-bit case. -(rule -1 (lower (has_type $I32 (rotr x y))) - (a64_rotr $I32 x (value_regs_get y 0))) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/rotr/32_with_imm_rotr.isle b/cranelift/isle/veri/veri_engine/examples/rotr/32_with_imm_rotr.isle deleted file mode 100644 index c3d7de3bf269..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/rotr/32_with_imm_rotr.isle +++ /dev/null @@ -1,40 +0,0 @@ -(type ImmLogic (primitive ImmLogic)) -(type ImmShift (primitive ImmShift)) -(type Imm12 (primitive Imm12)) - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -;; Instruction formats. -(type MInst - (enum -)) - -;; Add an assertion that the value fits, using the constand with 56 1's then 6 0's (~63) -;;@ (spec (sig (args ty, x) (r)) -;;@ (assume -;;@ (= (r) (extract 5 0 (& (x) (- (int2bv 64 (ty)) (1i64:bv64))))), -;;@ (ult (& (x) (- (int2bv 64 (ty)) (1i64:bv64))) (64i64:bv64)) -;;@ ) -;;@ ) -(decl pure imm_shift_from_imm64 (Type Imm64) ImmShift) -(extern constructor imm_shift_from_imm64 imm_shift_from_imm64) - -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (= (ret) -;;@ (if (= (ty) (32i0:isleType)) -;;@ (zero_ext (regwidth) (rotr (extract 31 0 (x)) (zero_ext (32i0:isleType) (y)))) -;;@ (rotr (x) (zero_ext (regwidth) (y))) -;;@ ) -;;@ ), -;;@ (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType))) -;;@ ) -;;@ ) -(decl a64_rotr_imm (Type Reg ImmShift) Reg) -(extern constructor a64_rotr_imm a64_rotr_imm) - -;; Specialization for the 32-bit case when the rotation amount is an immediate. -(rule (lower (has_type $I32 (rotr x (iconst k)))) - (if-let n (imm_shift_from_imm64 $I32 k)) - (a64_rotr_imm $I32 x n)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/rotr/64_rotr.isle b/cranelift/isle/veri/veri_engine/examples/rotr/64_rotr.isle deleted file mode 100644 index 955c745c5315..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/rotr/64_rotr.isle +++ /dev/null @@ -1,25 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -;; Instruction formats. -(type MInst - (enum -)) - -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (= (ret) -;;@ (if (= (ty) (32i0:isleType)) -;;@ (zero_ext (regwidth) (rotr (extract 31 0 (x)) (extract 31 0 (y)))) -;;@ (rotr (x) (y)) -;;@ ) -;;@ ), -;;@ (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType))) -;;@ ) -;;@ ) -(decl a64_rotr (Type Reg Reg) Reg) -(extern constructor a64_rotr a64_rotr) - -;; General 64-bit case. -(rule -1 (lower (has_type $I64 (rotr x y))) - (a64_rotr $I64 x (value_regs_get y 0))) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/rotr/64_with_imm_rotr.isle b/cranelift/isle/veri/veri_engine/examples/rotr/64_with_imm_rotr.isle deleted file mode 100644 index 91f76c2a670d..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/rotr/64_with_imm_rotr.isle +++ /dev/null @@ -1,42 +0,0 @@ -(type ImmLogic (primitive ImmLogic)) -(type ImmShift (primitive ImmShift)) -(type Imm12 (primitive Imm12)) - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -;; Instruction formats. -(type MInst - (enum -)) - -;; Add an assertion that the value fits, using the constand with 56 1's then 6 0's (~63) -;;@ (spec (sig (args ty, x) (r)) -;;@ (assume -;;@ (= (r) (extract 5 0 (& (x) (- (int2bv 64 (ty)) (1i64:bv64))))), -;;@ (ult (& (x) (- (int2bv 64 (ty)) (1i64:bv64))) (64i64:bv64)) -;;@ ) -;;@ ) -(decl pure imm_shift_from_imm64 (Type Imm64) ImmShift) -(extern constructor imm_shift_from_imm64 imm_shift_from_imm64) - - -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (= (ret) -;;@ (if (= (ty) (32i0:isleType)) -;;@ (zero_ext (regwidth) (rotr (extract 31 0 (x)) (zero_ext (32i0:isleType) (y)))) -;;@ (rotr (x) (zero_ext (regwidth) (y))) -;;@ ) -;;@ ), -;;@ (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType))) -;;@ ) -;;@ ) -(decl a64_rotr_imm (Type Reg ImmShift) Reg) -(extern constructor a64_rotr_imm a64_rotr_imm) - - -;; Specialization for the 64-bit case when the rotation amount is an immediate. -(rule (lower (has_type $I64 (rotr x (iconst k)))) - (if-let n (imm_shift_from_imm64 $I64 k)) - (a64_rotr_imm $I64 x n)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/rotr/fits_in_16_rotr.isle b/cranelift/isle/veri/veri_engine/examples/rotr/fits_in_16_rotr.isle deleted file mode 100644 index bccc737b313b..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/rotr/fits_in_16_rotr.isle +++ /dev/null @@ -1,42 +0,0 @@ - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -;; Instruction formats. -(type MInst - (enum -)) - -;; Place a `Value` into a register, zero extending it to 32-bits -;;@ (spec (sig (args arg) (ret)) -;;@ (assume ( -;;@ if (<= (32i0:isleType) (widthof (arg))) -;;@ (= (ret) (conv_to (regwidth) (arg))) -;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) -;;@ ) -;;@ )) -(decl put_in_reg_zext32 (Value) Reg) -(extern constructor put_in_reg_zext32 put_in_reg_zext32) - -;;@ (spec (sig (args t, x, y) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (switch (t) -;;@ ((8i8: isleType) (conv_to (regwidth) (rotr (extract 7 0 (x)) (extract 7 0 (y))))) -;;@ ((16i8: isleType) (conv_to (regwidth) (rotr (extract 15 0 (x)) (extract 15 0 (y))))) -;;@ )), -;;@ (|| (= (t) (8i8: isleType)) -;;@ (= (t) (16i8: isleType))), -;;@ (switch (t) -;;@ ((8i8: isleType) (= (extract 31 8 (x)) (0i32:bv24))) -;;@ ((16i8: isleType) (= (extract 31 16 (x)) (0i32:bv16))) -;;@ ), -;;@ ) -;;@ ) -(decl small_rotr (Type Reg Reg) Reg) -(extern constructor small_rotr small_rotr) - -;; General 8/16-bit case. -(rule -3 (lower (has_type (fits_in_16 ty) (rotr x y))) - (small_rotr ty (put_in_reg_zext32 x) (value_regs_get y 0))) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/rotr/fits_in_16_with_imm_rotr.isle b/cranelift/isle/veri/veri_engine/examples/rotr/fits_in_16_with_imm_rotr.isle deleted file mode 100644 index 2f0be123dc94..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/rotr/fits_in_16_with_imm_rotr.isle +++ /dev/null @@ -1,57 +0,0 @@ -(type ImmLogic (primitive ImmLogic)) -(type ImmShift (primitive ImmShift)) -(type Imm12 (primitive Imm12)) - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -;; Instruction formats. -(type MInst - (enum -)) - -;; Add an assertion that the value fits, using the constand with 56 1's then 6 0's (~63) -;;@ (spec (sig (args ty, x) (r)) -;;@ (assume -;;@ (= (r) (extract 5 0 (& (x) (- (int2bv 64 (ty)) (1i64:bv64))))), -;;@ (ult (& (x) (- (int2bv 64 (ty)) (1i64:bv64))) (64i64:bv64)) -;;@ ) -;;@ ) -(decl pure imm_shift_from_imm64 (Type Imm64) ImmShift) -(extern constructor imm_shift_from_imm64 imm_shift_from_imm64) - -;; Place a `Value` into a register, zero extending it to 32-bits -;;@ (spec (sig (args arg) (ret)) -;;@ (assume ( -;;@ if (<= (32i0:isleType) (widthof (arg))) -;;@ (= (ret) (conv_to (regwidth) (arg))) -;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) -;;@ ) -;;@ )) -(decl put_in_reg_zext32 (Value) Reg) -(extern constructor put_in_reg_zext32 put_in_reg_zext32) - -;;@ (spec (sig (args t, x, y) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (switch (t) -;;@ ((8i8: isleType) (conv_to (regwidth) (rotr (extract 7 0 (x)) (zero_ext (8) (y))))) -;;@ ((16i8: isleType) (conv_to (regwidth) (rotr (extract 15 0 (x)) (zero_ext (16) (y))))) -;;@ )), -;;@ (|| (= (t) (8i8: isleType)) -;;@ (= (t) (16i8: isleType))), -;;@ (switch (t) -;;@ ((8i8: isleType) (= (extract 31 8 (x)) (0i32:bv24))) -;;@ ((16i8: isleType) (= (extract 31 16 (x)) (0i32:bv16))) -;;@ ), -;;@ (ult (zero_ext (regwidth) (y)) (- (int2bv 64 (t)) (1i64:bv64))) -;;@ ) -;;@ ) -(decl small_rotr_imm (Type Reg ImmShift) Reg) -(extern constructor small_rotr_imm small_rotr_imm) - -;; Specialization for the 8/16-bit case when the rotation amount is an immediate. -(rule -2 (lower (has_type (fits_in_16 ty) (rotr x (iconst k)))) - (if-let n (imm_shift_from_imm64 ty k)) - (small_rotr_imm ty (put_in_reg_zext32 x) n)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/rotr/small_rotr_imm_to_shifts.isle b/cranelift/isle/veri/veri_engine/examples/rotr/small_rotr_imm_to_shifts.isle deleted file mode 100644 index 3e838d8a9f79..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/rotr/small_rotr_imm_to_shifts.isle +++ /dev/null @@ -1,90 +0,0 @@ -(type ImmLogic (primitive ImmLogic)) -(type ImmShift (primitive ImmShift)) -(type Imm12 (primitive Imm12)) - -;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assume -;;@ (= (r) -;;@ (switch (ty) -;;@ ((32i8: isleType) (conv_to (regwidth) (| (extract 31 0 (a)) (extract 31 0 (b))))) -;;@ ((64i8: isleType) (| (a) (b))) -;;@ ) -;;@ ) -;;@ )) -(decl orr (Type Reg Reg) Reg) -(extern constructor orr orr) - -;;@ (spec (sig (args t, x, y) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (switch (t) -;;@ ((8i8: isleType) (conv_to (regwidth) (rotr (extract 7 0 (x)) (zero_ext (8) (y))))) -;;@ ((16i8: isleType) (conv_to (regwidth) (rotr (extract 15 0 (x)) (zero_ext (16) (y))))) -;;@ )), -;;@ (|| (= (t) (8i8: isleType)) -;;@ (= (t) (16i8: isleType))), -;;@ (switch (t) -;;@ ((8i8: isleType) (= (extract 31 8 (x)) (0i32:bv24))) -;;@ ((16i8: isleType) (= (extract 31 16 (x)) (0i32:bv16))) -;;@ ), -;;@ (ult (zero_ext (regwidth) (y)) (- (int2bv 64 (t)) (1i64:bv64))) -;;@ ) -;;@ ) -(decl small_rotr_imm (Type Reg ImmShift) Reg) - -;; Helper for generating `lsr` instructions. -;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assume -;;@ (= (r) -;;@ (switch (ty) -;;@ ((32i8: isleType) (conv_to (regwidth) (shr (extract 31 0 (a)) (zero_ext (32) (b))))) -;;@ ((64i8: isleType) (shr (a) (zero_ext (regwidth) (b)))) -;;@ ) -;;@ ) -;;@ )) -(decl lsr_imm (Type Reg ImmShift) Reg) -(extern constructor lsr_imm lsr_imm) -(extern extractor lsr_imm lsr_imm) - -;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assume -;;@ (= (r) -;;@ (switch (ty) -;;@ ((32i8: isleType) (conv_to (regwidth) (shl (extract 31 0 (a)) (zero_ext (32) (b))))) -;;@ ((64i8: isleType) (shl (a) (zero_ext (regwidth) (b)))) -;;@ ) -;;@ ) -;;@ )) -(decl lsl_imm (Type Reg ImmShift) Reg) -(extern constructor lsl_imm lsl_imm) -(extern extractor lsl_imm lsl_imm) - -;; fn rotr_opposite_amount(&mut self, ty: Type, val: ImmShift) -> ImmShift { -;; let amount = val.value() & u8::try_from(ty.bits() - 1).unwrap(); -;; ImmShift::maybe_from_u64(u64::from(ty.bits()) - u64::from(amount)).unwrap() -;; } - -;;@ (spec (sig (args ty, x) (ret)) -;;@ (assume (= (- (int2bv 6 (ty)) (& (x) (- (int2bv 6 (ty)) (1i6:bv)))) (ret)))) -(decl rotr_opposite_amount (Type ImmShift) ImmShift) -(extern constructor rotr_opposite_amount rotr_opposite_amount) - -;; Instruction formats. -(type MInst - (enum -)) - - -;; For a constant amount, we can instead do: -;; -;; rotr rd, val, #amt -;; -;; => -;; -;; lsr val_rshift, val, # -;; lsl val_lshift, val, -;; orr rd, val_lshift, val_rshift -(rule (small_rotr_imm ty val amt) - (let ((val_rshift Reg (lsr_imm $I32 val amt)) - (val_lshift Reg (lsl_imm $I32 val (rotr_opposite_amount ty amt)))) - (orr $I32 val_lshift val_rshift))) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/rotr/small_rotr_to_shifts.isle b/cranelift/isle/veri/veri_engine/examples/rotr/small_rotr_to_shifts.isle deleted file mode 100644 index a65b8adf1e6c..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/rotr/small_rotr_to_shifts.isle +++ /dev/null @@ -1,157 +0,0 @@ -(type ImmLogic (primitive ImmLogic)) -(type Imm12 (primitive Imm12)) - -;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assume (= (- (a) (b)) (r)))) -(decl sub (Type Reg Reg) Reg) -(extern constructor sub sub) - -;;@ (spec (sig (args) (r)) -;;@ (assume (= (zero_ext (regwidth) (0i1:bv)) (r)))) -(decl zero_reg () Reg) -(extern constructor zero_reg zero_reg) - -;;@ (spec (sig (args a, b, c, d) (ret)) -;;@ (assume (if (b) -;;@ (= (ret) (sign_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) -;;@ (= (ret) (zero_ext (bv2int (d)) (conv_to (bv2int (c)) (a)))) -;;@ ) -;;@ )) -(decl extend (Reg bool u8 u8) Reg) -(extern constructor extend extend) - -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) -;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) -;;@ (= (extract 2 0 (y)) (0i3:bv)) -;;@ )), -;;@ (= (ret) -;;@ (switch (ty) -;;@ ((32i8: isleType) (conv_to (regwidth) (& (extract 31 0 (x)) (extract 31 0 (y))))) -;;@ ((64i8: isleType) (& (x) (zero_ext (regwidth) (y)))) -;;@ ) -;;@ ) -;;@ )) -(decl and_imm (Type Reg ImmLogic) Reg) -(extern constructor and_imm and_imm) - -;; Place a `Value` into a register, zero extending it to 32-bits -;;@ (spec (sig (args arg) (ret)) -;;@ (assume ( -;;@ if (<= (32i0:isleType) (widthof (arg))) -;;@ (= (ret) (conv_to (regwidth) (arg))) -;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) -;;@ ) -;;@ )) -(decl put_in_reg_zext32 (Value) Reg) -(extern constructor put_in_reg_zext32 put_in_reg_zext32) - -;; Corresponding rust: -;; fn rotr_mask(&mut self, ty: Type) -> ImmLogic { -;; ImmLogic::maybe_from_u64((ty.bits() - 1) as u64, I32).unwrap() -;; } -;; -;;@ (spec (sig (args x) (ret)) -;;@ (assume (= (- (int2bv 64 (x)) (1i64:bv64)) (ret)))) -(decl rotr_mask (Type) ImmLogic) -(extern constructor rotr_mask rotr_mask) - -;; Note that 4094 = 0xffe and 16773119 = 0xffefff -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) -;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) -;;@ (= (extract 2 0 (y)) (0i3:bv)) -;;@ )), -;;@ (= (ret) -;;@ (switch (ty) -;;@ ((32i8: isleType) (conv_to (regwidth) (- (extract 31 0 (x)) (zero_ext (32) (y))))) -;;@ ((64i8: isleType) (- (x) (zero_ext (regwidth) (y)))) -;;@ ) -;;@ ) -;;@ )) -(decl sub_imm (Type Reg Imm12) Reg) -(extern constructor sub_imm sub_imm) - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (ret) (zero_ext (24) (arg))))) -(decl u8_into_imm12 (u8) Imm12) -(extern constructor u8_into_imm12 u8_into_imm12) - -;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assume -;;@ (= (r) -;;@ (switch (ty) -;;@ ((32i8: isleType) (conv_to (regwidth) (shr (extract 31 0 (a)) (extract 31 0 (b))))) -;;@ ((64i8: isleType) (shr (a) (b))) -;;@ ) -;;@ ) -;;@ )) -(decl lsr (Type Reg Reg) Reg) -(extern constructor lsr lsr) - -;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assume -;;@ (= (r) -;;@ (switch (ty) -;;@ ((32i8: isleType) (conv_to (regwidth) (shl (extract 31 0 (a)) (extract 31 0 (b))))) -;;@ ((64i8: isleType) (shl (a) (b))) -;;@ ) -;;@ ) -;;@ )) -(decl lsl (Type Reg Reg) Reg) -(extern constructor lsl lsl) - -;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assume -;;@ (= (r) -;;@ (switch (ty) -;;@ ((32i8: isleType) (conv_to (regwidth) (| (extract 31 0 (a)) (extract 31 0 (b))))) -;;@ ((64i8: isleType) (| (a) (b))) -;;@ ) -;;@ ) -;;@ )) -(decl orr (Type Reg Reg) Reg) -(extern constructor orr orr) - -;; Instruction formats. -(type MInst - (enum -)) - - -;;@ (spec (sig (args t, x, y) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (switch (t) -;;@ ((8i8: isleType) (conv_to (regwidth) (rotr (extract 7 0 (x)) (extract 7 0 (y))))) -;;@ ((16i8: isleType) (conv_to (regwidth) (rotr (extract 15 0 (x)) (extract 15 0 (y))))) -;;@ )), -;;@ (|| (= (t) (8i8: isleType)) -;;@ (= (t) (16i8: isleType))), -;;@ (switch (t) -;;@ ((8i8: isleType) (= (extract 31 8 (x)) (0i32:bv24))) -;;@ ((16i8: isleType) (= (extract 31 16 (x)) (0i32:bv16))) -;;@ ), -;;@ ) -;;@ ) -(decl small_rotr (Type Reg Reg) Reg) - -;; For a < 32-bit rotate-right, we synthesize this as: -;; -;; rotr rd, val, amt -;; -;; => -;; -;; and masked_amt, amt, -;; sub tmp_sub, masked_amt, -;; sub neg_amt, zero, tmp_sub ; neg -;; lsr val_rshift, val, masked_amt -;; lsl val_lshift, val, neg_amt -;; orr rd, val_lshift val_rshift -(rule (small_rotr ty val amt) - (let ((masked_amt Reg (and_imm $I32 amt (rotr_mask ty))) - (tmp_sub Reg (sub_imm $I32 masked_amt (u8_into_imm12 (ty_bits ty)))) - (neg_amt Reg (sub $I32 (zero_reg) tmp_sub)) - (val_rshift Reg (lsr $I32 val masked_amt)) - (val_lshift Reg (lsl $I32 val neg_amt))) - (orr $I32 val_lshift val_rshift))) diff --git a/cranelift/isle/veri/veri_engine/tests/veri.rs b/cranelift/isle/veri/veri_engine/tests/veri.rs index b5ad810d668b..10c518c95157 100644 --- a/cranelift/isle/veri/veri_engine/tests/veri.rs +++ b/cranelift/isle/veri/veri_engine/tests/veri.rs @@ -1266,7 +1266,7 @@ fn test_ctz16_broken() { } #[test] -fn test_small_rotr_to_shifts() { +fn test_named_small_rotr() { run_and_retry(|| { let config = Config { dyn_width: false, @@ -1288,10 +1288,9 @@ fn test_small_rotr_to_shifts() { lower_16_bits_eq, ) })), - names: None, + names: Some(vec!["small_rotr".to_string()]), }; - test_from_file_with_config( - "./examples/rotr/small_rotr_to_shifts.isle", + test_aarch64_with_config( config, vec![(Bitwidth::I64, VerificationResult::Success)], ); @@ -1299,7 +1298,7 @@ fn test_small_rotr_to_shifts() { } #[test] -fn test_small_rotr_to_shifts_broken() { +fn test_broken_small_rotr_to_shifts() { run_and_retry(|| { let config = Config { dyn_width: false, @@ -1335,7 +1334,7 @@ fn test_small_rotr_to_shifts_broken() { } #[test] -fn test_small_rotr_to_shifts_broken2() { +fn test_broken_small_rotr_to_shifts_2() { run_and_retry(|| { let config = Config { dyn_width: false, @@ -1371,7 +1370,7 @@ fn test_small_rotr_to_shifts_broken2() { } #[test] -fn test_small_rotr_imm_to_shifts() { +fn test_named_small_rotr_imm() { run_and_retry(|| { let config = Config { dyn_width: false, @@ -1393,10 +1392,9 @@ fn test_small_rotr_imm_to_shifts() { lower_16_bits_eq, ) })), - names: None, + names: Some(vec!["small_rotr_imm".to_string()]), }; - test_from_file_with_config( - "./examples/rotr/small_rotr_imm_to_shifts.isle", + test_aarch64_with_config( config, vec![(Bitwidth::I64, VerificationResult::Success)], ); @@ -1557,11 +1555,11 @@ fn test_broken_fits_in_16_with_imm_rotl_to_rotr() { } #[test] -fn test_fits_in_16_rotr() { +fn test_named_rotr_fits_in_16() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/rotr/fits_in_16_rotr.isle", - "rotr".to_string(), + test_aarch64_rule_with_lhs_termname( + "rotr_fits_in_16", + "rotr", vec![ (Bitwidth::I8, VerificationResult::Success), (Bitwidth::I16, VerificationResult::Success), @@ -1573,11 +1571,11 @@ fn test_fits_in_16_rotr() { } #[test] -fn test_fits_in_16_with_imm_rotr() { +fn test_named_rotr_fits_in_16_imm() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/rotr/fits_in_16_with_imm_rotr.isle", - "rotr".to_string(), + test_aarch64_rule_with_lhs_termname( + "rotr_fits_in_16_imm", + "rotr", vec![ (Bitwidth::I8, VerificationResult::Success), (Bitwidth::I16, VerificationResult::Success), @@ -1589,11 +1587,11 @@ fn test_fits_in_16_with_imm_rotr() { } #[test] -fn test_32_rotr() { +fn test_named_rotr_32_base_case() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/rotr/32_rotr.isle", - "rotr".to_string(), + test_aarch64_rule_with_lhs_termname( + "rotr_32_base_case", + "rotr", vec![ (Bitwidth::I8, VerificationResult::InapplicableRule), (Bitwidth::I16, VerificationResult::InapplicableRule), @@ -1605,11 +1603,11 @@ fn test_32_rotr() { } #[test] -fn test_32_with_imm_rotr() { +fn test_named_rotr_32_imm() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/rotr/32_with_imm_rotr.isle", - "rotr".to_string(), + test_aarch64_rule_with_lhs_termname( + "rotr_32_imm", + "rotr", vec![ (Bitwidth::I8, VerificationResult::InapplicableRule), (Bitwidth::I16, VerificationResult::InapplicableRule), @@ -1621,10 +1619,10 @@ fn test_32_with_imm_rotr() { } #[test] -fn test_64_rotr() { - test_from_file_with_lhs_termname( - "./examples/rotr/64_rotr.isle", - "rotr".to_string(), +fn test_named_rotr_64_base_case() { + test_aarch64_rule_with_lhs_termname( + "rotr_64_base_case", + "rotr", vec![ (Bitwidth::I8, VerificationResult::InapplicableRule), (Bitwidth::I16, VerificationResult::InapplicableRule), @@ -1635,10 +1633,10 @@ fn test_64_rotr() { } #[test] -fn test_64_with_imm_rotr() { - test_from_file_with_lhs_termname( - "./examples/rotr/64_with_imm_rotr.isle", - "rotr".to_string(), +fn test_named_rotr_64_imm() { + test_aarch64_rule_with_lhs_termname( + "rotr_64_imm", + "rotr", vec![ (Bitwidth::I8, VerificationResult::InapplicableRule), (Bitwidth::I16, VerificationResult::InapplicableRule), From f888708f950c667110bbdd4a4610535f1260ff3f Mon Sep 17 00:00:00 2001 From: Alexa VanHattum Date: Tue, 11 Apr 2023 19:42:44 -0400 Subject: [PATCH 19/30] rotr --- .../examples/broken/shifts/broken_do_shift_32.isle | 1 - cranelift/isle/veri/veri_engine/tests/veri.rs | 5 +++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_do_shift_32.isle b/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_do_shift_32.isle index 3861c38e1fa2..2534f14ff9f5 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_do_shift_32.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/shifts/broken_do_shift_32.isle @@ -82,7 +82,6 @@ ;;@ )) (decl do_shift (ALUOp Type Reg Value) Reg) -;; Helper for emitting `MInst.AluRRR` instructions. ;;@ (spec (sig (args op, t, a, b) (ret)) ;;@ (assume ;;@ (= (ret) (switch (op) diff --git a/cranelift/isle/veri/veri_engine/tests/veri.rs b/cranelift/isle/veri/veri_engine/tests/veri.rs index 10c518c95157..188f94823cb3 100644 --- a/cranelift/isle/veri/veri_engine/tests/veri.rs +++ b/cranelift/isle/veri/veri_engine/tests/veri.rs @@ -717,7 +717,7 @@ fn test_named_ineg_base_case() { } #[test] -fn test_imul_base_case() { +fn test_named_imul_base_case() { run_and_retry(|| { test_aarch64_rule_with_lhs_termname( "imul_base_case", @@ -2228,7 +2228,8 @@ fn test_broken_do_shift_32() { })), names: None, }; - test_aarch64_with_config( + test_from_file_with_config( + "./examples/broken/shifts/broken_do_shift_32.isle", config, vec![( Bitwidth::I32, From 509c692a7487cf06d6730d6518e0187cd34c5396 Mon Sep 17 00:00:00 2001 From: Alexa VanHattum Date: Tue, 11 Apr 2023 20:16:19 -0400 Subject: [PATCH 20/30] naming --- cranelift/codegen/src/isa/aarch64/inst.isle | 20 +++- cranelift/codegen/src/isa/aarch64/lower.isle | 12 +-- .../veri/veri_engine/examples/cls/cls.isle | 33 ------- .../veri/veri_engine/examples/cls/cls16.isle | 84 ----------------- .../veri/veri_engine/examples/cls/cls8.isle | 84 ----------------- .../veri/veri_engine/examples/clz/clz.isle | 33 ------- .../veri/veri_engine/examples/clz/clz16.isle | 85 ----------------- .../veri/veri_engine/examples/clz/clz8.isle | 85 ----------------- .../iadd/imm12_from_negated_value_new.isle | 37 -------- .../veri_engine/examples/iadd/imm12neg.isle | 39 -------- .../veri_engine/examples/iadd/imm12neg2.isle | 40 -------- .../examples/iadd/imm12neg2_new.isle | 48 ---------- .../examples/iadd/imm12neg_new.isle | 40 -------- cranelift/isle/veri/veri_engine/tests/veri.rs | 92 +++++++++---------- 14 files changed, 68 insertions(+), 664 deletions(-) delete mode 100644 cranelift/isle/veri/veri_engine/examples/cls/cls.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/cls/cls16.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/cls/cls8.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/clz/clz.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/clz/clz16.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/clz/clz8.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/iadd/imm12_from_negated_value_new.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/iadd/imm12neg.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/iadd/imm12neg2.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/iadd/imm12neg2_new.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/iadd/imm12neg_new.isle diff --git a/cranelift/codegen/src/isa/aarch64/inst.isle b/cranelift/codegen/src/isa/aarch64/inst.isle index 5129a35660d2..3d3dee54dc85 100644 --- a/cranelift/codegen/src/isa/aarch64/inst.isle +++ b/cranelift/codegen/src/isa/aarch64/inst.isle @@ -2973,12 +2973,28 @@ (rule (rbit ty x) (bit_rr (BitOp.RBit) ty x)) ;; Helpers for generating `clz` instructions. - +;;@ (spec (sig (args ty, a) (ret)) +;;@ (assume +;;@ (= (ret) +;;@ (if (= (ty) (32i0:isleType)) +;;@ (a64clz (32i0:isleType) (a)) +;;@ (a64clz (64i0:isleType) (a)) +;;@ ))) +;;@ (assert (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType)))) +;;@ ) (decl a64_clz (Type Reg) Reg) (rule (a64_clz ty x) (bit_rr (BitOp.Clz) ty x)) ;; Helpers for generating `cls` instructions. - +;;@ (spec (sig (args ty, a) (ret)) +;;@ (assume +;;@ (= (ret) +;;@ (if (= (ty) (32i0:isleType)) +;;@ (a64cls (32i0:isleType) (a)) +;;@ (a64cls (64i0:isleType) (a)) +;;@ ))) +;;@ (assert (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType)))) +;;@ ) (decl a64_cls (Type Reg) Reg) (rule (a64_cls ty x) (bit_rr (BitOp.Cls) ty x)) diff --git a/cranelift/codegen/src/isa/aarch64/lower.isle b/cranelift/codegen/src/isa/aarch64/lower.isle index c389256c45e7..02fc6a55f7a8 100644 --- a/cranelift/codegen/src/isa/aarch64/lower.isle +++ b/cranelift/codegen/src/isa/aarch64/lower.isle @@ -1585,16 +1585,16 @@ ;;;; Rules for `clz` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(rule (lower (has_type $I8 (clz x))) +(rule clz_8 (lower (has_type $I8 (clz x))) (sub_imm $I32 (a64_clz $I32 (put_in_reg_zext32 x)) (u8_into_imm12 24))) -(rule (lower (has_type $I16 (clz x))) +(rule clz_16 (lower (has_type $I16 (clz x))) (sub_imm $I32 (a64_clz $I32 (put_in_reg_zext32 x)) (u8_into_imm12 16))) (rule (lower (has_type $I128 (clz x))) (lower_clz128 x)) -(rule -1 (lower (has_type ty (clz x))) +(rule clz_32_64 -1 (lower (has_type ty (clz x))) (a64_clz ty x)) ;; clz hi_clz, hi @@ -1632,10 +1632,10 @@ ;;;; Rules for `cls` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(rule (lower (has_type $I8 (cls x))) +(rule cls_8 (lower (has_type $I8 (cls x))) (sub_imm $I32 (a64_cls $I32 (put_in_reg_sext32 x)) (u8_into_imm12 24))) -(rule (lower (has_type $I16 (cls x))) +(rule cls_16 (lower (has_type $I16 (cls x))) (sub_imm $I32 (a64_cls $I32 (put_in_reg_sext32 x)) (u8_into_imm12 16))) ;; cls lo_cls, lo @@ -1661,7 +1661,7 @@ (csel (Cond.Eq) lo_sign_bits (zero_reg))))) (value_regs (add $I64 maybe_lo hi_cls) (imm $I64 (ImmExtend.Zero) 0)))) -(rule -1 (lower (has_type ty (cls x))) +(rule cls_32_64 -1 (lower (has_type ty (cls x))) (a64_cls ty x)) ;;;; Rules for `bswap` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/cranelift/isle/veri/veri_engine/examples/cls/cls.isle b/cranelift/isle/veri/veri_engine/examples/cls/cls.isle deleted file mode 100644 index c653c9b751e7..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/cls/cls.isle +++ /dev/null @@ -1,33 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst - (enum - (BitRR - (op BitOp)) -)) - -(type BitOp - (enum - (Cls) -)) - -(decl bit_rr (BitOp Type Reg) Reg) -(extern constructor bit_rr bit_rr) - -;;@ (spec (sig (args ty, a) (ret)) -;;@ (assume (= (ret) -;;@ (if (= (ty) (32i0:isleType)) -;;@ (a64cls (32i0:isleType) (a)) -;;@ (a64cls (64i0:isleType) (a)) -;;@ ) -;;@ ), -;;@ (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType))) -;;@ ) -;;@ ) -(decl a64_cls (Type Reg) Reg) -(rule (a64_cls ty x) (bit_rr (BitOp.Cls) ty x)) - -(rule (lower (has_type ty (cls x))) - (a64_cls ty x)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/cls/cls16.isle b/cranelift/isle/veri/veri_engine/examples/cls/cls16.isle deleted file mode 100644 index d375b40097fa..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/cls/cls16.isle +++ /dev/null @@ -1,84 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst - (enum - (BitRR - (op BitOp)) - (Extend - (rd WritableReg) - (rn Reg) - (signed bool) - (from_bits u8) - (to_bits u8)) -)) - -(type ALUOp - (enum - (Sub) -)) - -(type BitOp - (enum - (Cls) -)) - -(type Imm12 (primitive Imm12)) - -(decl bit_rr (BitOp Type Reg) Reg) -(extern constructor bit_rr bit_rr) - -(decl alu_rr_imm12 (ALUOp Type Reg Imm12) Reg) -(extern constructor alu_rr_imm12 alu_rr_imm12) - -;; Note that 4094 = 0xffe and 16773119 = 0xffefff -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) -;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) -;;@ (= (extract 2 0 (y)) (0i3:bv)) -;;@ )), -;;@ (= (ret) (- (x) (zero_ext (regwidth) (y)))) -;;@ )) -(decl sub_imm (Type Reg Imm12) Reg) -(rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) - -;;@ (spec (sig (args ty, a) (ret)) -;;@ (assume (= (ret) -;;@ (if (= (ty) (32i0:isleType)) -;;@ (a64cls (32i0:isleType) (a)) -;;@ (a64cls (64i0:isleType) (a)) -;;@ ) -;;@ ), -;;@ (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType))) -;;@ ) -;;@ ) -(decl a64_cls (Type Reg) Reg) -(rule (a64_cls ty x) (bit_rr (BitOp.Cls) ty x)) - -(decl extend (Reg bool u8 u8) Reg) -(rule (extend rn signed from_bits to_bits) - (let ((dst WritableReg (temp_writable_reg $I64)) - (_ Unit (emit (MInst.Extend dst rn signed from_bits to_bits)))) - dst)) - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume ( -;;@ if (<= (32i0:isleType) (widthof (arg))) -;;@ (= (ret) (conv_to (regwidth) (arg))) -;;@ (= (ret) (conv_to (regwidth) (sign_ext (32) (arg)))) -;;@ ) -;;@ )) -(decl put_in_reg_sext32 (Value) Reg) -(rule (put_in_reg_sext32 val @ (value_type (fits_in_32 ty))) - (extend val $true (ty_bits ty) 32)) -(rule (put_in_reg_sext32 val @ (value_type $I32)) val) -(rule (put_in_reg_sext32 val @ (value_type $I64)) val) - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (ret) (zero_ext (24) (arg))))) -(decl u8_into_imm12 (u8) Imm12) -(extern constructor u8_into_imm12 u8_into_imm12) - -(rule (lower (has_type $I16 (cls x))) - (sub_imm $I32 (a64_cls $I32 (put_in_reg_sext32 x)) (u8_into_imm12 16))) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/cls/cls8.isle b/cranelift/isle/veri/veri_engine/examples/cls/cls8.isle deleted file mode 100644 index 25b2bbfed8eb..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/cls/cls8.isle +++ /dev/null @@ -1,84 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst - (enum - (BitRR - (op BitOp)) - (Extend - (rd WritableReg) - (rn Reg) - (signed bool) - (from_bits u8) - (to_bits u8)) -)) - -(type ALUOp - (enum - (Sub) -)) - -(type BitOp - (enum - (Cls) -)) - -(type Imm12 (primitive Imm12)) - -(decl bit_rr (BitOp Type Reg) Reg) -(extern constructor bit_rr bit_rr) - -(decl alu_rr_imm12 (ALUOp Type Reg Imm12) Reg) -(extern constructor alu_rr_imm12 alu_rr_imm12) - -;; Note that 4094 = 0xffe and 16773119 = 0xffefff -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) -;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) -;;@ (= (extract 2 0 (y)) (0i3:bv)) -;;@ )), -;;@ (= (ret) (- (x) (zero_ext (regwidth) (y)))) -;;@ )) -(decl sub_imm (Type Reg Imm12) Reg) -(rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) - -;;@ (spec (sig (args ty, a) (ret)) -;;@ (assume (= (ret) -;;@ (if (= (ty) (32i0:isleType)) -;;@ (a64cls (32i0:isleType) (a)) -;;@ (a64cls (64i0:isleType) (a)) -;;@ ) -;;@ ), -;;@ (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType))) -;;@ ) -;;@ ) -(decl a64_cls (Type Reg) Reg) -(rule (a64_cls ty x) (bit_rr (BitOp.Cls) ty x)) - -(decl extend (Reg bool u8 u8) Reg) -(rule (extend rn signed from_bits to_bits) - (let ((dst WritableReg (temp_writable_reg $I64)) - (_ Unit (emit (MInst.Extend dst rn signed from_bits to_bits)))) - dst)) - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume ( -;;@ if (<= (32i0:isleType) (widthof (arg))) -;;@ (= (ret) (conv_to (regwidth) (arg))) -;;@ (= (ret) (conv_to (regwidth) (sign_ext (32) (arg)))) -;;@ ) -;;@ )) -(decl put_in_reg_sext32 (Value) Reg) -(rule (put_in_reg_sext32 val @ (value_type (fits_in_32 ty))) - (extend val $true (ty_bits ty) 32)) -(rule (put_in_reg_sext32 val @ (value_type $I32)) val) -(rule (put_in_reg_sext32 val @ (value_type $I64)) val) - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (ret) (zero_ext (24) (arg))))) -(decl u8_into_imm12 (u8) Imm12) -(extern constructor u8_into_imm12 u8_into_imm12) - -(rule (lower (has_type $I8 (cls x))) - (sub_imm $I32 (a64_cls $I32 (put_in_reg_sext32 x)) (u8_into_imm12 24))) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/clz/clz.isle b/cranelift/isle/veri/veri_engine/examples/clz/clz.isle deleted file mode 100644 index b489d04d1850..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/clz/clz.isle +++ /dev/null @@ -1,33 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst - (enum - (BitRR - (op BitOp)) -)) - -(type BitOp - (enum - (Clz) -)) - -(decl bit_rr (BitOp Type Reg) Reg) -(extern constructor bit_rr bit_rr) - -;;@ (spec (sig (args ty, a) (ret)) -;;@ (assume (= (ret) -;;@ (if (= (ty) (32i0:isleType)) -;;@ (a64clz (32i0:isleType) (a)) -;;@ (a64clz (64i0:isleType) (a)) -;;@ ) -;;@ ), -;;@ (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType))) -;;@ ) -;;@ ) -(decl a64_clz (Type Reg) Reg) -(rule (a64_clz ty x) (bit_rr (BitOp.Clz) ty x)) - -(rule (lower (has_type ty (clz x))) - (a64_clz ty x)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/clz/clz16.isle b/cranelift/isle/veri/veri_engine/examples/clz/clz16.isle deleted file mode 100644 index e8e081917034..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/clz/clz16.isle +++ /dev/null @@ -1,85 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst - (enum - (BitRR - (op BitOp)) - (Extend - (rd WritableReg) - (rn Reg) - (signed bool) - (from_bits u8) - (to_bits u8)) -)) - -(type ALUOp - (enum - (Sub) -)) - -(type BitOp - (enum - (Clz) -)) - -(type Imm12 (primitive Imm12)) - -(decl bit_rr (BitOp Type Reg) Reg) -(extern constructor bit_rr bit_rr) - -(decl alu_rr_imm12 (ALUOp Type Reg Imm12) Reg) -(extern constructor alu_rr_imm12 alu_rr_imm12) - -;; Note that 4094 = 0xffe and 16773119 = 0xffefff -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) -;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) -;;@ (= (extract 2 0 (y)) (0i3:bv)) -;;@ )), -;;@ (= (ret) (- (x) (zero_ext (regwidth) (y)))) -;;@ )) -(decl sub_imm (Type Reg Imm12) Reg) -(rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) - -;;@ (spec (sig (args ty, a) (ret)) -;;@ (assume (= (ret) -;;@ (if (= (ty) (32i0:isleType)) -;;@ (a64clz (32i0:isleType) (a)) -;;@ (a64clz (64i0:isleType) (a)) -;;@ ) -;;@ ), -;;@ (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType))) -;;@ ) -;;@ ) -(decl a64_clz (Type Reg) Reg) -(rule (a64_clz ty x) (bit_rr (BitOp.Clz) ty x)) - -(decl extend (Reg bool u8 u8) Reg) -(rule (extend rn signed from_bits to_bits) - (let ((dst WritableReg (temp_writable_reg $I64)) - (_ Unit (emit (MInst.Extend dst rn signed from_bits to_bits)))) - dst)) - -;; Place a `Value` into a register, zero extending it to 32-bits -;;@ (spec (sig (args arg) (ret)) -;;@ (assume ( -;;@ if (<= (32i0:isleType) (widthof (arg))) -;;@ (= (ret) (conv_to (regwidth) (arg))) -;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) -;;@ ) -;;@ )) -(decl put_in_reg_zext32 (Value) Reg) -(rule (put_in_reg_zext32 val @ (value_type (fits_in_32 ty))) - (extend val $false (ty_bits ty) 32)) -(rule (put_in_reg_zext32 val @ (value_type $I32)) val) -(rule (put_in_reg_zext32 val @ (value_type $I64)) val) - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (ret) (zero_ext (24) (arg))))) -(decl u8_into_imm12 (u8) Imm12) -(extern constructor u8_into_imm12 u8_into_imm12) - -(rule (lower (has_type $I16 (clz x))) - (sub_imm $I32 (a64_clz $I32 (put_in_reg_zext32 x)) (u8_into_imm12 16))) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/clz/clz8.isle b/cranelift/isle/veri/veri_engine/examples/clz/clz8.isle deleted file mode 100644 index 2446f2edfde2..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/clz/clz8.isle +++ /dev/null @@ -1,85 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst - (enum - (BitRR - (op BitOp)) - (Extend - (rd WritableReg) - (rn Reg) - (signed bool) - (from_bits u8) - (to_bits u8)) -)) - -(type ALUOp - (enum - (Sub) -)) - -(type BitOp - (enum - (Clz) -)) - -(type Imm12 (primitive Imm12)) - -(decl bit_rr (BitOp Type Reg) Reg) -(extern constructor bit_rr bit_rr) - -(decl alu_rr_imm12 (ALUOp Type Reg Imm12) Reg) -(extern constructor alu_rr_imm12 alu_rr_imm12) - -;; Note that 4094 = 0xffe and 16773119 = 0xffefff -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (|| (<= (bv2int (y)) (4094i0:isleType)) -;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) -;;@ (= (extract 2 0 (y)) (0i3:bv)) -;;@ )), -;;@ (= (ret) (- (x) (zero_ext (regwidth) (y)))) -;;@ )) -(decl sub_imm (Type Reg Imm12) Reg) -(rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) - -;;@ (spec (sig (args ty, a) (ret)) -;;@ (assume (= (ret) -;;@ (if (= (ty) (32i0:isleType)) -;;@ (a64clz (32i0:isleType) (a)) -;;@ (a64clz (64i0:isleType) (a)) -;;@ ) -;;@ ), -;;@ (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType))) -;;@ ) -;;@ ) -(decl a64_clz (Type Reg) Reg) -(rule (a64_clz ty x) (bit_rr (BitOp.Clz) ty x)) - -(decl extend (Reg bool u8 u8) Reg) -(rule (extend rn signed from_bits to_bits) - (let ((dst WritableReg (temp_writable_reg $I64)) - (_ Unit (emit (MInst.Extend dst rn signed from_bits to_bits)))) - dst)) - -;; Place a `Value` into a register, zero extending it to 32-bits -;;@ (spec (sig (args arg) (ret)) -;;@ (assume ( -;;@ if (<= (32i0:isleType) (widthof (arg))) -;;@ (= (ret) (conv_to (regwidth) (arg))) -;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) -;;@ ) -;;@ )) -(decl put_in_reg_zext32 (Value) Reg) -(rule (put_in_reg_zext32 val @ (value_type (fits_in_32 ty))) - (extend val $false (ty_bits ty) 32)) -(rule (put_in_reg_zext32 val @ (value_type $I32)) val) -(rule (put_in_reg_zext32 val @ (value_type $I64)) val) - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (ret) (zero_ext (24) (arg))))) -(decl u8_into_imm12 (u8) Imm12) -(extern constructor u8_into_imm12 u8_into_imm12) - -(rule (lower (has_type $I8 (clz x))) - (sub_imm $I32 (a64_clz $I32 (put_in_reg_zext32 x)) (u8_into_imm12 24))) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/imm12_from_negated_value_new.isle b/cranelift/isle/veri/veri_engine/examples/iadd/imm12_from_negated_value_new.isle deleted file mode 100644 index c1b0c27e2b07..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/iadd/imm12_from_negated_value_new.isle +++ /dev/null @@ -1,37 +0,0 @@ -(type MInst - (enum -)) - -(type Imm12 (primitive Imm12)) - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (zero_ext (regwidth) (arg)) (ret)))) -(decl imm12_from_u64 (Imm12) u64) -(extern extractor imm12_from_u64 imm12_from_u64) - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (ret) (- (arg))))) -(decl pure i64_neg (i64) i64) -(extern constructor i64_neg i64_neg) - -;;@ (spec (sig (args ty, arg) (ret)) -;;@ (assume (= (ret) (sign_ext (regwidth) (conv_to (ty) (arg)))))) -(decl pure i64_sextend_imm64 (Type Imm64) i64) -(extern constructor i64_sextend_imm64 i64_sextend_imm64) - - ;; Conceptually the same as `imm12_from_value`, but tries negating the constant - ;; value (first sign-extending to handle narrow widths). - - ;; Note that 4095 = 0xfff and 16773120 = 0xfff000 -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (|| (< (- (sign_ext (regwidth) (arg))) (4095i64:bv)) -;;@ (&& (< (- (sign_ext (regwidth) (arg))) (16773120i64:bv)) -;;@ (= (extract 2 0 (- (sign_ext (regwidth) (arg)))) (0i3:bv)) -;;@ )), -;;@ (= (ret) (extract 23 0 (- (sign_ext (regwidth) (arg))))) -;;@ )) - (decl pure imm12_from_negated_value (Value) Imm12) - (rule - (imm12_from_negated_value (has_type ty (iconst n))) - (if-let (imm12_from_u64 imm) (i64_as_u64 (i64_neg (i64_sextend_imm64 ty n)))) - imm) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg.isle b/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg.isle deleted file mode 100644 index 4a596c20c7b2..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg.isle +++ /dev/null @@ -1,39 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst - (enum -)) - -;; We will represent this with a msb shift bit -;; and a 12 bit value -(type Imm12 (primitive Imm12)) - -(type ALUOp - (enum - (Sub) -)) - -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (= (ret) (- (x) (zero_ext (regwidth) (y)))) -;;@ )) -(decl sub_imm (Type Reg Imm12) Reg) -(rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) - -(decl alu_rr_imm12 (ALUOp Type Reg Imm12) Reg) -(extern constructor alu_rr_imm12 alu_rr_imm12) - -;; Note that 4095 = 0xfff and 16773120 = 0xfff000 -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (|| (< (- (zero_ext (regwidth) (ret))) (4095i64:bv)) -;;@ (&& (< (- (zero_ext (regwidth) (ret))) (16773120i64:bv)) -;;@ (= (extract 2 0 (- (zero_ext (regwidth) (ret)))) (0i3:bv)) -;;@ )), -;;@ (= (ret) (conv_to (widthof (ret)) (- (zero_ext (regwidth) (arg))))) -;;@ )) -(decl imm12_from_negated_value (Imm12) Value) -(extern extractor imm12_from_negated_value imm12_from_negated_value) - -(rule (lower (has_type (fits_in_64 ty) (iadd x (imm12_from_negated_value y)))) - (sub_imm ty x y)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg2.isle b/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg2.isle deleted file mode 100644 index 9e94dbe96f09..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg2.isle +++ /dev/null @@ -1,40 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst - (enum -)) - -;; We will represent this with a msb shift bit -;; and a 12 bit value -(type Imm12 (primitive Imm12)) - -(type ALUOp - (enum - (Sub) -)) - -;; Note that 4094 = 0xffe and 16773119 = 0xffefff -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (= (ret) (- (x) (zero_ext (regwidth) (y)))) -;;@ )) -(decl sub_imm (Type Reg Imm12) Reg) -(rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) - -(decl alu_rr_imm12 (ALUOp Type Reg Imm12) Reg) -(extern constructor alu_rr_imm12 alu_rr_imm12) - -;; Note that 4095 = 0xfff and 16773120 = 0xfff000 -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (|| (< (- (zero_ext (regwidth) (ret))) (4095i64:bv)) -;;@ (&& (< (- (zero_ext (regwidth) (ret))) (16773120i64:bv)) -;;@ (= (extract 2 0 (- (zero_ext (regwidth) (ret)))) (0i3:bv)) -;;@ )), -;;@ (= (ret) (conv_to (widthof (ret)) (- (zero_ext (regwidth) (arg))))) -;;@ )) -(decl imm12_from_negated_value (Imm12) Value) -(extern extractor imm12_from_negated_value imm12_from_negated_value) - -(rule (lower (has_type (fits_in_64 ty) (iadd (imm12_from_negated_value x) y))) - (sub_imm ty y x)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg2_new.isle b/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg2_new.isle deleted file mode 100644 index 84523b5e4577..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg2_new.isle +++ /dev/null @@ -1,48 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst - (enum -)) - -;; We will represent this with a msb shift bit -;; and a 12 bit value -(type Imm12 (primitive Imm12)) - -(type ALUOp - (enum - (Sub) -)) - -;;@ (spec (sig (args ty, a, b) (r)) -;;@ (assume -;;@ (= (r) -;;@ (if (<= (ty) (32i8: isleType)) -;;@ (conv_to (regwidth) (- (extract 31 0 (a)) (zero_ext (32) (b)))) -;;@ (- (a) (zero_ext (regwidth) (b)))))) -;;@ (assert (|| (<= (bv2int (y)) (4094i0:isleType)) -;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) -;;@ (= (extract 2 0 (y)) (0i3:bv)) -;;@ ))) -;;@ ) -(decl sub_imm (Type Reg Imm12) Reg) -(rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) - -(decl alu_rr_imm12 (ALUOp Type Reg Imm12) Reg) -(extern constructor alu_rr_imm12 alu_rr_imm12) - -;; Note that 4095 = 0xfff and 16773120 = 0xfff000 -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (|| (< (- (sign_ext (regwidth) (arg))) (4095i64:bv)) -;;@ (&& (< (- (sign_ext (regwidth) (arg))) (16773120i64:bv)) -;;@ (= (extract 2 0 (- (sign_ext (regwidth) (arg)))) (0i3:bv)) -;;@ )), -;;@ (= (ret) (extract 23 0 (- (sign_ext (regwidth) (arg))))) -;;@ )) -(decl pure imm12_from_negated_value (Value) Imm12) -(extern extractor imm12_from_negated_value imm12_from_negated_value) - -(rule 3 (lower (has_type (fits_in_64 ty) (iadd x y))) - (if-let imm12_neg (imm12_from_negated_value x)) - (sub_imm ty y imm12_neg)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg_new.isle b/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg_new.isle deleted file mode 100644 index d5d6206fd831..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/iadd/imm12neg_new.isle +++ /dev/null @@ -1,40 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst - (enum -)) - -;; We will represent this with a msb shift bit -;; and a 12 bit value -(type Imm12 (primitive Imm12)) - -(type ALUOp - (enum - (Sub) -)) - -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume (= (ret) (- (x) (zero_ext (regwidth) (y)))) -;;@ )) -(decl sub_imm (Type Reg Imm12) Reg) -(rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) - -(decl alu_rr_imm12 (ALUOp Type Reg Imm12) Reg) -(extern constructor alu_rr_imm12 alu_rr_imm12) - -;; Note that 4095 = 0xfff and 16773120 = 0xfff000 -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (|| (< (- (sign_ext (regwidth) (arg))) (4095i64:bv)) -;;@ (&& (< (- (sign_ext (regwidth) (arg))) (16773120i64:bv)) -;;@ (= (extract 2 0 (- (sign_ext (regwidth) (arg)))) (0i3:bv)) -;;@ )), -;;@ (= (ret) (extract 23 0 (- (sign_ext (regwidth) (arg))))) -;;@ )) -(decl pure imm12_from_negated_value (Value) Imm12) -(extern extractor imm12_from_negated_value imm12_from_negated_value) - -(rule 2 (lower (has_type (fits_in_64 ty) (iadd x y))) - (if-let imm12_neg (imm12_from_negated_value y)) - (sub_imm ty x imm12_neg)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/tests/veri.rs b/cranelift/isle/veri/veri_engine/tests/veri.rs index 188f94823cb3..b6d39e790f15 100644 --- a/cranelift/isle/veri/veri_engine/tests/veri.rs +++ b/cranelift/isle/veri/veri_engine/tests/veri.rs @@ -108,10 +108,10 @@ fn test_named_iadd_imm12_neg_left_not_distinct() { // Need a file test because this is a change on top of our latest rebase #[test] -fn test_imm12_from_negated_value() { +fn test_updated_imm12_from_negated_value() { run_and_retry(|| { test_from_file_with_lhs_termname( - "./examples/iadd/imm12_from_negated_value_new.isle", + "./examples/iadd/updated_imm12_from_negated_value.isle", "imm12_from_negated_value".to_string(), all_success_result(), ) @@ -120,10 +120,10 @@ fn test_imm12_from_negated_value() { // Need a file test because this is a change on top of our latest rebase #[test] -fn test_iadd_imm12neg_new() { +fn test_updated_iadd_imm12neg_right() { run_and_retry(|| { test_from_file_with_lhs_termname( - "./examples/iadd/imm12neg_new.isle", + "./examples/iadd/updated_iadd_imm12neg_right.isle", "iadd".to_string(), all_success_result(), ) @@ -132,10 +132,10 @@ fn test_iadd_imm12neg_new() { // Need a file test because this is a change on top of our latest rebase #[test] -fn test_iadd_imm12neg2_new() { +fn test_updated_iadd_imm12neg_left() { run_and_retry(|| { test_from_file_with_lhs_termname( - "./examples/iadd/imm12neg2_new.isle", + "./examples/iadd/updated_iadd_imm12neg_left.isle", "iadd".to_string(), all_success_result(), ) @@ -953,15 +953,16 @@ fn test_broken_uextend() { }) } +// AVH TODO: this rule requires priorities to be correct! #[test] -fn test_clz() { +fn test_named_clz_32_64() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/clz/clz.isle", - "clz".to_string(), + test_aarch64_rule_with_lhs_termname( + "clz_32_64", + "clz", vec![ - (Bitwidth::I8, VerificationResult::InapplicableRule), - (Bitwidth::I16, VerificationResult::InapplicableRule), + // (Bitwidth::I8, VerificationResult::InapplicableRule), + // (Bitwidth::I16, VerificationResult::InapplicableRule), (Bitwidth::I32, VerificationResult::Success), (Bitwidth::I64, VerificationResult::Success), ], @@ -970,11 +971,11 @@ fn test_clz() { } #[test] -fn test_clz8() { +fn test_named_clz_8() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/clz/clz8.isle", - "clz".to_string(), + test_aarch64_rule_with_lhs_termname( + "clz_8", + "clz", vec![ (Bitwidth::I8, VerificationResult::Success), (Bitwidth::I16, VerificationResult::InapplicableRule), @@ -986,11 +987,11 @@ fn test_clz8() { } #[test] -fn test_clz16() { +fn test_named_clz_16() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/clz/clz16.isle", - "clz".to_string(), + test_aarch64_rule_with_lhs_termname( + "clz_16", + "clz", vec![ (Bitwidth::I8, VerificationResult::InapplicableRule), (Bitwidth::I16, VerificationResult::Success), @@ -1002,7 +1003,7 @@ fn test_clz16() { } #[test] -fn test_clz_broken() { +fn test_broken_clz() { run_and_retry(|| { test_from_file_with_lhs_termname( "./examples/broken/clz/broken_clz.isle", @@ -1024,7 +1025,7 @@ fn test_clz_broken() { } #[test] -fn test_clz8_broken() { +fn test_broken_clz8() { run_and_retry(|| { test_from_file_with_lhs_termname( "./examples/broken/clz/broken_clz8.isle", @@ -1040,7 +1041,7 @@ fn test_clz8_broken() { } #[test] -fn test_clz_broken16() { +fn test_broken_clz_n6() { run_and_retry(|| { test_from_file_with_lhs_termname( "./examples/broken/clz/broken_clz16.isle", @@ -1058,15 +1059,16 @@ fn test_clz_broken16() { }) } +// AVH TODO: need priorities for correctness #[test] -fn test_cls() { +fn test_named_cls_32_64() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/cls/cls.isle", - "cls".to_string(), + test_aarch64_rule_with_lhs_termname( + "cls_32_64", + "cls", vec![ - (Bitwidth::I8, VerificationResult::InapplicableRule), - (Bitwidth::I16, VerificationResult::InapplicableRule), + // (Bitwidth::I8, VerificationResult::InapplicableRule), + // (Bitwidth::I16, VerificationResult::InapplicableRule), (Bitwidth::I32, VerificationResult::Success), (Bitwidth::I64, VerificationResult::Success), ], @@ -1075,11 +1077,11 @@ fn test_cls() { } #[test] -fn test_cls8() { +fn test_named_cls8() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/cls/cls8.isle", - "cls".to_string(), + test_aarch64_rule_with_lhs_termname( + "cls_8", + "cls", vec![ (Bitwidth::I8, VerificationResult::Success), (Bitwidth::I16, VerificationResult::InapplicableRule), @@ -1091,11 +1093,11 @@ fn test_cls8() { } #[test] -fn test_cls16() { +fn test_named_cls_16() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/cls/cls16.isle", - "cls".to_string(), + test_aarch64_rule_with_lhs_termname( + "cls_16", + "cls", vec![ (Bitwidth::I8, VerificationResult::InapplicableRule), (Bitwidth::I16, VerificationResult::Success), @@ -1107,7 +1109,7 @@ fn test_cls16() { } #[test] -fn test_cls_broken() { +fn test_broken_cls_32_64() { run_and_retry(|| { test_from_file_with_lhs_termname( "./examples/broken/cls/broken_cls.isle", @@ -1126,7 +1128,7 @@ fn test_cls_broken() { } #[test] -fn test_cls8_broken() { +fn test_broken_cls_8() { run_and_retry(|| { test_from_file_with_lhs_termname( "./examples/broken/cls/broken_cls8.isle", @@ -1142,7 +1144,7 @@ fn test_cls8_broken() { } #[test] -fn test_cls16_broken() { +fn test_broken_cls_16() { run_and_retry(|| { test_from_file_with_lhs_termname( "./examples/broken/cls/broken_cls16.isle", @@ -1290,10 +1292,7 @@ fn test_named_small_rotr() { })), names: Some(vec!["small_rotr".to_string()]), }; - test_aarch64_with_config( - config, - vec![(Bitwidth::I64, VerificationResult::Success)], - ); + test_aarch64_with_config(config, vec![(Bitwidth::I64, VerificationResult::Success)]); }) } @@ -1394,10 +1393,7 @@ fn test_named_small_rotr_imm() { })), names: Some(vec!["small_rotr_imm".to_string()]), }; - test_aarch64_with_config( - config, - vec![(Bitwidth::I64, VerificationResult::Success)], - ); + test_aarch64_with_config(config, vec![(Bitwidth::I64, VerificationResult::Success)]); }) } From 42a9a13ef006361b42cb98b46cbf844b06d775f6 Mon Sep 17 00:00:00 2001 From: Alexa VanHattum Date: Tue, 11 Apr 2023 21:58:46 -0400 Subject: [PATCH 21/30] first 2 icmp --- cranelift/codegen/src/isa/aarch64/inst.isle | 125 +++++++++++++++++- cranelift/codegen/src/isa/aarch64/lower.isle | 8 +- cranelift/isle/veri/veri_engine/tests/veri.rs | 59 +++++---- 3 files changed, 158 insertions(+), 34 deletions(-) diff --git a/cranelift/codegen/src/isa/aarch64/inst.isle b/cranelift/codegen/src/isa/aarch64/inst.isle index 3d3dee54dc85..93345b9ef715 100644 --- a/cranelift/codegen/src/isa/aarch64/inst.isle +++ b/cranelift/codegen/src/isa/aarch64/inst.isle @@ -1691,6 +1691,9 @@ (decl u8_into_imm12 (u8) Imm12) (extern constructor u8_into_imm12 u8_into_imm12) +;;@ (spec (sig (args ty, a) (ret)) +;;@ (assume (= (a) (ret))) +;;@ (assert (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType))))) (decl u64_into_imm_logic (Type u64) ImmLogic) (extern constructor u64_into_imm_logic u64_into_imm_logic) @@ -2891,6 +2894,20 @@ (decl orr (Type Reg Reg) Reg) (rule (orr ty x y) (alu_rrr (ALUOp.Orr) ty x y)) +;;@ (spec (sig (args ty, x, y) (ret)) +;;@ (assume +;;@ (= (ret) +;;@ (switch (ty) +;;@ ((32i8: isleType) (conv_to (regwidth) (| (extract 31 0 (x)) (extract 31 0 (y))))) +;;@ ((64i8: isleType) (| (x) (zero_ext (regwidth) (y)))) +;;@ ) +;;@ )) +;;@ (assert +;;@ (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) +;;@ (= (extract 2 0 (y)) (0i3:bv)) +;;@ )) +;;@ )) (decl orr_imm (Type Reg ImmLogic) Reg) (rule (orr_imm ty x y) (alu_rr_imm_logic (ALUOp.Orr) ty x y)) @@ -2968,7 +2985,15 @@ (rule (a64_rotr_imm ty x y) (alu_rr_imm_shift (ALUOp.RotR) ty x y)) ;; Helpers for generating `rbit` instructions. - +;;@ (spec (sig (args ty, a) (ret)) +;;@ (assume +;;@ (= (ret) +;;@ (if (= (ty) (32i0:isleType)) +;;@ (a64rev (32i0:isleType) (a)) +;;@ (a64rev (64i0:isleType) (a)) +;;@ ))) +;;@ (assert (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType)))) +;;@ ) (decl rbit (Type Reg) Reg) (rule (rbit ty x) (bit_rr (BitOp.RBit) ty x)) @@ -3443,7 +3468,9 @@ (extern constructor fp_cond_code fp_cond_code) ;; Lower an integer cond code. +;;@ (spec (sig (args a) (r)) (assume (= (a) (r)))) (decl cond_code (IntCC) Cond) + ;; TODO: Port lower_condcode() to ISLE. (extern constructor cond_code cond_code) @@ -3902,6 +3929,32 @@ (rule (flags_and_cc flags cc) (FlagsAndCC.FlagsAndCC flags cc)) ;; Materialize a `FlagsAndCC` into a boolean `ValueRegs`. +;;@ (spec (sig (args a) (ret)) +;;@ (assume +;;@ (= (ret) +;;@ (switch (extract 7 0 (a)) +;;@ ((0i8:bv8) (if (= (extract 10 10 (a)) (1i1:bv1)) (1i8:bv8) (0i8:bv8))) +;;@ ((1i8:bv8) (if (= (extract 10 10 (a)) (0i1:bv1)) (1i8:bv8) (0i8:bv8))) +;;@ ((2i8:bv8) (if (&& (= (extract 10 10 (a)) (0i1:bv1)) +;;@ (= (extract 11 11 (a)) (extract 8 8 (a)))) +;;@ (1i8:bv8) (0i8:bv8))) +;;@ ((3i8:bv8) (if (= (extract 11 11 (a)) (extract 8 8 (a))) +;;@ (1i8:bv8) (0i8:bv8))) +;;@ ((4i8:bv8) (if (! (= (extract 11 11 (a)) (extract 8 8 (a)))) (1i8:bv8) (0i8:bv8))) +;;@ ((5i8:bv8) (if (|| (= (extract 10 10 (a)) (1i1:bv1)) +;;@ (! (= (extract 11 11 (a)) (extract 8 8 (a))))) +;;@ (1i8:bv8) (0i8:bv8))) +;;@ ((6i8:bv8) (if (&& (= (extract 9 9 (a)) (1i1:bv1)) +;;@ (= (extract 10 10 (a)) (0i1:bv1))) +;;@ (1i8:bv8) (0i8:bv8))) +;;@ ((7i8:bv8) (if (= (extract 9 9 (a)) (1i1:bv1)) (1i8:bv8) (0i8:bv8))) +;;@ ((8i8:bv8) (if (= (extract 9 9 (a)) (0i1:bv1)) (1i8:bv8) (0i8:bv8))) +;;@ ((9i8:bv8) (if (|| (= (extract 9 9 (a)) (0i1:bv1)) +;;@ (= (extract 10 10 (a)) (1i1:bv1))) +;;@ (1i8:bv8) (0i8:bv8))) +;;@ ))) +;;@ (assert (ulte (extract 7 0 (a)) (9i8:bv8))) +;;@ ) (decl flags_and_cc_to_bool (FlagsAndCC) ValueRegs) (rule (flags_and_cc_to_bool (FlagsAndCC.FlagsAndCC flags cc)) (with_flags flags (materialize_bool_result (cond_code cc)))) @@ -3917,7 +3970,75 @@ ;; Helpers for lowering `icmp` sequences. ;; `lower_icmp` contains shared functionality for lowering `icmp` ;; sequences, which `lower_icmp_into_{reg,flags}` extend from. +;; (0i8:bv8) = +;; (1i8:bv8) != +;; (2i8:bv8) sgt +;; (3i8:bv8) sgte +;; (4i8:bv8) slt +;; (5i8:bv8) slte +;; (6i8:bv8) ugt +;; (7i8:bv8) ugte +;; (8i8:bv8) ult +;; (9i8:bv8) ulte +;;@ (spec (sig (args c, x, y, in_ty) (ret)) +;;@ (assume +;;@ (= (ret) +;;@ (| (shl (zero_ext (12i8: isleType) +;;@ (extract 67 64 +;;@ (if (&& (ugte (c) (2i8:bv8)) (ulte (c) (5i8:bv8))) +;;@ (if (<= (in_ty) (32i8:isleType)) +;;@ (subs (32i8:isleType) (sign_ext (regwidth) (x)) (sign_ext (regwidth) (y))) +;;@ (subs (64i8:isleType) (sign_ext (regwidth) (x)) (sign_ext (regwidth) (y))) +;;@ ) +;;@ (if (<= (in_ty) (32i8:isleType)) +;;@ (subs (32i8:isleType) (zero_ext (regwidth) (x)) (zero_ext (regwidth) (y))) +;;@ (subs (64i8:isleType) (zero_ext (regwidth) (x)) (zero_ext (regwidth) (y))) +;;@ ) +;;@ )) +;;@ ) +;;@ (8i12:bv12)) +;;@ (zero_ext (12i8: isleType) (c))) +;;@ )) +;;@ (assert +;;@ (ulte (c) (9i8:bv8)), +;;@ +;;@ (|| (= (in_ty) (8i8: isleType)) +;;@ (|| (= (in_ty) (16i8: isleType)) +;;@ (|| (= (in_ty) (32i8: isleType)) +;;@ (= (in_ty) (64i8: isleType))))), +;;@ +;;@ (= (in_ty) (widthof (x))), +;;@ (= (in_ty) (widthof (y))), +;;@ )) (decl lower_icmp (IntCC Value Value Type) FlagsAndCC) + +;;@ (spec (sig (args c, x, y, in_ty, out_ty) (ret)) +;;@ (assume +;;@ (= (ret) +;;@ (switch (c) +;;@ ((0i8:bv8) (if (= (x) (y)) (1i8:bv8) (0i8:bv8))) +;;@ ((1i8:bv8) (if (! (= (x) (y))) (1i8:bv8) (0i8:bv8))) +;;@ ((2i8:bv8) (if (sgt (x) (y)) (1i8:bv8) (0i8:bv8))) +;;@ ((3i8:bv8) (if (sgte (x) (y)) (1i8:bv8) (0i8:bv8))) +;;@ ((4i8:bv8) (if (slt (x) (y)) (1i8:bv8) (0i8:bv8))) +;;@ ((5i8:bv8) (if (slte (x) (y)) (1i8:bv8) (0i8:bv8))) +;;@ ((6i8:bv8) (if (ugt (x) (y)) (1i8:bv8) (0i8:bv8))) +;;@ ((7i8:bv8) (if (ugte (x) (y)) (1i8:bv8) (0i8:bv8))) +;;@ ((8i8:bv8) (if (ult (x) (y)) (1i8:bv8) (0i8:bv8))) +;;@ ((9i8:bv8) (if (ulte (x) (y)) (1i8:bv8) (0i8:bv8))) +;;@ ))) +;;@ (assert +;;@ (ulte (c) (9i8:bv8)), +;;@ +;;@ (|| (= (in_ty) (8i8: isleType)) +;;@ (|| (= (in_ty) (16i8: isleType)) +;;@ (|| (= (in_ty) (32i8: isleType)) +;;@ (= (in_ty) (64i8: isleType))))), +;;@ +;;@ (= (in_ty) (widthof (x))), +;;@ (= (in_ty) (widthof (y))), +;;@ (= (out_ty) (8i8: isleType)), +;;@ )) (decl lower_icmp_into_reg (IntCC Value Value Type Type) ValueRegs) (decl lower_icmp_into_flags (IntCC Value Value Type) FlagsAndCC) (decl lower_icmp_const (IntCC Value u64 Type) FlagsAndCC) @@ -3941,7 +4062,7 @@ (rule (lower_extend_op $I16 $false) (ExtendOp.UXTH)) ;; Integers <= 64-bits. -(rule -2 (lower_icmp_into_reg cond rn rm in_ty out_ty) +(rule lower_icmp_into_reg_8_16_32_64 -2 (lower_icmp_into_reg cond rn rm in_ty out_ty) (if (ty_int_ref_scalar_64 in_ty)) (let ((cc Cond (cond_code cond))) (flags_and_cc_to_bool (lower_icmp cond rn rm in_ty)))) diff --git a/cranelift/codegen/src/isa/aarch64/lower.isle b/cranelift/codegen/src/isa/aarch64/lower.isle index 02fc6a55f7a8..d7199a33e623 100644 --- a/cranelift/codegen/src/isa/aarch64/lower.isle +++ b/cranelift/codegen/src/isa/aarch64/lower.isle @@ -1615,10 +1615,10 @@ ;; then using a `clz` instruction since the tail zeros are the same as the ;; leading zeros of the reversed value. -(rule (lower (has_type $I8 (ctz x))) +(rule ctz_8 (lower (has_type $I8 (ctz x))) (a64_clz $I32 (orr_imm $I32 (rbit $I32 x) (u64_into_imm_logic $I32 0x800000)))) -(rule (lower (has_type $I16 (ctz x))) +(rule ctz_16 (lower (has_type $I16 (ctz x))) (a64_clz $I32 (orr_imm $I32 (rbit $I32 x) (u64_into_imm_logic $I32 0x8000)))) (rule (lower (has_type $I128 (ctz x))) @@ -1627,7 +1627,7 @@ (hi Reg (rbit $I64 (value_regs_get val 1)))) (lower_clz128 (value_regs hi lo)))) -(rule -1 (lower (has_type ty (ctz x))) +(rule ctz_32_64 -1 (lower (has_type ty (ctz x))) (a64_clz ty (rbit ty x))) ;;;; Rules for `cls` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -1826,7 +1826,7 @@ (vec_size VectorSize (vector_size ty))) (value_reg (int_cmp_zero_swap cond rn vec_size)))) -(rule -1 (lower (icmp cond x @ (value_type in_ty) y)) +(rule icmp_8_16_32_64 -1 (lower (icmp cond x @ (value_type in_ty) y)) (lower_icmp_into_reg cond x y in_ty $I8)) ;;;; Rules for `trap` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/cranelift/isle/veri/veri_engine/tests/veri.rs b/cranelift/isle/veri/veri_engine/tests/veri.rs index b6d39e790f15..ec9bab49d708 100644 --- a/cranelift/isle/veri/veri_engine/tests/veri.rs +++ b/cranelift/isle/veri/veri_engine/tests/veri.rs @@ -953,7 +953,8 @@ fn test_broken_uextend() { }) } -// AVH TODO: this rule requires priorities to be correct! +// AVH TODO: this rule requires priorities to be correct for narrow cases +// https://github.com/avanhatt/wasmtime/issues/32 #[test] fn test_named_clz_32_64() { run_and_retry(|| { @@ -1059,7 +1060,8 @@ fn test_broken_clz_n6() { }) } -// AVH TODO: need priorities for correctness +// AVH TODO: this rule requires priorities to be correct for narrow cases +// https://github.com/avanhatt/wasmtime/issues/32 #[test] fn test_named_cls_32_64() { run_and_retry(|| { @@ -1163,14 +1165,14 @@ fn test_broken_cls_16() { } #[test] -fn test_ctz() { +fn test_named_ctz_32_64() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/ctz/ctz.isle", - "ctz".to_string(), + test_aarch64_rule_with_lhs_termname( + "ctz_32_64", + "ctz", vec![ - (Bitwidth::I8, VerificationResult::InapplicableRule), - (Bitwidth::I16, VerificationResult::InapplicableRule), + // (Bitwidth::I8, VerificationResult::InapplicableRule), + // (Bitwidth::I16, VerificationResult::InapplicableRule), (Bitwidth::I32, VerificationResult::Success), (Bitwidth::I64, VerificationResult::Success), ], @@ -1179,11 +1181,11 @@ fn test_ctz() { } #[test] -fn test_ctz8() { +fn test_named_ctz_8() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/ctz/ctz8.isle", - "ctz".to_string(), + test_aarch64_rule_with_lhs_termname( + "ctz_8", + "ctz", vec![ (Bitwidth::I8, VerificationResult::Success), (Bitwidth::I16, VerificationResult::InapplicableRule), @@ -1195,11 +1197,11 @@ fn test_ctz8() { } #[test] -fn test_ctz16() { +fn test_named_ctz_16() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/ctz/ctz16.isle", - "ctz".to_string(), + test_aarch64_rule_with_lhs_termname( + "ctz_16", + "ctz", vec![ (Bitwidth::I8, VerificationResult::InapplicableRule), (Bitwidth::I16, VerificationResult::Success), @@ -1211,7 +1213,7 @@ fn test_ctz16() { } #[test] -fn test_ctz_broken() { +fn test_broken_ctz_32_64() { run_and_retry(|| { test_from_file_with_lhs_termname( "./examples/broken/ctz/broken_ctz.isle", @@ -1233,7 +1235,7 @@ fn test_ctz_broken() { } #[test] -fn test_ctz8_broken() { +fn test_broken_ctz_8() { run_and_retry(|| { test_from_file_with_lhs_termname( "./examples/broken/ctz/broken_ctz8.isle", @@ -1249,7 +1251,7 @@ fn test_ctz8_broken() { } #[test] -fn test_ctz16_broken() { +fn test_broken_ctz_16() { run_and_retry(|| { test_from_file_with_lhs_termname( "./examples/broken/ctz/broken_ctz16.isle", @@ -2328,11 +2330,11 @@ fn test_if_let() { } #[test] -fn test_icmp_to_lower_icmp() { +fn test_named_icmp_8_16_32_64() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/icmp/icmp_to_lower_icmp.isle", - "icmp".to_string(), + test_aarch64_rule_with_lhs_termname( + "icmp_8_16_32_64", + "icmp", vec![ (Bitwidth::I8, VerificationResult::Success), (Bitwidth::I16, VerificationResult::Success), @@ -2344,11 +2346,11 @@ fn test_icmp_to_lower_icmp() { } #[test] -fn test_lower_icmp_into_reg() { +fn test_named_lower_icmp_into_reg_8_16_32_64() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/icmp/lower_icmp_into_reg.isle", - "lower_icmp_into_reg".to_string(), + test_aarch64_rule_with_lhs_termname( + "lower_icmp_into_reg_8_16_32_64", + "lower_icmp_into_reg", vec![ (Bitwidth::I8, VerificationResult::Success), (Bitwidth::I16, VerificationResult::Success), @@ -2439,6 +2441,8 @@ fn test_lower_icmp_into_reg_concrete_eq2() { }); } +// These fail to type check, rule is inapplicable because of priorities +// https://github.com/avanhatt/wasmtime/issues/32 #[test] fn test_lower_icmp_32_64() { run_and_retry(|| { @@ -2446,7 +2450,6 @@ fn test_lower_icmp_32_64() { "./examples/icmp/lower_icmp_32_64.isle", "lower_icmp".to_string(), vec![ - // These fail to type check, rule is inapplicable because of priorities // (Bitwidth::I8, VerificationResult::Failure(Counterexample { })), // (Bitwidth::I16, VerificationResult::Failure(Counterexample { })), (Bitwidth::I32, VerificationResult::Success), From d76e86fb13304ab3041aaf9088c23bf6f02eee3e Mon Sep 17 00:00:00 2001 From: Alexa VanHattum Date: Tue, 11 Apr 2023 22:07:01 -0400 Subject: [PATCH 22/30] more icmp --- cranelift/codegen/src/isa/aarch64/inst.isle | 27 +++++++++++++++++ cranelift/isle/veri/veri_engine/tests/veri.rs | 30 ++++++++++--------- 2 files changed, 43 insertions(+), 14 deletions(-) diff --git a/cranelift/codegen/src/isa/aarch64/inst.isle b/cranelift/codegen/src/isa/aarch64/inst.isle index 93345b9ef715..235d05efbae4 100644 --- a/cranelift/codegen/src/isa/aarch64/inst.isle +++ b/cranelift/codegen/src/isa/aarch64/inst.isle @@ -4041,6 +4041,33 @@ ;;@ )) (decl lower_icmp_into_reg (IntCC Value Value Type Type) ValueRegs) (decl lower_icmp_into_flags (IntCC Value Value Type) FlagsAndCC) +;;@ (spec (sig (args c, x, y, in_ty) (ret)) +;;@ (assume +;;@ (= (ret) +;;@ (| (shl (zero_ext (12i8: isleType) +;;@ (extract 67 64 +;;@ (if (&& (ugte (c) (2i8:bv8)) (ulte (c) (5i8:bv8))) +;;@ (if (<= (in_ty) (32i8:isleType)) +;;@ (subs (32i8:isleType) (sign_ext (regwidth) (x)) (y)) +;;@ (subs (64i8:isleType) (sign_ext (regwidth) (x)) (y)) +;;@ ) +;;@ (if (<= (in_ty) (32i8:isleType)) +;;@ (subs (32i8:isleType) (zero_ext (regwidth) (x)) (y)) +;;@ (subs (64i8:isleType) (zero_ext (regwidth) (x)) (y)) +;;@ ) +;;@ )) +;;@ ) +;;@ (8i12:bv12)) +;;@ (zero_ext (12i8: isleType) (c))) +;;@ )) +;;@ (assert +;;@ (ulte (c) (9i8:bv8)), +;;@ +;;@ (|| (= (in_ty) (32i8: isleType)) +;;@ (= (in_ty) (64i8: isleType))), +;;@ +;;@ (= (in_ty) (widthof (x))), +;;@ )) (decl lower_icmp_const (IntCC Value u64 Type) FlagsAndCC) ;; For most cases, `lower_icmp_into_flags` is the same as `lower_icmp`, ;; except for some I128 cases (see below). diff --git a/cranelift/isle/veri/veri_engine/tests/veri.rs b/cranelift/isle/veri/veri_engine/tests/veri.rs index ec9bab49d708..278f5ac39d03 100644 --- a/cranelift/isle/veri/veri_engine/tests/veri.rs +++ b/cranelift/isle/veri/veri_engine/tests/veri.rs @@ -2362,11 +2362,11 @@ fn test_named_lower_icmp_into_reg_8_16_32_64() { } #[test] -fn test_lower_icmp_into_reg_concrete_eq1() { +fn test_named_lower_icmp_into_reg_8_16_32_64_concrete_1() { run_and_retry(|| { - test_concrete_input_from_file_with_lhs_termname( - "./examples/icmp/lower_icmp_into_reg.isle", - "lower_icmp_into_reg".to_string(), + test_concrete_aarch64_rule_with_lhs_termname( + "lower_icmp_into_reg_8_16_32_64", + "lower_icmp_into_reg", false, ConcreteTest { termname: "lower_icmp_into_reg".to_string(), @@ -2402,11 +2402,11 @@ fn test_lower_icmp_into_reg_concrete_eq1() { } #[test] -fn test_lower_icmp_into_reg_concrete_eq2() { +fn test_named_lower_icmp_into_reg_8_16_32_64_concrete_2() { run_and_retry(|| { - test_concrete_input_from_file_with_lhs_termname( - "./examples/icmp/lower_icmp_into_reg.isle", - "lower_icmp_into_reg".to_string(), + test_concrete_aarch64_rule_with_lhs_termname( + "lower_icmp_into_reg_8_16_32_64", + "lower_icmp_into_reg", false, ConcreteTest { termname: "lower_icmp_into_reg".to_string(), @@ -2507,15 +2507,17 @@ fn test_lower_icmp_fits_in_16_unsigned() { }) } +// AVH TODO: this rule requires priorities to be correct for narrow cases +// https://github.com/avanhatt/wasmtime/issues/32 #[test] -fn test_lower_icmp_32_64_to_lower_icmp_const() { +fn test_named_lower_icmp_32_64_const() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/icmp/lower_icmp_32_64_to_lower_icmp_const.isle", - "lower_icmp".to_string(), + test_aarch64_rule_with_lhs_termname( + "lower_icmp_32_64_const", + "lower_icmp", vec![ - (Bitwidth::I8, VerificationResult::InapplicableRule), - (Bitwidth::I16, VerificationResult::InapplicableRule), + // (Bitwidth::I8, VerificationResult::InapplicableRule), + // (Bitwidth::I16, VerificationResult::InapplicableRule), (Bitwidth::I32, VerificationResult::Success), (Bitwidth::I64, VerificationResult::Success), ], From 1ce2ba299176b28df3f308fe012b404b8863cbc0 Mon Sep 17 00:00:00 2001 From: Alexa VanHattum Date: Tue, 11 Apr 2023 22:09:53 -0400 Subject: [PATCH 23/30] more icmp --- cranelift/codegen/src/isa/aarch64/inst.isle | 27 +++++++++++++++++++ cranelift/isle/veri/veri_engine/tests/veri.rs | 8 +++--- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/cranelift/codegen/src/isa/aarch64/inst.isle b/cranelift/codegen/src/isa/aarch64/inst.isle index 235d05efbae4..53dc53760ebb 100644 --- a/cranelift/codegen/src/isa/aarch64/inst.isle +++ b/cranelift/codegen/src/isa/aarch64/inst.isle @@ -1202,6 +1202,12 @@ Size64)) ;; Helper for calculating the `OperandSize` corresponding to a type +;;@ (spec (sig (args ty) (ret)) +;;@ (assume +;;@ (= (ret) +;;@ (if (<= (ty) (32i8:isleType)) +;;@ (32i8:isleType) +;;@ (64i8:isleType))))) (decl operand_size (Type) OperandSize) (rule 1 (operand_size (fits_in_32 _ty)) (OperandSize.Size32)) (rule (operand_size (fits_in_64 _ty)) (OperandSize.Size64)) @@ -2128,6 +2134,18 @@ (MInst.AluRRImm12 (ALUOp.AddS) size (writable_zero_reg) src1 src2))) +;; N: Set to 1 when the result of the operation is negative, cleared to 0 otherwise. +;; Z: Set to 1 when the result of the operation is zero, cleared to 0 otherwise. +;; C: Set to 1 when the operation results in a carry, or when a subtraction results in no borrow, cleared to 0 otherwise. +;; V: Set to 1 when the operation causes overflow, cleared to 0 otherwise. +;;@ (spec (sig (args ty, x, y) (ret)) +;;@ (assume +;;@ (= (ret) +;;@ (subs (ty) (x) (y)) +;;@ )) +;;@ (assert +;;@ (|| (= (ty) (32i8: isleType)) +;;@ (= (ty) (64i8: isleType))))) (decl cmp (OperandSize Reg Reg) ProducesFlags) (rule (cmp size src1 src2) (ProducesFlags.ProducesFlagsSideEffect @@ -3925,6 +3943,15 @@ (cc IntCC)))) ;; Helper constructor for `FlagsAndCC`. +;;@ (spec (sig (args pflags, c) (ret)) +;;@ (assume +;;@ (= (ret) (| (shl (zero_ext (12i8: isleType) +;;@ (extract 67 64 (pflags)) +;;@ ) +;;@ (8i12:bv12)) +;;@ (zero_ext (12i8: isleType) (c))) +;;@ ) +;;@ )) (decl flags_and_cc (ProducesFlags IntCC) FlagsAndCC) (rule (flags_and_cc flags cc) (FlagsAndCC.FlagsAndCC flags cc)) diff --git a/cranelift/isle/veri/veri_engine/tests/veri.rs b/cranelift/isle/veri/veri_engine/tests/veri.rs index 278f5ac39d03..cf4e9c6ffc83 100644 --- a/cranelift/isle/veri/veri_engine/tests/veri.rs +++ b/cranelift/isle/veri/veri_engine/tests/veri.rs @@ -2444,11 +2444,11 @@ fn test_named_lower_icmp_into_reg_8_16_32_64_concrete_2() { // These fail to type check, rule is inapplicable because of priorities // https://github.com/avanhatt/wasmtime/issues/32 #[test] -fn test_lower_icmp_32_64() { +fn test_named_lower_icmp_32_64() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/icmp/lower_icmp_32_64.isle", - "lower_icmp".to_string(), + test_aarch64_rule_with_lhs_termname( + "lower_icmp_32_64", + "lower_icmp", vec![ // (Bitwidth::I8, VerificationResult::Failure(Counterexample { })), // (Bitwidth::I16, VerificationResult::Failure(Counterexample { })), From 23c902ee2e26118bb66dc90023cf76a68ea26208 Mon Sep 17 00:00:00 2001 From: Alexa VanHattum Date: Tue, 11 Apr 2023 22:13:23 -0400 Subject: [PATCH 24/30] test_named_lower_icmp_8_16_signed --- cranelift/codegen/src/isa/aarch64/inst.isle | 36 +++++++++++++++++++ cranelift/isle/veri/veri_engine/tests/veri.rs | 14 ++++---- 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/cranelift/codegen/src/isa/aarch64/inst.isle b/cranelift/codegen/src/isa/aarch64/inst.isle index 53dc53760ebb..2eab1cf22667 100644 --- a/cranelift/codegen/src/isa/aarch64/inst.isle +++ b/cranelift/codegen/src/isa/aarch64/inst.isle @@ -2162,6 +2162,29 @@ (rule (cmp64_imm src1 src2) (cmp_imm (OperandSize.Size64) src1 src2)) +;; N: Set to 1 when the result of the operation is negative, cleared to 0 otherwise. +;; Z: Set to 1 when the result of the operation is zero, cleared to 0 otherwise. +;; C: Set to 1 when the operation results in a carry, or when a subtraction results in no borrow, cleared to 0 otherwise. +;; V: Set to 1 when the operation causes overflow, cleared to 0 otherwise. +;;@ (spec (sig (args ty, x, y, extend) (ret)) +;;@ (assume +;;@ (= (ret) +;;@ (subs (ty) (x) +;;@ (switch (extend) +;;@ ((0i8: bv3) (zero_ext (regwidth) (extract 7 0 (y)))) +;;@ ((1i8: bv3) (zero_ext (regwidth) (extract 15 0 (y)))) +;;@ ((2i8: bv3) (zero_ext (regwidth) (extract 31 0 (y)))) +;;@ ((3i8: bv3) (zero_ext (regwidth) (extract 63 0 (y)))) +;;@ ((4i8: bv3) (sign_ext (regwidth) (extract 7 0 (y)))) +;;@ ((5i8: bv3) (sign_ext (regwidth) (extract 15 0 (y)))) +;;@ ((6i8: bv3) (sign_ext (regwidth) (extract 31 0 (y)))) +;;@ ((7i8: bv3) (sign_ext (regwidth) (extract 63 0 (y)))) +;;@ ) +;;@ ) +;;@ )) +;;@ (assert +;;@ (|| (= (ty) (32i8: isleType)) (= (ty) (64i8: isleType))), +;;@ )) (decl cmp_extend (OperandSize Reg Reg ExtendOp) ProducesFlags) (rule (cmp_extend size src1 src2 extend) (ProducesFlags.ProducesFlagsSideEffect @@ -4109,6 +4132,19 @@ (vec_cmp rn rm in_ty cond))) ;; Determines the appropriate extend op given the value type and whether it is signed. +;;@ (spec (sig (args ty, b) (ret)) +;;@ (assume +;;@ (= (ret) +;;@ (switch (ty) +;;@ ((8i8: isleType) (if (b) (4i8: bv3) (0i8: bv3))) +;;@ ((16i8: isleType) (if (b) (5i8: bv3) (1i8: bv3))) +;;@ ))) +;;@ (assert +;;@ (|| (= (ty) (8i8: isleType)) +;;@ (|| (= (ty) (16i8: isleType)) +;;@ (|| (= (ty) (32i8: isleType)) +;;@ (= (ty) (64i8: isleType))))), +;;@ )) (decl lower_extend_op (Type bool) ExtendOp) (rule (lower_extend_op $I8 $true) (ExtendOp.SXTB)) (rule (lower_extend_op $I16 $true) (ExtendOp.SXTH)) diff --git a/cranelift/isle/veri/veri_engine/tests/veri.rs b/cranelift/isle/veri/veri_engine/tests/veri.rs index cf4e9c6ffc83..4ffc3fbfd86a 100644 --- a/cranelift/isle/veri/veri_engine/tests/veri.rs +++ b/cranelift/isle/veri/veri_engine/tests/veri.rs @@ -2441,7 +2441,7 @@ fn test_named_lower_icmp_into_reg_8_16_32_64_concrete_2() { }); } -// These fail to type check, rule is inapplicable because of priorities +// Narrow types fail because of rule priorities // https://github.com/avanhatt/wasmtime/issues/32 #[test] fn test_named_lower_icmp_32_64() { @@ -2450,8 +2450,8 @@ fn test_named_lower_icmp_32_64() { "lower_icmp_32_64", "lower_icmp", vec![ - // (Bitwidth::I8, VerificationResult::Failure(Counterexample { })), - // (Bitwidth::I16, VerificationResult::Failure(Counterexample { })), + (Bitwidth::I8, VerificationResult::Failure(Counterexample { })), + (Bitwidth::I16, VerificationResult::Failure(Counterexample { })), (Bitwidth::I32, VerificationResult::Success), (Bitwidth::I64, VerificationResult::Success), ], @@ -2460,11 +2460,11 @@ fn test_named_lower_icmp_32_64() { } #[test] -fn test_lower_icmp_fits_in_16_signed() { +fn test_named_lower_icmp_8_16_signed() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/icmp/lower_icmp_fits_in_16_signed.isle", - "lower_icmp".to_string(), + test_aarch64_rule_with_lhs_termname( + "lower_icmp_8_16_signed", + "lower_icmp", vec![ (Bitwidth::I8, VerificationResult::Success), (Bitwidth::I16, VerificationResult::Success), From 26c3079c7a3d67b96826cf640a10cb3751c57e42 Mon Sep 17 00:00:00 2001 From: Alexa VanHattum Date: Tue, 11 Apr 2023 22:21:23 -0400 Subject: [PATCH 25/30] icmp --- cranelift/codegen/src/isa/aarch64/inst.isle | 20 ++++++++-- cranelift/isle/veri/veri_engine/tests/veri.rs | 38 +++++++++++-------- 2 files changed, 38 insertions(+), 20 deletions(-) diff --git a/cranelift/codegen/src/isa/aarch64/inst.isle b/cranelift/codegen/src/isa/aarch64/inst.isle index 2eab1cf22667..9d46a3a44707 100644 --- a/cranelift/codegen/src/isa/aarch64/inst.isle +++ b/cranelift/codegen/src/isa/aarch64/inst.isle @@ -1686,6 +1686,8 @@ (decl imm_shift_from_u8 (u8) ImmShift) (extern constructor imm_shift_from_u8 imm_shift_from_u8) +;;@ (spec (sig (args arg) (ret)) +;;@ (assume (= (zero_ext (regwidth) (arg)) (ret)))) (decl imm12_from_u64 (Imm12) u64) (extern extractor imm12_from_u64 imm12_from_u64) @@ -2141,8 +2143,7 @@ ;;@ (spec (sig (args ty, x, y) (ret)) ;;@ (assume ;;@ (= (ret) -;;@ (subs (ty) (x) (y)) -;;@ )) +;;@ (subs (ty) (x) (y)))) ;;@ (assert ;;@ (|| (= (ty) (32i8: isleType)) ;;@ (= (ty) (64i8: isleType))))) @@ -2152,6 +2153,17 @@ (MInst.AluRRR (ALUOp.SubS) size (writable_zero_reg) src1 src2))) +;; N: Set to 1 when the result of the operation is negative, cleared to 0 otherwise. +;; Z: Set to 1 when the result of the operation is zero, cleared to 0 otherwise. +;; C: Set to 1 when the operation results in a carry, or when a subtraction results in no borrow, cleared to 0 otherwise. +;; V: Set to 1 when the operation causes overflow, cleared to 0 otherwise. +;;@ (spec (sig (args ty, x, y) (ret)) +;;@ (assume +;;@ (= (ret) +;;@ (subs (ty) (x) (zero_ext (regwidth) (y))))) +;;@ (assert +;;@ (|| (= (ty) (32i8: isleType)) +;;@ (= (ty) (64i8: isleType))))) (decl cmp_imm (OperandSize Reg Imm12) ProducesFlags) (rule (cmp_imm size src1 src2) (ProducesFlags.ProducesFlagsSideEffect @@ -4191,10 +4203,10 @@ (if-let (imm12_from_u64 imm) (u64_sub b 1)) (flags_and_cc (cmp_imm (operand_size ty) a imm) (IntCC.SignedGreaterThan))) -(rule -1 (lower_icmp_const cond rn (imm12_from_u64 c) ty) +(rule lower_icmp_const_32_64_imm -1 (lower_icmp_const cond rn (imm12_from_u64 c) ty) (if (ty_int_ref_scalar_64 ty)) (flags_and_cc (cmp_imm (operand_size ty) rn c) cond)) -(rule -2 (lower_icmp_const cond rn c ty) +(rule lower_icmp_const_32_64 -2 (lower_icmp_const cond rn c ty) (if (ty_int_ref_scalar_64 ty)) (flags_and_cc (cmp (operand_size ty) rn (imm ty (ImmExtend.Zero) c)) cond)) diff --git a/cranelift/isle/veri/veri_engine/tests/veri.rs b/cranelift/isle/veri/veri_engine/tests/veri.rs index 4ffc3fbfd86a..cc14bb57763f 100644 --- a/cranelift/isle/veri/veri_engine/tests/veri.rs +++ b/cranelift/isle/veri/veri_engine/tests/veri.rs @@ -2475,15 +2475,18 @@ fn test_named_lower_icmp_8_16_signed() { }) } +// TODO AVH: Currently fails because needs priorities to show this +// only applies to unsigned cond codes +// https://github.com/avanhatt/wasmtime/issues/32 #[test] -fn test_lower_icmp_fits_in_16_unsigned_imm() { +fn test_named_lower_icmp_8_16_unsigned_imm() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/icmp/lower_icmp_fits_in_16_unsigned_imm.isle", - "lower_icmp".to_string(), + test_aarch64_rule_with_lhs_termname( + "lower_icmp_8_16_unsigned_imm", + "lower_icmp", vec![ - (Bitwidth::I8, VerificationResult::Success), - (Bitwidth::I16, VerificationResult::Success), + // (Bitwidth::I8, VerificationResult::Success), + // (Bitwidth::I16, VerificationResult::Success), (Bitwidth::I32, VerificationResult::InapplicableRule), (Bitwidth::I64, VerificationResult::InapplicableRule), ], @@ -2491,15 +2494,18 @@ fn test_lower_icmp_fits_in_16_unsigned_imm() { }) } +// TODO AVH: Currently fails because needs priorities to show this +// only applies to unsigned cond codes +// https://github.com/avanhatt/wasmtime/issues/32 #[test] -fn test_lower_icmp_fits_in_16_unsigned() { +fn test_named_lower_icmp_8_16_unsigned() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/icmp/lower_icmp_fits_in_16_unsigned.isle", - "lower_icmp".to_string(), + test_aarch64_rule_with_lhs_termname( + "lower_icmp_8_16_unsigned", + "lower_icmp", vec![ - (Bitwidth::I8, VerificationResult::Success), - (Bitwidth::I16, VerificationResult::Success), + // (Bitwidth::I8, VerificationResult::Success), + // (Bitwidth::I16, VerificationResult::Success), (Bitwidth::I32, VerificationResult::InapplicableRule), (Bitwidth::I64, VerificationResult::InapplicableRule), ], @@ -2526,11 +2532,11 @@ fn test_named_lower_icmp_32_64_const() { } #[test] -fn test_lower_icmp_const_32_64_imm() { +fn test_named_lower_icmp_const_32_64_imm() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/icmp/lower_icmp_const_32_64_imm.isle", - "lower_icmp_const".to_string(), + test_aarch64_rule_with_lhs_termname( + "lower_icmp_const_32_64_imm", + "lower_icmp_const", vec![ (Bitwidth::I8, VerificationResult::InapplicableRule), (Bitwidth::I16, VerificationResult::InapplicableRule), From f198f24efdbb36baf607ee937348b11b1fddaab3 Mon Sep 17 00:00:00 2001 From: Alexa VanHattum Date: Tue, 11 Apr 2023 22:22:44 -0400 Subject: [PATCH 26/30] renaming --- .../iadd/updated_iadd_imm12neg_left.isle | 48 +++++++++++++++++++ .../iadd/updated_iadd_imm12neg_right.isle | 40 ++++++++++++++++ .../updated_imm12_from_negated_value.isle | 37 ++++++++++++++ 3 files changed, 125 insertions(+) create mode 100644 cranelift/isle/veri/veri_engine/examples/iadd/updated_iadd_imm12neg_left.isle create mode 100644 cranelift/isle/veri/veri_engine/examples/iadd/updated_iadd_imm12neg_right.isle create mode 100644 cranelift/isle/veri/veri_engine/examples/iadd/updated_imm12_from_negated_value.isle diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/updated_iadd_imm12neg_left.isle b/cranelift/isle/veri/veri_engine/examples/iadd/updated_iadd_imm12neg_left.isle new file mode 100644 index 000000000000..84523b5e4577 --- /dev/null +++ b/cranelift/isle/veri/veri_engine/examples/iadd/updated_iadd_imm12neg_left.isle @@ -0,0 +1,48 @@ +;;@ (spec (sig (args arg) (ret)) +;;@ (assume (= (arg) (ret)))) +(decl lower (Inst) InstOutput) + +(type MInst + (enum +)) + +;; We will represent this with a msb shift bit +;; and a 12 bit value +(type Imm12 (primitive Imm12)) + +(type ALUOp + (enum + (Sub) +)) + +;;@ (spec (sig (args ty, a, b) (r)) +;;@ (assume +;;@ (= (r) +;;@ (if (<= (ty) (32i8: isleType)) +;;@ (conv_to (regwidth) (- (extract 31 0 (a)) (zero_ext (32) (b)))) +;;@ (- (a) (zero_ext (regwidth) (b)))))) +;;@ (assert (|| (<= (bv2int (y)) (4094i0:isleType)) +;;@ (&& (<= (bv2int (y)) (16773119i0:isleType)) +;;@ (= (extract 2 0 (y)) (0i3:bv)) +;;@ ))) +;;@ ) +(decl sub_imm (Type Reg Imm12) Reg) +(rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) + +(decl alu_rr_imm12 (ALUOp Type Reg Imm12) Reg) +(extern constructor alu_rr_imm12 alu_rr_imm12) + +;; Note that 4095 = 0xfff and 16773120 = 0xfff000 +;;@ (spec (sig (args arg) (ret)) +;;@ (assume (|| (< (- (sign_ext (regwidth) (arg))) (4095i64:bv)) +;;@ (&& (< (- (sign_ext (regwidth) (arg))) (16773120i64:bv)) +;;@ (= (extract 2 0 (- (sign_ext (regwidth) (arg)))) (0i3:bv)) +;;@ )), +;;@ (= (ret) (extract 23 0 (- (sign_ext (regwidth) (arg))))) +;;@ )) +(decl pure imm12_from_negated_value (Value) Imm12) +(extern extractor imm12_from_negated_value imm12_from_negated_value) + +(rule 3 (lower (has_type (fits_in_64 ty) (iadd x y))) + (if-let imm12_neg (imm12_from_negated_value x)) + (sub_imm ty y imm12_neg)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/updated_iadd_imm12neg_right.isle b/cranelift/isle/veri/veri_engine/examples/iadd/updated_iadd_imm12neg_right.isle new file mode 100644 index 000000000000..d5d6206fd831 --- /dev/null +++ b/cranelift/isle/veri/veri_engine/examples/iadd/updated_iadd_imm12neg_right.isle @@ -0,0 +1,40 @@ +;;@ (spec (sig (args arg) (ret)) +;;@ (assume (= (arg) (ret)))) +(decl lower (Inst) InstOutput) + +(type MInst + (enum +)) + +;; We will represent this with a msb shift bit +;; and a 12 bit value +(type Imm12 (primitive Imm12)) + +(type ALUOp + (enum + (Sub) +)) + +;;@ (spec (sig (args ty, x, y) (ret)) +;;@ (assume (= (ret) (- (x) (zero_ext (regwidth) (y)))) +;;@ )) +(decl sub_imm (Type Reg Imm12) Reg) +(rule (sub_imm ty x y) (alu_rr_imm12 (ALUOp.Sub) ty x y)) + +(decl alu_rr_imm12 (ALUOp Type Reg Imm12) Reg) +(extern constructor alu_rr_imm12 alu_rr_imm12) + +;; Note that 4095 = 0xfff and 16773120 = 0xfff000 +;;@ (spec (sig (args arg) (ret)) +;;@ (assume (|| (< (- (sign_ext (regwidth) (arg))) (4095i64:bv)) +;;@ (&& (< (- (sign_ext (regwidth) (arg))) (16773120i64:bv)) +;;@ (= (extract 2 0 (- (sign_ext (regwidth) (arg)))) (0i3:bv)) +;;@ )), +;;@ (= (ret) (extract 23 0 (- (sign_ext (regwidth) (arg))))) +;;@ )) +(decl pure imm12_from_negated_value (Value) Imm12) +(extern extractor imm12_from_negated_value imm12_from_negated_value) + +(rule 2 (lower (has_type (fits_in_64 ty) (iadd x y))) + (if-let imm12_neg (imm12_from_negated_value y)) + (sub_imm ty x imm12_neg)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/iadd/updated_imm12_from_negated_value.isle b/cranelift/isle/veri/veri_engine/examples/iadd/updated_imm12_from_negated_value.isle new file mode 100644 index 000000000000..c1b0c27e2b07 --- /dev/null +++ b/cranelift/isle/veri/veri_engine/examples/iadd/updated_imm12_from_negated_value.isle @@ -0,0 +1,37 @@ +(type MInst + (enum +)) + +(type Imm12 (primitive Imm12)) + +;;@ (spec (sig (args arg) (ret)) +;;@ (assume (= (zero_ext (regwidth) (arg)) (ret)))) +(decl imm12_from_u64 (Imm12) u64) +(extern extractor imm12_from_u64 imm12_from_u64) + +;;@ (spec (sig (args arg) (ret)) +;;@ (assume (= (ret) (- (arg))))) +(decl pure i64_neg (i64) i64) +(extern constructor i64_neg i64_neg) + +;;@ (spec (sig (args ty, arg) (ret)) +;;@ (assume (= (ret) (sign_ext (regwidth) (conv_to (ty) (arg)))))) +(decl pure i64_sextend_imm64 (Type Imm64) i64) +(extern constructor i64_sextend_imm64 i64_sextend_imm64) + + ;; Conceptually the same as `imm12_from_value`, but tries negating the constant + ;; value (first sign-extending to handle narrow widths). + + ;; Note that 4095 = 0xfff and 16773120 = 0xfff000 +;;@ (spec (sig (args arg) (ret)) +;;@ (assume (|| (< (- (sign_ext (regwidth) (arg))) (4095i64:bv)) +;;@ (&& (< (- (sign_ext (regwidth) (arg))) (16773120i64:bv)) +;;@ (= (extract 2 0 (- (sign_ext (regwidth) (arg)))) (0i3:bv)) +;;@ )), +;;@ (= (ret) (extract 23 0 (- (sign_ext (regwidth) (arg))))) +;;@ )) + (decl pure imm12_from_negated_value (Value) Imm12) + (rule + (imm12_from_negated_value (has_type ty (iconst n))) + (if-let (imm12_from_u64 imm) (i64_as_u64 (i64_neg (i64_sextend_imm64 ty n)))) + imm) \ No newline at end of file From 775b5771c336223f1f78078787cd3a8eea44cc88 Mon Sep 17 00:00:00 2001 From: Alexa VanHattum Date: Tue, 11 Apr 2023 22:43:29 -0400 Subject: [PATCH 27/30] rest of icmp --- cranelift/codegen/src/clif_lower.isle | 12 ++++++++ cranelift/codegen/src/isa/aarch64/inst.isle | 30 +++++++++++-------- cranelift/isle/veri/veri_engine/src/solver.rs | 2 +- .../veri/veri_engine/src/type_inference.rs | 2 +- cranelift/isle/veri/veri_engine/tests/veri.rs | 26 ++++++++-------- 5 files changed, 45 insertions(+), 27 deletions(-) diff --git a/cranelift/codegen/src/clif_lower.isle b/cranelift/codegen/src/clif_lower.isle index be583578f4e9..5dcb8e432a45 100644 --- a/cranelift/codegen/src/clif_lower.isle +++ b/cranelift/codegen/src/clif_lower.isle @@ -79,6 +79,18 @@ ) ) +;;@ (spec (sig (args) (r)) (assume (= (r) (2i8:bv8)))) +;;decl IntCC.SignedGreaterThan + +;;@ (spec (sig (args) (r)) (assume (= (r) (3i8:bv8)))) +;;decl IntCC.SignedGreaterThanOrEqual + +;;@ (spec (sig (args) (r)) (assume (= (r) (6i8:bv8)))) +;;decl IntCC.UnsignedGreaterThan + +;;@ (spec (sig (args) (r)) (assume (= (r) (7i8:bv8)))) +;;decl IntCC.UnsignedGreaterThanOrEqual + ;;;; Enumerated Immediate: TrapCode ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (type TrapCode extern diff --git a/cranelift/codegen/src/isa/aarch64/inst.isle b/cranelift/codegen/src/isa/aarch64/inst.isle index 9d46a3a44707..4729ab1af363 100644 --- a/cranelift/codegen/src/isa/aarch64/inst.isle +++ b/cranelift/codegen/src/isa/aarch64/inst.isle @@ -3212,12 +3212,10 @@ (Sign) (Zero))) -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (0i1: isleType) (ret)))) +;;@ (spec (sig (args) (r)) (assume (= (r) (0i1:bv1)))) ;;decl ImmExtend.Zero -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (1i1: isleType) (ret)))) +;;@ (spec (sig (args) (r)) (assume (= (r) (1i1:bv1)))) ;;decl ImmExtend.Sign ;; Arguments: @@ -3230,13 +3228,19 @@ ;; Note that, unlike the convention in the AArch64 backend, this helper leaves ;; all bits in the destination register in a defined state, i.e. smaller types ;; such as `I8` are either sign- or zero-extended. -;;@ (spec (sig (args ty, ext, x) (ret)) -;;@ (assume (|| (= (ext) (0i0:isleType)) (= (ext) (1i0:isleType))), -;;@ (if (= (ext) (0i0:isleType)) -;;@ (= (ret) (zero_ext (regwidth) (conv_to (ty) (x)))) -;;@ (= (ret) (sign_ext (regwidth) (conv_to (ty) (x)))) -;;@ ) -;;@ )) +;;@ (spec (sig (args ty, e, x) (ret)) +;;@ (assume +;;@ (= (ret) +;;@ (switch (ty) +;;@ ((8i8: isleType) (if (= (e) (0i1:bv1)) (zero_ext (regwidth) (extract 7 0 (x))) (sign_ext (regwidth) (extract 7 0 (x))))) +;;@ ((16i8: isleType) (if (= (e) (0i1:bv1)) (zero_ext (regwidth) (extract 15 0 (x))) (sign_ext (regwidth) (extract 15 0 (x))))) +;;@ ((32i8: isleType) (if (= (e) (0i1:bv1)) (zero_ext (regwidth) (extract 32 0 (x))) (sign_ext (regwidth) (extract 32 0 (x))))) +;;@ ((64i8: isleType) (x))))) +;;@ (assert +;;@ (|| (= (ty) (8i8: isleType)) +;;@ (|| (= (ty) (16i8: isleType)) +;;@ (|| (= (ty) (32i8: isleType)) +;;@ (= (ty) (64i8: isleType))))))) (decl imm (Type ImmExtend u64) Reg) ;; Move wide immediate instructions; to simplify, we only match when we @@ -4192,12 +4196,12 @@ ;; A >= B + 1 ;; ==> A - 1 >= B ;; ==> A > B -(rule (lower_icmp_const (IntCC.UnsignedGreaterThanOrEqual) a b ty) +(rule lower_icmp_const_32_64_ugte (lower_icmp_const (IntCC.UnsignedGreaterThanOrEqual) a b ty) (if (ty_int_ref_scalar_64 ty)) (if-let $true (u64_is_odd b)) (if-let (imm12_from_u64 imm) (u64_sub b 1)) (flags_and_cc (cmp_imm (operand_size ty) a imm) (IntCC.UnsignedGreaterThan))) -(rule (lower_icmp_const (IntCC.SignedGreaterThanOrEqual) a b ty) +(rule lower_icmp_const_32_64_sgte (lower_icmp_const (IntCC.SignedGreaterThanOrEqual) a b ty) (if (ty_int_ref_scalar_64 ty)) (if-let $true (u64_is_odd b)) (if-let (imm12_from_u64 imm) (u64_sub b 1)) diff --git a/cranelift/isle/veri/veri_engine/src/solver.rs b/cranelift/isle/veri/veri_engine/src/solver.rs index 29cd0eb6b40a..e02bf6f4d355 100644 --- a/cranelift/isle/veri/veri_engine/src/solver.rs +++ b/cranelift/isle/veri/veri_engine/src/solver.rs @@ -453,7 +453,7 @@ impl SolverCtx { narrow_decl: SExpr, name: Option, ) -> SExpr { - let width = self.bitwidth.checked_sub(narrow_width).unwrap(); + let width = self.bitwidth.checked_sub(dbg!(narrow_width)).unwrap(); if width > 0 { let mut narrow_name = format!("narrow__{}", tyvar); let mut wide_name = format!("wide__{}", tyvar); diff --git a/cranelift/isle/veri/veri_engine/src/type_inference.rs b/cranelift/isle/veri/veri_engine/src/type_inference.rs index d8ef342a51a2..971e64da1016 100644 --- a/cranelift/isle/veri/veri_engine/src/type_inference.rs +++ b/cranelift/isle/veri/veri_engine/src/type_inference.rs @@ -1373,7 +1373,7 @@ fn add_isle_constraints( ), ("ValueRegs".to_owned(), annotation_ir::Type::BitVector), ("InstOutput".to_owned(), annotation_ir::Type::BitVector), - ("ImmExtend".to_owned(), annotation_ir::Type::Int), + ("ImmExtend".to_owned(), annotation_ir::Type::BitVectorWithWidth(1)), ( "ShiftOpAndAmt".to_owned(), annotation_ir::Type::BitVectorWithWidth(10), diff --git a/cranelift/isle/veri/veri_engine/tests/veri.rs b/cranelift/isle/veri/veri_engine/tests/veri.rs index cc14bb57763f..0c85f12f2910 100644 --- a/cranelift/isle/veri/veri_engine/tests/veri.rs +++ b/cranelift/isle/veri/veri_engine/tests/veri.rs @@ -2547,8 +2547,10 @@ fn test_named_lower_icmp_const_32_64_imm() { }) } +// AVH TODO: this rule requires priorities and a custom verification condition +// https://github.com/avanhatt/wasmtime/issues/32 #[test] -fn test_lower_icmp_const_32_64_sgte() { +fn test_named_lower_icmp_const_32_64_sgte() { // Note: only one distinct condition code is matched on, so need to disable // distinctness check run_and_retry(|| { @@ -2557,10 +2559,9 @@ fn test_lower_icmp_const_32_64_sgte() { term: "lower_icmp_const".to_string(), distinct_check: false, custom_verification_condition: None, - names: None, + names: Some(vec!["lower_icmp_const_32_64_sgte".to_string()]), }; - test_from_file_with_config( - "./examples/icmp/lower_icmp_const_32_64_sgte.isle", + test_aarch64_with_config( config, vec![ (Bitwidth::I8, VerificationResult::InapplicableRule), @@ -2579,8 +2580,10 @@ fn test_lower_icmp_const_32_64_sgte() { }) } +// AVH TODO: this rule requires priorities and a custom verification condition +// https://github.com/avanhatt/wasmtime/issues/32 #[test] -fn test_lower_icmp_const_32_64_ugte() { +fn test_named_lower_icmp_const_32_64_ugte() { // Note: only one distinct condition code is matched on, so need to disable // distinctness check run_and_retry(|| { @@ -2589,10 +2592,9 @@ fn test_lower_icmp_const_32_64_ugte() { term: "lower_icmp_const".to_string(), distinct_check: false, custom_verification_condition: None, - names: None, + names: Some(vec!["lower_icmp_const_32_64_ugte".to_string()]), }; - test_from_file_with_config( - "./examples/icmp/lower_icmp_const_32_64_ugte.isle", + test_aarch64_with_config( config, vec![ (Bitwidth::I8, VerificationResult::InapplicableRule), @@ -2612,11 +2614,11 @@ fn test_lower_icmp_const_32_64_ugte() { } #[test] -fn test_lower_icmp_const_32_64() { +fn test_named_lower_icmp_const_32_64() { run_and_retry(|| { - test_from_file_with_lhs_termname( - "./examples/icmp/lower_icmp_const_32_64.isle", - "lower_icmp_const".to_string(), + test_aarch64_rule_with_lhs_termname( + "lower_icmp_const_32_64", + "lower_icmp_const", vec![ (Bitwidth::I8, VerificationResult::InapplicableRule), (Bitwidth::I16, VerificationResult::InapplicableRule), From 29b8d628d459eac1764602672db6843afb5c762c Mon Sep 17 00:00:00 2001 From: Alexa VanHattum Date: Tue, 11 Apr 2023 22:46:57 -0400 Subject: [PATCH 28/30] fix test --- .../examples/broken/sdiv/broken_sdiv_safe_const.isle | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/sdiv/broken_sdiv_safe_const.isle b/cranelift/isle/veri/veri_engine/examples/broken/sdiv/broken_sdiv_safe_const.isle index c82b2c01f942..bb841fe1285a 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/sdiv/broken_sdiv_safe_const.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/sdiv/broken_sdiv_safe_const.isle @@ -14,13 +14,13 @@ (type ImmExtend (enum (Zero) - ;;(Sign) + (Sign) )) ;;@ (spec (sig (args) (ret)) -;;@ (assume (= (1i0: isleType) (ret)))) -(decl ImmExtend.Sign () ImmExtend) -(extern constructor ImmExtend.Sign ImmExtend.Sign) +;;@ (assume (= (1i1:bv1) (ret)))) +;;decl ImmExtend.Sign + (decl alu_rrr (ALUOp Type Reg Reg) Reg) (extern constructor alu_rrr alu_rrr) @@ -33,8 +33,8 @@ (rule (a64_udiv ty x y) (alu_rrr (ALUOp.UDiv) ty x y)) ;;@ (spec (sig (args ty, ext, x) (ret)) -;;@ (assume (|| (= (ext) (0i0:isleType)) (= (ext) (1i0:isleType))), -;;@ (if (= (ext) (0i0:isleType)) +;;@ (assume (|| (= (ext) (0i1:bv1)) (= (ext) (1i1:bv1))), +;;@ (if (= (ext) (0i1:bv1)) ;;@ (= (ret) (zero_ext (regwidth) (conv_to (ty) (x)))) ;;@ (= (ret) (sign_ext (regwidth) (conv_to (ty) (x)))) ;;@ ) From a663f527b0d7adad84794161b2d86bd50deb3455 Mon Sep 17 00:00:00 2001 From: Alexa VanHattum Date: Tue, 11 Apr 2023 22:49:13 -0400 Subject: [PATCH 29/30] fmt --- .../examples/broken/sdiv/broken_sdiv_safe_const.isle | 1 - cranelift/isle/veri/veri_engine/src/type_inference.rs | 5 ++++- cranelift/isle/veri/veri_engine/tests/veri.rs | 11 +++++++---- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/cranelift/isle/veri/veri_engine/examples/broken/sdiv/broken_sdiv_safe_const.isle b/cranelift/isle/veri/veri_engine/examples/broken/sdiv/broken_sdiv_safe_const.isle index bb841fe1285a..e87b12aaf050 100644 --- a/cranelift/isle/veri/veri_engine/examples/broken/sdiv/broken_sdiv_safe_const.isle +++ b/cranelift/isle/veri/veri_engine/examples/broken/sdiv/broken_sdiv_safe_const.isle @@ -21,7 +21,6 @@ ;;@ (assume (= (1i1:bv1) (ret)))) ;;decl ImmExtend.Sign - (decl alu_rrr (ALUOp Type Reg Reg) Reg) (extern constructor alu_rrr alu_rrr) diff --git a/cranelift/isle/veri/veri_engine/src/type_inference.rs b/cranelift/isle/veri/veri_engine/src/type_inference.rs index 971e64da1016..9a76a4f58311 100644 --- a/cranelift/isle/veri/veri_engine/src/type_inference.rs +++ b/cranelift/isle/veri/veri_engine/src/type_inference.rs @@ -1373,7 +1373,10 @@ fn add_isle_constraints( ), ("ValueRegs".to_owned(), annotation_ir::Type::BitVector), ("InstOutput".to_owned(), annotation_ir::Type::BitVector), - ("ImmExtend".to_owned(), annotation_ir::Type::BitVectorWithWidth(1)), + ( + "ImmExtend".to_owned(), + annotation_ir::Type::BitVectorWithWidth(1), + ), ( "ShiftOpAndAmt".to_owned(), annotation_ir::Type::BitVectorWithWidth(10), diff --git a/cranelift/isle/veri/veri_engine/tests/veri.rs b/cranelift/isle/veri/veri_engine/tests/veri.rs index 0c85f12f2910..0dcbc2c04855 100644 --- a/cranelift/isle/veri/veri_engine/tests/veri.rs +++ b/cranelift/isle/veri/veri_engine/tests/veri.rs @@ -2450,8 +2450,11 @@ fn test_named_lower_icmp_32_64() { "lower_icmp_32_64", "lower_icmp", vec![ - (Bitwidth::I8, VerificationResult::Failure(Counterexample { })), - (Bitwidth::I16, VerificationResult::Failure(Counterexample { })), + (Bitwidth::I8, VerificationResult::Failure(Counterexample {})), + ( + Bitwidth::I16, + VerificationResult::Failure(Counterexample {}), + ), (Bitwidth::I32, VerificationResult::Success), (Bitwidth::I64, VerificationResult::Success), ], @@ -2475,7 +2478,7 @@ fn test_named_lower_icmp_8_16_signed() { }) } -// TODO AVH: Currently fails because needs priorities to show this +// TODO AVH: Currently fails because needs priorities to show this // only applies to unsigned cond codes // https://github.com/avanhatt/wasmtime/issues/32 #[test] @@ -2494,7 +2497,7 @@ fn test_named_lower_icmp_8_16_unsigned_imm() { }) } -// TODO AVH: Currently fails because needs priorities to show this +// TODO AVH: Currently fails because needs priorities to show this // only applies to unsigned cond codes // https://github.com/avanhatt/wasmtime/issues/32 #[test] From 4f14be82b8f19c78104ac52456cb941c9902d96f Mon Sep 17 00:00:00 2001 From: Alexa VanHattum Date: Tue, 11 Apr 2023 22:50:07 -0400 Subject: [PATCH 30/30] files --- .../veri/veri_engine/examples/ctz/ctz.isle | 47 ----- .../veri/veri_engine/examples/ctz/ctz16.isle | 86 --------- .../veri/veri_engine/examples/ctz/ctz8.isle | 86 --------- .../examples/icmp/icmp_to_lower_icmp.isle | 37 ---- .../examples/icmp/lower_icmp_32_64.isle | 107 ----------- .../lower_icmp_32_64_to_lower_icmp_const.isle | 120 ------------ .../examples/icmp/lower_icmp_const_32_64.isle | 151 --------------- .../icmp/lower_icmp_const_32_64_imm.isle | 111 ----------- .../icmp/lower_icmp_const_32_64_sgte.isle | 127 ------------- .../icmp/lower_icmp_const_32_64_ugte.isle | 127 ------------- .../icmp/lower_icmp_fits_in_16_signed.isle | 174 ------------------ .../icmp/lower_icmp_fits_in_16_unsigned.isle | 167 ----------------- .../lower_icmp_fits_in_16_unsigned_imm.isle | 129 ------------- .../examples/icmp/lower_icmp_into_reg.isle | 173 ----------------- 14 files changed, 1642 deletions(-) delete mode 100644 cranelift/isle/veri/veri_engine/examples/ctz/ctz.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/ctz/ctz16.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/ctz/ctz8.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/icmp/icmp_to_lower_icmp.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_32_64.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_32_64_to_lower_icmp_const.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64_imm.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64_sgte.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64_ugte.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_fits_in_16_signed.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_fits_in_16_unsigned.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_fits_in_16_unsigned_imm.isle delete mode 100644 cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_into_reg.isle diff --git a/cranelift/isle/veri/veri_engine/examples/ctz/ctz.isle b/cranelift/isle/veri/veri_engine/examples/ctz/ctz.isle deleted file mode 100644 index 76765c995847..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/ctz/ctz.isle +++ /dev/null @@ -1,47 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst - (enum - (BitRR - (op BitOp)) -)) - -(type BitOp - (enum - (Clz) - (RBit) -)) - -(decl bit_rr (BitOp Type Reg) Reg) -(extern constructor bit_rr bit_rr) - -;;@ (spec (sig (args ty, a) (ret)) -;;@ (assume (= (ret) -;;@ (if (= (ty) (32i0:isleType)) -;;@ (a64clz (32i0:isleType) (a)) -;;@ (a64clz (64i0:isleType) (a)) -;;@ ) -;;@ ), -;;@ (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType))) -;;@ ) -;;@ ) -(decl a64_clz (Type Reg) Reg) -(rule (a64_clz ty x) (bit_rr (BitOp.Clz) ty x)) - -;;@ (spec (sig (args ty, a) (ret)) -;;@ (assume (= (ret) -;;@ (if (= (ty) (32i0:isleType)) -;;@ (a64rev (32i0:isleType) (a)) -;;@ (a64rev (64i0:isleType) (a)) -;;@ ) -;;@ ), -;;@ (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType))) -;;@ ) -;;@ ) -(decl rbit (Type Reg) Reg) -(rule (rbit ty x) (bit_rr (BitOp.RBit) ty x)) - -(rule -1 (lower (has_type ty (ctz x))) - (a64_clz ty (rbit ty x))) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/ctz/ctz16.isle b/cranelift/isle/veri/veri_engine/examples/ctz/ctz16.isle deleted file mode 100644 index 3ba32dd103c2..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/ctz/ctz16.isle +++ /dev/null @@ -1,86 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst - (enum - (BitRR - (op BitOp)) - (AluRRImmLogic - (alu_op ALUOp) - (size OperandSize) - (rd WritableReg) - (rn Reg) - (imml ImmLogic)) -)) - -(type ALUOp - (enum - (Orr) -)) - -(type BitOp - (enum - (Clz) - (RBit) -)) - -(type ImmLogic (primitive ImmLogic)) - -(type OperandSize extern - (enum Size32 - Size64)) - -(decl operand_size (Type) OperandSize) -(rule (operand_size (fits_in_32 _ty)) (OperandSize.Size32)) -(rule (operand_size (fits_in_64 _ty)) (OperandSize.Size64)) - -(decl bit_rr (BitOp Type Reg) Reg) -(extern constructor bit_rr bit_rr) - -(decl alu_rr_imm_logic (ALUOp Type Reg ImmLogic) Reg) -(rule (alu_rr_imm_logic op ty src imm) - (let ((dst WritableReg (temp_writable_reg $I64)) - (_ Unit (emit (MInst.AluRRImmLogic op (operand_size ty) dst src imm)))) - dst)) - -;;@ (spec (sig (args ty, a) (ret)) -;;@ (assume (= (ret) -;;@ (if (= (ty) (32i0:isleType)) -;;@ (a64clz (32i0:isleType) (a)) -;;@ (a64clz (64i0:isleType) (a)) -;;@ ) -;;@ ), -;;@ (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType))) -;;@ ) -;;@ ) -(decl a64_clz (Type Reg) Reg) -(rule (a64_clz ty x) (bit_rr (BitOp.Clz) ty x)) - -;;@ (spec (sig (args ty, a, b) (ret)) -;;@ (assume (= (ret) (| (a) (conv_to (regwidth) (b)))))) -(decl orr_imm (Type Reg ImmLogic) Reg) -(rule (orr_imm ty x y) (alu_rr_imm_logic (ALUOp.Orr) ty x y)) - -;;@ (spec (sig (args ty, a) (ret)) -;;@ (assume (= (ret) -;;@ (if (= (ty) (32i0:isleType)) -;;@ (a64rev (32i0:isleType) (a)) -;;@ (a64rev (64i0:isleType) (a)) -;;@ ) -;;@ ), -;;@ (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType))) -;;@ ) -;;@ ) -(decl rbit (Type Reg) Reg) -(rule (rbit ty x) (bit_rr (BitOp.RBit) ty x)) - -;;@ (spec (sig (args ty, a) (ret)) -;;@ (assume (= (a) (ret)), -;;@ (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType))) -;;@ )) -(decl u64_into_imm_logic (Type u64) ImmLogic) -(extern constructor u64_into_imm_logic u64_into_imm_logic) - -(rule (lower (has_type $I16 (ctz x))) - (a64_clz $I32 (orr_imm $I32 (rbit $I32 x) (u64_into_imm_logic $I32 0x8000)))) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/ctz/ctz8.isle b/cranelift/isle/veri/veri_engine/examples/ctz/ctz8.isle deleted file mode 100644 index 0a0cdb596706..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/ctz/ctz8.isle +++ /dev/null @@ -1,86 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst - (enum - (BitRR - (op BitOp)) - (AluRRImmLogic - (alu_op ALUOp) - (size OperandSize) - (rd WritableReg) - (rn Reg) - (imml ImmLogic)) -)) - -(type ALUOp - (enum - (Orr) -)) - -(type BitOp - (enum - (Clz) - (RBit) -)) - -(type ImmLogic (primitive ImmLogic)) - -(type OperandSize extern - (enum Size32 - Size64)) - -(decl operand_size (Type) OperandSize) -(rule (operand_size (fits_in_32 _ty)) (OperandSize.Size32)) -(rule (operand_size (fits_in_64 _ty)) (OperandSize.Size64)) - -(decl bit_rr (BitOp Type Reg) Reg) -(extern constructor bit_rr bit_rr) - -(decl alu_rr_imm_logic (ALUOp Type Reg ImmLogic) Reg) -(rule (alu_rr_imm_logic op ty src imm) - (let ((dst WritableReg (temp_writable_reg $I64)) - (_ Unit (emit (MInst.AluRRImmLogic op (operand_size ty) dst src imm)))) - dst)) - -;;@ (spec (sig (args ty, a) (ret)) -;;@ (assume (= (ret) -;;@ (if (= (ty) (32i0:isleType)) -;;@ (a64clz (32i0:isleType) (a)) -;;@ (a64clz (64i0:isleType) (a)) -;;@ ) -;;@ ), -;;@ (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType))) -;;@ ) -;;@ ) -(decl a64_clz (Type Reg) Reg) -(rule (a64_clz ty x) (bit_rr (BitOp.Clz) ty x)) - -;;@ (spec (sig (args ty, a, b) (ret)) -;;@ (assume (= (ret) (| (a) (conv_to (regwidth) (b)))))) -(decl orr_imm (Type Reg ImmLogic) Reg) -(rule (orr_imm ty x y) (alu_rr_imm_logic (ALUOp.Orr) ty x y)) - -;;@ (spec (sig (args ty, a) (ret)) -;;@ (assume (= (ret) -;;@ (if (= (ty) (32i0:isleType)) -;;@ (a64rev (32i0:isleType) (a)) -;;@ (a64rev (64i0:isleType) (a)) -;;@ ) -;;@ ), -;;@ (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType))) -;;@ ) -;;@ ) -(decl rbit (Type Reg) Reg) -(rule (rbit ty x) (bit_rr (BitOp.RBit) ty x)) - -;;@ (spec (sig (args ty, a) (ret)) -;;@ (assume (= (a) (ret)), -;;@ (|| (= (ty) (32i0:isleType)) (= (ty) (64i0:isleType))) -;;@ )) -(decl u64_into_imm_logic (Type u64) ImmLogic) -(extern constructor u64_into_imm_logic u64_into_imm_logic) - -(rule (lower (has_type $I8 (ctz x))) - (a64_clz $I32 (orr_imm $I32 (rbit $I32 x) (u64_into_imm_logic $I32 0x800000)))) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/icmp/icmp_to_lower_icmp.isle b/cranelift/isle/veri/veri_engine/examples/icmp/icmp_to_lower_icmp.isle deleted file mode 100644 index 912fe12fd0da..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/icmp/icmp_to_lower_icmp.isle +++ /dev/null @@ -1,37 +0,0 @@ -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl lower (Inst) InstOutput) - -(type MInst - (enum) -) - -;;@ (spec (sig (args c, x, y, in_ty, out_ty) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (switch (c) -;;@ ((0i8:bv8) (if (= (x) (y)) (1i8:bv8) (0i8:bv8))) -;;@ ((1i8:bv8) (if (! (= (x) (y))) (1i8:bv8) (0i8:bv8))) -;;@ ((2i8:bv8) (if (sgt (x) (y)) (1i8:bv8) (0i8:bv8))) -;;@ ((3i8:bv8) (if (sgte (x) (y)) (1i8:bv8) (0i8:bv8))) -;;@ ((4i8:bv8) (if (slt (x) (y)) (1i8:bv8) (0i8:bv8))) -;;@ ((5i8:bv8) (if (slte (x) (y)) (1i8:bv8) (0i8:bv8))) -;;@ ((6i8:bv8) (if (ugt (x) (y)) (1i8:bv8) (0i8:bv8))) -;;@ ((7i8:bv8) (if (ugte (x) (y)) (1i8:bv8) (0i8:bv8))) -;;@ ((8i8:bv8) (if (ult (x) (y)) (1i8:bv8) (0i8:bv8))) -;;@ ((9i8:bv8) (if (ulte (x) (y)) (1i8:bv8) (0i8:bv8))) -;;@ )), -;;@ (|| (= (in_ty) (8i8: isleType)) -;;@ (|| (= (in_ty) (16i8: isleType)) -;;@ (|| (= (in_ty) (32i8: isleType)) -;;@ (= (in_ty) (64i8: isleType))))), -;;@ -;;@ (= (in_ty) (widthof (x))), -;;@ (= (in_ty) (widthof (y))), -;;@ (= (out_ty) (8i8: isleType)), -;;@ )) -(decl lower_icmp_into_reg (IntCC Value Value Type Type) ValueRegs) -(extern constructor lower_icmp_into_reg lower_icmp_into_reg) - -(rule -1 (lower (icmp cond x @ (value_type in_ty) y)) - (lower_icmp_into_reg cond x y in_ty $I8)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_32_64.isle b/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_32_64.isle deleted file mode 100644 index 8d500ce8cfd5..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_32_64.isle +++ /dev/null @@ -1,107 +0,0 @@ -(type MInst - (enum) -) - -(type OperandSize extern - (enum Size32 - Size64)) - -;; Helper for calculating the `OperandSize` corresponding to a type -;;@ (spec (sig (args ty) (ret)) -;;@ (assume (= (ret) -;;@ (if (<= (ty) (32i8:isleType)) -;;@ (32i8:isleType) -;;@ (64i8:isleType))), -;;@ )) -(decl operand_size (Type) OperandSize) -(rule (operand_size (fits_in_32 _ty)) (OperandSize.Size32)) -(rule (operand_size (fits_in_64 _ty)) (OperandSize.Size64)) - -;; A tuple of `ProducesFlags` and `IntCC`. -(type FlagsAndCC (enum (FlagsAndCC (flags ProducesFlags) - (cc IntCC)))) - -(type Cond extern - (enum - (Eq) - (Ne) - (Hs) - (Lo) - (Mi) - (Pl) - (Vs) - (Vc) - (Hi) - (Ls) - (Ge) - (Lt) - (Gt) - (Le) - (Al) - (Nv) -)) - -;;@ (spec (sig (args c, x, y, in_ty) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (| (shl (zero_ext (12i8: isleType) -;;@ (extract 67 64 -;;@ (if (&& (ugte (c) (2i8:bv8)) (ulte (c) (5i8:bv8))) -;;@ (if (<= (in_ty) (32i8:isleType)) -;;@ (subs (32i8:isleType) (sign_ext (regwidth) (x)) (sign_ext (regwidth) (y))) -;;@ (subs (64i8:isleType) (sign_ext (regwidth) (x)) (sign_ext (regwidth) (y))) -;;@ ) -;;@ (if (<= (in_ty) (32i8:isleType)) -;;@ (subs (32i8:isleType) (zero_ext (regwidth) (x)) (zero_ext (regwidth) (y))) -;;@ (subs (64i8:isleType) (zero_ext (regwidth) (x)) (zero_ext (regwidth) (y))) -;;@ ) -;;@ )) -;;@ ) -;;@ (8i12:bv12)) -;;@ (zero_ext (12i8: isleType) (c))) -;;@ ), -;;@ -;;@ (ulte (c) (9i8:bv8)), -;;@ -;;@ (|| (= (in_ty) (8i8: isleType)) -;;@ (|| (= (in_ty) (16i8: isleType)) -;;@ (|| (= (in_ty) (32i8: isleType)) -;;@ (= (in_ty) (64i8: isleType))))), -;;@ -;;@ (= (in_ty) (widthof (x))), -;;@ (= (in_ty) (widthof (y))), -;;@ )) -(decl lower_icmp (IntCC Value Value Type) FlagsAndCC) -(extern extractor lower_icmp lower_icmp) - -;;@ (spec (sig (args pflags, c) (ret)) -;;@ (assume -;;@ (= (ret) (| (shl (zero_ext (12i8: isleType) -;;@ (extract 67 64 (pflags)) -;;@ ) -;;@ (8i12:bv12)) -;;@ (zero_ext (12i8: isleType) (c))) -;;@ ), -;;@ )) -(decl flags_and_cc (ProducesFlags IntCC) FlagsAndCC) -(extern constructor flags_and_cc flags_and_cc_to_bool) - -;; N: Set to 1 when the result of the operation is negative, cleared to 0 otherwise. -;; Z: Set to 1 when the result of the operation is zero, cleared to 0 otherwise. -;; C: Set to 1 when the operation results in a carry, or when a subtraction results in no borrow, cleared to 0 otherwise. -;; V: Set to 1 when the operation causes overflow, cleared to 0 otherwise. -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (subs (ty) (x) (y)) -;;@ ), -;;@ (|| (= (ty) (32i8: isleType)) -;;@ (= (ty) (64i8: isleType))), -;;@ )) -(decl cmp (OperandSize Reg Reg) ProducesFlags) -(extern constructor cmp cmp) - -;; This rule ONLY applies for ty == 32, ty == 64, due to priorities -(rule -4 (lower_icmp cond rn rm ty) - (if (ty_int_ref_scalar_64 ty)) - (flags_and_cc (cmp (operand_size ty) rn rm) cond)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_32_64_to_lower_icmp_const.isle b/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_32_64_to_lower_icmp_const.isle deleted file mode 100644 index b31df67c5272..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_32_64_to_lower_icmp_const.isle +++ /dev/null @@ -1,120 +0,0 @@ -(type MInst - (enum) -) - -;; A tuple of `ProducesFlags` and `IntCC`. -(type FlagsAndCC (enum (FlagsAndCC (flags ProducesFlags) - (cc IntCC)))) - -(type Cond extern - (enum - (Eq) - (Ne) - (Hs) - (Lo) - (Mi) - (Pl) - (Vs) - (Vc) - (Hi) - (Ls) - (Ge) - (Lt) - (Gt) - (Le) - (Al) - (Nv) -)) - - -;; N: Set to 1 when the result of the operation is negative -;; Z: Set to 1 when the result of the operation is zero -;; C: Set to 1 when the operation results in a carry, or when a subtraction results in no borrow -;; V: Set to 1 when the operation causes overflow - -;; Concat the 4 bits of flags to 8 bits with the CC, for 12 bits -;; | 11 10 9 8 | 7 .......... 0| -;; [ N | Z | C | V | ... CC ... ] - -;; For the intermediate term, use the 64b version of subs for all widths -;; Zero- or sign- extend based on the condition code -;; Condition codes that require signed: 2i8, 3i8, 4i8, 5i8 - - -;; NOTE: due to rule priorities, only applies to 32 and 64 - -;; (0i8:bv8) = -;; (1i8:bv8) != -;; (2i8:bv8) sgt -;; (3i8:bv8) sgte -;; (4i8:bv8) slt -;; (5i8:bv8) slte -;; (6i8:bv8) ugt -;; (7i8:bv8) ugte -;; (8i8:bv8) ult -;; (9i8:bv8) ulte -;;@ (spec (sig (args c, x, y, in_ty) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (| (shl (zero_ext (12i8: isleType) -;;@ (extract 67 64 -;;@ (if (&& (ugte (c) (2i8:bv8)) (ulte (c) (5i8:bv8))) -;;@ (if (<= (in_ty) (32i8:isleType)) -;;@ (subs (32i8:isleType) (sign_ext (regwidth) (x)) (sign_ext (regwidth) (y))) -;;@ (subs (64i8:isleType) (sign_ext (regwidth) (x)) (sign_ext (regwidth) (y))) -;;@ ) -;;@ (if (<= (in_ty) (32i8:isleType)) -;;@ (subs (32i8:isleType) (zero_ext (regwidth) (x)) (zero_ext (regwidth) (y))) -;;@ (subs (64i8:isleType) (zero_ext (regwidth) (x)) (zero_ext (regwidth) (y))) -;;@ ) -;;@ )) -;;@ ) -;;@ (8i12:bv12)) -;;@ (zero_ext (12i8: isleType) (c))) -;;@ ), -;;@ -;;@ (ulte (c) (9i8:bv8)), -;;@ -;;@ (|| (= (in_ty) (32i8: isleType)) -;;@ (= (in_ty) (64i8: isleType))), -;;@ -;;@ (= (in_ty) (widthof (x))), -;;@ (= (in_ty) (widthof (y))), -;;@ )) -(decl lower_icmp (IntCC Value Value Type) FlagsAndCC) - -;;@ (spec (sig (args c, x, y, in_ty) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (| (shl (zero_ext (12i8: isleType) -;;@ (extract 67 64 -;;@ (if (&& (ugte (c) (2i8:bv8)) (ulte (c) (5i8:bv8))) -;;@ (if (<= (in_ty) (32i8:isleType)) -;;@ (subs (32i8:isleType) (sign_ext (regwidth) (x)) (y)) -;;@ (subs (64i8:isleType) (sign_ext (regwidth) (x)) (y)) -;;@ ) -;;@ (if (<= (in_ty) (32i8:isleType)) -;;@ (subs (32i8:isleType) (zero_ext (regwidth) (x)) (y)) -;;@ (subs (64i8:isleType) (zero_ext (regwidth) (x)) (y)) -;;@ ) -;;@ )) -;;@ ) -;;@ (8i12:bv12)) -;;@ (zero_ext (12i8: isleType) (c))) -;;@ ), -;;@ -;;@ (ulte (c) (9i8:bv8)), -;;@ -;;@ (|| (= (in_ty) (8i8: isleType)) -;;@ (|| (= (in_ty) (16i8: isleType)) -;;@ (|| (= (in_ty) (32i8: isleType)) -;;@ (= (in_ty) (64i8: isleType))))), -;;@ -;;@ (= (in_ty) (widthof (x))), -;;@ )) -(decl lower_icmp_const (IntCC Value u64 Type) FlagsAndCC) -(extern constructor lower_icmp_const lower_icmp_const) - -(rule -3 (lower_icmp cond rn (u64_from_iconst c) ty) - (if (ty_int_ref_scalar_64 ty)) - (lower_icmp_const cond rn c ty)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64.isle b/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64.isle deleted file mode 100644 index da36bfe27c3c..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64.isle +++ /dev/null @@ -1,151 +0,0 @@ -(type MInst - (enum) -) - -(type Imm12 (primitive Imm12)) - -(type OperandSize extern - (enum Size32 - Size64)) - -;; Helper for calculating the `OperandSize` corresponding to a type -;;@ (spec (sig (args ty) (ret)) -;;@ (assume (= (ret) -;;@ (if (<= (ty) (32i8:isleType)) -;;@ (32i8:isleType) -;;@ (64i8:isleType))), -;;@ )) -(decl operand_size (Type) OperandSize) -(rule (operand_size (fits_in_32 _ty)) (OperandSize.Size32)) -(rule (operand_size (fits_in_64 _ty)) (OperandSize.Size64)) - -;; A tuple of `ProducesFlags` and `IntCC`. -(type FlagsAndCC (enum (FlagsAndCC (flags ProducesFlags) - (cc IntCC)))) - -(type Cond extern - (enum - (Eq) - (Ne) - (Hs) - (Lo) - (Mi) - (Pl) - (Vs) - (Vc) - (Hi) - (Ls) - (Ge) - (Lt) - (Gt) - (Le) - (Al) - (Nv) -)) - -;; NOTE: due to rule priorities, only applies to 32 and 64 - -;;@ (spec (sig (args c, x, y, in_ty) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (| (shl (zero_ext (12i8: isleType) -;;@ (extract 67 64 -;;@ (if (&& (ugte (c) (2i8:bv8)) (ulte (c) (5i8:bv8))) -;;@ (if (<= (in_ty) (32i8:isleType)) -;;@ (subs (32i8:isleType) (sign_ext (regwidth) (x)) (y)) -;;@ (subs (64i8:isleType) (sign_ext (regwidth) (x)) (y)) -;;@ ) -;;@ (if (<= (in_ty) (32i8:isleType)) -;;@ (subs (32i8:isleType) (zero_ext (regwidth) (x)) (y)) -;;@ (subs (64i8:isleType) (zero_ext (regwidth) (x)) (y)) -;;@ ) -;;@ )) -;;@ ) -;;@ (8i12:bv12)) -;;@ (zero_ext (12i8: isleType) (c))) -;;@ ), -;;@ -;;@ (ulte (c) (9i8:bv8)), -;;@ -;;@ (|| (= (in_ty) (32i8: isleType)) -;;@ (= (in_ty) (64i8: isleType))), -;;@ -;;@ (= (in_ty) (widthof (x))), -;;@ )) -(decl lower_icmp_const (IntCC Value u64 Type) FlagsAndCC) - -;;@ (spec (sig (args pflags, c) (ret)) -;;@ (assume -;;@ (= (ret) (| (shl (zero_ext (12i8: isleType) -;;@ (extract 67 64 (pflags)) -;;@ ) -;;@ (8i12:bv12)) -;;@ (zero_ext (12i8: isleType) (c))) -;;@ ), -;;@ )) -(decl flags_and_cc (ProducesFlags IntCC) FlagsAndCC) -(extern constructor flags_and_cc flags_and_cc_to_bool) - - -;; N: Set to 1 when the result of the operation is negative, cleared to 0 otherwise. -;; Z: Set to 1 when the result of the operation is zero, cleared to 0 otherwise. -;; C: Set to 1 when the operation results in a carry, or when a subtraction results in no borrow, cleared to 0 otherwise. -;; V: Set to 1 when the operation causes overflow, cleared to 0 otherwise. -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (subs (ty) (x) (y)) -;;@ ), -;;@ (|| (= (ty) (32i8: isleType)) -;;@ (= (ty) (64i8: isleType))), -;;@ )) -(decl cmp (OperandSize Reg Reg) ProducesFlags) -(extern constructor cmp cmp) - -;; Arguments: -;; * Immediate type -;; * Way to extend the immediate value to the full width of the destination -;; register -;; * Immediate value - only the bits that fit within the type are used and -;; extended, while the rest are ignored -;; -;; Note that, unlike the convention in the AArch64 backend, this helper leaves -;; all bits in the destination register in a defined state, i.e. smaller types -;; such as `I8` are either sign- or zero-extended. -;;@ (spec (sig (args ty, e, x) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (switch (ty) -;;@ ((8i8: isleType) (if (= (e) (0i1: isleType)) (zero_ext (regwidth) (extract 7 0 (x))) (sign_ext (regwidth) (extract 7 0 (x))))) -;;@ ((16i8: isleType) (if (= (e) (0i1: isleType)) (zero_ext (regwidth) (extract 15 0 (x))) (sign_ext (regwidth) (extract 15 0 (x))))) -;;@ ((32i8: isleType) (if (= (e) (0i1: isleType)) (zero_ext (regwidth) (extract 32 0 (x))) (sign_ext (regwidth) (extract 32 0 (x))))) -;;@ ((64i8: isleType) (x)) -;;@ ) -;;@ ), -;;@ (|| (= (ty) (8i8: isleType)) -;;@ (|| (= (ty) (16i8: isleType)) -;;@ (|| (= (ty) (32i8: isleType)) -;;@ (= (ty) (64i8: isleType))))), -;;@ )) -(decl imm (Type ImmExtend u64) Reg) -(extern constructor imm imm) - -;; Model ImmExtend as an Int, where -;; Sign == 1 and Zero == 0 -(type ImmExtend - (enum - (Zero) - (Sign) -)) - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (0i1: isleType) (ret)))) -;;decl ImmExtend.Zero - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (1i1: isleType) (ret)))) -;;decl ImmExtend.Sign - -(rule -2 (lower_icmp_const cond rn c ty) - (if (ty_int_ref_scalar_64 ty)) - (flags_and_cc (cmp (operand_size ty) rn (imm ty (ImmExtend.Zero) c)) cond)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64_imm.isle b/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64_imm.isle deleted file mode 100644 index 01c348c3dc40..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64_imm.isle +++ /dev/null @@ -1,111 +0,0 @@ -(type MInst - (enum) -) - -(type Imm12 (primitive Imm12)) - -(type OperandSize extern - (enum Size32 - Size64)) - -;; Helper for calculating the `OperandSize` corresponding to a type -;;@ (spec (sig (args ty) (ret)) -;;@ (assume (= (ret) -;;@ (if (<= (ty) (32i8:isleType)) -;;@ (32i8:isleType) -;;@ (64i8:isleType))), -;;@ )) -(decl operand_size (Type) OperandSize) -(rule (operand_size (fits_in_32 _ty)) (OperandSize.Size32)) -(rule (operand_size (fits_in_64 _ty)) (OperandSize.Size64)) - -;; A tuple of `ProducesFlags` and `IntCC`. -(type FlagsAndCC (enum (FlagsAndCC (flags ProducesFlags) - (cc IntCC)))) - -(type Cond extern - (enum - (Eq) - (Ne) - (Hs) - (Lo) - (Mi) - (Pl) - (Vs) - (Vc) - (Hi) - (Ls) - (Ge) - (Lt) - (Gt) - (Le) - (Al) - (Nv) -)) - -;; NOTE: due to rule priorities, only applies to 32 and 64 - -;;@ (spec (sig (args c, x, y, in_ty) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (| (shl (zero_ext (12i8: isleType) -;;@ (extract 67 64 -;;@ (if (&& (ugte (c) (2i8:bv8)) (ulte (c) (5i8:bv8))) -;;@ (if (<= (in_ty) (32i8:isleType)) -;;@ (subs (32i8:isleType) (sign_ext (regwidth) (x)) (y)) -;;@ (subs (64i8:isleType) (sign_ext (regwidth) (x)) (y)) -;;@ ) -;;@ (if (<= (in_ty) (32i8:isleType)) -;;@ (subs (32i8:isleType) (zero_ext (regwidth) (x)) (y)) -;;@ (subs (64i8:isleType) (zero_ext (regwidth) (x)) (y)) -;;@ ) -;;@ )) -;;@ ) -;;@ (8i12:bv12)) -;;@ (zero_ext (12i8: isleType) (c))) -;;@ ), -;;@ -;;@ (ulte (c) (9i8:bv8)), -;;@ -;;@ (|| (= (in_ty) (32i8: isleType)) -;;@ (= (in_ty) (64i8: isleType))), -;;@ -;;@ (= (in_ty) (widthof (x))), -;;@ )) -(decl lower_icmp_const (IntCC Value u64 Type) FlagsAndCC) - -;;@ (spec (sig (args pflags, c) (ret)) -;;@ (assume -;;@ (= (ret) (| (shl (zero_ext (12i8: isleType) -;;@ (extract 67 64 (pflags)) -;;@ ) -;;@ (8i12:bv12)) -;;@ (zero_ext (12i8: isleType) (c))) -;;@ ), -;;@ )) -(decl flags_and_cc (ProducesFlags IntCC) FlagsAndCC) -(extern constructor flags_and_cc flags_and_cc_to_bool) - -;; N: Set to 1 when the result of the operation is negative, cleared to 0 otherwise. -;; Z: Set to 1 when the result of the operation is zero, cleared to 0 otherwise. -;; C: Set to 1 when the operation results in a carry, or when a subtraction results in no borrow, cleared to 0 otherwise. -;; V: Set to 1 when the operation causes overflow, cleared to 0 otherwise. -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (subs (ty) (x) (zero_ext (regwidth) (y))) -;;@ ), -;;@ (|| (= (ty) (32i8: isleType)) -;;@ (= (ty) (64i8: isleType))), -;;@ )) -(decl cmp_imm (OperandSize Reg Imm12) ProducesFlags) -(extern constructor cmp_imm cmp_imm) - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (zero_ext (regwidth) (arg)) (ret)))) -(decl imm12_from_u64 (Imm12) u64) -(extern extractor imm12_from_u64 imm12_from_u64) - -(rule -1 (lower_icmp_const cond rn (imm12_from_u64 c) ty) - (if (ty_int_ref_scalar_64 ty)) - (flags_and_cc (cmp_imm (operand_size ty) rn c) cond)) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64_sgte.isle b/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64_sgte.isle deleted file mode 100644 index 45db068a544c..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64_sgte.isle +++ /dev/null @@ -1,127 +0,0 @@ -(type MInst - (enum) -) - -(type Imm12 (primitive Imm12)) - -(type OperandSize extern - (enum Size32 - Size64)) - -;; Helper for calculating the `OperandSize` corresponding to a type -;;@ (spec (sig (args ty) (ret)) -;;@ (assume (= (ret) -;;@ (if (<= (ty) (32i8:isleType)) -;;@ (32i8:isleType) -;;@ (64i8:isleType))), -;;@ )) -(decl operand_size (Type) OperandSize) -(rule (operand_size (fits_in_32 _ty)) (OperandSize.Size32)) -(rule (operand_size (fits_in_64 _ty)) (OperandSize.Size64)) - -;; A tuple of `ProducesFlags` and `IntCC`. -(type FlagsAndCC (enum (FlagsAndCC (flags ProducesFlags) - (cc IntCC)))) - -(type Cond extern - (enum - (Eq) - (Ne) - (Hs) - (Lo) - (Mi) - (Pl) - (Vs) - (Vc) - (Hi) - (Ls) - (Ge) - (Lt) - (Gt) - (Le) - (Al) - (Nv) -)) - -;; NOTE: due to rule priorities, only applies to 32 and 64 - -;;@ (spec (sig (args c, x, y, in_ty) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (| (shl (zero_ext (12i8: isleType) -;;@ (extract 67 64 -;;@ (if (&& (ugte (c) (2i8:bv8)) (ulte (c) (5i8:bv8))) -;;@ (if (<= (in_ty) (32i8:isleType)) -;;@ (subs (32i8:isleType) (sign_ext (regwidth) (x)) (y)) -;;@ (subs (64i8:isleType) (sign_ext (regwidth) (x)) (y)) -;;@ ) -;;@ (if (<= (in_ty) (32i8:isleType)) -;;@ (subs (32i8:isleType) (zero_ext (regwidth) (x)) (y)) -;;@ (subs (64i8:isleType) (zero_ext (regwidth) (x)) (y)) -;;@ ) -;;@ )) -;;@ ) -;;@ (8i12:bv12)) -;;@ (zero_ext (12i8: isleType) (c))) -;;@ ), -;;@ -;;@ (ulte (c) (9i8:bv8)), -;;@ -;;@ (|| (= (in_ty) (32i8: isleType)) -;;@ (= (in_ty) (64i8: isleType))), -;;@ -;;@ (= (in_ty) (widthof (x))), -;;@ )) -(decl lower_icmp_const (IntCC Value u64 Type) FlagsAndCC) - -;;@ (spec (sig (args pflags, c) (ret)) -;;@ (assume -;;@ (= (ret) (| (shl (zero_ext (12i8: isleType) -;;@ (extract 67 64 (pflags)) -;;@ ) -;;@ (8i12:bv12)) -;;@ (zero_ext (12i8: isleType) (c))) -;;@ ), -;;@ )) -(decl flags_and_cc (ProducesFlags IntCC) FlagsAndCC) -(extern constructor flags_and_cc flags_and_cc_to_bool) - -;; N: Set to 1 when the result of the operation is negative, cleared to 0 otherwise. -;; Z: Set to 1 when the result of the operation is zero, cleared to 0 otherwise. -;; C: Set to 1 when the operation results in a carry, or when a subtraction results in no borrow, cleared to 0 otherwise. -;; V: Set to 1 when the operation causes overflow, cleared to 0 otherwise. -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (subs (ty) (x) (zero_ext (regwidth) (y))) -;;@ ), -;;@ (|| (= (ty) (32i8: isleType)) -;;@ (= (ty) (64i8: isleType))), -;;@ )) -(decl cmp_imm (OperandSize Reg Imm12) ProducesFlags) -(extern constructor cmp_imm cmp_imm) - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (zero_ext (regwidth) (arg)) (ret)))) -(decl imm12_from_u64 (Imm12) u64) -(extern extractor imm12_from_u64 imm12_from_u64) - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (ret) (2i8:bv8)))) -;;decl IntCC.SignedGreaterThan - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (ret) (3i8:bv8)))) -;;decl IntCC.SignedGreaterThanOrEqual - -;; We get better encodings when testing against an immediate that's even instead -;; of odd, so rewrite comparisons to use even immediates: -;; -;; A >= B + 1 -;; ==> A - 1 >= B -;; ==> A > B -(rule (lower_icmp_const (IntCC.SignedGreaterThanOrEqual) a b ty) - (if (ty_int_ref_scalar_64 ty)) - (if-let $true (u64_is_odd b)) - (if-let (imm12_from_u64 imm) (u64_sub b 1)) - (flags_and_cc (cmp_imm (operand_size ty) a imm) (IntCC.SignedGreaterThan))) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64_ugte.isle b/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64_ugte.isle deleted file mode 100644 index 811c2690e4b8..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_const_32_64_ugte.isle +++ /dev/null @@ -1,127 +0,0 @@ -(type MInst - (enum) -) - -(type Imm12 (primitive Imm12)) - -(type OperandSize extern - (enum Size32 - Size64)) - -;; Helper for calculating the `OperandSize` corresponding to a type -;;@ (spec (sig (args ty) (ret)) -;;@ (assume (= (ret) -;;@ (if (<= (ty) (32i8:isleType)) -;;@ (32i8:isleType) -;;@ (64i8:isleType))), -;;@ )) -(decl operand_size (Type) OperandSize) -(rule (operand_size (fits_in_32 _ty)) (OperandSize.Size32)) -(rule (operand_size (fits_in_64 _ty)) (OperandSize.Size64)) - -;; A tuple of `ProducesFlags` and `IntCC`. -(type FlagsAndCC (enum (FlagsAndCC (flags ProducesFlags) - (cc IntCC)))) - -(type Cond extern - (enum - (Eq) - (Ne) - (Hs) - (Lo) - (Mi) - (Pl) - (Vs) - (Vc) - (Hi) - (Ls) - (Ge) - (Lt) - (Gt) - (Le) - (Al) - (Nv) -)) - -;; NOTE: due to rule priorities, only applies to 32 and 64 - -;;@ (spec (sig (args c, x, y, in_ty) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (| (shl (zero_ext (12i8: isleType) -;;@ (extract 67 64 -;;@ (if (&& (ugte (c) (2i8:bv8)) (ulte (c) (5i8:bv8))) -;;@ (if (<= (in_ty) (32i8:isleType)) -;;@ (subs (32i8:isleType) (sign_ext (regwidth) (x)) (y)) -;;@ (subs (64i8:isleType) (sign_ext (regwidth) (x)) (y)) -;;@ ) -;;@ (if (<= (in_ty) (32i8:isleType)) -;;@ (subs (32i8:isleType) (zero_ext (regwidth) (x)) (y)) -;;@ (subs (64i8:isleType) (zero_ext (regwidth) (x)) (y)) -;;@ ) -;;@ )) -;;@ ) -;;@ (8i12:bv12)) -;;@ (zero_ext (12i8: isleType) (c))) -;;@ ), -;;@ -;;@ (ulte (c) (9i8:bv8)), -;;@ -;;@ (|| (= (in_ty) (32i8: isleType)) -;;@ (= (in_ty) (64i8: isleType))), -;;@ -;;@ (= (in_ty) (widthof (x))), -;;@ )) -(decl lower_icmp_const (IntCC Value u64 Type) FlagsAndCC) - -;;@ (spec (sig (args pflags, c) (ret)) -;;@ (assume -;;@ (= (ret) (| (shl (zero_ext (12i8: isleType) -;;@ (extract 67 64 (pflags)) -;;@ ) -;;@ (8i12:bv12)) -;;@ (zero_ext (12i8: isleType) (c))) -;;@ ), -;;@ )) -(decl flags_and_cc (ProducesFlags IntCC) FlagsAndCC) -(extern constructor flags_and_cc flags_and_cc_to_bool) - -;; N: Set to 1 when the result of the operation is negative, cleared to 0 otherwise. -;; Z: Set to 1 when the result of the operation is zero, cleared to 0 otherwise. -;; C: Set to 1 when the operation results in a carry, or when a subtraction results in no borrow, cleared to 0 otherwise. -;; V: Set to 1 when the operation causes overflow, cleared to 0 otherwise. -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (subs (ty) (x) (zero_ext (regwidth) (y))) -;;@ ), -;;@ (|| (= (ty) (32i8: isleType)) -;;@ (= (ty) (64i8: isleType))), -;;@ )) -(decl cmp_imm (OperandSize Reg Imm12) ProducesFlags) -(extern constructor cmp_imm cmp_imm) - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (zero_ext (regwidth) (arg)) (ret)))) -(decl imm12_from_u64 (Imm12) u64) -(extern extractor imm12_from_u64 imm12_from_u64) - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (ret) (6i8:bv8)))) -;;decl IntCC.UnsignedGreaterThan - -;;@ (spec (sig (args) (ret)) -;;@ (assume (= (ret) (7i8:bv8)))) -;;decl IntCC.UnsignedGreaterThanOrEqual - -;; We get better encodings when testing against an immediate that's even instead -;; of odd, so rewrite comparisons to use even immediates: -;; -;; A >= B + 1 -;; ==> A - 1 >= B -;; ==> A > B -(rule (lower_icmp_const (IntCC.UnsignedGreaterThanOrEqual) a b ty) - (if (ty_int_ref_scalar_64 ty)) - (if-let $true (u64_is_odd b)) - (if-let (imm12_from_u64 imm) (u64_sub b 1)) - (flags_and_cc (cmp_imm (operand_size ty) a imm) (IntCC.UnsignedGreaterThan))) diff --git a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_fits_in_16_signed.isle b/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_fits_in_16_signed.isle deleted file mode 100644 index afe33ade7ec0..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_fits_in_16_signed.isle +++ /dev/null @@ -1,174 +0,0 @@ -(type MInst - (enum) -) - -(type Imm12 (primitive Imm12)) - -;; A tuple of `ProducesFlags` and `IntCC`. -(type FlagsAndCC (enum (FlagsAndCC (flags ProducesFlags) - (cc IntCC)))) - -(type OperandSize extern - (enum Size32 - Size64)) - -;; Helper for calculating the `OperandSize` corresponding to a type -;;@ (spec (sig (args ty) (ret)) -;;@ (assume (= (ret) -;;@ (if (<= (ty) (32i8:isleType)) -;;@ (32i8:isleType) -;;@ (64i8:isleType))), -;;@ )) -(decl operand_size (Type) OperandSize) -(rule (operand_size (fits_in_32 _ty)) (OperandSize.Size32)) -(rule (operand_size (fits_in_64 _ty)) (OperandSize.Size64)) - -;; (0i8:bv8) = -;; (1i8:bv8) != -;; (2i8:bv8) sgt -;; (3i8:bv8) sgte -;; (4i8:bv8) slt -;; (5i8:bv8) slte -;; (6i8:bv8) ugt -;; (7i8:bv8) ugte -;; (8i8:bv8) ult -;; (9i8:bv8) ulte -;;@ (spec (sig (args c, x, y, in_ty) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (| (shl (zero_ext (12i8: isleType) -;;@ (extract 67 64 -;;@ (if (&& (ugte (c) (2i8:bv8)) (ulte (c) (5i8:bv8))) -;;@ (if (<= (in_ty) (32i8:isleType)) -;;@ (subs (32i8:isleType) (sign_ext (regwidth) (x)) (sign_ext (regwidth) (y))) -;;@ (subs (64i8:isleType) (sign_ext (regwidth) (x)) (sign_ext (regwidth) (y))) -;;@ ) -;;@ (if (<= (in_ty) (32i8:isleType)) -;;@ (subs (32i8:isleType) (zero_ext (regwidth) (x)) (zero_ext (regwidth) (y))) -;;@ (subs (64i8:isleType) (zero_ext (regwidth) (x)) (zero_ext (regwidth) (y))) -;;@ ) -;;@ )) -;;@ ) -;;@ (8i12:bv12)) -;;@ (zero_ext (12i8: isleType) (c))) -;;@ ), -;;@ -;;@ (ulte (c) (9i8:bv8)), -;;@ -;;@ (|| (= (in_ty) (8i8: isleType)) -;;@ (|| (= (in_ty) (16i8: isleType)) -;;@ (|| (= (in_ty) (32i8: isleType)) -;;@ (= (in_ty) (64i8: isleType))))), -;;@ -;;@ (= (in_ty) (widthof (x))), -;;@ (= (in_ty) (widthof (y))), -;;@ )) -(decl lower_icmp (IntCC Value Value Type) FlagsAndCC) -(extern extractor lower_icmp lower_icmp) - -;; Note that 4095 = 0xfff and 16773120 = 0xfff000 -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (|| (< (zero_ext (regwidth) (ret)) (4095i64:bv)) -;;@ (&& (< (zero_ext (regwidth) (ret)) (16773120i64:bv)) -;;@ (= (extract 2 0 (zero_ext (regwidth) (ret))) (0i3:bv)) -;;@ )), -;;@ (= (ret) (conv_to (widthof (ret)) (zero_ext (regwidth) (arg)))), -;;@ (= (arg) (conv_to (widthof (arg)) (zero_ext (regwidth) (ret)))), -;;@ )) -(decl imm12_from_value (Imm12) Value) -(extern extractor imm12_from_value imm12_from_value) - -;; Place a `Value` into a register, zero extending it to 32-bits -;;@ (spec (sig (args arg) (ret)) -;;@ (assume ( -;;@ if (<= (32i0:isleType) (widthof (arg))) -;;@ (= (ret) (conv_to (regwidth) (arg))) -;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) -;;@ ) -;;@ )) -(decl put_in_reg_zext32 (Value) Reg) -(extern constructor put_in_reg_zext32 put_in_reg_zext32) - -;;@ (spec (sig (args pflags, c) (ret)) -;;@ (assume -;;@ (= (ret) (| (shl (zero_ext (12i8: isleType) -;;@ (extract 67 64 (pflags)) -;;@ ) -;;@ (8i12:bv12)) -;;@ (zero_ext (12i8: isleType) (c))) -;;@ ), -;;@ )) -(decl flags_and_cc (ProducesFlags IntCC) FlagsAndCC) -(extern constructor flags_and_cc flags_and_cc) - -;; N: Set to 1 when the result of the operation is negative, cleared to 0 otherwise. -;; Z: Set to 1 when the result of the operation is zero, cleared to 0 otherwise. -;; C: Set to 1 when the operation results in a carry, or when a subtraction results in no borrow, cleared to 0 otherwise. -;; V: Set to 1 when the operation causes overflow, cleared to 0 otherwise. -;;@ (spec (sig (args ty, x, y, extend) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (subs (ty) (x) -;;@ (switch (extend) -;;@ ((0i8: bv3) (zero_ext (regwidth) (extract 7 0 (y)))) -;;@ ((1i8: bv3) (zero_ext (regwidth) (extract 15 0 (y)))) -;;@ ((2i8: bv3) (zero_ext (regwidth) (extract 31 0 (y)))) -;;@ ((3i8: bv3) (zero_ext (regwidth) (extract 63 0 (y)))) -;;@ ((4i8: bv3) (sign_ext (regwidth) (extract 7 0 (y)))) -;;@ ((5i8: bv3) (sign_ext (regwidth) (extract 15 0 (y)))) -;;@ ((6i8: bv3) (sign_ext (regwidth) (extract 31 0 (y)))) -;;@ ((7i8: bv3) (sign_ext (regwidth) (extract 63 0 (y)))) -;;@ ) -;;@ ) -;;@ ), -;;@ (|| (= (ty) (32i8: isleType)) -;;@ (= (ty) (64i8: isleType))), -;;@ )) -(decl cmp_extend (OperandSize Reg Reg ExtendOp) ProducesFlags) -(extern constructor cmp_extend cmp_extend) - -(type ExtendOp extern - (enum - (UXTB) ;; 0 - (UXTH) ;; 1 - (UXTW) ;; 2 - (UXTX) ;; 3 - (SXTB) ;; 4 - (SXTH) ;; 5 - (SXTW) ;; 6 - (SXTX) ;; 7 -)) - -;;@ (spec (sig (args ty, b) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (switch (ty) -;;@ ((8i8: isleType) (if (b) (4i8: bv3) (0i8: bv3))) -;;@ ((16i8: isleType) (if (b) (5i8: bv3) (1i8: bv3))) -;;@ ) -;;@ ), -;;@ (|| (= (ty) (8i8: isleType)) -;;@ (|| (= (ty) (16i8: isleType)) -;;@ (|| (= (ty) (32i8: isleType)) -;;@ (= (ty) (64i8: isleType))))), -;;@ )) -(decl lower_extend_op (Type bool) ExtendOp) -(rule (lower_extend_op $I8 $true) (ExtendOp.SXTB)) -(rule (lower_extend_op $I16 $true) (ExtendOp.SXTH)) -(rule (lower_extend_op $I8 $false) (ExtendOp.UXTB)) -(rule (lower_extend_op $I16 $false) (ExtendOp.UXTH)) - -;;@ (spec (sig (args arg) (ret)) -;;@ (assume ( -;;@ if (<= (32i0:isleType) (widthof (arg))) -;;@ (= (ret) (conv_to (regwidth) (arg))) -;;@ (= (ret) (conv_to (regwidth) (sign_ext (32) (arg)))) -;;@ ) -;;@ )) -(decl put_in_reg_sext32 (Value) Reg) -(extern constructor put_in_reg_sext32 put_in_reg_sext32) - -(rule 1 (lower_icmp cond rn rm (fits_in_16 ty)) - (if (signed_cond_code cond)) - (let ((rn Reg (put_in_reg_sext32 rn))) - (flags_and_cc (cmp_extend (operand_size ty) rn rm (lower_extend_op ty $true)) cond))) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_fits_in_16_unsigned.isle b/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_fits_in_16_unsigned.isle deleted file mode 100644 index 8d2b69d9cd90..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_fits_in_16_unsigned.isle +++ /dev/null @@ -1,167 +0,0 @@ -(type MInst - (enum) -) - -(type Imm12 (primitive Imm12)) - -;; A tuple of `ProducesFlags` and `IntCC`. -(type FlagsAndCC (enum (FlagsAndCC (flags ProducesFlags) - (cc IntCC)))) - -(type OperandSize extern - (enum Size32 - Size64)) - -;; Helper for calculating the `OperandSize` corresponding to a type -;;@ (spec (sig (args ty) (ret)) -;;@ (assume (= (ret) -;;@ (if (<= (ty) (32i8:isleType)) -;;@ (32i8:isleType) -;;@ (64i8:isleType))), -;;@ )) -(decl operand_size (Type) OperandSize) -(rule (operand_size (fits_in_32 _ty)) (OperandSize.Size32)) -(rule (operand_size (fits_in_64 _ty)) (OperandSize.Size64)) - -;; NOTE: this rule only applies to unsigned cond codes bases on rule priorities -;; Added via (! (&& (ugte (c) (2i8:bv8)) (ulte (c) (5i8:bv8)))), - -;; (0i8:bv8) = -;; (1i8:bv8) != -;; (2i8:bv8) sgt -;; (3i8:bv8) sgte -;; (4i8:bv8) slt -;; (5i8:bv8) slte -;; (6i8:bv8) ugt -;; (7i8:bv8) ugte -;; (8i8:bv8) ult -;; (9i8:bv8) ulte -;;@ (spec (sig (args c, x, y, in_ty) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (| (shl (zero_ext (12i8: isleType) -;;@ (extract 67 64 -;;@ (if (&& (ugte (c) (2i8:bv8)) (ulte (c) (5i8:bv8))) -;;@ (if (<= (in_ty) (32i8:isleType)) -;;@ (subs (32i8:isleType) (sign_ext (regwidth) (x)) (sign_ext (regwidth) (y))) -;;@ (subs (64i8:isleType) (sign_ext (regwidth) (x)) (sign_ext (regwidth) (y))) -;;@ ) -;;@ (if (<= (in_ty) (32i8:isleType)) -;;@ (subs (32i8:isleType) (zero_ext (regwidth) (x)) (zero_ext (regwidth) (y))) -;;@ (subs (64i8:isleType) (zero_ext (regwidth) (x)) (zero_ext (regwidth) (y))) -;;@ ) -;;@ )) -;;@ ) -;;@ (8i12:bv12)) -;;@ (zero_ext (12i8: isleType) (c))) -;;@ ), -;;@ -;;@ (ulte (c) (9i8:bv8)), -;;@ (! (&& (ugte (c) (2i8:bv8)) (ulte (c) (5i8:bv8)))), -;;@ -;;@ (|| (= (in_ty) (8i8: isleType)) -;;@ (|| (= (in_ty) (16i8: isleType)) -;;@ (|| (= (in_ty) (32i8: isleType)) -;;@ (= (in_ty) (64i8: isleType))))), -;;@ -;;@ (= (in_ty) (widthof (x))), -;;@ (= (in_ty) (widthof (y))), -;;@ )) -(decl lower_icmp (IntCC Value Value Type) FlagsAndCC) -(extern extractor lower_icmp lower_icmp) - -;; Note that 4095 = 0xfff and 16773120 = 0xfff000 -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (|| (< (zero_ext (regwidth) (ret)) (4095i64:bv)) -;;@ (&& (< (zero_ext (regwidth) (ret)) (16773120i64:bv)) -;;@ (= (extract 2 0 (zero_ext (regwidth) (ret))) (0i3:bv)) -;;@ )), -;;@ (= (ret) (conv_to (widthof (ret)) (zero_ext (regwidth) (arg)))), -;;@ (= (arg) (conv_to (widthof (arg)) (zero_ext (regwidth) (ret)))), -;;@ )) -(decl imm12_from_value (Imm12) Value) -(extern extractor imm12_from_value imm12_from_value) - -;; Place a `Value` into a register, zero extending it to 32-bits -;;@ (spec (sig (args arg) (ret)) -;;@ (assume ( -;;@ if (<= (32i0:isleType) (widthof (arg))) -;;@ (= (ret) (conv_to (regwidth) (arg))) -;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) -;;@ ) -;;@ )) -(decl put_in_reg_zext32 (Value) Reg) -(extern constructor put_in_reg_zext32 put_in_reg_zext32) - -;;@ (spec (sig (args pflags, c) (ret)) -;;@ (assume -;;@ (= (ret) (| (shl (zero_ext (12i8: isleType) -;;@ (extract 67 64 (pflags)) -;;@ ) -;;@ (8i12:bv12)) -;;@ (zero_ext (12i8: isleType) (c))) -;;@ ), -;;@ )) -(decl flags_and_cc (ProducesFlags IntCC) FlagsAndCC) -(extern constructor flags_and_cc flags_and_cc) - -;; N: Set to 1 when the result of the operation is negative, cleared to 0 otherwise. -;; Z: Set to 1 when the result of the operation is zero, cleared to 0 otherwise. -;; C: Set to 1 when the operation results in a carry, or when a subtraction results in no borrow, cleared to 0 otherwise. -;; V: Set to 1 when the operation causes overflow, cleared to 0 otherwise. -;;@ (spec (sig (args ty, x, y, extend) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (subs (ty) (x) -;;@ (switch (extend) -;;@ ((0i8: bv3) (zero_ext (regwidth) (extract 7 0 (y)))) -;;@ ((1i8: bv3) (zero_ext (regwidth) (extract 15 0 (y)))) -;;@ ((2i8: bv3) (zero_ext (regwidth) (extract 31 0 (y)))) -;;@ ((3i8: bv3) (zero_ext (regwidth) (extract 63 0 (y)))) -;;@ ((4i8: bv3) (sign_ext (regwidth) (extract 7 0 (y)))) -;;@ ((5i8: bv3) (sign_ext (regwidth) (extract 15 0 (y)))) -;;@ ((6i8: bv3) (sign_ext (regwidth) (extract 31 0 (y)))) -;;@ ((7i8: bv3) (sign_ext (regwidth) (extract 63 0 (y)))) -;;@ ) -;;@ ) -;;@ ), -;;@ (|| (= (ty) (32i8: isleType)) -;;@ (= (ty) (64i8: isleType))), -;;@ )) -(decl cmp_extend (OperandSize Reg Reg ExtendOp) ProducesFlags) -(extern constructor cmp_extend cmp_extend) - -(type ExtendOp extern - (enum - (UXTB) ;; 0 - (UXTH) ;; 1 - (UXTW) ;; 2 - (UXTX) ;; 3 - (SXTB) ;; 4 - (SXTH) ;; 5 - (SXTW) ;; 6 - (SXTX) ;; 7 -)) - -;;@ (spec (sig (args ty, b) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (switch (ty) -;;@ ((8i8: isleType) (if (b) (4i8: bv3) (0i8: bv3))) -;;@ ((16i8: isleType) (if (b) (5i8: bv3) (1i8: bv3))) -;;@ ) -;;@ ), -;;@ (|| (= (ty) (8i8: isleType)) -;;@ (|| (= (ty) (16i8: isleType)) -;;@ (|| (= (ty) (32i8: isleType)) -;;@ (= (ty) (64i8: isleType))))), -;;@ )) -(decl lower_extend_op (Type bool) ExtendOp) -(rule (lower_extend_op $I8 $true) (ExtendOp.SXTB)) -(rule (lower_extend_op $I16 $true) (ExtendOp.SXTH)) -(rule (lower_extend_op $I8 $false) (ExtendOp.UXTB)) -(rule (lower_extend_op $I16 $false) (ExtendOp.UXTH)) - -(rule -2 (lower_icmp cond rn rm (fits_in_16 ty)) - (let ((rn Reg (put_in_reg_zext32 rn))) - (flags_and_cc (cmp_extend (operand_size ty) rn rm (lower_extend_op ty $false)) cond))) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_fits_in_16_unsigned_imm.isle b/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_fits_in_16_unsigned_imm.isle deleted file mode 100644 index 5fb1ba134d60..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_fits_in_16_unsigned_imm.isle +++ /dev/null @@ -1,129 +0,0 @@ -(type MInst - (enum) -) - -(type Imm12 (primitive Imm12)) - -;; A tuple of `ProducesFlags` and `IntCC`. -(type FlagsAndCC (enum (FlagsAndCC (flags ProducesFlags) - (cc IntCC)))) - -(type OperandSize extern - (enum Size32 - Size64)) - -;; Helper for calculating the `OperandSize` corresponding to a type -;;@ (spec (sig (args ty) (ret)) -;;@ (assume (= (ret) -;;@ (if (<= (ty) (32i8:isleType)) -;;@ (32i8:isleType) -;;@ (64i8:isleType))), -;;@ )) -(decl operand_size (Type) OperandSize) -(rule (operand_size (fits_in_32 _ty)) (OperandSize.Size32)) -(rule (operand_size (fits_in_64 _ty)) (OperandSize.Size64)) - -;; NOTE: this rule only applies to unsigned cond codes bases on rule priorities -;; Added via (|| (ulte (c) (2i8:bv8)) (ugte (c) (5i8:bv8))), -;; -;; (0i8:bv8) = -;; (1i8:bv8) != -;; (2i8:bv8) sgt -;; (3i8:bv8) sgte -;; (4i8:bv8) slt -;; (5i8:bv8) slte -;; (6i8:bv8) ugt -;; (7i8:bv8) ugte -;; (8i8:bv8) ult -;; (9i8:bv8) ulte -;;@ (spec (sig (args c, x, y, in_ty) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (| (shl (zero_ext (12i8: isleType) -;;@ (extract 67 64 -;;@ (if (&& (ugte (c) (2i8:bv8)) (ulte (c) (5i8:bv8))) -;;@ (if (<= (in_ty) (32i8:isleType)) -;;@ (subs (32i8:isleType) (sign_ext (regwidth) (x)) (sign_ext (regwidth) (y))) -;;@ (subs (64i8:isleType) (sign_ext (regwidth) (x)) (sign_ext (regwidth) (y))) -;;@ ) -;;@ (if (<= (in_ty) (32i8:isleType)) -;;@ (subs (32i8:isleType) (zero_ext (regwidth) (x)) (zero_ext (regwidth) (y))) -;;@ (subs (64i8:isleType) (zero_ext (regwidth) (x)) (zero_ext (regwidth) (y))) -;;@ ) -;;@ )) -;;@ ) -;;@ (8i12:bv12)) -;;@ (zero_ext (12i8: isleType) (c))) -;;@ ), -;;@ -;;@ (ulte (c) (9i8:bv8)), -;;@ (! (&& (ugte (c) (2i8:bv8)) (ulte (c) (5i8:bv8)))), -;;@ -;;@ (|| (= (in_ty) (8i8: isleType)) -;;@ (|| (= (in_ty) (16i8: isleType)) -;;@ (|| (= (in_ty) (32i8: isleType)) -;;@ (= (in_ty) (64i8: isleType))))), -;;@ -;;@ (= (in_ty) (widthof (x))), -;;@ (= (in_ty) (widthof (y))), -;;@ )) -(decl lower_icmp (IntCC Value Value Type) FlagsAndCC) -(extern extractor lower_icmp lower_icmp) - -;; Note that 4095 = 0xfff and 16773120 = 0xfff000 -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (|| (< (zero_ext (regwidth) (ret)) (4095i64:bv)) -;;@ (&& (< (zero_ext (regwidth) (ret)) (16773120i64:bv)) -;;@ (= (extract 2 0 (zero_ext (regwidth) (ret))) (0i3:bv)) -;;@ )), -;;@ (= (ret) (conv_to (widthof (ret)) (zero_ext (regwidth) (arg)))), -;;@ (= (arg) (conv_to (widthof (arg)) (zero_ext (regwidth) (ret)))), -;;@ )) -(decl imm12_from_value (Imm12) Value) -(extern extractor imm12_from_value imm12_from_value) - -;; Place a `Value` into a register, zero extending it to 32-bits -;;@ (spec (sig (args arg) (ret)) -;;@ (assume ( -;;@ if (<= (32i0:isleType) (widthof (arg))) -;;@ (= (ret) (conv_to (regwidth) (arg))) -;;@ (= (ret) (conv_to (regwidth) (zero_ext (32) (arg)))) -;;@ ) -;;@ )) -(decl put_in_reg_zext32 (Value) Reg) -(extern constructor put_in_reg_zext32 put_in_reg_zext32) - -;; NOTE: this seems to need to keep only relevant bits used in converting -;; flags to bools, otherwise it is not equivalent -;; Use a bitwise-and mask after extracting - -;;@ (spec (sig (args pflags, c) (ret)) -;;@ (assume -;;@ (= (ret) (| (shl (zero_ext (12i8: isleType) -;;@ (extract 67 64 (pflags)) -;;@ ) -;;@ (8i12:bv12)) -;;@ (zero_ext (12i8: isleType) (c))) -;;@ ), -;;@ )) -(decl flags_and_cc (ProducesFlags IntCC) FlagsAndCC) -(extern constructor flags_and_cc flags_and_cc) - -;; N: Set to 1 when the result of the operation is negative, cleared to 0 otherwise. -;; Z: Set to 1 when the result of the operation is zero, cleared to 0 otherwise. -;; C: Set to 1 when the operation results in a carry, or when a subtraction results in no borrow, cleared to 0 otherwise. -;; V: Set to 1 when the operation causes overflow, cleared to 0 otherwise. -;;@ (spec (sig (args ty, x, y) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (subs (ty) (x) (zero_ext (regwidth) (y))) -;;@ ), -;;@ (|| (= (ty) (32i8: isleType)) -;;@ (= (ty) (64i8: isleType))), -;;@ )) -(decl cmp_imm (OperandSize Reg Imm12) ProducesFlags) -(extern constructor cmp_imm cmp_imm) - -(rule -1 (lower_icmp cond rn (imm12_from_value rm) (fits_in_16 ty)) - (let ((rn Reg (put_in_reg_zext32 rn))) - (flags_and_cc (cmp_imm (operand_size ty) rn rm) cond))) \ No newline at end of file diff --git a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_into_reg.isle b/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_into_reg.isle deleted file mode 100644 index be219ce64c60..000000000000 --- a/cranelift/isle/veri/veri_engine/examples/icmp/lower_icmp_into_reg.isle +++ /dev/null @@ -1,173 +0,0 @@ -(type MInst - (enum) -) - -;; A tuple of `ProducesFlags` and `IntCC`. -(type FlagsAndCC (enum (FlagsAndCC (flags ProducesFlags) - (cc IntCC)))) - -(type Cond extern - (enum - (Eq) - (Ne) - (Hs) - (Lo) - (Mi) - (Pl) - (Vs) - (Vc) - (Hi) - (Ls) - (Ge) - (Lt) - (Gt) - (Le) - (Al) - (Nv) -)) - -;; Lower an integer cond code. -;; AVH TODO CHECK -;;@ (spec (sig (args arg) (ret)) -;;@ (assume (= (arg) (ret)))) -(decl cond_code (IntCC) Cond) -(extern constructor cond_code cond_code) - -;;@ (spec (sig (args c, x, y, in_ty, out_ty) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (switch (c) -;;@ ((0i8:bv8) (if (= (x) (y)) (1i8:bv8) (0i8:bv8))) -;;@ ((1i8:bv8) (if (! (= (x) (y))) (1i8:bv8) (0i8:bv8))) -;;@ ((2i8:bv8) (if (sgt (x) (y)) (1i8:bv8) (0i8:bv8))) -;;@ ((3i8:bv8) (if (sgte (x) (y)) (1i8:bv8) (0i8:bv8))) -;;@ ((4i8:bv8) (if (slt (x) (y)) (1i8:bv8) (0i8:bv8))) -;;@ ((5i8:bv8) (if (slte (x) (y)) (1i8:bv8) (0i8:bv8))) -;;@ ((6i8:bv8) (if (ugt (x) (y)) (1i8:bv8) (0i8:bv8))) -;;@ ((7i8:bv8) (if (ugte (x) (y)) (1i8:bv8) (0i8:bv8))) -;;@ ((8i8:bv8) (if (ult (x) (y)) (1i8:bv8) (0i8:bv8))) -;;@ ((9i8:bv8) (if (ulte (x) (y)) (1i8:bv8) (0i8:bv8))) -;;@ )), -;;@ -;;@ (ulte (c) (9i8:bv8)), -;;@ -;;@ (|| (= (in_ty) (8i8: isleType)) -;;@ (|| (= (in_ty) (16i8: isleType)) -;;@ (|| (= (in_ty) (32i8: isleType)) -;;@ (= (in_ty) (64i8: isleType))))), -;;@ -;;@ (= (in_ty) (widthof (x))), -;;@ (= (in_ty) (widthof (y))), -;;@ (= (out_ty) (8i8: isleType)), -;;@ )) -(decl lower_icmp_into_reg (IntCC Value Value Type Type) ValueRegs) -(extern extractor lower_icmp_into_reg lower_icmp_into_reg) - -;; N: Set to 1 when the result of the operation is negative -;; Z: Set to 1 when the result of the operation is zero -;; C: Set to 1 when the operation results in a carry, or when a subtraction results in no borrow -;; V: Set to 1 when the operation causes overflow - -;; Concat the 4 bits of flags to 8 bits with the CC, for 12 bits -;; | 11 10 9 8 | 7 .......... 0| -;; [ N | Z | C | V | ... CC ... ] - -;; For the intermediate term, use the 64b version of subs for all widths -;; Zero- or sign- extend based on the condition code -;; Condition codes that require signed: 2i8, 3i8, 4i8, 5i8 - -;; (0i8:bv8) = -;; (1i8:bv8) != -;; (2i8:bv8) sgt -;; (3i8:bv8) sgte -;; (4i8:bv8) slt -;; (5i8:bv8) slte -;; (6i8:bv8) ugt -;; (7i8:bv8) ugte -;; (8i8:bv8) ult -;; (9i8:bv8) ulte -;;@ (spec (sig (args c, x, y, in_ty) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (| (shl (zero_ext (12i8: isleType) -;;@ (extract 67 64 -;;@ (if (&& (ugte (c) (2i8:bv8)) (ulte (c) (5i8:bv8))) -;;@ (if (<= (in_ty) (32i8:isleType)) -;;@ (subs (32i8:isleType) (sign_ext (regwidth) (x)) (sign_ext (regwidth) (y))) -;;@ (subs (64i8:isleType) (sign_ext (regwidth) (x)) (sign_ext (regwidth) (y))) -;;@ ) -;;@ (if (<= (in_ty) (32i8:isleType)) -;;@ (subs (32i8:isleType) (zero_ext (regwidth) (x)) (zero_ext (regwidth) (y))) -;;@ (subs (64i8:isleType) (zero_ext (regwidth) (x)) (zero_ext (regwidth) (y))) -;;@ ) -;;@ )) -;;@ ) -;;@ (8i12:bv12)) -;;@ (zero_ext (12i8: isleType) (c))) -;;@ ), -;;@ -;;@ (ulte (c) (9i8:bv8)), -;;@ -;;@ (|| (= (in_ty) (8i8: isleType)) -;;@ (|| (= (in_ty) (16i8: isleType)) -;;@ (|| (= (in_ty) (32i8: isleType)) -;;@ (= (in_ty) (64i8: isleType))))), -;;@ -;;@ (= (in_ty) (widthof (x))), -;;@ (= (in_ty) (widthof (y))), -;;@ )) -(decl lower_icmp (IntCC Value Value Type) FlagsAndCC) -(extern constructor lower_icmp lower_icmp) - -;; Code Meaning (for cmp or subs) Flags Tested -;; eq Equal. Z==1 -;; ne Not equal. Z==0 -;; cs or hs Unsigned higher or same (or carry set). C==1 -;; cc or lo Unsigned lower (or carry clear). C==0 -;; mi Negative. N==1 -;; pl Positive or zero. N==0 -;; vs Signed overflow. V==1 -;; vc No signed overflow. V==0 -;; hi Unsigned higher. (C==1) && (Z==0) -;; ls Unsigned lower or same. (C==0) || (Z==1) -;; ge Signed greater than or equal. N==V -;; lt Signed less than. N!=V -;; gt Signed greater than. (Z==0) && (N==V) -;; le Signed less than or equal. (Z==1) || (N!=V) - -;; | 11 10 9 8 | 7 .......... 0| -;; [ N | Z | C | V | ... CC ... ] - -;;@ (spec (sig (args a) (ret)) -;;@ (assume -;;@ (= (ret) -;;@ (switch (extract 7 0 (a)) -;;@ ((0i8:bv8) (if (= (extract 10 10 (a)) (1i1:bv1)) (1i8:bv8) (0i8:bv8))) -;;@ ((1i8:bv8) (if (= (extract 10 10 (a)) (0i1:bv1)) (1i8:bv8) (0i8:bv8))) -;;@ ((2i8:bv8) (if (&& (= (extract 10 10 (a)) (0i1:bv1)) -;;@ (= (extract 11 11 (a)) (extract 8 8 (a)))) -;;@ (1i8:bv8) (0i8:bv8))) -;;@ ((3i8:bv8) (if (= (extract 11 11 (a)) (extract 8 8 (a))) -;;@ (1i8:bv8) (0i8:bv8))) -;;@ ((4i8:bv8) (if (! (= (extract 11 11 (a)) (extract 8 8 (a)))) (1i8:bv8) (0i8:bv8))) -;;@ ((5i8:bv8) (if (|| (= (extract 10 10 (a)) (1i1:bv1)) -;;@ (! (= (extract 11 11 (a)) (extract 8 8 (a))))) -;;@ (1i8:bv8) (0i8:bv8))) -;;@ ((6i8:bv8) (if (&& (= (extract 9 9 (a)) (1i1:bv1)) -;;@ (= (extract 10 10 (a)) (0i1:bv1))) -;;@ (1i8:bv8) (0i8:bv8))) -;;@ ((7i8:bv8) (if (= (extract 9 9 (a)) (1i1:bv1)) (1i8:bv8) (0i8:bv8))) -;;@ ((8i8:bv8) (if (= (extract 9 9 (a)) (0i1:bv1)) (1i8:bv8) (0i8:bv8))) -;;@ ((9i8:bv8) (if (|| (= (extract 9 9 (a)) (0i1:bv1)) -;;@ (= (extract 10 10 (a)) (1i1:bv1))) -;;@ (1i8:bv8) (0i8:bv8))) -;;@ )), -;;@ )) -(decl flags_and_cc_to_bool (FlagsAndCC) ValueRegs) -(extern constructor flags_and_cc_to_bool flags_and_cc_to_bool) - -;; Integers <= 64-bits. -(rule -2 (lower_icmp_into_reg cond rn rm in_ty out_ty) - (if (ty_int_ref_scalar_64 in_ty)) - (let ((cc Cond (cond_code cond))) - (flags_and_cc_to_bool (lower_icmp cond rn rm in_ty)))) \ No newline at end of file