// File: /workspace/github_c_makefile_star2_O2/mirth-lang[P]mirth/bin/mirth1.c
// Function: mw_mirth_elab_zaAB_worthzeslidingzeforzeaux
static bool mw_mirth_elab_zaAB_worthzeslidingzeforzeaux (struct mirth_mirth_zaMirth* in_zaMirth_1, struct mirth_arrow_Arrow* in_zaAB_2, struct std_list_List_1 in_List_3, struct std_list_List_1 in_List_4, struct mirth_mirth_zaMirth* *out_zaMirth_5, struct mirth_arrow_Arrow* *out_zaAB_6) {
	struct mirth_mirth_zaMirth* branch_zaMirth_8;
	struct mirth_arrow_Arrow* branch_zaAB_9;
	bool branch_Bool_10;
	switch ((in_List_4).tag) {
		case std_list_List_1_Nil: {
			decref(MK_std_list_List_1(in_List_3));
			bool v11 = false;
			branch_Bool_10 = v11;
			branch_zaAB_9 = in_zaAB_2;
			branch_zaMirth_8 = in_zaMirth_1;
		} break;
		case std_list_List_1_Cons: {
			struct std_list_List_1 v12;
			VAL v13 = mtp_std_list_List_1_Cons(in_List_4, &v12);
			struct mirth_mirth_zaMirth* branch_zaMirth_14;
			struct mirth_arrow_Arrow* branch_zaAB_15;
			bool branch_Bool_16;
			switch ((in_List_3).tag) {
				case std_list_List_1_Nil: {
					decref(v13);
					decref(MK_std_list_List_1(v12));
					bool v17 = false;
					branch_Bool_16 = v17;
					branch_zaAB_15 = in_zaAB_2;
					branch_zaMirth_14 = in_zaMirth_1;
				} break;
				case std_list_List_1_Cons: {
					struct std_list_List_1 v18;
					VAL v19 = mtp_std_list_List_1_Cons(in_List_3, &v18);
					incref(v13);
					struct mirth_mirth_zaMirth* v20;
					bool v21 = mw_mirth_tycon_Tycon_zd(in_zaMirth_1, V_mirth_tycon_Tycon(v19), V_mirth_tycon_Tycon(v13), &v20);
					struct mirth_mirth_zaMirth* branch_zaMirth_22;
					struct mirth_arrow_Arrow* branch_zaAB_23;
					bool branch_Bool_24;
					if (v21) {
						decref(v13);
						struct mirth_mirth_zaMirth* v25;
						struct mirth_arrow_Arrow* v26;
						bool v27 = mw_mirth_elab_zaAB_worthzeslidingzeforzeaux(v20, in_zaAB_2, v18, v12, &v25, &v26);
						branch_Bool_24 = v27;
						branch_zaAB_23 = v26;
						branch_zaMirth_22 = v25;
					} else {
						decref(MK_std_list_List_1(v12));
						struct std_maybe_Maybe_1 v28 = { .tag=std_maybe_Maybe_1_None };
						bool v29 = true;
						struct mirth_mirth_zaMirth* r30 = v20;
						VAL v31 = v13;
						struct std_maybe_Maybe_1 v32 = v28;
						struct std_list_List_1 v33 = v18;
						bool v34 = v29;
						bool v35 = v29;
						while (v35) {
							struct mirth_mirth_zaMirth* r36 = r30;
							VAL v37 = v31;
							struct std_maybe_Maybe_1 v38 = v32;
							struct std_list_List_1 v39 = v33;
							bool v40 = v34;
							struct std_list_List_1 v41;
							struct std_maybe_Maybe_1 v42 = mw_std_list_List_1_uncons(v39, &v41);
							struct mirth_mirth_zaMirth* branch_zaMirth_43;
							struct mirth_tycon_Tycon branch_Tycon_44;
							struct std_maybe_Maybe_1 branch_Maybe_45;
							struct std_list_List_1 branch_List_46;
							bool branch_Bool_47;
							switch ((v42).tag) {
								case std_maybe_Maybe_1_Some: {
									VAL v48 = mtp_std_maybe_Maybe_1_Some(v42);
									incref(v48);
									incref(v37);
									struct mirth_mirth_zaMirth* v49;
									bool v50 = mw_mirth_tycon_Tycon_zd(r36, V_mirth_tycon_Tycon(v37), V_mirth_tycon_Tycon(v48), &v49);
									struct mirth_mirth_zaMirth* branch_zaMirth_51;
									struct mirth_tycon_Tycon branch_Tycon_52;
									struct std_maybe_Maybe_1 branch_Maybe_53;
									if (v50) {
										struct std_maybe_Maybe_1 v54 = mtw_std_maybe_Maybe_1_Some(v48);
										branch_Maybe_53 = v54;
										branch_Tycon_52 = V_mirth_tycon_Tycon(v37);
										branch_zaMirth_51 = v49;
									} else {
										decref(v48);
										struct std_maybe_Maybe_1 v55 = { .tag=std_maybe_Maybe_1_None };
										branch_Maybe_53 = v55;
										branch_Tycon_52 = V_mirth_tycon_Tycon(v37);
										branch_zaMirth_51 = v49;
									}
									struct mirth_mirth_zaMirth* branch_zaMirth_56;
									struct mirth_tycon_Tycon branch_Tycon_57;
									struct std_maybe_Maybe_1 branch_Maybe_58;
									struct std_list_List_1 branch_List_59;
									switch ((branch_Maybe_53).tag) {
										case std_maybe_Maybe_1_None: {
											branch_List_59 = v41;
											branch_Maybe_58 = v38;
											branch_Tycon_57 = branch_Tycon_52;
											branch_zaMirth_56 = branch_zaMirth_51;
										} break;
										default: {
											decref(MK_std_list_List_1(v41));
											decref(MK_std_maybe_Maybe_1(v38));
											struct std_list_List_1 v60 = { .tag=std_list_List_1_Nil };
											branch_List_59 = v60;
											branch_Maybe_58 = branch_Maybe_53;
											branch_Tycon_57 = branch_Tycon_52;
											branch_zaMirth_56 = branch_zaMirth_51;
										} break;
									}
									bool v61 = true;
									branch_Bool_47 = v61;
									branch_List_46 = branch_List_59;
									branch_Maybe_45 = branch_Maybe_58;
									branch_Tycon_44 = branch_Tycon_57;
									branch_zaMirth_43 = branch_zaMirth_56;
								} break;
								case std_maybe_Maybe_1_None: {
									bool v62 = false;
									branch_Bool_47 = v62;
									branch_List_46 = v41;
									branch_Maybe_45 = v38;
									branch_Tycon_44 = V_mirth_tycon_Tycon(v37);
									branch_zaMirth_43 = r36;
								} break;
								default: {
									do_panic(str_make("unexpected fallthrough in match\n", 32));
								}
							}
							v35 = branch_Bool_47;
							v34 = branch_Bool_47;
							v33 = branch_List_46;
							v32 = branch_Maybe_45;
							v31 = MK_mirth_tycon_Tycon(branch_Tycon_44);
							r30 = branch_zaMirth_43;
						}
						decref(MK_std_list_List_1(v33));
						decref(v31);
						int64_t v63 = (v32).tag;
						decref(MK_std_maybe_Maybe_1(v32));
						INT v64 = WRAP_I63(0LL);
						INT v65 = v64;
						INT v66 = i64_to_int(v63);
						bool v67 = int_eq(v66, v65);
						bool v68 = !v67;
						branch_Bool_24 = v68;
						branch_zaAB_23 = in_zaAB_2;
						branch_zaMirth_22 = r30;
					}
					branch_Bool_16 = branch_Bool_24;
					branch_zaAB_15 = branch_zaAB_23;
					branch_zaMirth_14 = branch_zaMirth_22;
				} break;
				default: {
					do_panic(str_make("unexpected fallthrough in match\n", 32));
				}
			}
			branch_Bool_10 = branch_Bool_16;
			branch_zaAB_9 = branch_zaAB_15;
			branch_zaMirth_8 = branch_zaMirth_14;
		} break;
		default: {
			do_panic(str_make("unexpected fallthrough in match\n", 32));
		}
	}
	*out_zaAB_6 = branch_zaAB_9;
	*out_zaMirth_5 = branch_zaMirth_8;
	return branch_Bool_10;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x68, %rsp
movq %rcx, %rbx
movl %edx, %r14d
movq %rsi, %r15
movq %rdi, %r13
movabsq $0xfffffffffffc, %rdx   # imm = 0xFFFFFFFFFFFC
cmpl $0x1, %r8d
je 0x5143b
testl %r8d, %r8d
jne 0x51895
andq %rbx, %rdx
sete %al
testb $0x3, %bl
setne %cl
orb %al, %cl
jne 0x514d6
decl (%rdx)
jne 0x514d6
shlq $0x30, %r14
orq %rbx, %r14
leaq 0xb6e46(%rip), %rsi     # 0x108279
movq %r14, %rdi
jmp 0x514d1
movq %r15, -0x40(%rbp)
leaq -0x68(%rbp), %rsi
movq %r9, %rdi
callq 0xce01
movq %rax, %r12
movq %rdx, %r15
cmpl $0x1, %r14d
je 0x514dd
testl %r14d, %r14d
jne 0x51895
testb $0x1, %r15b
movabsq $0xfffffffffffc, %rsi   # imm = 0xFFFFFFFFFFFC
je 0x514a1
movq %r12, %rax
andq %rsi, %rax
sete %cl
testb $0x3, %r12b
setne %dl
orb %cl, %dl
jne 0x514a1
decl (%rax)
jne 0x514a1
movq %r12, %rdi
movq %r15, %rsi
callq 0xce94
movabsq $0xfffffffffffc, %rsi   # imm = 0xFFFFFFFFFFFC
movq -0x60(%rbp), %rax
andq %rax, %rsi
sete %cl
testb $0x3, %al
setne %dl
orb %cl, %dl
jne 0x517b5
movl -0x68(%rbp), %edi
decl (%rsi)
movq -0x40(%rbp), %r15
jne 0x514d6
shlq $0x30, %rdi
orq %rax, %rdi
leaq 0xb6da8(%rip), %rsi     # 0x108279
callq 0xce94
xorl %eax, %eax
jmp 0x51878
leaq -0x90(%rbp), %rsi
movq %rbx, %rdi
callq 0xce01
movq %r12, %rbx
movabsq $0xfffffffffffc, %rdi   # imm = 0xFFFFFFFFFFFC
andq %rdi, %rbx
testb $0x1, %r15b
je 0x51515
testq %rbx, %rbx
sete %cl
testb $0x3, %r12b
setne %dl
orb %cl, %dl
jne 0x51515
incl (%rbx)
movq %rax, %rsi
shrq $0x30, %rsi
andq %rdi, %rax
movq %r12, %rcx
shrq $0x30, %rcx
leaq -0x80(%rbp), %r9
movq %rdi, %r14
movq %r13, %rdi
movq %rax, %rdx
movq %rbx, %r8
callq 0x17b8b
testb %al, %al
je 0x5159f
testb $0x1, %r15b
je 0x51565
testq %rbx, %rbx
sete %al
testb $0x3, %r12b
setne %cl
orb %al, %cl
jne 0x51565
decl (%rbx)
jne 0x51565
movq %r12, %rdi
movq %r15, %rsi
callq 0xce94
movq -0x80(%rbp), %rdi
movl -0x90(%rbp), %edx
movq -0x88(%rbp), %rcx
movl -0x68(%rbp), %r8d
movq -0x60(%rbp), %r9
leaq -0x58(%rbp), %rbx
leaq -0x50(%rbp), %r14
movq -0x40(%rbp), %rsi
pushq %rbx
pushq %r14
callq 0x513d3
popq %rcx
popq %rdx
movq (%rbx), %r15
movq (%r14), %r13
jmp 0x51878
movq -0x60(%rbp), %rax
movq %rax, %rcx
andq %r14, %rcx
sete %dl
testb $0x3, %al
setne %sil
orb %dl, %sil
jne 0x515d1
movl -0x68(%rbp), %edi
decl (%rcx)
jne 0x515d1
shlq $0x30, %rdi
orq %rax, %rdi
leaq 0xb6cad(%rip), %rsi     # 0x108279
callq 0xce94
movq -0x80(%rbp), %r13
movl -0x90(%rbp), %edi
movq -0x88(%rbp), %rsi
movq $0x0, -0x30(%rbp)
movb $0x1, %al
leaq 0xb738e(%rip), %rbx     # 0x108981
leaq -0x50(%rbp), %r14
movq $0x0, -0x38(%rbp)
testb $0x1, %al
je 0x517bc
movq %r14, %rdx
callq 0x1075d
testl %eax, %eax
je 0x51746
cmpl $0x1, %eax
jne 0x51895
movq %r15, %rbx
movq %rdx, %rdi
callq 0xd491
movq %rax, %r14
movq %rax, %rdi
movq %rdx, -0x78(%rbp)
testb $0x1, %dl
movabsq $0xfffffffffffc, %rsi   # imm = 0xFFFFFFFFFFFC
je 0x5165a
movq %r14, %rax
andq %rsi, %rax
sete %cl
testb $0x3, %dil
setne %dl
orb %cl, %dl
jne 0x5165a
incl (%rax)
movq %rdi, -0x70(%rbp)
movq %r12, %r15
andq %rsi, %r15
testb $0x1, %bl
je 0x5167d
testq %r15, %r15
sete %al
testb $0x3, %r12b
setne %cl
orb %al, %cl
jne 0x5167d
incl (%r15)
shrq $0x30, %r12
movq %r14, %rcx
shrq $0x30, %rcx
andq %rsi, %r14
movq %rsi, %rbx
movq %r13, %rdi
movl %r12d, %esi
movq %r15, %rdx
movq %r14, %r8
leaq -0x58(%rbp), %r9
callq 0x17b8b
testb %al, %al
je 0x51765
movq -0x70(%rbp), %rdi
movq -0x78(%rbp), %rsi
callq 0x8d0c
movq %rbx, %rsi
movq %rdx, %rbx
movq -0x58(%rbp), %r13
movq -0x48(%rbp), %rax
movq %rax, %rcx
andq %rsi, %rcx
sete %dl
testb $0x3, %al
setne %sil
orb %dl, %sil
jne 0x516f4
movl -0x50(%rbp), %edi
decl (%rcx)
jne 0x516f4
shlq $0x30, %rdi
orq %rax, %rdi
leaq 0xb6b8a(%rip), %rsi     # 0x108279
callq 0xce94
movq -0x38(%rbp), %rsi
movq %rsi, %rax
movabsq $0xfffffffffffc, %rcx   # imm = 0xFFFFFFFFFFFC
andq %rcx, %rax
sete %cl
testb $0x3, %sil
setne %dl
orb %cl, %dl
leaq -0x50(%rbp), %r14
jne 0x51735
decl (%rax)
jne 0x51735
movq -0x30(%rbp), %rdi
shlq $0x30, %rdi
orq %rsi, %rdi
leaq 0xb6b91(%rip), %rsi     # 0x1082c1
callq 0xce94
xorl %edi, %edi
pushq $0x1
popq %rax
movq %rax, -0x30(%rbp)
movq %rbx, -0x38(%rbp)
xorl %esi, %esi
jmp 0x5179d
movl -0x50(%rbp), %edi
movq -0x48(%rbp), %rsi
movq %r12, %r15
shrq $0x30, %r12
movabsq $0xfffffffffffc, %rax   # imm = 0xFFFFFFFFFFFC
andq %rax, %r15
xorl %eax, %eax
jmp 0x517a6
movq -0x78(%rbp), %rsi
testb $0x1, %sil
movq -0x70(%rbp), %rdi
je 0x5178e
testq %r14, %r14
sete %al
testb $0x3, %dil
setne %cl
orb %al, %cl
jne 0x5178e
decl (%r14)
jne 0x5178e
callq 0xce94
movq -0x58(%rbp), %r13
movl -0x50(%rbp), %edi
movq -0x48(%rbp), %rsi
leaq -0x50(%rbp), %r14
movb $0x1, %al
leaq 0xb71db(%rip), %rbx     # 0x108981
shlq $0x30, %r12
orq %r15, %r12
movq %rbx, %r15
jmp 0x515ff
xorl %eax, %eax
jmp 0x51874
movq %rsi, %rax
movabsq $0xfffffffffffc, %rcx   # imm = 0xFFFFFFFFFFFC
andq %rcx, %rax
sete %cl
testb $0x3, %sil
setne %dl
orb %cl, %dl
jne 0x517f1
decl (%rax)
jne 0x517f1
shlq $0x30, %rdi
orq %rsi, %rdi
leaq 0xb6a8d(%rip), %rsi     # 0x108279
callq 0xce94
testb $0x1, %r15b
movabsq $0xfffffffffffc, %rsi   # imm = 0xFFFFFFFFFFFC
je 0x5182e
movq %r12, %rax
andq %rsi, %rax
sete %cl
testb $0x3, %r12b
setne %dl
orb %cl, %dl
jne 0x5182e
decl (%rax)
jne 0x5182e
movq %r12, %rdi
movq %r15, %rsi
callq 0xce94
movabsq $0xfffffffffffc, %rsi   # imm = 0xFFFFFFFFFFFC
movl -0x30(%rbp), %ebx
movq -0x38(%rbp), %rdx
andq %rdx, %rsi
sete %al
testb $0x3, %dl
setne %cl
orb %al, %cl
jne 0x5185f
decl (%rsi)
jne 0x5185f
movq %rbx, %rdi
shlq $0x30, %rdi
orq %rdx, %rdi
leaq 0xb6a67(%rip), %rsi     # 0x1082c1
callq 0xce94
movq %rbx, %rdi
callq 0xd86d
pushq $0x1
popq %rsi
movq %rax, %rdi
callq 0xd759
xorb $0x1, %al
movq -0x40(%rbp), %r15
movq 0x18(%rbp), %rcx
movq 0x10(%rbp), %rdx
movq %r15, (%rcx)
movq %r13, (%rdx)
addq $0x68, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x82f71(%rip), %rdi     # 0xd480d
pushq $0x20
popq %rsi
callq 0x8a21
movq %rax, %rdi
callq 0x8cc6