// File: /workspace/github_c_makefile_star2_O2/oridb[P]mc/6/simp.c
// Function: rval
static Node *
rval(Simp *s, Node *n, Node *dst)
{
	Node *t, *u, *v; /* temporary nodes */
	Node *r; /* expression result */
	Node **args;
	vlong idx, nelt;
	size_t i;
	Type *ty;

	r = NULL;
	args = n->expr.args;
	switch (exprop(n)) {
	case Osize:
		r = mkintlit(n->loc, size(args[0]));
		r->expr.type = exprtype(n);
		break;
	case Oslice:
		r = simpslice(s, n, dst);
		break;
	case Oidx:
		t = rval(s, n->expr.args[0], NULL);
		u = idxaddr(s, t, n->expr.args[1]);
		r = load(u);
		break;
	case Otupmemb:
	case Omemb:
		t = membaddr(s, n);
		r = load(t);
		break;
	case Osllen:
		r = seqlen(s, args[0], exprtype(n));
		break;
	case Oucon:
		r = simpucon(s, n, dst);
		break;
	case Outag:
		r = uconid(s, args[0]);
		break;
	case Oudata:
		r = simpuget(s, n, dst);
		break;
	case Otup:
		r = simptup(s, n, dst);
		break;
	case Oarr:
		if (!dst)
			dst = temp(s, n);
		ty = exprtype(dst);
		t = addr(s, dst, exprtype(dst));
		if (!getintlit(ty->asize, &nelt))
			die("array missing size");
		/* we only need to clear if we don't have things fully initialized */
		idx = 0;
		if (nelt != n->expr.nargs)
			append(s, mkexpr(n->loc, Oclear, t, mkintlit(n->loc, size(n)), NULL));
		for (i = 0; i < n->expr.nargs; i++) {
			if (!args[i]->expr.idx)
				idx++;
			else if (!getintlit(args[i]->expr.idx, &idx))
				die("non-numeric array size");
			assert(idx < nelt);
			assignat(s, t, size(args[i])*idx, rval(s, args[i], NULL));
		}
		r = dst;
		break;
	case Ostruct:
		if (!dst)
		dst = temp(s, n);
		u = mkexpr(dst->loc, Odef, dst, NULL);
		u->expr.type = mktype(u->loc, Tyvoid);
		append(s, u);
		t = addr(s, dst, exprtype(dst));
		ty = exprtype(n);
		/* we only need to clear if we don't have things fully initialized */
		if (tybase(ty)->nmemb != n->expr.nargs)
			append(s, mkexpr(n->loc, Oclear, t, mkintlit(n->loc, size(n)), NULL));
		for (i = 0; i < n->expr.nargs; i++)
			assignat(s, t, offset(n, args[i]->expr.idx), rval(s, args[i], NULL));
		r = dst;
		break;
	case Ocast:
		r = simpcast(s, args[0], exprtype(n));
		break;

	/* ++expr(x)
	 *  => args[0] = args[0] + 1
	 *     expr(x) */
	case Olit:
		switch (args[0]->lit.littype) {
		case Lvoid:
		case Lchr:
		case Lbool:
		case Llbl:
			r = n;
			break;
		case Lint:
			/* we can only have up to 4 byte immediates, but they
			 * can be moved into 64 bit regs */
			if ((uint64_t)args[0]->lit.intval < 0x7fffffffULL)
				r = n;
			else
				r = simpblob(s, n);
			break;
		case Lstr: case Lflt:
			r = simpblob(s, n);
			break;
		case Lfunc:
			r = capture(s, n, dst);
			break;
		}
		break;
	case Ovar:
		r = loadvar(s, n, dst);
		break;;
	case Ogap:
		fatal(n, "'_' may not be an rvalue");
		break;
	case Oret:
		/*
		 * Compute and put the correct value into s->ret. In the case of ArgBig
		 * and ArgReg, exfiltrate the value from the function. In the case of
		 * ArgAggr_XYZ, put a pointer to the value where the function
		 * epilogue can access it.
		 */
		switch (s->rettype) {
		case ArgAggrI:
		case ArgAggrF:
		case ArgAggrII:
		case ArgAggrIF:
		case ArgAggrFI:
		case ArgAggrFF:
			t = s->ret;
			u = rval(s, args[0], NULL);
			u = addr(s, u, exprtype(args[0]));
			v = set(t, u);
			append(s, v);
		case ArgBig:
			t = rval(s, args[0], NULL);
			t = addr(s, t, exprtype(args[0]));
			u = disp(n->loc, size(args[0]));
			v = mkexpr(n->loc, Oblit, s->ret, t, u, NULL);
			append(s, v);
			break;
		case ArgVoid:
			rval(s, args[0], NULL);
			break;
		case ArgReg:
			t = s->ret;
			u = rval(s, args[0], NULL);
			t = set(t, u);
			append(s, t);
			break;
		}
		append(s, mkexpr(n->loc, Oret, NULL));
		break;
	case Oasn:
		r = assign(s, args[0], args[1]);
		break;
	case Ocall:
		r = simpcall(s, n, dst);
		break;
	case Oaddr:
		t = lval(s, args[0]);
		if (exprop(t) == Ovar) /* Ovar is the only one that doesn't return Oderef(Oaddr(...)) */
			r = addr(s, t, exprtype(t));
		else
			r = t->expr.args[0];
		break;
	case Oneg:
		if (istyfloat(exprtype(n))) {
			t = mkfloat(n->loc, -1.0);
			u = mkexpr(n->loc, Olit, t, NULL);
			t->lit.type = n->expr.type;
			u->expr.type = n->expr.type;
			v = simpblob(s, u);
			r = mkexpr(n->loc, Ofmul, v, rval(s, args[0], NULL), NULL);
			r->expr.type = n->expr.type;
		} else {
			r = visit(s, n);
		}
		break;
	case Otupget:
		assert(exprop(args[1]) == Olit);
		i = args[1]->expr.args[0]->lit.intval;
		t = rval(s, args[0], NULL);
		r = tupget(s, t, i, dst);
		break;
	case Olor: case Oland:
	case Oaddeq: case Osubeq: case Omuleq: case Odiveq: case Omodeq:
	case Oboreq: case Obandeq: case Obxoreq: case Obsleq: case Obsreq:
	case Opreinc: case Opredec:
	case Opostinc: case Opostdec:
                die("invalid operator: should have been removed");
	case Obad:
		die("bad operator");
		break;
	default:
		if (istyfloat(exprtype(n))) {
			switch (exprop(n)) {
			case Oadd:	n->expr.op = Ofadd;	break;
			case Osub:	n->expr.op = Ofsub;	break;
			case Omul:	n->expr.op = Ofmul;	break;
			case Odiv:	n->expr.op = Ofdiv;	break;
			default:	break;
			}
		}
		r = visit(s, n);
		break;
	}
	return r;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x38, %rsp
movq %rdx, %rbp
movq %rsi, %r15
movq %rdi, %rbx
movq 0x50(%rsi), %r14
movq %rsi, %rdi
callq 0x1b5e6
cmpl $0x45, %eax
ja 0xeb3a
movl %eax, %eax
leaq 0x1fbc7(%rip), %rcx     # 0x2e0f0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
movq %rbx, 0x10(%rsp)
jmpq *%rax
movq %rbx, %r12
movq 0x50(%r15), %rbx
movq (%rbx), %rdi
callq 0x1bf90
movq %rax, %rdi
callq 0x1fcd8
movl (%rax), %ebp
movq (%rbx), %rsi
movq %r12, %rdi
callq 0xfcfb
movq %rax, %r14
cmpl $0x12, %ebp
je 0xe57c
movq %r15, %rdi
callq 0x1bf90
movq %r12, %rdi
movq %r14, %rsi
movq %rax, %rdx
callq 0xdab6
movq %rax, %r14
movq (%rbx), %rdi
movq 0x8(%rbx), %rsi
callq 0x111fc
movq (%r15), %rdi
movl %eax, %esi
callq 0xe335
movq %r14, %rdi
movq %rax, %rsi
callq 0xe2d4
movq %rax, %rbx
movq (%r15), %rdi
movq 0x20(%r15), %rsi
callq 0x2020c
movq %rax, 0x20(%rbx)
movq %rbx, %rdi
jmp 0xec9d
movq %rbp, %r14
movq %r15, %rdi
callq 0x1bf90
movq %rax, %rdi
callq 0x1fcd8
movq %rax, %r13
movq 0x50(%r15), %rax
movq (%rax), %rsi
movq %r13, %rdi
callq 0x203ff
testq %rax, %rax
je 0xf728
movq %rax, %r12
testq %r14, %r14
jne 0xe5fc
movq %rbx, %rdi
movq %r15, %rsi
callq 0xd96c
movq %rax, %r14
movq %r13, %rdi
callq 0x1fd13
testl %eax, %eax
je 0xf2a1
movq %r14, %r12
movq %r14, %rdi
movq %r15, %rsi
callq 0xe34a
jmp 0xeeb5
movq (%r14), %r14
movq %r15, %rdi
callq 0x1bf90
movq %rbx, %rdi
movq %r14, %rsi
movq %rax, %rdx
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xf95a
movq %rbp, (%rsp)
movq 0x8(%r14), %rdi
callq 0x1b5e6
cmpl $0x35, %eax
jne 0xf731
movq (%r14), %rsi
movq 0x8(%r14), %rax
movq 0x50(%rax), %rax
movq (%rax), %rax
movq 0x30(%rax), %r15
xorl %r12d, %r12d
movq %rbx, %rdi
xorl %edx, %edx
callq 0xe4f4
movq %rax, 0x10(%rsp)
movq %rax, %rdi
callq 0x1bf90
movq %rax, %r13
xorl %r14d, %r14d
cmpq 0x70(%r13), %r14
jae 0xefef
movq 0x68(%r13), %rax
movq (%rax,%r14,8), %rsi
movq %r12, %rdi
callq 0xd890
movq %rax, %rbp
cmpq %r14, %r15
je 0xefe9
movq 0x68(%r13), %rax
movq (%rax,%r14,8), %rdi
callq 0x10d64
movq %rax, %r12
addq %rbp, %r12
incq %r14
jmp 0xe68e
movq (%r14), %rsi
movq %rbx, %rdi
xorl %edx, %edx
callq 0xe4f4
movq %rax, %r12
movq %rax, %rdi
callq 0x1b5e6
movl %eax, %ebp
movq %r12, %rdi
callq 0x1bf90
cmpl $0x36, %ebp
jne 0xeec0
movq 0x50(%r12), %rcx
movq (%rcx), %rsi
movq %rax, %rdi
callq 0x203ff
movl 0x8(%rax), %esi
movq (%rax), %rdi
callq 0x1b6fc
movq %rax, %r12
movq 0x4fc14(%rip), %rax     # 0x5e330
jmp 0xec10
movl 0x28(%rbx), %eax
cmpq $0x8, %rax
ja 0xe7de
leaq 0x1fad3(%rip), %rcx     # 0x2e208
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x20(%rbx), %r13
movq (%r14), %rsi
movq %rbx, %rdi
xorl %edx, %edx
callq 0xe4f4
movq %rax, %r12
movq (%r14), %rdi
callq 0x1bf90
movq %rbx, %rdi
movq %r12, %rsi
movq %rax, %rdx
callq 0xdab6
movq %r13, %rdi
movq %rax, %rsi
callq 0xe34a
movq %rbx, %rdi
movq %rax, %rsi
callq 0xe461
movq (%r14), %rsi
movq %rbx, %rdi
xorl %edx, %edx
callq 0xe4f4
movq %rax, %r12
movq (%r14), %rdi
callq 0x1bf90
movq %rbx, %rdi
movq %r12, %rsi
movq %rax, %rdx
callq 0xdab6
movq %rax, %r12
movq (%r14), %rdi
callq 0x10f54
movq (%r15), %rdi
movl %eax, %esi
callq 0xe335
movq 0x20(%rbx), %rdx
movq (%r15), %rdi
pushq $0x46
popq %rsi
movq %r12, %rcx
movq %rax, %r8
xorl %r9d, %r9d
xorl %eax, %eax
callq 0x1b718
movq %rbx, %rdi
movq %rax, %rsi
callq 0xe461
movq (%r15), %rdi
xorl %r12d, %r12d
pushq $0x2f
popq %rsi
xorl %edx, %edx
xorl %eax, %eax
callq 0x1b718
jmp 0xeeb5
testq %rbp, %rbp
jne 0xe808
movq %rbx, %rdi
movq %r15, %rsi
callq 0xd96c
movq %rax, %rbp
movq %rbp, (%rsp)
movq 0x50(%r15), %rax
movq (%rax), %r13
movq %r13, %rdi
callq 0x1b5e6
cmpl $0x39, %eax
jne 0xe82b
cmpq $0x0, 0x40(%r13)
je 0xf3d6
movq %rbx, %rdi
movq %r13, %rsi
xorl %edx, %edx
callq 0xe4f4
movq %rax, %r13
movq 0x50(%r15), %rax
movq 0x8(%rax), %rdx
movq %rbx, %rdi
movq %r13, %rsi
callq 0xfe6e
movq %rax, 0x10(%rsp)
movq 0x50(%r15), %rax
movq 0x8(%rax), %rsi
movq %rbx, %rdi
xorl %edx, %edx
callq 0xe4f4
movq %rax, %rdi
callq 0xff7c
movq %rax, %r12
movq 0x50(%r15), %rax
movq 0x10(%rax), %rsi
movq %rbx, %rdi
xorl %edx, %edx
callq 0xe4f4
movq %rax, %rdi
callq 0xff7c
movq %rax, %rbp
movq (%rax), %rdi
pushq $0x3
popq %rsi
movq %rax, %rdx
movq %r12, %rcx
xorl %r8d, %r8d
xorl %eax, %eax
callq 0x1b718
movq %rax, %r15
movq 0x20(%rbp), %rax
movq %rax, 0x20(%r15)
movq 0x4fa7b(%rip), %rdx     # 0x5e330
movq %rbx, %rdi
movq %r13, %rsi
callq 0xf95a
testq %rax, %rax
je 0xe8d6
pushq $0x1c
popq %rsi
movq %rbx, %rdi
movq %rax, %rdx
movq %rbp, %rcx
callq 0xffd0
movq (%rsp), %r14
movq %r14, %rdi
callq 0x1bf90
movq %rax, %rdi
callq 0x1fcd8
cmpl $0x12, (%rax)
movq 0x4fa34(%rip), %rdx     # 0x5e328
jne 0xeef7
movq (%r14), %rdi
movq %rdx, %rsi
callq 0x2020c
movq %rbx, %rdi
movq %r14, %rsi
movq %rax, %rdx
callq 0xf9be
movq %rax, %rdi
movq 0x10(%rsp), %rsi
callq 0xe34a
movq %rax, %r12
movq 0x4f9fe(%rip), %rsi     # 0x5e328
movq (%r14), %rdi
callq 0x2020c
movq %rbx, %rdi
movq %r14, %rsi
movq %rax, %rdx
callq 0xf9be
jmp 0xef2e
movq (%r14), %rax
movl 0x18(%rax), %ecx
cmpq $0x7, %rcx
ja 0xf549
leaq 0x1f8d0(%rip), %rdx     # 0x2e22c
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %r15, %r12
jmp 0xf3b2
testq %rbp, %rbp
jne 0xe980
movq %rbx, %rdi
movq %r15, %rsi
callq 0xd96c
movq %rax, %rbp
movq (%rbp), %rdi
pushq $0x3d
popq %rsi
movq %rbp, %rdx
xorl %ecx, %ecx
xorl %eax, %eax
callq 0x1b718
movq %rax, %r12
movq (%rax), %rdi
pushq $0x1
popq %rsi
callq 0x1fdc2
movq %rax, 0x20(%r12)
movq %rbx, %rdi
movq %r12, %rsi
callq 0xe461
movq %rbp, %rdi
callq 0x1bf90
movq %rbx, %rdi
movq %rbp, (%rsp)
movq %rbp, %rsi
movq %rax, %rdx
callq 0xdab6
movq %rax, %r12
movq %r15, %rdi
callq 0x1bf90
movq %rax, %rdi
callq 0x1fcd8
movq 0x78(%rax), %rax
cmpq 0x40(%r15), %rax
je 0xea1c
movq %r15, %rdi
callq 0x10f54
movq (%r15), %rdi
movq %rax, %rsi
callq 0x1b6fc
movq (%r15), %rdi
pushq $0x47
popq %rsi
movq %r12, %rdx
movq %rax, %rcx
xorl %r8d, %r8d
xorl %eax, %eax
callq 0x1b718
movq %rbx, %rdi
movq %rax, %rsi
callq 0xe461
xorl %ebx, %ebx
movq 0x10(%rsp), %rbp
cmpq 0x40(%r15), %rbx
jae 0xef67
movq (%r14,%rbx,8), %rax
movq 0x48(%rax), %rsi
movq %r15, %rdi
callq 0x111fc
movq %rax, %r13
movq (%r14,%rbx,8), %rsi
movq %rbp, %rdi
xorl %edx, %edx
callq 0xe4f4
movq %rbp, %rdi
movq %r12, %rsi
movq %r13, %rdx
movq %rax, %rcx
callq 0xdb74
incq %rbx
jmp 0xea23
movq 0x50(%r15), %r14
testq %rbp, %rbp
jne 0xea7b
movq %rbx, %rdi
movq %r15, %rsi
callq 0xd96c
movq %rax, %rbp
movq %rbp, %rdi
callq 0x1bf90
movq %rbx, %rdi
movq %rbp, (%rsp)
movq %rbp, %rsi
movq %rax, %rdx
callq 0xdab6
movq %rax, %r12
xorl %ebx, %ebx
xorl %r13d, %r13d
cmpq 0x40(%r15), %rbx
jae 0xef67
movq (%r14,%rbx,8), %rdi
callq 0x1bf90
movq %r13, %rdi
movq %rax, %rsi
callq 0xd890
movq %rax, %rbp
movq (%r14,%rbx,8), %rsi
movq 0x10(%rsp), %r13
movq %r13, %rdi
xorl %edx, %edx
callq 0xe4f4
movq %r13, %rdi
movq %r12, %rsi
movq %rbp, %rdx
movq %rax, %rcx
callq 0xdb74
movq (%r14,%rbx,8), %rdi
callq 0x10f54
movq %rax, %r13
addq %rbp, %r13
incq %rbx
jmp 0xea9d
movq (%r14), %r14
movq %r15, %rdi
callq 0x1bf90
movq %rbx, %rdi
movq %r14, %rsi
movq %rax, %rdx
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xf9be
movq (%r14), %rsi
movq 0x8(%r14), %rdx
movq %rbx, %rdi
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xfbf6
movq %r15, %rdi
callq 0x1bf90
movq %rax, %rdi
callq 0x204b9
testl %eax, %eax
je 0xec1a
movq %r15, %rdi
callq 0x1b5e6
leal -0x2(%rax), %ecx
cmpl $0x3, %ecx
ja 0xec1a
addl $0x4d, %eax
movl %eax, 0x18(%r15)
jmp 0xec1a
movq (%r14), %rdi
callq 0x10f54
movq (%r15), %rdi
movq %rax, %rsi
callq 0x1b6fc
movq %rax, %r12
movq %r15, %rdi
callq 0x1bf90
jmp 0xec10
movq %r15, %rdi
callq 0x1bf90
movq %rax, %rdi
callq 0x204b9
testl %eax, %eax
je 0xec1a
movq (%r15), %rdi
movsd 0x1f537(%rip), %xmm0    # 0x2e0e8
callq 0x1bcfa
movq %rax, %r12
movq (%r15), %rdi
pushq $0x35
popq %rsi
movq %rax, %rdx
xorl %ecx, %ecx
xorl %eax, %eax
callq 0x1b718
movq 0x20(%r15), %rcx
movq %rcx, 0x20(%r12)
movq %rcx, 0x20(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0xfb84
movq %rax, %r12
movq (%r14), %rsi
movq %rbx, %rdi
xorl %edx, %edx
callq 0xe4f4
movq (%r15), %rdi
pushq $0x51
popq %rsi
movq %r12, %rdx
movq %rax, %rcx
xorl %r8d, %r8d
xorl %eax, %eax
callq 0x1b718
movq %rax, %r12
movq 0x20(%r15), %rax
movq %rax, 0x20(%r12)
jmp 0xf3b2
movq %rbx, %rdi
movq %r15, %rsi
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xfdd8
movq (%r14), %rsi
movq %rbx, %rdi
callq 0xfcfb
movq %rax, %r14
movq %rax, %rdi
callq 0x1b5e6
cmpl $0x33, %eax
jne 0xef70
movq %r14, %rdi
callq 0x1bf90
movq %rbx, %rdi
movq %r14, %rsi
movq %rax, %rdx
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xdab6
movq 0x50(%r15), %rax
movq (%rax), %rsi
movq %rbx, %rdi
xorl %edx, %edx
callq 0xe4f4
movq 0x50(%r15), %rcx
movq 0x8(%rcx), %rdx
movq %rbx, %rdi
movq %rax, %rsi
callq 0xf81e
movq %rax, %rdi
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xf792
movq 0x50(%r15), %rax
movq (%rax), %r13
movq %r13, %rdi
callq 0x25902
testl %eax, %eax
movq %rbp, (%rsp)
jne 0xecd7
movq %rbx, %rdi
movq %r13, %rsi
xorl %edx, %edx
callq 0xe4f4
movq %rax, %r13
movq %r13, %rdi
callq 0x1bf90
movq %rax, %rdi
callq 0x1fcd8
movq %rax, %r12
movq %r15, %rdi
callq 0x1bf90
cmpl $0x1, (%rax)
jne 0xef7c
movq $0x0, (%rsp)
jmp 0xefa6
testq %rbp, %rbp
jne 0xed1b
movq %rbx, %rdi
movq %r15, %rsi
callq 0xd96c
movq %rax, %rbp
movq %rbp, %rdi
callq 0x1bf90
movq %rax, %r13
movq %rbp, %rdi
callq 0x1bf90
movq %rbx, %rdi
movq %rbp, (%rsp)
movq %rbp, %rsi
movq %rax, %rdx
callq 0xdab6
movq %rax, %r12
movq 0x88(%r13), %rdi
leaq 0x18(%rsp), %rsi
callq 0x12b14
testl %eax, %eax
je 0xf750
andq $0x0, 0x8(%rsp)
movq 0x18(%rsp), %rax
cmpq 0x40(%r15), %rax
je 0xeda1
movq %r15, %rdi
callq 0x10f54
movq (%r15), %rdi
movq %rax, %rsi
callq 0x1b6fc
movq (%r15), %rdi
pushq $0x47
popq %rsi
movq %r12, %rdx
movq %rax, %rcx
xorl %r8d, %r8d
xorl %eax, %eax
callq 0x1b718
movq %rbx, %rdi
movq %rax, %rsi
callq 0xe461
xorl %r13d, %r13d
cmpq 0x40(%r15), %r13
jae 0xef67
movq (%r14,%r13,8), %rax
movq 0x48(%rax), %rdi
testq %rdi, %rdi
je 0xedd4
leaq 0x8(%rsp), %rsi
callq 0x12b14
testl %eax, %eax
je 0xf711
movq 0x8(%rsp), %rax
jmp 0xede1
movq 0x8(%rsp), %rax
incq %rax
movq %rax, 0x8(%rsp)
cmpq 0x18(%rsp), %rax
jge 0xf6f2
movq (%r14,%r13,8), %rdi
callq 0x10f54
movq %rax, %rbp
imulq 0x8(%rsp), %rbp
movq (%r14,%r13,8), %rsi
movq %rbx, %rdi
xorl %edx, %edx
callq 0xe4f4
movq %rbx, %rdi
movq %r12, %rsi
movq %rbp, %rdx
movq %rax, %rcx
callq 0xdb74
incq %r13
jmp 0xeda4
movq %rbx, %rdi
movq %r15, %rsi
movq %rbp, %rdx
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xd8ce
testq %rbp, %rbp
jne 0xee51
movq %rbx, %rdi
movq %r15, %rsi
callq 0xd96c
movq %rax, %rbp
movq 0x50(%r15), %rax
movq (%rax), %rsi
movq %rbx, %rdi
xorl %edx, %edx
callq 0xe4f4
movq %rax, %r12
movq %r15, %rdi
callq 0x1bf90
pushq $0x4
popq %rdi
movq %rax, %rsi
callq 0xd890
movq %rax, %r13
movq %r15, %rdi
callq 0x1bf90
movq %rbx, %rdi
movq %r12, %rsi
movq %rbp, %r12
movq %rax, %rdx
callq 0xdab6
movq %rax, %rdi
movq %r13, %rsi
callq 0xf7ee
movq %rax, %rdi
callq 0xf792
movq %rbx, %rdi
movq %rbp, %rsi
movq %rax, %rdx
callq 0xfbf6
movq %rbx, %rdi
movq %rax, %rsi
jmp 0xf3ad
movq %rax, %rdi
callq 0x1fcd8
movq %rax, %rdi
callq 0x1fd13
testl %eax, %eax
jne 0xf3b2
movq (%r12), %rdi
pushq $0xc
popq %rsi
callq 0x1fdc2
movq %rbx, %rdi
movq %r12, %rsi
movq %rax, %rdx
callq 0xdab6
jmp 0xec9a
movq %rbx, %rdi
movq %r14, %rsi
callq 0xdab6
movq %rax, %rdi
xorl %esi, %esi
callq 0xe3fb
movq %rax, %rdi
movq 0x10(%rsp), %rsi
callq 0xe34a
movq %rax, %r12
movq 0x4f405(%rip), %rdx     # 0x5e328
movq %rbx, %rdi
movq %r14, %rsi
callq 0xdab6
pushq $0x8
popq %rsi
movq %rax, %rdi
callq 0xf7ee
movq %rax, %rdi
xorl %esi, %esi
callq 0xe3fb
movq %rax, %rdi
movq %r15, %rsi
callq 0xe34a
movq %rax, %r15
movq %rbx, %rdi
movq %r12, %rsi
callq 0xe461
movq %rbx, %rdi
movq %r15, %rsi
callq 0xe461
movq (%rsp), %r12
jmp 0xf3b2
movq 0x50(%r14), %rax
movq (%rax), %r12
jmp 0xf3b2
movq %r15, %rdi
callq 0x1bf90
movq %rax, %rdi
callq 0x1fcb0
cmpq $0x0, (%rsp)
je 0xef97
testl %eax, %eax
jne 0xefa6
movq %rbx, %rdi
movq %r15, %rsi
callq 0xd96c
movq %rax, (%rsp)
leaq 0x18(%rsp), %rbp
andq $0x0, (%rbp)
leaq 0x8(%rsp), %r14
andq $0x0, (%r14)
movq %rbx, %rdi
movq %r13, %rsi
callq 0xd9da
movq %rbp, %rdi
movq %r14, %rsi
movq %rax, %rdx
callq 0x29b2d
movq %r13, %rdi
callq 0x25902
testl %eax, %eax
je 0xf0c5
pushq $0x2d
jmp 0xf10c
movq %r15, %r14
movq %rbp, %r12
movq (%rsp), %rbp
testq %rbp, %rbp
jne 0xf033
movq 0x68(%r13), %rax
movq (%rax,%r15,8), %rsi
movq 0x10(%rsp), %rax
movq (%rax), %rdi
leaq 0x8(%rsp), %rdx
callq 0x1bdcc
movq %rax, %rbp
movq 0x68(%r13), %rax
movq (%rax,%r15,8), %rdi
callq 0x1fcb0
testl %eax, %eax
je 0xf033
movq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0xe18a
movq 0x68(%r13), %rax
movq (%rax,%r14,8), %rdx
movq %rbx, %rdi
movq 0x10(%rsp), %r15
movq %r15, %rsi
callq 0xdab6
movq %rax, %r14
movq (%r15), %rdi
movl %r12d, %esi
callq 0xe335
movq %r14, %rdi
movq %rax, %rsi
callq 0xe2d4
movq %rax, %r15
movq %rbp, %rdi
callq 0xd8a8
testl %eax, %eax
movq %rbp, %r12
je 0xf394
movq %r12, %rdi
callq 0x10f54
movq (%r12), %rdi
movl %eax, %esi
callq 0xe335
movq %rax, %r14
movq %r12, %rdi
callq 0x1bf90
movq %rbx, %rdi
movq %r12, %rsi
movq %rax, %rdx
callq 0xdab6
movq (%r12), %rdi
pushq $0x46
popq %rsi
movq %rax, %rdx
movq %r15, %rcx
movq %r14, %r8
xorl %r9d, %r9d
xorl %eax, %eax
callq 0x1b718
jmp 0xf3a7
movq %r13, %rdi
callq 0x1bf90
movq %rax, %rdi
callq 0x1fcd8
cmpl $0x13, (%rax)
jne 0xf773
movq 0x4f243(%rip), %rdx     # 0x5e328
movq %rbx, %rdi
movq %r13, %rsi
callq 0xdab6
movq %rax, %rdi
callq 0xf792
leaq 0x18(%rsp), %rdi
leaq 0x8(%rsp), %rsi
movq %rax, %rdx
callq 0x29b2d
pushq $0x48
popq %rax
movl %eax, 0x10(%rsp)
movq %r15, %rdi
callq 0x1bf90
movq %rax, %rdi
callq 0x11260
leal -0x2(%rax), %ecx
cmpl $0x7, %ecx
jae 0xf3c4
movq %r15, %rdi
callq 0x1bf90
movq %rbx, %rdi
movq (%rsp), %rsi
movq %rax, %rdx
callq 0xdab6
movq %rax, %rdx
leaq 0x18(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x29b2d
pushq $0x1
popq %r14
leaq 0x18(%rsp), %r13
leaq 0x8(%rsp), %rbp
movq 0x70(%r12), %rax
cmpq 0x40(%r15), %r14
jae 0xf228
cmpq %rax, %r14
jae 0xf1a4
movq 0x68(%r12), %rax
movq (%rax,%r14,8), %rdi
callq 0x1fcd8
cmpl $0x11, (%rax)
jne 0xf1a4
movq %rbx, %rdi
movq %r15, %rsi
callq 0x102ee
movq %r13, %rdi
movq %rbp, %rsi
movq %rax, %rdx
callq 0x29b2d
movq 0x50(%r15), %rax
movq (%rax,%r14,8), %rdi
callq 0x1bf90
movq %rax, %rdi
callq 0x1fcd8
cmpl $0x1, (%rax)
je 0xf220
movq 0x50(%r15), %rax
movq (%rax,%r14,8), %rsi
movq %rbx, %rdi
xorl %edx, %edx
callq 0xe4f4
movq %r13, %rdi
movq %rbp, %rsi
movq %rax, %rdx
callq 0x29b2d
movq 0x50(%r15), %rax
movq (%rax,%r14,8), %rdi
callq 0x1b5e6
cmpl $0x12, %eax
jne 0xf220
movq 0x50(%r15), %rax
movq (%rax,%r14,8), %rax
movq 0x50(%rax), %rax
movq (%rax), %rdi
callq 0x1b5e6
cmpl $0x33, %eax
jne 0xf220
movq 0x50(%r15), %rax
movq (%rax,%r14,8), %rax
movq 0x50(%rax), %rax
movq (%rax), %rsi
movq %rbx, %rdi
callq 0x102af
incq %r14
jmp 0xf164
cmpq %rax, %r14
jae 0xf25d
movq 0x68(%r12), %rax
movq (%rax,%r14,8), %rdi
callq 0x1fcd8
cmpl $0x11, (%rax)
jne 0xf25d
movq %rbx, %rdi
movq %r15, %rsi
callq 0x102ee
leaq 0x18(%rsp), %rdi
leaq 0x8(%rsp), %rsi
movq %rax, %rdx
callq 0x29b2d
movq (%rsp), %r12
testq %r12, %r12
je 0xf271
movq %rbx, %rdi
movq %r12, %rsi
callq 0x102af
movq 0x18(%rsp), %rdx
movq 0x8(%rsp), %rcx
movq (%r15), %rdi
movl 0x10(%rsp), %esi
callq 0x1b826
movq %rax, %r14
movq %r15, %rdi
callq 0x1bf90
movq %rax, 0x20(%r14)
movq %rbx, %rdi
movq %r14, %rsi
jmp 0xf3ad
movq (%r15), %rdi
pushq $0xc
popq %rsi
callq 0x1fdc2
movq %rbx, %rdi
movq %r14, %rsi
movq %rax, %rdx
callq 0xdab6
movq %rax, %r13
movq 0x8(%r12), %rsi
movq (%r15), %rdi
callq 0x1b6fc
movq %rax, %rbp
movq (%r15), %rdi
pushq $0xc
popq %rsi
callq 0x1fdc2
movq %rax, 0x20(%rbp)
movq 0x4f04d(%rip), %rsi     # 0x5e330
movq %r13, %rdi
callq 0xe3fb
movq %rax, %rdi
movq %rbp, %rsi
callq 0xe34a
movq %rbx, %rdi
movq %rax, %rsi
callq 0xe461
cmpq $0x0, 0x28(%r12)
je 0xf3f5
movq 0x50(%r15), %rax
movq 0x8(%rax), %rsi
movq %rbx, %rdi
xorl %edx, %edx
callq 0xe4f4
movq %rax, %rbp
movq 0x28(%r12), %rsi
pushq $0x4
popq %rdi
callq 0xd890
movq %r13, %rdi
movq %rax, %rsi
callq 0xf7ee
movq %rax, %r13
movq 0x28(%r12), %rdi
callq 0x1fcb0
movq 0x28(%r12), %rdx
testl %eax, %eax
je 0xf584
movq %rbx, %rdi
movq %rbp, %rsi
callq 0xdab6
movq %rax, %rbp
movq 0x28(%r12), %rdi
callq 0x10d64
movq (%r15), %rdi
movl %eax, %esi
callq 0xe335
movq (%r15), %rdi
pushq $0x46
popq %rsi
movq %r13, %rdx
movq %rbp, %rcx
movq %rax, %r8
xorl %r9d, %r9d
xorl %eax, %eax
callq 0x1b718
jmp 0xf59a
movq %r15, %rdi
callq 0xf792
movq %r12, %rdi
movq %rax, %rsi
callq 0xe34a
movq %rax, %rsi
movq %rbx, %rdi
callq 0xe461
movq %r12, %rax
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq (%rsp), %rdx
cmpl $0x1, %eax
je 0xf147
jmp 0xf156
movq (%r15), %rdi
xorl %esi, %esi
callq 0x1b6fc
movq 0x4ef41(%rip), %rcx     # 0x5e328
movq %rax, 0x10(%rsp)
movq %rcx, 0x20(%rax)
jmp 0xe853
movq %r14, %r12
jmp 0xf3b2
movq %rbx, %rdi
movq %r15, %rsi
callq 0x10227
movq %rax, %r12
movq 0x50(%r15), %rax
movq (%rax), %rax
movq 0x30(%rax), %r14
testq %rbp, %rbp
jne 0xf44a
movq %r12, %rdi
callq 0x1bf90
movq %rax, %rdi
callq 0x50c0
movq (%r15), %rdi
leaq 0x8(%rsp), %r13
movq %rax, %rsi
movq %r13, %rdx
callq 0x1bdcc
movq %rax, %rbp
movq (%r13), %rsi
movq %rbx, %rdi
callq 0xe1fc
movq %rbp, %rdi
callq 0x1bf90
movq %rbx, %rdi
movq %rbp, (%rsp)
movq %rbp, %rsi
movq %rax, %rdx
callq 0xdab6
movq %rax, %r13
pushq $0x8
popq %rbp
movq %rbx, %rdi
movq %rax, %rsi
movq %rbp, %rdx
movq %r12, %rcx
callq 0xdb74
movq 0x20(%r14), %rdi
leaq 0x18(%rsp), %rsi
callq 0x1dbdd
testq %rax, %rax
je 0xf6c8
movq %rax, %r12
movq %r13, 0x20(%rsp)
movq 0x18(%rsp), %rsi
leaq 0xdfc(%rip), %rcx       # 0x102a2
movq %rax, %rdi
movq %rbp, %rdx
callq 0x40d0
leaq 0x28(%rsp), %rdi
andq $0x0, (%rdi)
leaq 0x30(%rsp), %r13
andq $0x0, (%r13)
movq 0x4ee5d(%rip), %rdx     # 0x5e328
movq %rdi, %r14
movq %r13, %rsi
callq 0x29b2d
xorl %ebx, %ebx
cmpq 0x18(%rsp), %rbx
jae 0xf5a2
movq (%r12,%rbx,8), %rdi
callq 0x1bf2d
movq %r14, %rdi
movq %r13, %rsi
movq %rax, %rdx
callq 0x29b2d
movq (%r12,%rbx,8), %rdi
callq 0x10f54
addq %rax, %rbp
movq (%r12,%rbx,8), %rdi
callq 0x1bf2d
movq %rbp, %rdi
movq %rax, %rsi
callq 0xd890
movq %rax, %rbp
incq %rbx
jmp 0xf4d8
cmpq $0x7fffffff, 0x30(%rax) # imm = 0x7FFFFFFF
jb 0xe965
movq %rbx, %rdi
movq %r15, %rsi
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xfb84
xorl %r12d, %r12d
jmp 0xf3b2
movq (%r14), %rsi
movq %rbx, %rdi
xorl %edx, %edx
callq 0xe4f4
jmp 0xe7de
movq 0x20(%rbx), %r12
movq (%r14), %rsi
movq %rbx, %rdi
xorl %edx, %edx
callq 0xe4f4
movq %r12, %rdi
movq %rax, %rsi
callq 0xe34a
jmp 0xe7d3
movq %r13, %rdi
movq %rdx, %rsi
callq 0xe3fb
movq %rax, %rdi
movq %rbp, %rsi
callq 0xe34a
movq %r14, %r12
jmp 0xeeb5
movq 0x28(%rsp), %rsi
movq 0x30(%rsp), %rdx
movq (%r15), %rdi
callq 0x20240
movq (%r15), %rdi
leaq 0x8(%rsp), %rbx
movq %rax, %rsi
movq %rbx, %rdx
callq 0x1bdcc
movq %rax, %r13
movq (%rbx), %rsi
movq 0x10(%rsp), %rbx
movq %rbx, %rdi
callq 0xe1fc
movq %r13, %rdi
callq 0x1bf90
movq %rbx, %rdi
movq %r13, %rsi
movq %rax, %rdx
callq 0xdab6
movq %rax, %r13
movq (%r15), %rdi
movq %rbp, %rsi
callq 0x1b6fc
movq 0x4ed23(%rip), %rcx     # 0x5e328
movq %rcx, 0x20(%rax)
movq %rbx, %rdi
movq %r13, %rsi
xorl %edx, %edx
movq %rax, %rcx
callq 0xdb74
movq %rbx, %rdi
movq 0x20(%rsp), %rsi
xorl %edx, %edx
movq %r13, 0x20(%rsp)
movq %r13, %rcx
callq 0xdb74
pushq $0x8
popq %r13
xorl %r14d, %r14d
cmpq 0x18(%rsp), %r14
jae 0xf6bb
movq (%r12,%r14,8), %rdi
callq 0x1bf2d
movq %r13, %rdi
movq %rax, %rsi
callq 0xd890
movq %rax, %rbp
movq (%r12,%r14,8), %rax
movq 0x20(%rax), %rdx
movq (%r15), %rdi
pushq $0x33
popq %rsi
xorl %ecx, %ecx
xorl %eax, %eax
callq 0x1b718
movq (%r12,%r14,8), %rcx
movq 0x28(%rcx), %rcx
movq %rcx, 0x20(%rax)
movq (%r12,%r14,8), %rcx
movq 0x18(%rcx), %rcx
movq %rcx, 0x38(%rax)
movq %rbx, %rdi
movq %rax, %rsi
xorl %edx, %edx
callq 0xe4f4
movq %rbx, %rdi
movq 0x20(%rsp), %rsi
movq %rbp, %rdx
movq %rax, %rcx
callq 0xdb74
movq (%r12,%r14,8), %rdi
callq 0x10f54
movq %rax, %r13
addq %rbp, %r13
incq %r14
jmp 0xf637
movq %r12, %rdi
callq 0x4040
jmp 0xef67
movq (%r15), %rdi
xorl %esi, %esi
callq 0x1b6fc
movq 0x4ec4f(%rip), %rcx     # 0x5e328
movq %rcx, 0x20(%rax)
movq %rbx, %rdi
movq %r13, %rsi
xorl %edx, %edx
movq %rax, %rcx
callq 0xdb74
jmp 0xef67
leaq 0x1ed93(%rip), %rdi     # 0x2e48c
leaq 0x1ebb4(%rip), %rsi     # 0x2e2b4
leaq 0x1ed90(%rip), %rcx     # 0x2e497
movl $0x4aa, %edx            # imm = 0x4AA
callq 0x4180
leaq 0x1b95f(%rip), %rdi     # 0x2b077
jmp 0xf721
leaq 0x1edca(%rip), %rdi     # 0x2e4eb
xorl %eax, %eax
callq 0x1205c
leaq 0x1ee5c(%rip), %rdi     # 0x2e58b
jmp 0xf721
leaq 0x1ed9b(%rip), %rdi     # 0x2e4d3
leaq 0x1eb75(%rip), %rsi     # 0x2e2b4
leaq 0x1ed51(%rip), %rcx     # 0x2e497
movl $0x524, %edx            # imm = 0x524
callq 0x4180
leaq 0x1b90d(%rip), %rdi     # 0x2b064
jmp 0xf721
leaq 0x1edb6(%rip), %rdi     # 0x2e516
jmp 0xf721
leaq 0x1ed51(%rip), %rsi     # 0x2e4ba
movq %r15, %rdi
xorl %eax, %eax
callq 0x120fd
leaq 0x1ee48(%rip), %rdi     # 0x2e5c2
leaq 0x1eb33(%rip), %rsi     # 0x2e2b4
leaq 0x1ee5e(%rip), %rcx     # 0x2e5e6
movl $0x40d, %edx            # imm = 0x40D
callq 0x4180