// File: /workspace/github_c_makefile_star2_O1/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, %r14
movl %edx, %r13d
movq %rsi, %rbx
movq %rdi, %r15
cmpl $0x1, %r8d
je 0x57465
testl %r8d, %r8d
jne 0x578b2
movabsq $0xfffffffffffc, %rax   # imm = 0xFFFFFFFFFFFC
andq %r14, %rax
sete %cl
testb $0x3, %r14b
setne %dl
orb %cl, %dl
jne 0x574f0
decl (%rax)
jne 0x574f0
shlq $0x30, %r13
orq %r14, %r13
leaq 0xbde1c(%rip), %rsi     # 0x115279
movq %r13, %rdi
jmp 0x574eb
movq %rbx, -0x40(%rbp)
leaq -0x68(%rbp), %rsi
movq %r9, %rdi
callq 0xd450
movq %rax, %r12
movq %rax, %rbx
cmpl $0x1, %r13d
je 0x574f7
testl %r13d, %r13d
jne 0x578b2
movabsq $0xfffffffffffc, %r14   # imm = 0xFFFFFFFFFFFC
testb $0x1, %dl
je 0x574ba
andq %r14, %r12
sete %al
testb $0x3, %bl
setne %cl
orb %al, %cl
jne 0x574ba
decl (%r12)
jne 0x574ba
movq %rbx, %rdi
movq %rdx, %rsi
callq 0xd4e3
movq -0x60(%rbp), %rax
andq %rax, %r14
sete %cl
testb $0x3, %al
setne %dl
orb %cl, %dl
jne 0x5788f
movl -0x68(%rbp), %edi
decl (%r14)
movq -0x40(%rbp), %rbx
jne 0x574f0
shlq $0x30, %rdi
orq %rax, %rdi
leaq 0xbdd8e(%rip), %rsi     # 0x115279
callq 0xd4e3
xorl %eax, %eax
jmp 0x57895
movabsq $0xfffffffffffc, %r13   # imm = 0xFFFFFFFFFFFC
leaq -0x90(%rbp), %rsi
movq %r14, %rdi
movq %rdx, %r14
callq 0xd450
movq %r13, %rdi
movq %r14, %r13
testb $0x1, %r14b
je 0x57536
movq %r12, %rcx
andq %rdi, %rcx
sete %dl
testb $0x3, %bl
setne %sil
orb %dl, %sil
jne 0x57536
incl (%rcx)
movq %rax, %rsi
shrq $0x30, %rsi
andq %rdi, %rax
movq %r12, %rcx
shrq $0x30, %rcx
andq %rdi, %r12
leaq -0x80(%rbp), %r9
movq %rdi, %r14
movq %r15, %rdi
movq %rax, %rdx
movq %r12, %r8
callq 0x19f28
testb %al, %al
je 0x575c6
movq %r13, %rsi
testb $0x1, %sil
je 0x5758a
testq %r12, %r12
sete %al
testb $0x3, %bl
setne %cl
orb %al, %cl
jne 0x5758a
decl (%r12)
jne 0x5758a
movq %rbx, %rdi
callq 0xd4e3
movq -0x80(%rbp), %rdi
movl -0x90(%rbp), %edx
movq -0x88(%rbp), %rcx
movl -0x68(%rbp), %r8d
movq -0x60(%rbp), %r9
leaq -0x78(%rbp), %rbx
leaq -0x58(%rbp), %r14
movq -0x40(%rbp), %rsi
pushq %rbx
pushq %r14
callq 0x573fc
addq $0x10, %rsp
movq (%rbx), %rbx
movq (%r14), %r15
jmp 0x57895
movq -0x60(%rbp), %rax
movq %rax, %rcx
andq %r14, %rcx
sete %dl
testb $0x3, %al
setne %sil
orb %dl, %sil
jne 0x575f8
movl -0x68(%rbp), %edi
decl (%rcx)
jne 0x575f8
shlq $0x30, %rdi
orq %rax, %rdi
leaq 0xbdc86(%rip), %rsi     # 0x115279
callq 0xd4e3
movq -0x80(%rbp), %rax
movq %rax, -0x48(%rbp)
movl -0x90(%rbp), %edi
movq -0x88(%rbp), %rsi
testb $0x1, %r13b
sete %r14b
movq $0x0, -0x38(%rbp)
leaq -0x58(%rbp), %r13
movq $0x0, -0x30(%rbp)
movq %r13, %rdx
callq 0x115ef
testl %eax, %eax
je 0x576da
cmpl $0x1, %eax
jne 0x578b2
movq %rdx, %rdi
callq 0xdaeb
movq %rax, %r12
movq %rdx, %r13
movq %rax, %rdi
testb $0x1, %r13b
movabsq $0xfffffffffffc, %rsi   # imm = 0xFFFFFFFFFFFC
je 0x57679
movq %r12, %rax
andq %rsi, %rax
sete %cl
testb $0x3, %dil
setne %dl
orb %cl, %dl
jne 0x57679
incl (%rax)
movq %rdi, -0x70(%rbp)
testb $0x1, %r14b
jne 0x57698
movq %rbx, %rax
andq %rsi, %rax
sete %cl
testb $0x3, %bl
setne %dl
orb %cl, %dl
jne 0x57698
incl (%rax)
movq %rbx, %r15
shrq $0x30, %r15
andq %rsi, %rbx
movq %r12, %rcx
shrq $0x30, %rcx
andq %rsi, %r12
movq -0x48(%rbp), %rdi
movl %r15d, %esi
movq %rbx, %rdx
movq %r12, %r8
leaq -0x78(%rbp), %r9
callq 0x19f28
movl %eax, %r14d
testb %al, %al
je 0x576fc
movq -0x70(%rbp), %rdi
movq %r13, %rsi
callq 0x95f6
movq %rdx, %r13
jmp 0x57728
movl -0x58(%rbp), %edi
movq -0x50(%rbp), %rsi
movq %rbx, %r15
shrq $0x30, %r15
movabsq $0xfffffffffffc, %rax   # imm = 0xFFFFFFFFFFFC
andq %rax, %rbx
xorl %eax, %eax
jmp 0x577cf
testb $0x1, %r13b
movq -0x70(%rbp), %rdi
je 0x57725
testq %r12, %r12
sete %al
testb $0x3, %dil
setne %cl
orb %al, %cl
jne 0x57725
decl (%r12)
jne 0x57725
movq %r13, %rsi
callq 0xd4e3
xorl %r13d, %r13d
movq -0x78(%rbp), %rax
movq %rax, -0x48(%rbp)
movl -0x58(%rbp), %edi
testb %r14b, %r14b
je 0x577c5
movq -0x50(%rbp), %rax
movq %rax, %rcx
movabsq $0xfffffffffffc, %rdx   # imm = 0xFFFFFFFFFFFC
andq %rdx, %rcx
sete %dl
testb $0x3, %al
setne %sil
orb %dl, %sil
jne 0x57775
decl (%rcx)
jne 0x57775
shlq $0x30, %rdi
orq %rax, %rdi
leaq 0xbdb09(%rip), %rsi     # 0x115279
callq 0xd4e3
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
jne 0x577b2
decl (%rax)
jne 0x577b2
movq -0x30(%rbp), %rdi
shlq $0x30, %rdi
orq %rsi, %rdi
leaq 0xbdb14(%rip), %rsi     # 0x1152c1
callq 0xd4e3
xorl %edi, %edi
movl $0x1, %eax
movq %rax, -0x30(%rbp)
movq %r13, -0x38(%rbp)
xorl %esi, %esi
jmp 0x577c9
movq -0x50(%rbp), %rsi
movb $0x1, %al
leaq -0x58(%rbp), %r13
movq %rbx, %r12
shlq $0x30, %r15
movq %r15, %rbx
orq %r12, %rbx
xorl %r14d, %r14d
testb %al, %al
jne 0x57629
movq %rsi, %rax
movabsq $0xfffffffffffc, %rcx   # imm = 0xFFFFFFFFFFFC
andq %rcx, %rax
sete %cl
testb $0x3, %sil
setne %dl
orb %cl, %dl
jne 0x5781c
decl (%rax)
jne 0x5781c
shlq $0x30, %rdi
orq %rsi, %rdi
leaq 0xbda62(%rip), %rsi     # 0x115279
callq 0xd4e3
testq %r12, %r12
movq -0x48(%rbp), %r15
je 0x5783a
decl (%r12)
jne 0x5783a
movq %rbx, %rdi
leaq 0xbe14c(%rip), %rsi     # 0x115981
callq 0xd4e3
movl -0x30(%rbp), %ebx
movabsq $0xfffffffffffc, %rdx   # imm = 0xFFFFFFFFFFFC
movq -0x38(%rbp), %rsi
andq %rsi, %rdx
sete %al
testb $0x3, %sil
setne %cl
orb %al, %cl
jne 0x57876
decl (%rdx)
jne 0x57876
movq %rbx, %rdi
shlq $0x30, %rdi
orq %rsi, %rdi
leaq 0xbda50(%rip), %rsi     # 0x1152c1
callq 0xd4e3
leaq 0x1(,%rbx,2), %rdi
movl $0x1, %esi
callq 0xec04
testl %eax, %eax
setne %al
jmp 0x57891
xorl %eax, %eax
movq -0x40(%rbp), %rbx
movq 0x18(%rbp), %rcx
movq 0x10(%rbp), %rdx
movq %rbx, (%rcx)
movq %r15, (%rdx)
addq $0x68, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl $0x20, %edi
callq 0xf9f7
movq $0x20, 0x10(%rax)
movups 0x8ce82(%rip), %xmm0    # 0xe474d
movups %xmm0, 0x18(%rax)
movups 0x8ce87(%rip), %xmm0    # 0xe475d
movups %xmm0, 0x28(%rax)
movq %rax, %rdi
callq 0x95a5