// File: /workspace/github_c_makefile_star2_O2/NedFreed[P]msglint/msglint.c
// Function: parseheaders
static int parseheaders(msgcontext *ctx, const char **pmsg,
			int *plen, int htype)
{
    const char *line, *vline, *fieldbody, *msg = *pmsg;
    struct headmap *hmap;
    dbinfo db;
    int firstline = 1, mandhead, startline, hflags = 0, hinum, j, pos;
    headinfo hinfo[mischead + 1];
    unsigned char duptab[DUPTABSIZE];

    /* init header info and duplicate table */
    memset(duptab, 0, sizeof (duptab));
    memset(hinfo, 0, sizeof (hinfo));

    /* allocate MIME info, if necessary */
    if (ctx->mcur == ctx->mpart) {
	ctx->mcur = malloc(sizeof (MIMEinfo));
	if (ctx->mcur == NULL) {
	    wprintf(NULL, w_fatal, "out of memory");
	    return (-1);
	}
	memset(ctx->mcur, 0, sizeof (MIMEinfo));
    } else {
	for (j = 0; j < 10; ++j) {
	    if (ctx->mcur->keep[j] != NULL) {
		ctx->mcur->keep[j]->next = msgfree;
		msgfree = ctx->mcur->keep[j];
		ctx->mcur->keep[j] = NULL;
	    }
	}
    }
    ctx->mcur->typenum = text;
    if (ctx->mpart && ctx->mpart->indigest == 1) {
	ctx->mcur->typenum = message;
    }
    ctx->mcur->cte = cte_default;
    ctx->mcur->saw8bit = 0;
    ctx->mcur->saw8char = 0;
    ctx->mcur->csetid = us_ascii;
    ctx->mcur->asciisubset = 0;
    ctx->mcur->cset7bit = 0;
    startline = ctx->lineno;
    db.endline = ctx->lineno;
    for (;;) {

	/* look for a header name */
	line = vline = msg;
	while (isalpha(*msg) || isdigit(*msg) || *msg == '-') {
	    ++msg;
	}
	/* handle end of line */
	if ((*msg == '\n' || *msg == '\r') && msg == line) {
	    ++line, ++ctx->lineno;
	    break;
	}
	/* handle "header   : body" */
	for (j = 0; *msg == ' ' || *msg == '\t'; ++msg, ++j)
	    ;
	if (*msg == '\n' || *msg == '\r') {
	    msg -= j;
	    j = 0;
	}
	hmap = &emptyhead;
	if (*msg == '\0') {
	    wprintf(NULL, w_error, "message ended in middle of header at "
		    "line %d", ctx->lineno);
	    break;
	}
	if (*msg != ':' || msg == line) {
	    wprintf(NULL, w_error, "unexpected character %c"
		    " found in header on line %d", *msg, ctx->lineno);
	} else /* msg == ':' */ {
	    if (j) {
		wprintf(NULL, w_warn, "spaces between header name and "
			"':' unwise on line %d", ctx->lineno);
	    }
	    
	    /* lookup the header name */
	    for (hmap = known_headers; hmap->str != NULL &&
		 (strlen(hmap->str) != msg - line - j ||
		  strncasecmp(hmap->str, line, msg - line - j)); ++hmap)
		;
	    fieldbody = ++msg;
	    hflags |= hmap->flags;
	}
	firstline = 0;

	/* find the end of the header */
	db.startline = ctx->lineno;
	db.headname = line;
	db.headlen = msg - line - j - 1;
	db.flags = 0;
	pos = msg - line;
	while (*msg != '\0') {
	    if (*msg == '\n' || *msg == '\r') {
		if (htype == HEAD_DSN || htype == HEAD_RCPT ||
		    htype == HEAD_MTRKM || htype == HEAD_MTRKR ||
		    htype == HEAD_MDN || htype == HEAD_TEXT) {
		    MD5Update(&ctx->md5, (unsigned char *) vline, msg - vline);
		    MD5Update(&ctx->md5, (unsigned char *) "\r\n", 2);
		}
		if (pos > 80) {
		    wprintf(NULL, w_warn, "line too long in header '%.*s' "
			    "at line %d", fieldbody - line, line, ctx->lineno);
		}
		pos = 0;
		++ctx->lineno;
		if (*msg == '\r' && msg[1] == '\n') ++msg;
		vline = ++msg;
		if (*msg != ' ' && *msg != '\t') {
		    break;
		}
		while (*msg == ' ' || *msg == '\t') ++msg, ++pos;
		if (*msg == '\n' || *msg == '\r') {
		    wprintf(NULL, w_warn, "empty continuation line in "
			    "header '%.*s' at line %d",
			    fieldbody - line, line, ctx->lineno);
		    continue;
		}
	    }
	    ++msg, ++pos;
	}
	db.endline = ctx->lineno - 1;

	/* parse the header */
	if (hmap->type != head_unknown) {
	    if (hmap->type == returnpath && reply_line == NULL) {
		reply_line = fieldbody + 1;
		reply_len = msg - fieldbody - 1;
	    }

	    /* check for duplicate headers */
            hinum = hmap - known_headers;
	    if (duptab[hinum] && (hmap->flags & DUPOK) == 0) {
	    	wprintf(&db, htype == HEAD_DSN || htype == HEAD_RCPT ||
			htype == HEAD_MTRKM || htype == HEAD_MTRKR ||
			htype == HEAD_MDN ? w_error : w_warn,
			"duplicate ");
	    }
	    duptab[hinum] = 1;
	    hinfo[hmap->type].flags = HEAD_PRESENT;
	    hinfo[hmap->type].value = 0;
	    parsehead(ctx, hmap, fieldbody, msg - fieldbody - 1, htype,
	    	hinfo + hmap->type, &db);
	} else if (hmap != &emptyhead) {
	    wprintf(&db, htype == HEAD_DSN || htype == HEAD_RCPT ||
		    htype == HEAD_MTRKM || htype == HEAD_MTRKR ||
		    htype == HEAD_MDN ? w_error : w_unknown,
		    "unknown ");
	}

	/* advance */
	line = msg;
    }
    *plen -= line - *pmsg;
    *pmsg = line;

    /* handle silence */
    if (silent) return (0);
    
    /* check for mandatory headers in header blocks */
    mandhead = 0;
    switch (htype) {
    	case HEAD_MSG:
	    if (hflags & HF_PATH) {
		mandhead = HF_NEWSGROUPS | HF_MID | HF_SUBJECT | HF_DATE |
		    HF_FROM;
		break;
	    }
	    mandhead = HF_DATE | HF_FROM | HF_RETURNPATH;
	    if ((hflags & (HF_TO|HF_CC|HF_BCC)) == 0) {
		wprintf(NULL, w_ok, "None of To, CC, or BCC "
			"fields specified in lines %d-%d - " RFC_TOCCBCC
			" used to require at least one such field",
			startline, db.endline);
	    }
    	    break;
    	    
        case HEAD_DSN:
            mandhead = HF_REPORTMTA;
            break;
            
        case HEAD_RCPT:
            mandhead = HF_ACTION | HF_STATUS | HF_FINALRCPT;
            break;

	case HEAD_MTRKM:
	    mandhead = HF_REPORTMTA | HF_ORIGENVID | HF_ARRIVDATE;
	    break;

	case HEAD_MTRKR:
	    mandhead = HF_ACTION | HF_STATUS | HF_FINALRCPT | HF_ORIGRCPT;
	    break;
        
        case HEAD_INNER:
            if ((hflags & (HF_DATE|HF_FROM|HF_SUBJECT)) == 0) {
                wprintf(NULL, w_error, "At least one of Date, From, Subject "
			"required lines %d-%d (" RFC_MIME_DFS ")",
			startline, db.endline);
            }
            break;

	  case HEAD_EXTB:
	    if ((hflags & HF_CID) == 0) {
		wprintf(NULL, w_error, "Content-ID required lines %d-%d ("
			RFC_EXTB_CID ")", startline, db.endline);
	    }
	    break;
    }
    if (mandhead) for (hmap = known_headers; hmap->str != NULL; ++hmap) {
        if ((hmap->flags & mandhead) != 0 &&
            (hmap->flags & mandhead & hflags) == 0) {
            wprintf(NULL, w_error, "missing mandatory header '%s' lines %d-%d",
            	   hmap->str, startline, db.endline);
        }
    }

    /* check for name content-type param and missing disposition filename */
    if ((hinfo[contenttype].flags & 1) &&
	(hinfo[contentdisp].flags & 1) == 0) {
	wprintf(NULL, w_error, "Content-Type 'name' parameter deprecated in "
		"favor of Content-Disposition 'filename' parameter ("
		RFC_CDISP_FN ") lines %d-%d", startline, db.endline);
    }
    
    /* make sure return-path is empty on a multipart/report */
    if (ctx->mcur->inreport && (hinfo[returnpath].flags & 1)) {
        wprintf(NULL, w_error, "return-path should be empty on "
		"multipart/report lines %d-%d", startline, db.endline);
    }
    
    /* if from multi-valued, sender is mandatory */
    if ((hinfo[fromhead].flags & 1) && !(hflags & HF_SENDER)) {
        wprintf(NULL, w_error, "'Sender' header is mandatory when 'From' is "
		"multi-valued lines %d-%d", startline, db.endline);
    }

    /* if Lines is present, Newsgroups must also be there */
    if (hflags & HF_LINES) {
	if (!(hflags & HF_NEWSGROUPS)) {
	    wprintf(NULL, w_warn, "'Lines' header is not standardized for use "
		    "in email lines %d-%d", startline, db.endline);
	}
	if (htype == HEAD_MSG) {
	    ctx->lines = hinfo[lineshead].value;
	    ctx->endhead = ctx->lineno;
	}
    }
    
    /* save content-transfer-encoding */
    if (hinfo[contentte].value) {
        ctx->mcur->cte = (cteid) hinfo[contentte].value;
        if (ctx->mcur->cte >= quoted_printable &&
            (ctx->mcur->typenum == multipart ||
             (ctx->mcur->typenum == message &&
              tokcomp("rfc822", -1, ctx->mcur->keep[K_SUBTYPE]) == 0))) {
            wprintf(NULL, w_error, "only 7-bit, 8-bit and binary "
		    "content-transfer-encodings are permitted on "
		    "compound media types, line %d", ctx->lineno);
        }
        if (ctx->mcur->cte == cte8bit && ctx->mpart != NULL &&
            ctx->mpart->cte != cte8bit) {
            wprintf(NULL, w_error, "mismatch between inner "
		    "content-transfer-encoding and that of enclosing "
		    "multipart, line %d", ctx->lineno);
        }
    }
    
    /* warn about charset/cte mismatch */
    if (ctx->mcur->typenum == text && ctx->mcur->cte == cte8bit) {
        if (ctx->mcur->csetid == us_ascii) {
	    wprintf(NULL, w_error, "charset 'us-ascii' doesn't match "
		    "content-transfer-encoding line %d", ctx->lineno);
	} else if (ctx->mcur->cset7bit) {
	    wprintf(NULL, w_error, "charset '%t' doesn't match "
		    "content-transfer-encoding line %d",
		    ctx->mcur->keep[K_CHARSET], ctx->lineno);
	}
    }

    /* put multipart on boundary list */
    if (ctx->mcur->typenum == multipart) {
	ctx->mcur->next = ctx->mpart;
	ctx->mpart = ctx->mcur;
    }

    return (0);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x128, %rsp            # imm = 0x128
movq %rcx, 0x30(%rsp)
movq %rdi, %rbp
movq %rsi, 0x60(%rsp)
movq (%rsi), %r12
xorps %xmm0, %xmm0
movups %xmm0, 0x10a(%rsp)
movaps %xmm0, 0x100(%rsp)
movaps %xmm0, 0xf0(%rsp)
movaps %xmm0, 0xe0(%rsp)
movaps %xmm0, 0xd0(%rsp)
movaps %xmm0, 0x90(%rsp)
movaps %xmm0, 0xa0(%rsp)
movaps %xmm0, 0xb0(%rsp)
movaps %xmm0, 0xc0(%rsp)
movq 0x8(%rdi), %rbx
cmpq %rbx, (%rdi)
movq %rdx, 0x58(%rsp)
je 0x5213
movq 0xdb40(%rip), %rdx      # 0x12d20
xorl %ecx, %ecx
movq (%rbp), %rax
cmpq $0xa, %rcx
je 0x520d
movq (%rax,%rcx,8), %rsi
testq %rsi, %rsi
je 0x5208
movq %rdx, (%rsi)
movq (%rax,%rcx,8), %rdx
movq %rdx, 0xdb1d(%rip)      # 0x12d20
andq $0x0, (%rax,%rcx,8)
incq %rcx
jmp 0x51e2
movq 0x8(%rbp), %rbx
jmp 0x522d
pushq $0x1
popq %rdi
movl $0x88, %esi
callq 0x2110
movq %rax, (%rbp)
testq %rax, %rax
je 0x5d69
movl $0x2, 0x74(%rax)
testq %rbx, %rbx
je 0x5246
cmpl $0x1, 0x50(%rbx)
jne 0x5246
movl $0x7, 0x74(%rax)
andl $0x0, 0x78(%rax)
andq $0x0, 0x5c(%rax)
andl $0x0, 0x70(%rax)
andq $0x0, 0x68(%rax)
movl 0x10(%rbp), %eax
leaq 0x10(%rsp), %rcx
movl %eax, 0x4(%rsp)
movl %eax, 0xc(%rcx)
callq 0x2200
movq %rax, 0x80(%rsp)
leaq 0x20(%rbp), %rax
movq %rax, 0x88(%rsp)
movq 0x30(%rsp), %rcx
cmpl $0x4, %ecx
sete %al
movl %ecx, %edi
addl $-0x2, %ecx
cmpl $0x8, %ecx
setb %dl
movb $-0x3d, %sil
shrb %cl, %sil
movq %rdi, 0x50(%rsp)
leaq (,%rdi,4), %rcx
movq %rcx, 0x68(%rsp)
andb %dl, %sil
orb %al, %sil
leaq 0x6ecb(%rip), %rax      # 0xc186
leaq 0x6b1f(%rip), %rcx      # 0xbde1
cmovneq %rax, %rcx
movq %rcx, 0x70(%rsp)
leaq 0x6ebc(%rip), %rcx      # 0xc18e
cmovneq %rax, %rcx
movq %rcx, 0x78(%rsp)
movl $0x0, (%rsp)
movq %rbp, 0x8(%rsp)
movq 0x80(%rsp), %rax
movq (%rax), %rdx
xorl %ecx, %ecx
movsbq (%r12,%rcx), %rax
incq %rcx
cmpq $0x2d, %rax
je 0x52f4
movzwl (%rdx,%rax,2), %esi
andl $0xc00, %esi            # imm = 0xC00
jne 0x52f4
movzbl %al, %edx
cmpl $0xd, %edx
je 0x531b
cmpl $0xa, %edx
jne 0x5325
cmpq $0x1, %rcx
je 0x5cc3
leaq (%r12,%rcx), %r13
decq %r13
xorl %ebp, %ebp
cmpb $0x9, %al
je 0x533a
movzbl %al, %ecx
cmpl $0x20, %ecx
jne 0x5346
movb 0x1(%r13), %al
incq %r13
incq %rbp
jmp 0x532e
cmpl $0xa, %ecx
je 0x5350
cmpl $0xd, %ecx
jne 0x5359
subq %rbp, %r13
movb (%r13), %al
xorl %ebp, %ebp
cmpb $0x3a, %al
je 0x5369
movzbl %al, %ecx
testl %ecx, %ecx
jne 0x53d0
jmp 0x5ccb
cmpq %r12, %r13
je 0x53d0
testl %ebp, %ebp
je 0x5391
movq 0x8(%rsp), %rax
movl 0x10(%rax), %ecx
xorl %edi, %edi
leaq 0x6a5e(%rip), %rsi      # 0xbde1
leaq 0x82af(%rip), %rdx      # 0xd639
xorl %eax, %eax
callq 0x48c0
movl %ebp, %eax
addq %r12, %rax
movq %r13, %r15
subq %rax, %r15
leaq 0xcd7d(%rip), %rbx      # 0x12120
movq (%rbx), %r14
testq %r14, %r14
je 0x5401
movq %r14, %rdi
callq 0x20a0
cmpq %r15, %rax
jne 0x53ca
movq %r14, %rdi
movq %r12, %rsi
movq %r15, %rdx
callq 0x2160
testl %eax, %eax
je 0x5401
addq $0x20, %rbx
jmp 0x53a3
movsbl %al, %ecx
movq 0x8(%rsp), %r15
movl 0x10(%r15), %r8d
xorl %edi, %edi
leaq 0x6da1(%rip), %rsi      # 0xc186
leaq 0x821a(%rip), %rdx      # 0xd606
xorl %eax, %eax
callq 0x48c0
leaq 0xd6b6(%rip), %rax      # 0x12ab0
movq %rax, 0x28(%rsp)
jmp 0x541c
incq %r13
movl (%rsp), %eax
movq %rbx, 0x28(%rsp)
orl 0x18(%rbx), %eax
movl %eax, (%rsp)
movq %r13, 0x48(%rsp)
movq 0x8(%rsp), %r15
movl 0x10(%r15), %eax
movl %eax, 0x18(%rsp)
movq %r12, 0x10(%rsp)
movl %r13d, %ebx
subl %r12d, %ebx
notl %ebp
addl %ebx, %ebp
movl %ebp, 0x20(%rsp)
andl $0x0, 0x24(%rsp)
movq 0x48(%rsp), %rax
subq %r12, %rax
movq %rax, 0x38(%rsp)
movq %r12, %r14
movq %r15, %rbp
movzbl (%r13), %eax
cmpl $0xa, %eax
je 0x546b
cmpl $0xd, %eax
je 0x546b
testl %eax, %eax
jne 0x555f
jmp 0x5569
movq 0x30(%rsp), %rax
cmpl $0x9, %eax
ja 0x54b6
movl $0x35c, %ecx            # imm = 0x35C
btl %eax, %ecx
jae 0x54b6
movl %r13d, %edx
subl %r14d, %edx
movq %rbp, %r15
movq %r12, %rbp
movq 0x88(%rsp), %r12
movq %r12, %rdi
movq %r14, %rsi
callq 0x963f
movq %r12, %rdi
movq %rbp, %r12
movq %r15, %rbp
leaq 0x81c0(%rip), %rsi      # 0xd66e
pushq $0x2
popq %rdx
callq 0x963f
movl 0x10(%rbp), %eax
cmpl $0x51, %ebx
jl 0x54e3
xorl %edi, %edi
leaq 0x691a(%rip), %rsi      # 0xbde1
leaq 0x81a3(%rip), %rdx      # 0xd671
movq 0x38(%rsp), %rcx
movq %r12, %r8
movl %eax, %r9d
xorl %eax, %eax
callq 0x48c0
movl 0x10(%rbp), %eax
leal 0x1(%rax), %r9d
movl %r9d, 0x10(%rbp)
cmpb $0xd, (%r13)
jne 0x54ff
leaq 0x1(%r13), %rcx
cmpb $0xa, 0x1(%r13)
cmoveq %rcx, %r13
movzbl 0x1(%r13), %ecx
movq %r13, %r14
incq %r14
cmpl $0x20, %ecx
je 0x5514
cmpl $0x9, %ecx
jne 0x5573
xorl %ebx, %ebx
movq %r14, %r13
cmpb $0x9, %cl
je 0x5526
movzbl %cl, %eax
cmpl $0x20, %eax
jne 0x5531
incl %ebx
movb 0x1(%r13), %cl
incq %r13
jmp 0x5519
cmpl $0xa, %eax
je 0x553b
cmpl $0xd, %eax
jne 0x555f
xorl %edi, %edi
leaq 0x689d(%rip), %rsi      # 0xbde1
leaq 0x8150(%rip), %rdx      # 0xd69b
movq 0x38(%rsp), %rcx
movq %r12, %r8
xorl %eax, %eax
callq 0x48c0
jmp 0x544f
incq %r13
incl %ebx
jmp 0x544f
movl 0x10(%rbp), %eax
decl %eax
movq %r13, %r12
jmp 0x5576
movq %r14, %r12
movl %eax, 0x1c(%rsp)
movq 0x28(%rsp), %rdx
movl 0x8(%rdx), %eax
testl %eax, %eax
je 0x56c3
cmpl $0x4, %eax
jne 0x55b6
cmpq $0x0, 0xd779(%rip)      # 0x12d10
jne 0x55b6
movq 0x48(%rsp), %rcx
leaq 0x1(%rcx), %rax
movq %rax, 0xd767(%rip)      # 0x12d10
movl %ecx, %eax
notl %eax
addl %r12d, %eax
movl %eax, 0xd762(%rip)      # 0x12d18
movq %rdx, %rax
leaq 0xcb60(%rip), %rcx      # 0x12120
subq %rcx, %rax
shrq $0x5, %rax
movq %rdx, %r15
movslq %eax, %rbx
cmpb $0x0, 0xd0(%rsp,%rbx)
je 0x55f6
testb $0x8, 0x18(%r15)
jne 0x55f6
leaq 0x10(%rsp), %rdi
movq 0x70(%rsp), %rsi
leaq 0x80e0(%rip), %rdx      # 0xd6cf
xorl %eax, %eax
callq 0x48c0
movb $0x1, 0xd0(%rsp,%rbx)
movl 0x8(%r15), %r14d
movq $0x100, 0x90(%rsp,%r14,8) # imm = 0x100
testq %r14, %r14
je 0x6041
movq %r15, %rbx
movq (%rbp), %r13
movl 0xd4ac(%rip), %eax      # 0x12ad0
movl %eax, 0x38(%rsp)
movq 0x48(%rsp), %rsi
movl %esi, %edx
notl %edx
addl %r12d, %edx
movl 0x18(%r15), %ecx
movq %rbp, %rdi
leaq 0x10(%rsp), %r8
callq 0x6111
testq %rax, %rax
je 0x572c
movq %rax, %r15
cmpl $0x5, 0x10(%rax)
jne 0x5664
movq 0x10(%rbx), %rax
cmpb $0x43, (%rax)
jne 0x56e6
movq 0x30(%rsp), %rax
cmpl $0x9, %eax
ja 0x57fa
movq 0x50(%rsp), %rax
leaq 0x5a42(%rip), %rcx      # 0xb0c0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0x18(%rbx), %eax
testw $0x3f0, %ax             # imm = 0x3F0
setne %cl
testb %al, %al
setns %dl
testb %dl, %cl
jne 0x57ae
movq 0x30(%rsp), %rcx
cmpl $0x4, %ecx
je 0x57aa
cmpl $0x3, %ecx
je 0x58a6
cmpl $0x2, %ecx
je 0x574e
jmp 0x57fa
leaq 0xd3e6(%rip), %rax      # 0x12ab0
cmpq %rax, %rdx
je 0x52e7
leaq 0x10(%rsp), %rdi
movq 0x78(%rsp), %rsi
leaq 0x7ff6(%rip), %rdx      # 0xd6da
jmp 0x573f
leaq 0x10(%rsp), %rdi
leaq 0x66ef(%rip), %rsi      # 0xbde1
leaq 0x83aa(%rip), %rdx      # 0xdaa3
xorl %eax, %eax
callq 0x48c0
movq 0xd619(%rip), %rax      # 0x12d20
testq %r15, %r15
je 0x572c
cmpl $0x5, 0x10(%r15)
jne 0x5664
movq (%r15), %rcx
movq %rax, (%r15)
movq %r15, 0xd5fc(%rip)      # 0x12d20
movq %r15, %rax
movq %rcx, %r15
jmp 0x5707
leaq 0x10(%rsp), %rdi
leaq 0x6a4e(%rip), %rsi      # 0xc186
leaq 0x8381(%rip), %rdx      # 0xdac0
xorl %eax, %eax
callq 0x48c0
jmp 0x52e7
movl 0x18(%rbx), %eax
testb $0x10, %al
je 0x57ae
jmp 0x57fa
testb $0x2, 0x19(%rbx)
je 0x57ae
jmp 0x57fa
movzwl 0x18(%rbx), %eax
testw $0x3f0, %ax             # imm = 0x3F0
jne 0x57ae
cmpl $0x9, 0x20(%rsp)
jl 0x578b
movq 0x10(%rsp), %rsi
leaq 0x8360(%rip), %rdi      # 0xdadf
pushq $0x8
popq %rdx
callq 0x2160
testl %eax, %eax
je 0x57fa
leaq 0x10(%rsp), %rdi
leaq 0x664a(%rip), %rsi      # 0xbde1
leaq 0x834a(%rip), %rdx      # 0xdae8
xorl %eax, %eax
callq 0x48c0
jmp 0x57fa
movl 0x18(%rbx), %eax
testb $0x40, %al
jne 0x57fa
movl 0x20(%rsp), %r10d
movl %r10d, 0x40(%rsp)
andl $0x0, 0x20(%rsp)
movq 0x10(%rsp), %r8
movq 0x68(%rsp), %rax
leaq 0x69ca(%rip), %rcx      # 0xc198
movslq (%rax,%rcx), %r9
addq %rcx, %r9
leaq 0x10(%rsp), %rdi
leaq 0x6600(%rip), %rsi      # 0xbde1
leaq 0x82df(%rip), %rdx      # 0xdac7
movl %r10d, %ecx
xorl %eax, %eax
callq 0x48c0
movl 0x40(%rsp), %eax
movl %eax, 0x20(%rsp)
leaq (%rsp,%r14,8), %r14
addq $0x90, %r14
movq 0x10(%rbx), %rsi
testq %rsi, %rsi
je 0x5824
movq %rbp, %rdi
movq %r15, %rdx
movq %r14, %rcx
movq %rbx, %r8
leaq 0x10(%rsp), %r9
callq 0x68f1
cmpl $0x1, 0x8(%rbx)
jne 0x5883
movl 0x4(%r14), %eax
movl %eax, 0x74(%r13)
testl %eax, %eax
jne 0x5850
movq (%r13), %rbx
leaq 0x82ea(%rip), %rdi      # 0xdb2b
pushq $0x2
popq %rsi
movq %rbx, %rdx
callq 0x9050
testl %eax, %eax
je 0x58c2
movq 0x8(%r13), %rbx
leaq 0x82d0(%rip), %rdi      # 0xdb2b
pushq $0x2
popq %rsi
movq %rbx, %rdx
callq 0x9050
testl %eax, %eax
jne 0x58e3
movl 0x10(%rbp), %r8d
leaq 0x10(%rsp), %rdi
leaq 0x6567(%rip), %rsi      # 0xbde1
leaq 0x82fc(%rip), %rdx      # 0xdb7d
jmp 0x58d9
cmpq $0x0, 0x10(%rbx)
jne 0x5b13
movl 0x18(%rbx), %eax
andl $0x3, %eax
orl 0x38(%rsp), %eax
je 0x5b76
jmp 0x5b1a
movl 0x18(%rbx), %eax
testb $0x20, %al
je 0x57ae
jmp 0x57fa
testb $0x1, 0x19(%rbx)
je 0x57ae
jmp 0x57fa
movl 0x10(%rbp), %r8d
leaq 0x10(%rsp), %rdi
leaq 0x650f(%rip), %rsi      # 0xbde1
leaq 0x8255(%rip), %rdx      # 0xdb2e
movq %rbx, %rcx
xorl %eax, %eax
callq 0x48c0
movl 0x74(%r13), %eax
cmpl $0x1, %eax
je 0x5a56
cmpl $0x2, %eax
jne 0x5b13
movq 0x20(%r13), %r14
testq %r14, %r14
je 0x5b13
movl 0x10(%rbp), %eax
movl %eax, 0x28(%rsp)
andq $0x0, 0x68(%r13)
leaq 0x8cfe(%rip), %rdi      # 0xe617
pushq $-0x1
popq %rbx
movl %ebx, %esi
movq %r14, %rdx
callq 0x6092
testl %eax, %eax
je 0x5b01
leaq 0x8d5c(%rip), %rdi      # 0xe691
movl %ebx, %esi
movq %r14, %rdx
callq 0x6092
testl %eax, %eax
je 0x5ad6
leaq 0x8cd2(%rip), %rdi      # 0xe620
movl %ebx, %esi
movq %r14, %rdx
callq 0x6092
testl %eax, %eax
je 0x5ad6
leaq 0x8d1c(%rip), %rdi      # 0xe683
movl %ebx, %esi
movq %r14, %rdx
callq 0x6092
testl %eax, %eax
jne 0x5990
xorl %edi, %edi
leaq 0x6463(%rip), %rsi      # 0xbde1
leaq 0x8cad(%rip), %rdx      # 0xe632
movl 0x28(%rsp), %ecx
xorl %eax, %eax
callq 0x48c0
leaq 0x8d00(%rip), %rdi      # 0xe697
movl %ebx, %esi
movq %r14, %rdx
callq 0x6092
testl %eax, %eax
je 0x5c0f
leaq 0x8cee(%rip), %rdi      # 0xe69e
movl %ebx, %esi
movq %r14, %rdx
callq 0x6092
testl %eax, %eax
je 0x5c24
leaq 0x8cdb(%rip), %rdi      # 0xe6a4
movl %ebx, %esi
movq %r14, %rdx
callq 0x6092
testl %eax, %eax
je 0x5c39
leaq 0x8ccd(%rip), %rdi      # 0xe6af
movl %ebx, %esi
movq %r14, %rdx
callq 0x6092
testl %eax, %eax
je 0x5c54
leaq 0x8cbf(%rip), %rdi      # 0xe6ba
movl %ebx, %esi
movq %r14, %rdx
callq 0x6092
testl %eax, %eax
je 0x5c6f
leaq 0x6827(%rip), %rdi      # 0xc23b
pushq $0x9
popq %rsi
movq %r14, %rdx
callq 0x9050
testl %eax, %eax
je 0x5c84
leaq 0x80fd(%rip), %rdi      # 0xdb2b
pushq $0x2
popq %rsi
movq %r14, %rdx
callq 0x9050
xorl %edi, %edi
testl %eax, %eax
je 0x5c99
leaq 0x6744(%rip), %rsi      # 0xc18e
leaq 0x8ca0(%rip), %rdx      # 0xe6f1
jmp 0x5ca7
cmpq $0x0, 0x10(%r13)
je 0x5ab5
movq 0x8(%r13), %rdx
leaq 0x8185(%rip), %rdi      # 0xdbed
pushq $-0x1
popq %rsi
movq %rdx, %rbx
callq 0x6092
testl %eax, %eax
je 0x5b0b
leaq 0x8172(%rip), %rdi      # 0xdbf4
pushq $-0x1
popq %rsi
movq %rbx, %rdx
callq 0x6092
testl %eax, %eax
je 0x5b80
leaq 0x8160(%rip), %rdi      # 0xdbfc
pushq $-0x1
popq %rsi
movq %rbx, %rdx
callq 0x6092
testl %eax, %eax
jne 0x5b13
movl $0x1, 0x50(%r13)
jmp 0x5b13
andl $0x0, 0x74(%r13)
leaq 0x10(%rsp), %rdi
leaq 0x66c0(%rip), %rsi      # 0xc186
leaq 0x80fb(%rip), %rdx      # 0xdbc8
xorl %eax, %eax
callq 0x48c0
jmp 0x5b13
movabsq $0x100000001, %rax      # imm = 0x100000001
movq %rax, 0x6c(%r13)
xorl %edi, %edi
leaq 0x62f4(%rip), %rsi      # 0xbde1
leaq 0x8b3e(%rip), %rdx      # 0xe632
movl 0x28(%rsp), %ecx
xorl %eax, %eax
callq 0x48c0
jmp 0x5b13
movq $0x1, 0x6c(%r13)
jmp 0x5b13
movl $0x1, 0x54(%r13)
cmpl $0x0, 0x38(%rsp)
je 0x5b76
leaq 0x10(%rsp), %rdi
leaq 0x629a(%rip), %rbx      # 0xbdc0
movq %rbx, %rsi
leaq 0x80d3(%rip), %rdx      # 0xdc03
xorl %eax, %eax
callq 0x48c0
movq %rbx, %rdi
movq %r15, %rsi
callq 0x9072
jmp 0x5b76
xorl %eax, %eax
cmpq $0xa, %rax
je 0x5b5f
leaq 0x1(%rax), %rcx
cmpq (%r13,%rax,8), %r15
movq %rcx, %rax
jne 0x5b46
movq (%r15), %r15
jmp 0x5b76
movq (%r15), %rax
movq 0xd1b7(%rip), %rcx      # 0x12d20
movq %rcx, (%r15)
movq %r15, 0xd1ad(%rip)      # 0x12d20
movq %rax, %r15
testq %r15, %r15
jne 0x5b44
jmp 0x52e7
movq %r14, 0x40(%rsp)
movl $0x1, 0x58(%r13)
movq 0x18(%r13), %rax
testq %rax, %rax
movq 0x28(%rsp), %r14
je 0x5b13
movq 0x8(%rax), %rsi
movl 0x14(%rax), %edx
movq %rbp, %rdi
pushq $0x3
popq %rcx
leaq 0x10(%rsp), %r8
callq 0x6111
movq %rax, %rbx
orb $0x2, 0x24(%rsp)
movq %rbp, %rdi
leaq 0x65f8(%rip), %rsi      # 0xc1c0
movq %rax, %rdx
movq 0x40(%rsp), %rcx
movq %r14, %r8
leaq 0x10(%rsp), %r9
callq 0x68f1
andb $-0x3, 0x24(%rsp)
testq %rbx, %rbx
je 0x5b13
movq %rbx, %rcx
movq %rcx, %rax
movq (%rcx), %rcx
testq %rcx, %rcx
jne 0x5bee
movq 0xd120(%rip), %rcx      # 0x12d20
movq %rcx, (%rax)
movq %rbx, 0xd116(%rip)      # 0x12d20
jmp 0x5b13
movl $0x1, 0x68(%r13)
movl $0x4, 0x70(%r13)
jmp 0x5b13
movl $0x1, 0x68(%r13)
movl $0x2, 0x70(%r13)
jmp 0x5b13
movabsq $0x100000002, %rax      # imm = 0x100000002
movq %rax, 0x68(%r13)
movl $0x6, 0x70(%r13)
jmp 0x5b13
movabsq $0x100000002, %rax      # imm = 0x100000002
movq %rax, 0x68(%r13)
movl $0x7, 0x70(%r13)
jmp 0x5b13
movl $0x1, 0x68(%r13)
movl $0x5, 0x70(%r13)
jmp 0x5b13
movl $0x1, 0x68(%r13)
movl $0x3, 0x70(%r13)
jmp 0x5b13
leaq 0x6141(%rip), %rsi      # 0xbde1
leaq 0x8a1d(%rip), %rdx      # 0xe6c4
movq %r14, %rcx
movl 0x28(%rsp), %r8d
xorl %eax, %eax
callq 0x48c0
movl $0x8, 0x70(%r13)
jmp 0x5b13
incq %r12
incl 0x10(%rbp)
jmp 0x5cea
movq 0x8(%rsp), %rax
movl 0x10(%rax), %ecx
leaq 0x64ac(%rip), %rsi      # 0xc186
leaq 0x78f8(%rip), %rdx      # 0xd5d9
xorl %edi, %edi
xorl %eax, %eax
callq 0x48c0
movq 0x60(%rsp), %rcx
movl (%rcx), %eax
subl %r12d, %eax
movq 0x58(%rsp), %rdx
addl %eax, (%rdx)
movq %r12, (%rcx)
xorl %ebp, %ebp
cmpl $0x0, 0xcdd1(%rip)      # 0x12ad8
jne 0x602d
cmpl $0x9, 0x30(%rsp)
ja 0x5e26
leaq 0x5379(%rip), %rax      # 0xb098
movq 0x50(%rsp), %rcx
movslq (%rax,%rcx,4), %rcx
addq %rax, %rcx
jmpq *%rcx
movl $0x28070000, %ebx       # imm = 0x28070000
btl $0x1c, (%rsp)
jb 0x5da2
movl $0x2050000, %ebx        # imm = 0x2050000
testl $0x700000, (%rsp)       # imm = 0x700000
jne 0x5da2
movl 0x1c(%rsp), %r8d
leaq 0x606d(%rip), %rsi      # 0xbdc0
leaq 0x7989(%rip), %rdx      # 0xd6e3
xorl %edi, %edi
movl 0x4(%rsp), %ecx
xorl %eax, %eax
callq 0x48c0
jmp 0x5da2
pushq $-0x1
popq %rbp
leaq 0x640b(%rip), %rsi      # 0xc17e
leaq 0x7851(%rip), %rdx      # 0xd5cb
xorl %edi, %edi
xorl %eax, %eax
callq 0x48c0
jmp 0x602d
movl $0x40001800, %ebx       # imm = 0x40001800
jmp 0x5da2
movl $0x1000, %ebx           # imm = 0x1000
jmp 0x5da2
movl $0xe400, %ebx           # imm = 0xE400
jmp 0x5da2
movl $0xe000, %ebx           # imm = 0xE000
leaq 0xc377(%rip), %r12      # 0x12120
leaq 0x63d6(%rip), %r14      # 0xc186
leaq 0x7a20(%rip), %r15      # 0xd7d7
movq (%r12), %rcx
testq %rcx, %rcx
je 0x5e26
movl 0x18(%r12), %eax
andl %ebx, %eax
je 0x5de7
andl (%rsp), %eax
jne 0x5de7
movl 0x1c(%rsp), %r9d
xorl %edi, %edi
movq %r14, %rsi
movq %r15, %rdx
movl 0x4(%rsp), %r8d
xorl %eax, %eax
callq 0x48c0
addq $0x20, %r12
jmp 0x5db7
testl $0x70000, (%rsp)        # imm = 0x70000
jne 0x5e26
leaq 0x7957(%rip), %rdx      # 0xd754
jmp 0x5e0d
btl $0x18, (%rsp)
jb 0x5e26
leaq 0x7995(%rip), %rdx      # 0xd7a2
movl 0x1c(%rsp), %r8d
leaq 0x636d(%rip), %rsi      # 0xc186
xorl %edi, %edi
movl 0x4(%rsp), %ecx
xorl %eax, %eax
callq 0x48c0
testb $0x1, 0x98(%rsp)
je 0x5e5a
testb $0x1, 0xa0(%rsp)
jne 0x5e5a
movl 0x1c(%rsp), %r8d
leaq 0x6340(%rip), %rsi      # 0xc186
leaq 0x79b4(%rip), %rdx      # 0xd801
xorl %edi, %edi
movl 0x4(%rsp), %ecx
xorl %eax, %eax
callq 0x48c0
movq 0x8(%rsp), %rax
movq (%rax), %rax
cmpl $0x0, 0x54(%rax)
je 0x5e92
testb $0x1, 0xb0(%rsp)
je 0x5e92
movl 0x1c(%rsp), %r8d
leaq 0x6308(%rip), %rsi      # 0xc186
leaq 0x7a05(%rip), %rdx      # 0xd88a
xorl %edi, %edi
movl 0x4(%rsp), %ecx
xorl %eax, %eax
callq 0x48c0
testb $0x1, 0xb8(%rsp)
movl (%rsp), %ebx
je 0x5ec8
movl %ebx, %eax
andl $0x800000, %eax         # imm = 0x800000
jne 0x5ec8
movl 0x1c(%rsp), %r8d
leaq 0x62d2(%rip), %rsi      # 0xc186
leaq 0x7a0b(%rip), %rdx      # 0xd8c6
xorl %edi, %edi
movl 0x4(%rsp), %ecx
xorl %eax, %eax
callq 0x48c0
btl $0x1a, %ebx
jae 0x5f10
btl $0x1b, %ebx
jb 0x5ef4
movl 0x1c(%rsp), %r8d
leaq 0x5f01(%rip), %rsi      # 0xbde1
leaq 0x7a24(%rip), %rdx      # 0xd90b
xorl %edi, %edi
movl 0x4(%rsp), %ecx
xorl %eax, %eax
callq 0x48c0
cmpl $0x0, 0x30(%rsp)
jne 0x5f10
movl 0xc4(%rsp), %eax
movq 0x8(%rsp), %rcx
movl %eax, 0x14(%rcx)
movl 0x10(%rcx), %eax
movl %eax, 0x18(%rcx)
movl 0xac(%rsp), %eax
movq 0x8(%rsp), %rcx
movq (%rcx), %rbx
testl %eax, %eax
je 0x5fb3
movl %eax, 0x78(%rbx)
cmpl $0x3, %eax
jb 0x5f78
movl 0x74(%rbx), %eax
cmpl $0x1, %eax
je 0x5f53
cmpl $0x7, %eax
jne 0x5fb3
movq 0x8(%rbx), %rdx
leaq 0x883b(%rip), %rdi      # 0xe782
pushq $-0x1
popq %rsi
callq 0x6092
testl %eax, %eax
jne 0x5fb3
movq 0x8(%rsp), %rbx
movl 0x10(%rbx), %ecx
leaq 0x6224(%rip), %rsi      # 0xc186
leaq 0x79e2(%rip), %rdx      # 0xd94b
xorl %edi, %edi
xorl %eax, %eax
callq 0x48c0
movq (%rbx), %rbx
movl 0x78(%rbx), %eax
cmpl $0x2, %eax
jne 0x5fb3
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rax
testq %rax, %rax
je 0x5fb3
cmpl $0x2, 0x78(%rax)
je 0x5fb3
movq 0x8(%rsp), %rbx
movl 0x10(%rbx), %ecx
leaq 0x61e6(%rip), %rsi      # 0xc186
leaq 0x7a0b(%rip), %rdx      # 0xd9b2
xorl %edi, %edi
xorl %eax, %eax
callq 0x48c0
movq (%rbx), %rbx
cmpl $0x2, 0x74(%rbx)
jne 0x6010
cmpl $0x2, 0x78(%rbx)
jne 0x6010
cmpl $0x0, 0x70(%rbx)
je 0x5ff1
cmpl $0x0, 0x6c(%rbx)
je 0x6010
movq 0x20(%rbx), %rcx
movq 0x8(%rsp), %rax
movl 0x10(%rax), %r8d
leaq 0x61a7(%rip), %rsi      # 0xc186
leaq 0x7a69(%rip), %rdx      # 0xda4f
xorl %edi, %edi
xorl %eax, %eax
callq 0x48c0
jmp 0x6010
movq 0x8(%rsp), %rax
movl 0x10(%rax), %ecx
leaq 0x6186(%rip), %rsi      # 0xc186
leaq 0x7a05(%rip), %rdx      # 0xda0c
xorl %edi, %edi
xorl %eax, %eax
callq 0x48c0
movq 0x8(%rsp), %rdx
movq (%rdx), %rax
cmpl $0x1, 0x74(%rax)
jne 0x602d
movq 0x8(%rdx), %rcx
movq %rcx, 0x80(%rax)
movq %rax, 0x8(%rdx)
movl %ebp, %eax
addq $0x128, %rsp            # imm = 0x128
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl 0x18(%rsp), %ecx
leaq 0x6132(%rip), %rsi      # 0xc17e
leaq 0x7a39(%rip), %rdx      # 0xda8c
xorl %edi, %edi
xorl %eax, %eax
callq 0x48c0
pushq $0x1
popq %rdi
callq 0x21e0