// File: /workspace/github_c_makefile_star2_O0/michaelforney[P]cproc/qbe.c
// Function: funcexpr
struct value *
funcexpr(struct func *f, struct expr *e)
{
	enum instkind op = INONE;
	struct decl *d;
	struct value *l, *r, *v, **argvals;
	struct lvalue lval;
	struct expr *arg;
	struct block *b[3];
	struct type *t, *functype;
	size_t i;

	calcvla(f, e->type);
	switch (e->kind) {
	case EXPRIDENT:
		d = e->u.ident.decl;
		switch (d->kind) {
		case DECLOBJECT: return funcload(f, e->type, (struct lvalue){d->value});
		case DECLCONST:  return d->value;
		default:
			fatal("unimplemented declaration kind %d", d->kind);
		}
		break;
	case EXPRCONST:
		t = e->type;
		if (t->prop & PROPINT || t->kind == TYPEPOINTER)
			return mkintconst(e->u.constant.u);
		assert(t->prop & PROPFLOAT);
		return mkfltconst(t->size == 4 ? VALUE_FLTCONST : VALUE_DBLCONST, e->u.constant.f);
	case EXPRBITFIELD:
	case EXPRCOMPOUND:
		lval = funclval(f, e);
		return funcload(f, e->type, lval);
	case EXPRINCDEC:
		lval = funclval(f, e->base);
		l = funcload(f, e->base->type, lval);
		t = e->type;
		if (t->kind == TYPEPOINTER) {
			r = mkintconst(t->base->size);
		} else if (t->prop & PROPINT) {
			r = mkintconst(1);
		} else if (t->prop & PROPFLOAT) {
			r = mkfltconst(t->size == 4 ? VALUE_FLTCONST : VALUE_DBLCONST, 1);
		} else {
			fatal("not a scalar");
			return NULL;  /* unreachable */
		}
		v = funcinst(f, e->op == TINC ? IADD : ISUB, qbetype(t).base, l, r);
		v = funcstore(f, e->type, e->qual, lval, v);
		return e->u.incdec.post ? l : v;
	case EXPRCALL:
		argvals = xreallocarray(NULL, e->u.call.nargs, sizeof(argvals[0]));
		for (arg = e->u.call.args, i = 0; arg; arg = arg->next, ++i) {
			emittype(arg->type);
			argvals[i] = funcexpr(f, arg);
		}
		t = e->type;
		emittype(t);
		v = funcinst(f, ICALL, qbetype(t).base, funcexpr(f, e->base), t->value);
		functype = e->base->type->base;
		for (arg = e->u.call.args, i = 0; arg; arg = arg->next, ++i) {
			if (functype->u.func.isvararg && i == functype->u.func.nparam)
				funcinst(f, IVARARG, 0, NULL, NULL);
			t = arg->type;
			funcinst(f, IARG, qbetype(t).base, argvals[i], t->value);
		}
		e = e->base;
		if (e->kind == EXPRUNARY && e->op == TBAND) {
			e = e->base;
			if (e->kind == EXPRIDENT && e->u.ident.decl->u.func.isnoreturn)
				funchlt(f);
		}
		return v;
	case EXPRUNARY:
		switch (e->op) {
		case TBAND:
			lval = funclval(f, e->base);
			return lval.addr;
		case TMUL:
			r = funcexpr(f, e->base);
			return funcload(f, e->type, (struct lvalue){r});
		case TSUB:
			r = funcexpr(f, e->base);
			return funcinst(f, INEG, qbetype(e->type).base, r, NULL);
		}
		fatal("internal error; unknown unary expression");
		break;
	case EXPRCAST:
		if (e->toeval)
			funcexpr(f, e->toeval);
		l = funcexpr(f, e->base);
		return convert(f, e->type, e->base->type, l);
	case EXPRBINARY:
		l = funcexpr(f, e->u.binary.l);
		if (e->op == TLOR || e->op == TLAND) {
			b[0] = mkblock("logic_right");
			b[1] = mkblock("logic_join");
			t = e->u.binary.l->type;
			if (e->op == TLOR) {
				funcjnz(f, l, t, b[1], b[0]);
				b[1]->phi.val[0] = mkintconst(1);
			} else {
				funcjnz(f, l, t, b[0], b[1]);
				b[1]->phi.val[0] = mkintconst(0);
			}
			b[1]->phi.blk[0] = f->end;
			funclabel(f, b[0]);
			r = funcexpr(f, e->u.binary.r);
			b[1]->phi.val[1] = convert(f, &typebool, e->u.binary.r->type, r);
			b[1]->phi.blk[1] = f->end;
			funclabel(f, b[1]);
			functemp(f, &b[1]->phi.res);
			b[1]->phi.class = 'w';
			return &b[1]->phi.res;
		}
		r = funcexpr(f, e->u.binary.r);
		t = e->u.binary.l->type;
		if (t->kind == TYPEPOINTER)
			t = &typeulong;
		switch (e->op) {
		case TMUL:
			op = IMUL;
			break;
		case TDIV:
			op = !(t->prop & PROPINT) || t->u.basic.issigned ? IDIV : IUDIV;
			break;
		case TMOD:
			op = t->u.basic.issigned ? IREM : IUREM;
			break;
		case TADD:
			op = IADD;
			break;
		case TSUB:
			op = ISUB;
			break;
		case TSHL:
			op = ISHL;
			break;
		case TSHR:
			op = t->u.basic.issigned ? ISAR : ISHR;
			break;
		case TBOR:
			op = IOR;
			break;
		case TBAND:
			op = IAND;
			break;
		case TXOR:
			op = IXOR;
			break;
		case TLESS:
			if (t->size <= 4)
				op = t->prop & PROPFLOAT ? ICLTS : t->u.basic.issigned ? ICSLTW : ICULTW;
			else
				op = t->prop & PROPFLOAT ? ICLTD : t->u.basic.issigned ? ICSLTL : ICULTL;
			break;
		case TGREATER:
			if (t->size <= 4)
				op = t->prop & PROPFLOAT ? ICGTS : t->u.basic.issigned ? ICSGTW : ICUGTW;
			else
				op = t->prop & PROPFLOAT ? ICGTD : t->u.basic.issigned ? ICSGTL : ICUGTL;
			break;
		case TLEQ:
			if (t->size <= 4)
				op = t->prop & PROPFLOAT ? ICLES : t->u.basic.issigned ? ICSLEW : ICULEW;
			else
				op = t->prop & PROPFLOAT ? ICLED : t->u.basic.issigned ? ICSLEL : ICULEL;
			break;
		case TGEQ:
			if (t->size <= 4)
				op = t->prop & PROPFLOAT ? ICGES : t->u.basic.issigned ? ICSGEW : ICUGEW;
			else
				op = t->prop & PROPFLOAT ? ICGED : t->u.basic.issigned ? ICSGEL : ICUGEL;
			break;
		case TEQL:
			if (t->size <= 4)
				op = t->prop & PROPFLOAT ? ICEQS : ICEQW;
			else
				op = t->prop & PROPFLOAT ? ICEQD : ICEQL;
			break;
		case TNEQ:
			if (t->size <= 4)
				op = t->prop & PROPFLOAT ? ICNES : ICNEW;
			else
				op = t->prop & PROPFLOAT ? ICNED : ICNEL;
			break;
		}
		if (op == INONE)
			fatal("internal error; unimplemented binary expression");
		return funcinst(f, op, qbetype(e->type).base, l, r);
	case EXPRCOND:
		b[0] = mkblock("cond_true");
		b[1] = mkblock("cond_false");
		b[2] = mkblock("cond_join");

		v = funcexpr(f, e->base);
		funcjnz(f, v, e->base->type, b[0], b[1]);

		funclabel(f, b[0]);
		b[2]->phi.val[0] = funcexpr(f, e->u.cond.t);
		b[2]->phi.blk[0] = f->end;
		funcjmp(f, b[2]);

		funclabel(f, b[1]);
		b[2]->phi.val[1] = funcexpr(f, e->u.cond.f);
		b[2]->phi.blk[1] = f->end;

		funclabel(f, b[2]);
		if (e->type == &typevoid)
			return NULL;
		functemp(f, &b[2]->phi.res);
		b[2]->phi.class = qbetype(e->type).base;
		return &b[2]->phi.res;
	case EXPRASSIGN:
		r = funcexpr(f, e->u.assign.r);
		if (e->u.assign.l->kind == EXPRTEMP) {
			e->u.assign.l->u.temp = r;
		} else {
			lval = funclval(f, e->u.assign.l);
			r = funcstore(f, e->u.assign.l->type, e->u.assign.l->qual, lval, r);
		}
		return r;
	case EXPRCOMMA:
		for (e = e->base; e->next; e = e->next)
			funcexpr(f, e);
		return funcexpr(f, e);
	case EXPRBUILTIN:
		switch (e->u.builtin.kind) {
		case BUILTINVASTART:
			l = funcexpr(f, e->base);
			funcinst(f, IVASTART, 0, l, NULL);
			break;
		case BUILTINVAARG:
			if (e->toeval)
				funcexpr(f, e->toeval);
			/* https://todo.sr.ht/~mcf/cproc/52 */
			if (!(e->type->prop & PROPSCALAR))
				error(&tok.loc, "va_arg with non-scalar type is not yet supported");
			l = funcexpr(f, e->base);
			return funcinst(f, IVAARG, qbetype(e->type).base, l, NULL);
		case BUILTINALLOCA:
			l = funcexpr(f, e->base);
			return funcinst(f, IALLOC16, ptrclass, l, NULL);
		case BUILTINUNREACHABLE:
			return NULL;
		default:
			fatal("internal error: unimplemented builtin");
		}
		return NULL;
	case EXPRTEMP:
		assert(e->u.temp);
		return e->u.temp;
	case EXPRSIZEOF:
		t = e->u.szof.type;
		assert(t->kind == TYPEARRAY);
		calcvla(f, t);
		/* if the sizeof operand has VLA type, we must evaluate it */
		if (e->base)
			funcexpr(f, e->base);
		return t->u.array.size;
	}
	fatal("unimplemented expression %d", e->kind);
	return NULL;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x290, %rsp            # imm = 0x290
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movl $0x0, -0x1c(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x153b0
movq -0x18(%rbp), %rax
movl (%rax), %eax
movq %rax, -0x1e0(%rbp)
subq $0xf, %rax
ja 0x15381
movq -0x1e0(%rbp), %rax
leaq 0x7e20(%rip), %rcx      # 0x1be50
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0x1e4(%rbp)
subl $0x1, %eax
je 0x14066
jmp 0x14059
movl -0x1e4(%rbp), %eax
subl $0x3, %eax
je 0x140d0
jmp 0x140e1
movq -0x10(%rbp), %rax
movq %rax, -0x1f8(%rbp)
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x1f0(%rbp)
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0xa8(%rbp)
leaq -0xa8(%rbp), %rdi
addq $0x8, %rdi
xorl %esi, %esi
movl $0x4, %edx
callq 0x3110
movq -0x1f8(%rbp), %rdi
movq -0x1f0(%rbp), %rsi
movq -0xa8(%rbp), %rdx
movq -0xa0(%rbp), %rcx
callq 0x15560
movq %rax, -0x8(%rbp)
jmp 0x1539d
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x8(%rbp)
jmp 0x1539d
movq -0x28(%rbp), %rax
movl 0x8(%rax), %esi
leaq 0x7ffa(%rip), %rdi      # 0x1c0e9
movb $0x0, %al
callq 0x12650
jmp 0x15381
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x88(%rbp)
movq -0x88(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x2, %eax
cmpl $0x0, %eax
jne 0x14128
movq -0x88(%rbp), %rax
cmpl $0xc, (%rax)
jne 0x1413e
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rdi
callq 0x12cc0
movq %rax, -0x8(%rbp)
jmp 0x1539d
movq -0x88(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x20, %eax
cmpl $0x0, %eax
je 0x14152
jmp 0x14171
leaq 0x7fb2(%rip), %rdi      # 0x1c10b
leaq 0x7f28(%rip), %rsi      # 0x1c088
movl $0x2d4, %edx            # imm = 0x2D4
leaq 0x7fb3(%rip), %rcx      # 0x1c11f
callq 0x30f0
movq -0x88(%rbp), %rax
movq 0x10(%rax), %rcx
movl $0x4, %edi
movl $0x3, %eax
cmpq $0x4, %rcx
cmovel %eax, %edi
movq -0x18(%rbp), %rax
movsd 0x30(%rax), %xmm0
callq 0x15610
movq %rax, -0x8(%rbp)
jmp 0x1539d
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x15650
movq %rax, -0xb8(%rbp)
movq %rdx, -0xb0(%rbp)
movq -0xb8(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0xb0(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rsi
movq -0x58(%rbp), %rdx
movq -0x50(%rbp), %rcx
callq 0x15560
movq %rax, -0x8(%rbp)
jmp 0x1539d
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0x15650
movq %rax, -0xc8(%rbp)
movq %rdx, -0xc0(%rbp)
movq -0xc8(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0xc0(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x8(%rax), %rsi
movq -0x58(%rbp), %rdx
movq -0x50(%rbp), %rcx
callq 0x15560
movq %rax, -0x30(%rbp)
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x88(%rbp)
movq -0x88(%rbp), %rax
cmpl $0xc, (%rax)
jne 0x14285
movq -0x88(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rdi
callq 0x12cc0
movq %rax, -0x38(%rbp)
jmp 0x14307
movq -0x88(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x142a7
movl $0x1, %edi
callq 0x12cc0
movq %rax, -0x38(%rbp)
jmp 0x14305
movq -0x88(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x20, %eax
cmpl $0x0, %eax
je 0x142e8
movq -0x88(%rbp), %rax
movq 0x10(%rax), %rcx
movl $0x4, %edi
movl $0x3, %eax
cmpq $0x4, %rcx
cmovel %eax, %edi
movsd 0x7d73(%rip), %xmm0     # 0x1c050
callq 0x15610
movq %rax, -0x38(%rbp)
jmp 0x14303
leaq 0x7e65(%rip), %rdi      # 0x1c154
movb $0x0, %al
callq 0x12650
movq $0x0, -0x8(%rbp)
jmp 0x1539d
jmp 0x14305
jmp 0x14307
movq -0x10(%rbp), %rax
movq %rax, -0x208(%rbp)
movq -0x18(%rbp), %rax
movl 0x14(%rax), %eax
subl $0x48, %eax
setne %al
movzbl %al, %eax
incl %eax
movl %eax, -0x1fc(%rbp)
movq -0x88(%rbp), %rdi
callq 0x158f0
movq -0x208(%rbp), %rdi
movl -0x1fc(%rbp), %esi
movl %edx, -0xe0(%rbp)
movq %rax, -0xe8(%rbp)
movq -0xe8(%rbp), %rax
movq %rax, -0xd4(%rbp)
movl -0xe0(%rbp), %eax
movl %eax, -0xcc(%rbp)
movsbl -0xd4(%rbp), %edx
movq -0x30(%rbp), %rcx
movq -0x38(%rbp), %r8
callq 0x15860
movq %rax, -0x40(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rsi
movq -0x18(%rbp), %rax
movl 0x10(%rax), %edx
movq -0x40(%rbp), %r9
movq -0x58(%rbp), %rcx
movq -0x50(%rbp), %r8
callq 0x134e0
movq %rax, -0x40(%rbp)
movq -0x18(%rbp), %rax
testb $0x1, 0x30(%rax)
je 0x143c1
movq -0x30(%rbp), %rax
movq %rax, -0x210(%rbp)
jmp 0x143cc
movq -0x40(%rbp), %rax
movq %rax, -0x210(%rbp)
movq -0x210(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x1539d
movq -0x18(%rbp), %rax
movq 0x38(%rax), %rsi
xorl %eax, %eax
movl %eax, %edi
movl $0x8, %edx
callq 0x12760
movq %rax, -0x48(%rbp)
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq %rax, -0x60(%rbp)
movq $0x0, -0x98(%rbp)
cmpq $0x0, -0x60(%rbp)
je 0x14460
movq -0x60(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x12f40
movq -0x10(%rbp), %rdi
movq -0x60(%rbp), %rsi
callq 0x13fe0
movq %rax, %rdx
movq -0x48(%rbp), %rax
movq -0x98(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x60(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x60(%rbp)
movq -0x98(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x98(%rbp)
jmp 0x1440d
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x88(%rbp)
movq -0x88(%rbp), %rdi
callq 0x12f40
movq -0x10(%rbp), %rax
movq %rax, -0x220(%rbp)
movq -0x88(%rbp), %rdi
callq 0x158f0
movl %edx, -0x100(%rbp)
movq %rax, -0x108(%rbp)
movq -0x108(%rbp), %rax
movq %rax, -0xf4(%rbp)
movl -0x100(%rbp), %eax
movl %eax, -0xec(%rbp)
movsbl -0xf4(%rbp), %eax
movl %eax, -0x214(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0x13fe0
movq -0x220(%rbp), %rdi
movl -0x214(%rbp), %edx
movq %rax, %rcx
movq -0x88(%rbp), %rax
movq 0x18(%rax), %r8
movl $0x56, %esi
callq 0x15860
movq %rax, -0x40(%rbp)
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x8(%rax), %rax
movq 0x20(%rax), %rax
movq %rax, -0x90(%rbp)
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq %rax, -0x60(%rbp)
movq $0x0, -0x98(%rbp)
cmpq $0x0, -0x60(%rbp)
je 0x14614
movq -0x90(%rbp), %rax
testb $0x1, 0x40(%rax)
je 0x14572
movq -0x98(%rbp), %rax
movq -0x90(%rbp), %rcx
cmpq 0x50(%rcx), %rax
jne 0x14572
movq -0x10(%rbp), %rdi
movl $0x5a, %esi
xorl %edx, %edx
xorl %eax, %eax
movl %eax, %r8d
movq %r8, %rcx
callq 0x15860
movq -0x60(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x88(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x228(%rbp)
movq -0x88(%rbp), %rdi
callq 0x158f0
movq -0x228(%rbp), %rdi
movl %edx, -0x120(%rbp)
movq %rax, -0x128(%rbp)
movq -0x128(%rbp), %rax
movq %rax, -0x114(%rbp)
movl -0x120(%rbp), %eax
movl %eax, -0x10c(%rbp)
movsbl -0x114(%rbp), %edx
movq -0x48(%rbp), %rax
movq -0x98(%rbp), %rcx
movq (%rax,%rcx,8), %rcx
movq -0x88(%rbp), %rax
movq 0x18(%rax), %r8
movl $0x59, %esi
callq 0x15860
movq -0x60(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x60(%rbp)
movq -0x98(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x98(%rbp)
jmp 0x1452e
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
cmpl $0x7, (%rax)
jne 0x14661
movq -0x18(%rbp), %rax
cmpl $0x4a, 0x14(%rax)
jne 0x14661
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
cmpl $0x0, (%rax)
jne 0x1465f
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
testb $0x1, 0x41(%rax)
je 0x1465f
movq -0x10(%rbp), %rdi
callq 0x13f20
jmp 0x14661
movq -0x40(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x1539d
movq -0x18(%rbp), %rax
movl 0x14(%rax), %eax
movl %eax, -0x22c(%rbp)
subl $0x4a, %eax
je 0x146a3
jmp 0x14682
movl -0x22c(%rbp), %eax
subl $0x4b, %eax
je 0x146e5
jmp 0x1468f
movl -0x22c(%rbp), %eax
subl $0x4d, %eax
je 0x14760
jmp 0x147de
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0x15650
movq %rax, -0x138(%rbp)
movq %rdx, -0x130(%rbp)
movq -0x138(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x130(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x58(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x1539d
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0x13fe0
movq %rax, -0x38(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x240(%rbp)
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x238(%rbp)
movq -0x38(%rbp), %rax
movq %rax, -0x148(%rbp)
leaq -0x148(%rbp), %rdi
addq $0x8, %rdi
xorl %esi, %esi
movl $0x4, %edx
callq 0x3110
movq -0x240(%rbp), %rdi
movq -0x238(%rbp), %rsi
movq -0x148(%rbp), %rdx
movq -0x140(%rbp), %rcx
callq 0x15560
movq %rax, -0x8(%rbp)
jmp 0x1539d
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0x13fe0
movq %rax, -0x38(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x248(%rbp)
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x158f0
movq -0x248(%rbp), %rdi
movl %edx, -0x160(%rbp)
movq %rax, -0x168(%rbp)
movq -0x168(%rbp), %rax
movq %rax, -0x154(%rbp)
movl -0x160(%rbp), %eax
movl %eax, -0x14c(%rbp)
movsbl -0x154(%rbp), %edx
movq -0x38(%rbp), %rcx
movl $0x3, %esi
xorl %eax, %eax
movl %eax, %r8d
callq 0x15860
movq %rax, -0x8(%rbp)
jmp 0x1539d
leaq 0x4a93(%rip), %rdi      # 0x19278
movb $0x0, %al
callq 0x12650
jmp 0x15381
movq -0x18(%rbp), %rax
cmpq $0x0, 0x28(%rax)
je 0x1480d
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x28(%rax), %rsi
callq 0x13fe0
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0x13fe0
movq %rax, -0x30(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rsi
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x8(%rax), %rdx
movq -0x30(%rbp), %rcx
callq 0x13a70
movq %rax, -0x8(%rbp)
jmp 0x1539d
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rsi
callq 0x13fe0
movq %rax, -0x30(%rbp)
movq -0x18(%rbp), %rax
cmpl $0x5d, 0x14(%rax)
je 0x14879
movq -0x18(%rbp), %rax
cmpl $0x5c, 0x14(%rax)
jne 0x149c8
leaq 0x78e1(%rip), %rdi      # 0x1c161
callq 0x12b50
movq %rax, -0x80(%rbp)
leaq 0x78dd(%rip), %rdi      # 0x1c16d
callq 0x12b50
movq %rax, -0x78(%rbp)
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x88(%rbp)
movq -0x18(%rbp), %rax
cmpl $0x5d, 0x14(%rax)
jne 0x148e9
movq -0x10(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq -0x88(%rbp), %rdx
movq -0x78(%rbp), %rcx
movq -0x80(%rbp), %r8
callq 0x13950
movl $0x1, %edi
callq 0x12cc0
movq %rax, %rcx
movq -0x78(%rbp), %rax
movq %rcx, 0x40(%rax)
jmp 0x14919
movq -0x10(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq -0x88(%rbp), %rdx
movq -0x80(%rbp), %rcx
movq -0x78(%rbp), %r8
callq 0x13950
xorl %eax, %eax
movl %eax, %edi
callq 0x12cc0
movq %rax, %rcx
movq -0x78(%rbp), %rax
movq %rcx, 0x40(%rax)
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rcx
movq -0x78(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x10(%rbp), %rdi
movq -0x80(%rbp), %rsi
callq 0x13810
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x38(%rax), %rsi
callq 0x13fe0
movq %rax, -0x38(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x38(%rax), %rax
movq 0x8(%rax), %rdx
movq -0x38(%rbp), %rcx
leaq 0xd12a(%rip), %rsi      # 0x21a90
callq 0x13a70
movq %rax, %rcx
movq -0x78(%rbp), %rax
movq %rcx, 0x48(%rax)
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rcx
movq -0x78(%rbp), %rax
movq %rcx, 0x38(%rax)
movq -0x10(%rbp), %rdi
movq -0x78(%rbp), %rsi
callq 0x13810
movq -0x10(%rbp), %rdi
movq -0x78(%rbp), %rsi
addq $0x28, %rsi
addq $0x28, %rsi
callq 0x13260
movq -0x78(%rbp), %rax
movl $0x77, 0x28(%rax)
movq -0x78(%rbp), %rax
addq $0x28, %rax
addq $0x28, %rax
movq %rax, -0x8(%rbp)
jmp 0x1539d
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x38(%rax), %rsi
callq 0x13fe0
movq %rax, -0x38(%rbp)
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x88(%rbp)
movq -0x88(%rbp), %rax
cmpl $0xc, (%rax)
jne 0x14a0a
leaq 0xd3a5(%rip), %rax      # 0x21da8
movq %rax, -0x88(%rbp)
movq -0x18(%rbp), %rax
movl 0x14(%rax), %eax
addl $-0x4a, %eax
movl %eax, %ecx
movq %rcx, -0x250(%rbp)
subl $0x11, %eax
ja 0x14e55
movq -0x250(%rbp), %rax
leaq 0x7490(%rip), %rcx      # 0x1bec4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl $0x5, -0x1c(%rbp)
jmp 0x14e55
movq -0x88(%rbp), %rax
movl 0x4(%rax), %ecx
andl $0x2, %ecx
movb $0x1, %al
cmpl $0x0, %ecx
movb %al, -0x251(%rbp)
je 0x14a73
movq -0x88(%rbp), %rax
movb 0x40(%rax), %al
movb %al, -0x251(%rbp)
movb -0x251(%rbp), %dl
movl $0x6, %eax
movl $0x4, %ecx
testb $0x1, %dl
cmovnel %ecx, %eax
movl %eax, -0x1c(%rbp)
jmp 0x14e55
movq -0x88(%rbp), %rax
movb 0x40(%rax), %dl
movl $0x8, %eax
movl $0x7, %ecx
testb $0x1, %dl
cmovnel %ecx, %eax
movl %eax, -0x1c(%rbp)
jmp 0x14e55
movl $0x1, -0x1c(%rbp)
jmp 0x14e55
movl $0x2, -0x1c(%rbp)
jmp 0x14e55
movl $0xe, -0x1c(%rbp)
jmp 0x14e55
movq -0x88(%rbp), %rax
movb 0x40(%rax), %dl
movl $0xd, %eax
movl $0xc, %ecx
testb $0x1, %dl
cmovnel %ecx, %eax
movl %eax, -0x1c(%rbp)
jmp 0x14e55
movl $0x9, -0x1c(%rbp)
jmp 0x14e55
movl $0xb, -0x1c(%rbp)
jmp 0x14e55
movl $0xa, -0x1c(%rbp)
jmp 0x14e55
movq -0x88(%rbp), %rax
cmpq $0x4, 0x10(%rax)
ja 0x14b75
movq -0x88(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x20, %eax
cmpl $0x0, %eax
je 0x14b4a
movl $0x37, %eax
movl %eax, -0x258(%rbp)
jmp 0x14b6a
movq -0x88(%rbp), %rax
movb 0x40(%rax), %dl
movl $0x27, %eax
movl $0x23, %ecx
testb $0x1, %dl
cmovnel %ecx, %eax
movl %eax, -0x258(%rbp)
movl -0x258(%rbp), %eax
movl %eax, -0x1c(%rbp)
jmp 0x14bbd
movq -0x88(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x20, %eax
cmpl $0x0, %eax
je 0x14b94
movl $0x3f, %eax
movl %eax, -0x25c(%rbp)
jmp 0x14bb4
movq -0x88(%rbp), %rax
movb 0x40(%rax), %dl
movl $0x31, %eax
movl $0x2d, %ecx
testb $0x1, %dl
cmovnel %ecx, %eax
movl %eax, -0x25c(%rbp)
movl -0x25c(%rbp), %eax
movl %eax, -0x1c(%rbp)
jmp 0x14e55
movq -0x88(%rbp), %rax
cmpq $0x4, 0x10(%rax)
ja 0x14c1a
movq -0x88(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x20, %eax
cmpl $0x0, %eax
je 0x14bef
movl $0x39, %eax
movl %eax, -0x260(%rbp)
jmp 0x14c0f
movq -0x88(%rbp), %rax
movb 0x40(%rax), %dl
movl $0x29, %eax
movl $0x25, %ecx
testb $0x1, %dl
cmovnel %ecx, %eax
movl %eax, -0x260(%rbp)
movl -0x260(%rbp), %eax
movl %eax, -0x1c(%rbp)
jmp 0x14c62
movq -0x88(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x20, %eax
cmpl $0x0, %eax
je 0x14c39
movl $0x41, %eax
movl %eax, -0x264(%rbp)
jmp 0x14c59
movq -0x88(%rbp), %rax
movb 0x40(%rax), %dl
movl $0x33, %eax
movl $0x2f, %ecx
testb $0x1, %dl
cmovnel %ecx, %eax
movl %eax, -0x264(%rbp)
movl -0x264(%rbp), %eax
movl %eax, -0x1c(%rbp)
jmp 0x14e55
movq -0x88(%rbp), %rax
cmpq $0x4, 0x10(%rax)
ja 0x14cbf
movq -0x88(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x20, %eax
cmpl $0x0, %eax
je 0x14c94
movl $0x36, %eax
movl %eax, -0x268(%rbp)
jmp 0x14cb4
movq -0x88(%rbp), %rax
movb 0x40(%rax), %dl
movl $0x26, %eax
movl $0x22, %ecx
testb $0x1, %dl
cmovnel %ecx, %eax
movl %eax, -0x268(%rbp)
movl -0x268(%rbp), %eax
movl %eax, -0x1c(%rbp)
jmp 0x14d07
movq -0x88(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x20, %eax
cmpl $0x0, %eax
je 0x14cde
movl $0x3e, %eax
movl %eax, -0x26c(%rbp)
jmp 0x14cfe
movq -0x88(%rbp), %rax
movb 0x40(%rax), %dl
movl $0x30, %eax
movl $0x2c, %ecx
testb $0x1, %dl
cmovnel %ecx, %eax
movl %eax, -0x26c(%rbp)
movl -0x26c(%rbp), %eax
movl %eax, -0x1c(%rbp)
jmp 0x14e55
movq -0x88(%rbp), %rax
cmpq $0x4, 0x10(%rax)
ja 0x14d64
movq -0x88(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x20, %eax
cmpl $0x0, %eax
je 0x14d39
movl $0x38, %eax
movl %eax, -0x270(%rbp)
jmp 0x14d59
movq -0x88(%rbp), %rax
movb 0x40(%rax), %dl
movl $0x28, %eax
movl $0x24, %ecx
testb $0x1, %dl
cmovnel %ecx, %eax
movl %eax, -0x270(%rbp)
movl -0x270(%rbp), %eax
movl %eax, -0x1c(%rbp)
jmp 0x14dac
movq -0x88(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x20, %eax
cmpl $0x0, %eax
je 0x14d83
movl $0x40, %eax
movl %eax, -0x274(%rbp)
jmp 0x14da3
movq -0x88(%rbp), %rax
movb 0x40(%rax), %dl
movl $0x32, %eax
movl $0x2e, %ecx
testb $0x1, %dl
cmovnel %ecx, %eax
movl %eax, -0x274(%rbp)
movl -0x274(%rbp), %eax
movl %eax, -0x1c(%rbp)
jmp 0x14e55
movq -0x88(%rbp), %rax
cmpq $0x4, 0x10(%rax)
ja 0x14de1
movq -0x88(%rbp), %rax
movl 0x4(%rax), %edx
andl $0x20, %edx
movl $0x20, %eax
movl $0x34, %ecx
cmpl $0x0, %edx
cmovnel %ecx, %eax
movl %eax, -0x1c(%rbp)
jmp 0x14e01
movq -0x88(%rbp), %rax
movl 0x4(%rax), %edx
andl $0x20, %edx
movl $0x2a, %eax
movl $0x3c, %ecx
cmpl $0x0, %edx
cmovnel %ecx, %eax
movl %eax, -0x1c(%rbp)
jmp 0x14e55
movq -0x88(%rbp), %rax
cmpq $0x4, 0x10(%rax)
ja 0x14e33
movq -0x88(%rbp), %rax
movl 0x4(%rax), %edx
andl $0x20, %edx
movl $0x21, %eax
movl $0x35, %ecx
cmpl $0x0, %edx
cmovnel %ecx, %eax
movl %eax, -0x1c(%rbp)
jmp 0x14e53
movq -0x88(%rbp), %rax
movl 0x4(%rax), %edx
andl $0x20, %edx
movl $0x2b, %eax
movl $0x3d, %ecx
cmpl $0x0, %edx
cmovnel %ecx, %eax
movl %eax, -0x1c(%rbp)
jmp 0x14e55
cmpl $0x0, -0x1c(%rbp)
jne 0x14e69
leaq 0x7316(%rip), %rdi      # 0x1c178
movb $0x0, %al
callq 0x12650
movq -0x10(%rbp), %rax
movq %rax, -0x280(%rbp)
movl -0x1c(%rbp), %eax
movl %eax, -0x278(%rbp)
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x158f0
movq -0x280(%rbp), %rdi
movl -0x278(%rbp), %esi
movl %edx, -0x180(%rbp)
movq %rax, -0x188(%rbp)
movq -0x188(%rbp), %rax
movq %rax, -0x174(%rbp)
movl -0x180(%rbp), %eax
movl %eax, -0x16c(%rbp)
movsbl -0x174(%rbp), %edx
movq -0x30(%rbp), %rcx
movq -0x38(%rbp), %r8
callq 0x15860
movq %rax, -0x8(%rbp)
jmp 0x1539d
leaq 0x72c6(%rip), %rdi      # 0x1c1a8
callq 0x12b50
movq %rax, -0x80(%rbp)
leaq 0x72c0(%rip), %rdi      # 0x1c1b2
callq 0x12b50
movq %rax, -0x78(%rbp)
leaq 0x72bb(%rip), %rdi      # 0x1c1bd
callq 0x12b50
movq %rax, -0x70(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0x13fe0
movq %rax, -0x40(%rbp)
movq -0x10(%rbp), %rdi
movq -0x40(%rbp), %rsi
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x8(%rax), %rdx
movq -0x80(%rbp), %rcx
movq -0x78(%rbp), %r8
callq 0x13950
movq -0x10(%rbp), %rdi
movq -0x80(%rbp), %rsi
callq 0x13810
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rsi
callq 0x13fe0
movq %rax, %rcx
movq -0x70(%rbp), %rax
movq %rcx, 0x40(%rax)
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rcx
movq -0x70(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x10(%rbp), %rdi
movq -0x70(%rbp), %rsi
callq 0x13910
movq -0x10(%rbp), %rdi
movq -0x78(%rbp), %rsi
callq 0x13810
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x38(%rax), %rsi
callq 0x13fe0
movq %rax, %rcx
movq -0x70(%rbp), %rax
movq %rcx, 0x48(%rax)
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rcx
movq -0x70(%rbp), %rax
movq %rcx, 0x38(%rax)
movq -0x10(%rbp), %rdi
movq -0x70(%rbp), %rsi
callq 0x13810
movq -0x18(%rbp), %rax
leaq 0xca60(%rip), %rcx      # 0x21a38
cmpq %rcx, 0x8(%rax)
jne 0x14feb
movq $0x0, -0x8(%rbp)
jmp 0x1539d
movq -0x10(%rbp), %rdi
movq -0x70(%rbp), %rsi
addq $0x50, %rsi
callq 0x13260
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x158f0
movl %edx, -0x1a0(%rbp)
movq %rax, -0x1a8(%rbp)
movq -0x1a8(%rbp), %rax
movq %rax, -0x194(%rbp)
movl -0x1a0(%rbp), %eax
movl %eax, -0x18c(%rbp)
movsbl -0x194(%rbp), %ecx
movq -0x70(%rbp), %rax
movl %ecx, 0x28(%rax)
movq -0x70(%rbp), %rax
addq $0x28, %rax
addq $0x28, %rax
movq %rax, -0x8(%rbp)
jmp 0x1539d
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x38(%rax), %rsi
callq 0x13fe0
movq %rax, -0x38(%rbp)
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
cmpl $0xe, (%rax)
jne 0x15087
movq -0x38(%rbp), %rcx
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq %rcx, 0x30(%rax)
jmp 0x150ec
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rsi
callq 0x15650
movq %rax, -0x1b8(%rbp)
movq %rdx, -0x1b0(%rbp)
movq -0x1b8(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x1b0(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq 0x8(%rax), %rsi
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movl 0x10(%rax), %edx
movq -0x38(%rbp), %r9
movq -0x58(%rbp), %rcx
movq -0x50(%rbp), %r8
callq 0x134e0
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x1539d
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
cmpq $0x0, 0x20(%rax)
je 0x1512b
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x13fe0
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x18(%rbp)
jmp 0x15105
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x13fe0
movq %rax, -0x8(%rbp)
jmp 0x1539d
movq -0x18(%rbp), %rax
movl 0x30(%rax), %eax
movq %rax, -0x288(%rbp)
subq $0xc, %rax
ja 0x152b0
movq -0x288(%rbp), %rax
leaq 0x6d29(%rip), %rcx      # 0x1be90
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0x13fe0
movq %rax, -0x30(%rbp)
movq -0x10(%rbp), %rdi
movq -0x30(%rbp), %rcx
movl $0x57, %esi
xorl %edx, %edx
xorl %eax, %eax
movl %eax, %r8d
callq 0x15860
jmp 0x152be
movq -0x18(%rbp), %rax
cmpq $0x0, 0x28(%rax)
je 0x151bf
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x28(%rax), %rsi
callq 0x13fe0
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movl 0x4(%rax), %eax
andl $0x10, %eax
cmpl $0x0, %eax
jne 0x151eb
leaq 0xcfcf(%rip), %rdi      # 0x221a8
addq $0x8, %rdi
leaq 0x6fe3(%rip), %rsi      # 0x1c1c7
movb $0x0, %al
callq 0x11190
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0x13fe0
movq %rax, -0x30(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x290(%rbp)
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x158f0
movq -0x290(%rbp), %rdi
movl %edx, -0x1d0(%rbp)
movq %rax, -0x1d8(%rbp)
movq -0x1d8(%rbp), %rax
movq %rax, -0x1c4(%rbp)
movl -0x1d0(%rbp), %eax
movl %eax, -0x1bc(%rbp)
movsbl -0x1c4(%rbp), %edx
movq -0x30(%rbp), %rcx
movl $0x58, %esi
xorl %eax, %eax
movl %eax, %r8d
callq 0x15860
movq %rax, -0x8(%rbp)
jmp 0x1539d
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0x13fe0
movq %rax, -0x30(%rbp)
movq -0x10(%rbp), %rdi
movq -0x30(%rbp), %rcx
movl $0x1f, %esi
movl $0x6c, %edx
xorl %eax, %eax
movl %eax, %r8d
callq 0x15860
movq %rax, -0x8(%rbp)
jmp 0x1539d
movq $0x0, -0x8(%rbp)
jmp 0x1539d
leaq 0x6f41(%rip), %rdi      # 0x1c1f8
movb $0x0, %al
callq 0x12650
movq $0x0, -0x8(%rbp)
jmp 0x1539d
movq -0x18(%rbp), %rax
cmpq $0x0, 0x30(%rax)
je 0x152d8
jmp 0x152f7
leaq 0x6f3f(%rip), %rdi      # 0x1c21e
leaq 0x6da2(%rip), %rsi      # 0x1c088
movl $0x3b3, %edx            # imm = 0x3B3
leaq 0x6e2d(%rip), %rcx      # 0x1c11f
callq 0x30f0
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq %rax, -0x8(%rbp)
jmp 0x1539d
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq %rax, -0x88(%rbp)
movq -0x88(%rbp), %rax
cmpl $0xd, (%rax)
jne 0x15325
jmp 0x15344
leaq 0x6efc(%rip), %rdi      # 0x1c228
leaq 0x6d55(%rip), %rsi      # 0x1c088
movl $0x3b7, %edx            # imm = 0x3B7
leaq 0x6de0(%rip), %rcx      # 0x1c11f
callq 0x30f0
movq -0x10(%rbp), %rdi
movq -0x88(%rbp), %rsi
callq 0x153b0
movq -0x18(%rbp), %rax
cmpq $0x0, 0x18(%rax)
je 0x15370
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0x13fe0
movq -0x88(%rbp), %rax
movq 0x50(%rax), %rax
movq %rax, -0x8(%rbp)
jmp 0x1539d
movq -0x18(%rbp), %rax
movl (%rax), %esi
leaq 0x6eaf(%rip), %rdi      # 0x1c23d
movb $0x0, %al
callq 0x12650
movq $0x0, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x290, %rsp            # imm = 0x290
popq %rbp
retq
nopw (%rax,%rax)