// File: /workspace/github_cpp_makefile_star2_O3/szmer[P]brill/./src/rules.cpp
// Function: Rule::transform_corp(Corpus*)
Corpus Rule::transform_corp(Corpus * corp) {

	Corpus new_corp;
	new_corp.sentences.reserve(corp->sentences.size());

	// Change from tag X to Y when preceding tag is Z:
	if(id < (RL_PRECEDING+1) * RULE_RANGE) 
		for(unsigned int si = 0; si < corp->sentences.size(); si++) {
			vector<TaggedWord> new_stc(corp->sentences[si]); // make a copy
			for(unsigned int i = 1; i < corp->sentences[si].size(); i++)
				if(corp->sentences[si][i-1].tag == cue1
						&& corp->sentences[si][i].tag == alter_tag)
					new_stc[i].tag = target;
			new_corp.sentences.push_back(new_stc);
		}

	// Change from tag X to Y when following tag is Z:
	if(id >= RL_FOLLOWING * RULE_RANGE && id < (RL_FOLLOWING+1) * RULE_RANGE)
		for(unsigned int si = 0; si < corp->sentences.size(); si++) {
			vector<TaggedWord> new_stc(corp->sentences[si]); // make a copy
			for(unsigned int i = 0; i+1 < corp->sentences[si].size(); i++)
				if(corp->sentences[si][i+1].tag == cue1
						&& corp->sentences[si][i].tag == alter_tag)
					new_stc[i].tag = target;
			new_corp.sentences.push_back(new_stc);
		}

	// Change from tag X to Y when the tag two before is Z:
	if(id >= RL_2BEFORE * RULE_RANGE && id < (RL_2BEFORE+1) * RULE_RANGE)
		for(unsigned int si = 0; si < corp->sentences.size(); si++) {
			vector<TaggedWord> new_stc(corp->sentences[si]); // make a copy
			for(unsigned int i = 2; i < corp->sentences[si].size(); i++)
				if(corp->sentences[si][i-2].tag == cue1
						&& corp->sentences[si][i].tag == alter_tag)
					new_stc[i].tag = target;
			new_corp.sentences.push_back(new_stc);
		}

	// Change from tag X to Y when the tag two after is Z:
	if(id >= RL_2AFTER * RULE_RANGE && id < (RL_2AFTER+1) * RULE_RANGE)
		for(unsigned int si = 0; si < corp->sentences.size(); si++) {
			vector<TaggedWord> new_stc(corp->sentences[si]); // make a copy
			for(unsigned int i = 0; i+2 < corp->sentences[si].size(); i++)
				if(corp->sentences[si][i+2].tag == cue1
						&& corp->sentences[si][i].tag == alter_tag)
					new_stc[i].tag = target;
			new_corp.sentences.push_back(new_stc);
		}


	// Change from tag X to Y when one of two tags before is Z:
	if(id >= RL_ONE_OF_2BEFORE * RULE_RANGE && id < (RL_ONE_OF_2BEFORE+1) * RULE_RANGE)
		for(unsigned int si = 0; si < corp->sentences.size(); si++) {
			vector<TaggedWord> new_stc(corp->sentences[si]); // make a copy
			for(unsigned int i = 2; i < corp->sentences[si].size(); i++)
				if((corp->sentences[si][i-1].tag == cue1
					|| corp->sentences[si][i-2].tag == cue1)
						&& corp->sentences[si][i].tag == alter_tag)
					new_stc[i].tag = target;
			new_corp.sentences.push_back(new_stc);
		}

	// Change from tag X to Y when one of two tags after is Z:
	if(id >= RL_ONE_OF_2AFTER * RULE_RANGE && id < (RL_ONE_OF_2AFTER+1) * RULE_RANGE)
		for(unsigned int si = 0; si < corp->sentences.size(); si++) {
			vector<TaggedWord> new_stc(corp->sentences[si]); // make a copy
			for(unsigned int i = 0; i+2 < corp->sentences[si].size(); i++)
				if((corp->sentences[si][i+1].tag == cue1
					|| corp->sentences[si][i+2].tag == cue1)
						&& corp->sentences[si][i].tag == alter_tag)
					new_stc[i].tag = target;
			new_corp.sentences.push_back(new_stc);
		}

	// Change from tag X to Y when one of three tags before is Z:
	if(id >= RL_ONE_OF_3BEFORE * RULE_RANGE && id < (RL_ONE_OF_3BEFORE+1) * RULE_RANGE)
		for(unsigned int si = 0; si < corp->sentences.size(); si++) {
			vector<TaggedWord> new_stc(corp->sentences[si]); // make a copy
			for(unsigned int i = 3; i < corp->sentences[si].size(); i++)
				if((corp->sentences[si][i-1].tag == cue1
					|| corp->sentences[si][i-2].tag == cue1
					|| corp->sentences[si][i-3].tag == cue1)
						&& corp->sentences[si][i].tag == alter_tag)
					new_stc[i].tag = target;
			new_corp.sentences.push_back(new_stc);
		}

	// Change from tag X to Y when one of three tags after is Z:
	if(id >= RL_ONE_OF_3AFTER * RULE_RANGE && id < (RL_ONE_OF_3AFTER+1) * RULE_RANGE)
		for(unsigned int si = 0; si < corp->sentences.size(); si++) {
			vector<TaggedWord> new_stc(corp->sentences[si]); // make a copy
			for(unsigned int i = 0; i+3 < corp->sentences[si].size(); i++)
				if((corp->sentences[si][i+1].tag == cue1
					|| corp->sentences[si][i+2].tag == cue1
					|| corp->sentences[si][i+3].tag == cue1)
						&& corp->sentences[si][i].tag == alter_tag)
					new_stc[i].tag = target;
			new_corp.sentences.push_back(new_stc);
		}

	// Change from tag X to Y when preceding tag is W and following Z:
	if(id >= EXTRL_PRECEDING_AND_FOLLOWING * EXT_RULE_RANGE &&
			id < (EXTRL_PRECEDING_AND_FOLLOWING+1) * EXT_RULE_RANGE)
		for(unsigned int si = 0; si < corp->sentences.size(); si++) {
			vector<TaggedWord> new_stc(corp->sentences[si]); // make a copy
			for(unsigned int i = 1; i+1 < corp->sentences[si].size(); i++)
				if((corp->sentences[si][i-1].tag == cue1
					&& corp->sentences[si][i+1].tag == cue2)
						&& corp->sentences[si][i].tag == alter_tag)
					new_stc[i].tag = target;
			new_corp.sentences.push_back(new_stc);
		}

	// Change from tag X to Y when preceding tag is W and two before Z:
	if(id >= EXTRL_1_AND_2_BEFORE * EXT_RULE_RANGE &&
			id < (EXTRL_1_AND_2_BEFORE+1) * EXT_RULE_RANGE)
		for(unsigned int si = 0; si < corp->sentences.size(); si++) {
			vector<TaggedWord> new_stc(corp->sentences[si]); // make a copy
			for(unsigned int i = 2; i < corp->sentences[si].size(); i++)
				if((corp->sentences[si][i-1].tag == cue1
					&& corp->sentences[si][i-2].tag == cue2)
						&& corp->sentences[si][i].tag == alter_tag)
					new_stc[i].tag = target;
			new_corp.sentences.push_back(new_stc);
		}

	// Change from tag X to Y when following tag is W and two after Z:
	if(id >= EXTRL_1_AND_2_AFTER * EXT_RULE_RANGE &&
			id < (EXTRL_1_AND_2_AFTER+1) * EXT_RULE_RANGE)
		for(unsigned int si = 0; si < corp->sentences.size(); si++) {
			vector<TaggedWord> new_stc(corp->sentences[si]); // make a copy
			for(unsigned int i = 0; i+2 < corp->sentences[si].size(); i++)
				if((corp->sentences[si][i+1].tag == cue1
					&& corp->sentences[si][i+2].tag == cue2)
						&& corp->sentences[si][i].tag == alter_tag)
					new_stc[i].tag = target;
			new_corp.sentences.push_back(new_stc);
		}

	return new_corp;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x48, %rsp
xorl %eax, %eax
movq %rax, 0x10(%rdi)
xorps %xmm0, %xmm0
movups %xmm0, (%rdi)
leaq 0x20(%rdi), %rcx
movl $0x0, 0x20(%rdi)
movq %rax, 0x28(%rdi)
movq %rcx, 0x30(%rdi)
movq %rcx, 0x38(%rdi)
movq %rax, 0x40(%rdi)
movq 0x8(%rdx), %rax
movq %rdx, -0x38(%rbp)
subq (%rdx), %rax
movq %rsi, %rbx
sarq $0x3, %rax
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rcx, %rax
movq %rdi, -0x68(%rbp)
movq %rax, %rsi
callq 0x629e
movq 0x80(%rbx), %rax
cmpq $0x767ed6a, %rax        # imm = 0x767ED6A
movq %rbx, -0x30(%rbp)
jg 0x3f90
movq -0x38(%rbp), %rdx
movq (%rdx), %rcx
cmpq %rcx, 0x8(%rdx)
je 0x3f90
leaq 0x60(%rbx), %rax
movq %rax, -0x48(%rbp)
xorl %esi, %esi
leaq -0x60(%rbp), %r15
movq %rsi, -0x40(%rbp)
leaq (%rsi,%rsi,2), %r14
leaq (%rcx,%r14,8), %rsi
movq %r15, %rdi
callq 0x65d0
movq -0x38(%rbp), %rax
movq (%rax), %r12
movq (%r12,%r14,8), %rbx
movq 0x8(%r12,%r14,8), %rax
subq %rbx, %rax
cmpq $0x41, %rax
jb 0x3f3e
movl $0x1, %r13d
movl $0x2, %r15d
leal -0x2(%r15), %eax
shlq $0x6, %rax
movq 0x28(%rbx,%rax), %rdx
movq -0x30(%rbp), %rcx
cmpq 0x8(%rcx), %rdx
jne 0x3f1f
testq %rdx, %rdx
je 0x3ecf
addq %rbx, %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x3f1f
shlq $0x6, %r13
movq 0x28(%rbx,%r13), %rdx
movq -0x30(%rbp), %rax
cmpq 0x48(%rax), %rdx
jne 0x3f1f
testq %rdx, %rdx
je 0x3f03
leaq (%rbx,%r13), %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq 0x40(%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x3f1f
movq -0x60(%rbp), %rax
leaq (%rax,%r13), %rdi
addq $0x20, %rdi
movq -0x48(%rbp), %rsi
callq 0x2110
movq -0x38(%rbp), %rax
movq (%rax), %r12
movl %r15d, %r13d
movq (%r12,%r14,8), %rbx
movq 0x8(%r12,%r14,8), %rax
subq %rbx, %rax
sarq $0x6, %rax
incl %r15d
cmpq %r13, %rax
ja 0x3e99
movq -0x68(%rbp), %rdi
leaq -0x60(%rbp), %r15
movq %r15, %rsi
callq 0x6664
movq %r15, %rdi
callq 0x603a
movq -0x40(%rbp), %rsi
incl %esi
movq -0x38(%rbp), %rax
movq (%rax), %rcx
movq 0x8(%rax), %rax
subq %rcx, %rax
sarq $0x3, %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rdx, %rax
cmpq %rsi, %rax
movq -0x30(%rbp), %rbx
ja 0x3e5c
movq 0x80(%rbx), %rax
leaq -0x767ed6b(%rax), %rcx
cmpq $0x767ed6a, %rcx        # imm = 0x767ED6A
ja 0x40ea
movq -0x38(%rbp), %rdx
movq (%rdx), %rcx
cmpq %rcx, 0x8(%rdx)
je 0x40ea
leaq 0x60(%rbx), %rax
movq %rax, -0x48(%rbp)
xorl %esi, %esi
leaq -0x60(%rbp), %r15
movq %rsi, -0x40(%rbp)
leaq (%rsi,%rsi,2), %r14
leaq (%rcx,%r14,8), %rsi
movq %r15, %rdi
callq 0x65d0
movq -0x38(%rbp), %rax
movq (%rax), %r12
movq (%r12,%r14,8), %r13
movq 0x8(%r12,%r14,8), %rax
subq %r13, %rax
cmpq $0x41, %rax
jb 0x409c
movl $0x1, %eax
xorl %r15d, %r15d
shlq $0x6, %rax
movq 0x28(%r13,%rax), %rdx
cmpq 0x8(%rbx), %rdx
jne 0x4078
testq %rdx, %rdx
je 0x4026
addq %r13, %rax
addq $0x20, %rax
movq (%rbx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x4078
movq %rbx, %rax
movl %r15d, %ebx
shlq $0x6, %rbx
movq 0x28(%r13,%rbx), %rdx
cmpq 0x48(%rax), %rdx
jne 0x4078
testq %rdx, %rdx
je 0x405c
leaq (%rbx,%r13), %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq 0x40(%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x4078
movq -0x60(%rbp), %rax
leaq (%rax,%rbx), %rdi
addq $0x20, %rdi
movq -0x48(%rbp), %rsi
callq 0x2110
movq -0x38(%rbp), %rax
movq (%rax), %r12
leal 0x2(%r15), %eax
movq (%r12,%r14,8), %r13
movq 0x8(%r12,%r14,8), %rcx
subq %r13, %rcx
sarq $0x6, %rcx
incl %r15d
cmpq %rax, %rcx
movq -0x30(%rbp), %rbx
ja 0x3ffc
movq -0x68(%rbp), %rdi
leaq -0x60(%rbp), %r15
movq %r15, %rsi
callq 0x6664
movq %r15, %rdi
callq 0x603a
movq -0x40(%rbp), %rsi
incl %esi
movq -0x38(%rbp), %rax
movq (%rax), %rcx
movq 0x8(%rax), %rax
subq %rcx, %rax
sarq $0x3, %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rdx, %rax
cmpq %rsi, %rax
ja 0x3fc3
movq 0x80(%rbx), %rax
leaq -0xecfdad6(%rax), %rcx
cmpq $0x767ed6a, %rcx        # imm = 0x767ED6A
ja 0x4253
movq -0x38(%rbp), %rdx
movq (%rdx), %rcx
cmpq %rcx, 0x8(%rdx)
je 0x4253
leaq 0x60(%rbx), %rax
movq %rax, -0x48(%rbp)
xorl %esi, %esi
leaq -0x60(%rbp), %r15
movq %rsi, -0x40(%rbp)
leaq (%rsi,%rsi,2), %r14
leaq (%rcx,%r14,8), %rsi
movq %r15, %rdi
callq 0x65d0
movq -0x38(%rbp), %rax
movq (%rax), %r12
movq (%r12,%r14,8), %rbx
movq 0x8(%r12,%r14,8), %rax
subq %rbx, %rax
cmpq $0x81, %rax
jb 0x4201
movl $0x2, %r13d
movl $0x3, %r15d
leal -0x3(%r15), %eax
shlq $0x6, %rax
movq 0x28(%rbx,%rax), %rdx
movq -0x30(%rbp), %rcx
cmpq 0x8(%rcx), %rdx
jne 0x41e2
testq %rdx, %rdx
je 0x4192
addq %rbx, %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x41e2
shlq $0x6, %r13
movq 0x28(%rbx,%r13), %rdx
movq -0x30(%rbp), %rax
cmpq 0x48(%rax), %rdx
jne 0x41e2
testq %rdx, %rdx
je 0x41c6
leaq (%rbx,%r13), %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq 0x40(%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x41e2
movq -0x60(%rbp), %rax
leaq (%rax,%r13), %rdi
addq $0x20, %rdi
movq -0x48(%rbp), %rsi
callq 0x2110
movq -0x38(%rbp), %rax
movq (%rax), %r12
movl %r15d, %r13d
movq (%r12,%r14,8), %rbx
movq 0x8(%r12,%r14,8), %rax
subq %rbx, %rax
sarq $0x6, %rax
incl %r15d
cmpq %r13, %rax
ja 0x415c
movq -0x68(%rbp), %rdi
leaq -0x60(%rbp), %r15
movq %r15, %rsi
callq 0x6664
movq %r15, %rdi
callq 0x603a
movq -0x40(%rbp), %rsi
incl %esi
movq -0x38(%rbp), %rax
movq (%rax), %rcx
movq 0x8(%rax), %rax
subq %rcx, %rax
sarq $0x3, %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rdx, %rax
cmpq %rsi, %rax
movq -0x30(%rbp), %rbx
ja 0x411d
movq 0x80(%rbx), %rax
leaq -0x1637c841(%rax), %rcx
cmpq $0x767ed6a, %rcx        # imm = 0x767ED6A
ja 0x43b4
movq -0x38(%rbp), %rdx
movq (%rdx), %rcx
cmpq %rcx, 0x8(%rdx)
je 0x43b4
leaq 0x60(%rbx), %rax
movq %rax, -0x48(%rbp)
xorl %esi, %esi
leaq -0x60(%rbp), %r15
movq %rsi, -0x40(%rbp)
leaq (%rsi,%rsi,2), %r14
leaq (%rcx,%r14,8), %rsi
movq %r15, %rdi
callq 0x65d0
movq -0x38(%rbp), %rax
movq (%rax), %r12
movq (%r12,%r14,8), %r13
movq 0x8(%r12,%r14,8), %rax
subq %r13, %rax
cmpq $0x81, %rax
jb 0x4366
movl $0x2, %eax
movl $0x3, %r15d
shlq $0x6, %rax
movq 0x28(%r13,%rax), %rdx
cmpq 0x8(%rbx), %rdx
jne 0x4343
testq %rdx, %rdx
je 0x42ee
addq %r13, %rax
addq $0x20, %rax
movq (%rbx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x4343
leal -0x3(%r15), %eax
movq %rbx, %rcx
movl %eax, %ebx
shlq $0x6, %rbx
movq 0x28(%r13,%rbx), %rdx
cmpq 0x48(%rcx), %rdx
jne 0x4343
testq %rdx, %rdx
je 0x4327
leaq (%rbx,%r13), %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq 0x40(%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x4343
movq -0x60(%rbp), %rax
leaq (%rax,%rbx), %rdi
addq $0x20, %rdi
movq -0x48(%rbp), %rsi
callq 0x2110
movq -0x38(%rbp), %rax
movq (%rax), %r12
movl %r15d, %eax
movq (%r12,%r14,8), %r13
movq 0x8(%r12,%r14,8), %rcx
subq %r13, %rcx
sarq $0x6, %rcx
incl %r15d
cmpq %rax, %rcx
movq -0x30(%rbp), %rbx
ja 0x42c4
movq -0x68(%rbp), %rdi
leaq -0x60(%rbp), %r15
movq %r15, %rsi
callq 0x6664
movq %r15, %rdi
callq 0x603a
movq -0x40(%rbp), %rsi
incl %esi
movq -0x38(%rbp), %rax
movq (%rax), %rcx
movq 0x8(%rax), %rax
subq %rcx, %rax
sarq $0x3, %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rdx, %rax
cmpq %rsi, %rax
ja 0x4286
movq 0x80(%rbx), %rax
leaq -0x1d9fb5ac(%rax), %rcx
cmpq $0x767ed6a, %rcx        # imm = 0x767ED6A
ja 0x4562
movq -0x38(%rbp), %rdx
movq (%rdx), %rcx
cmpq %rcx, 0x8(%rdx)
je 0x4562
leaq 0x60(%rbx), %rax
movq %rax, -0x48(%rbp)
xorl %esi, %esi
leaq -0x60(%rbp), %r14
movq %rsi, -0x70(%rbp)
leaq (%rsi,%rsi,2), %r15
leaq (%rcx,%r15,8), %rsi
movq %r14, %rdi
callq 0x65d0
movq -0x38(%rbp), %rax
movq (%rax), %r12
movq (%r12,%r15,8), %r14
movq 0x8(%r12,%r15,8), %rax
subq %r14, %rax
cmpq $0x81, %rax
jb 0x4514
movq %r15, %rcx
movl $0x2, %r13d
movl $0x3, %r15d
movq %rcx, -0x40(%rbp)
leal -0x2(%r15), %eax
shlq $0x6, %rax
movq 0x28(%r14,%rax), %rdx
movq 0x8(%rbx), %rbx
cmpq %rbx, %rdx
jne 0x4466
testq %rdx, %rdx
je 0x44a1
addq %r14, %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
movq -0x40(%rbp), %rcx
testl %eax, %eax
je 0x44a1
leal -0x3(%r15), %eax
shlq $0x6, %rax
cmpq %rbx, 0x28(%r14,%rax)
jne 0x449b
testq %rbx, %rbx
je 0x44a1
addq %r14, %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
movq %rbx, %rdx
callq 0x21d0
movq -0x40(%rbp), %rcx
testl %eax, %eax
je 0x44a1
movq -0x30(%rbp), %rbx
jmp 0x44f5
shlq $0x6, %r13
movq 0x28(%r14,%r13), %rdx
movq -0x30(%rbp), %rbx
cmpq 0x48(%rbx), %rdx
jne 0x44f5
testq %rdx, %rdx
je 0x44d5
leaq (%r14,%r13), %rax
addq $0x20, %rax
movq 0x40(%rbx), %rsi
movq (%rax), %rdi
callq 0x21d0
movq -0x40(%rbp), %rcx
testl %eax, %eax
jne 0x44f5
movq -0x60(%rbp), %rax
leaq (%rax,%r13), %rdi
addq $0x20, %rdi
movq -0x48(%rbp), %rsi
callq 0x2110
movq -0x38(%rbp), %rax
movq (%rax), %r12
movq -0x40(%rbp), %rcx
movl %r15d, %r13d
movq (%r12,%rcx,8), %r14
movq 0x8(%r12,%rcx,8), %rax
subq %r14, %rax
sarq $0x6, %rax
incl %r15d
cmpq %r13, %rax
ja 0x442d
movq -0x68(%rbp), %rdi
leaq -0x60(%rbp), %r14
movq %r14, %rsi
callq 0x6664
movq %r14, %rdi
callq 0x603a
movq -0x70(%rbp), %rsi
incl %esi
movq -0x38(%rbp), %rax
movq (%rax), %rcx
movq 0x8(%rax), %rax
subq %rcx, %rax
sarq $0x3, %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rdx, %rax
cmpq %rsi, %rax
ja 0x43e7
movq 0x80(%rbx), %rax
leaq -0x2507a317(%rax), %rcx
cmpq $0x767ed6a, %rcx        # imm = 0x767ED6A
ja 0x4719
movq -0x38(%rbp), %rdx
movq (%rdx), %rcx
cmpq %rcx, 0x8(%rdx)
je 0x4719
leaq 0x60(%rbx), %rax
movq %rax, -0x48(%rbp)
xorl %esi, %esi
leaq -0x60(%rbp), %r14
movq %rsi, -0x70(%rbp)
leaq (%rsi,%rsi,2), %r15
leaq (%rcx,%r15,8), %rsi
movq %r14, %rdi
callq 0x65d0
movq -0x38(%rbp), %rax
movq (%rax), %r12
movq (%r12,%r15,8), %r13
movq 0x8(%r12,%r15,8), %rax
subq %r13, %rax
cmpq $0x81, %rax
jb 0x46cb
movq %r15, %rcx
movl $0x2, %r14d
movl $0x3, %r15d
movq %rcx, -0x40(%rbp)
leal -0x2(%r15), %eax
shlq $0x6, %rax
movq 0x28(%r13,%rax), %rdx
movq 0x8(%rbx), %rbx
cmpq %rbx, %rdx
jne 0x4614
testq %rdx, %rdx
je 0x464a
addq %r13, %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
movq -0x40(%rbp), %rcx
testl %eax, %eax
je 0x464a
shlq $0x6, %r14
cmpq %rbx, 0x28(%r13,%r14)
jne 0x46a8
testq %rbx, %rbx
je 0x464a
leaq (%r14,%r13), %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
movq %rbx, %rdx
callq 0x21d0
movq -0x40(%rbp), %rcx
testl %eax, %eax
jne 0x46a8
leal -0x3(%r15), %eax
movl %eax, %ebx
shlq $0x6, %rbx
movq 0x28(%r13,%rbx), %rdx
movq -0x30(%rbp), %rax
cmpq 0x48(%rax), %rdx
jne 0x46a8
testq %rdx, %rdx
je 0x4688
leaq (%rbx,%r13), %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq 0x40(%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
movq -0x40(%rbp), %rcx
testl %eax, %eax
jne 0x46a8
movq -0x60(%rbp), %rax
leaq (%rax,%rbx), %rdi
addq $0x20, %rdi
movq -0x48(%rbp), %rsi
callq 0x2110
movq -0x38(%rbp), %rax
movq (%rax), %r12
movq -0x40(%rbp), %rcx
movl %r15d, %r14d
movq (%r12,%rcx,8), %r13
movq 0x8(%r12,%rcx,8), %rax
subq %r13, %rax
sarq $0x6, %rax
incl %r15d
cmpq %r14, %rax
movq -0x30(%rbp), %rbx
ja 0x45db
movq -0x68(%rbp), %rdi
leaq -0x60(%rbp), %r14
movq %r14, %rsi
callq 0x6664
movq %r14, %rdi
callq 0x603a
movq -0x70(%rbp), %rsi
incl %esi
movq -0x38(%rbp), %rax
movq (%rax), %rcx
movq 0x8(%rax), %rax
subq %rcx, %rax
sarq $0x3, %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rdx, %rax
cmpq %rsi, %rax
ja 0x4595
movq 0x80(%rbx), %rax
leaq -0x2c6f9082(%rax), %rcx
cmpq $0x767ed6a, %rcx        # imm = 0x767ED6A
ja 0x48ef
movq -0x38(%rbp), %rdx
movq (%rdx), %rcx
cmpq %rcx, 0x8(%rdx)
je 0x48ef
leaq 0x60(%rbx), %rax
movq %rax, -0x48(%rbp)
xorl %esi, %esi
leaq -0x60(%rbp), %r14
movq %rsi, -0x70(%rbp)
leaq (%rsi,%rsi,2), %r15
leaq (%rcx,%r15,8), %rsi
movq %r14, %rdi
callq 0x65d0
movq -0x38(%rbp), %rax
movq (%rax), %r13
movq (%r13,%r15,8), %r12
movq %r15, -0x40(%rbp)
movq 0x8(%r13,%r15,8), %rax
subq %r12, %rax
cmpq $0xc1, %rax
jb 0x48a1
movl $0x3, %r15d
movl $0x4, %r14d
leal -0x2(%r14), %eax
shlq $0x6, %rax
movq 0x28(%r12,%rax), %rdx
movq 0x8(%rbx), %rbx
cmpq %rbx, %rdx
jne 0x47c9
testq %rdx, %rdx
je 0x4831
addq %r12, %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
je 0x4831
leal -0x3(%r14), %eax
shlq $0x6, %rax
cmpq %rbx, 0x28(%r12,%rax)
jne 0x47fa
testq %rbx, %rbx
je 0x4831
addq %r12, %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
movq %rbx, %rdx
callq 0x21d0
testl %eax, %eax
je 0x4831
leal -0x4(%r14), %eax
shlq $0x6, %rax
cmpq %rbx, 0x28(%r12,%rax)
jne 0x482b
testq %rbx, %rbx
je 0x4831
addq %r12, %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
movq %rbx, %rdx
callq 0x21d0
testl %eax, %eax
je 0x4831
movq -0x30(%rbp), %rbx
jmp 0x487d
shlq $0x6, %r15
movq 0x28(%r12,%r15), %rdx
movq -0x30(%rbp), %rbx
cmpq 0x48(%rbx), %rdx
jne 0x487d
testq %rdx, %rdx
je 0x4861
leaq (%r12,%r15), %rax
addq $0x20, %rax
movq 0x40(%rbx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x487d
movq -0x60(%rbp), %rax
leaq (%rax,%r15), %rdi
addq $0x20, %rdi
movq -0x48(%rbp), %rsi
callq 0x2110
movq -0x38(%rbp), %rax
movq (%rax), %r13
movl %r14d, %r15d
movq -0x40(%rbp), %rax
movq (%r13,%rax,8), %r12
movq 0x8(%r13,%rax,8), %rax
subq %r12, %rax
sarq $0x6, %rax
incl %r14d
cmpq %r15, %rax
ja 0x4790
movq -0x68(%rbp), %rdi
leaq -0x60(%rbp), %r14
movq %r14, %rsi
callq 0x6664
movq %r14, %rdi
callq 0x603a
movq -0x70(%rbp), %rsi
incl %esi
movq -0x38(%rbp), %rax
movq (%rax), %rcx
movq 0x8(%rax), %rax
subq %rcx, %rax
sarq $0x3, %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rdx, %rax
cmpq %rsi, %rax
ja 0x474c
movq 0x80(%rbx), %rax
leaq -0x33d77ded(%rax), %rcx
cmpq $0x767ed6a, %rcx        # imm = 0x767ED6A
ja 0x4ac6
movq -0x38(%rbp), %rdx
movq (%rdx), %rcx
cmpq %rcx, 0x8(%rdx)
je 0x4ac6
leaq 0x60(%rbx), %rax
movq %rax, -0x48(%rbp)
xorl %esi, %esi
leaq -0x60(%rbp), %r14
movq %rsi, -0x70(%rbp)
leaq (%rsi,%rsi,2), %r12
leaq (%rcx,%r12,8), %rsi
movq %r14, %rdi
callq 0x65d0
movq -0x38(%rbp), %rax
movq (%rax), %r13
movq (%r13,%r12,8), %r15
movq %r12, -0x40(%rbp)
movq 0x8(%r13,%r12,8), %rax
subq %r15, %rax
cmpq $0xc1, %rax
jb 0x4a78
movl $0x3, %r12d
movl $0x4, %r14d
leal -0x3(%r14), %eax
shlq $0x6, %rax
movq 0x28(%r15,%rax), %rdx
movq 0x8(%rbx), %rbx
cmpq %rbx, %rdx
jne 0x499b
testq %rdx, %rdx
je 0x49fa
addq %r15, %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
je 0x49fa
leal -0x2(%r14), %eax
shlq $0x6, %rax
cmpq %rbx, 0x28(%r15,%rax)
jne 0x49cc
testq %rbx, %rbx
je 0x49fa
addq %r15, %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
movq %rbx, %rdx
callq 0x21d0
testl %eax, %eax
je 0x49fa
shlq $0x6, %r12
cmpq %rbx, 0x28(%r15,%r12)
jne 0x4a50
testq %rbx, %rbx
je 0x49fa
leaq (%r15,%r12), %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
movq %rbx, %rdx
callq 0x21d0
testl %eax, %eax
jne 0x4a50
leal -0x4(%r14), %eax
movl %eax, %ebx
shlq $0x6, %rbx
movq 0x28(%r15,%rbx), %rdx
movq -0x30(%rbp), %rax
cmpq 0x48(%rax), %rdx
jne 0x4a50
testq %rdx, %rdx
je 0x4a34
leaq (%r15,%rbx), %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq 0x40(%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x4a50
movq -0x60(%rbp), %rax
leaq (%rax,%rbx), %rdi
addq $0x20, %rdi
movq -0x48(%rbp), %rsi
callq 0x2110
movq -0x38(%rbp), %rax
movq (%rax), %r13
movl %r14d, %r12d
movq -0x40(%rbp), %rax
movq (%r13,%rax,8), %r15
movq 0x8(%r13,%rax,8), %rax
subq %r15, %rax
sarq $0x6, %rax
incl %r14d
cmpq %r12, %rax
movq -0x30(%rbp), %rbx
ja 0x4966
movq -0x68(%rbp), %rdi
leaq -0x60(%rbp), %r14
movq %r14, %rsi
callq 0x6664
movq %r14, %rdi
callq 0x603a
movq -0x70(%rbp), %rsi
incl %esi
movq -0x38(%rbp), %rax
movq (%rax), %rcx
movq 0x8(%rax), %rax
subq %rcx, %rax
sarq $0x3, %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rdx, %rax
cmpq %rsi, %rax
ja 0x4922
movq 0x80(%rbx), %rax
movabsq $0xe6f93c791, %rsi      # imm = 0xE6F93C791
movabsq $-0xe6f93c791, %rcx     # imm = 0xFFFFFFF1906C386F
addq %rax, %rcx
cmpq %rsi, %rcx
jae 0x4c84
movq -0x38(%rbp), %rdx
movq (%rdx), %rcx
cmpq %rcx, 0x8(%rdx)
je 0x4c84
leaq 0x60(%rbx), %rax
movq %rax, -0x48(%rbp)
xorl %esi, %esi
leaq -0x60(%rbp), %r15
movq %rsi, -0x40(%rbp)
leaq (%rsi,%rsi,2), %r14
leaq (%rcx,%r14,8), %rsi
movq %r15, %rdi
callq 0x65d0
movq -0x38(%rbp), %rax
movq (%rax), %r12
movq (%r12,%r14,8), %r13
movq 0x8(%r12,%r14,8), %rax
subq %r13, %rax
cmpq $0x81, %rax
jb 0x4c28
movl $0x2, %ebx
movl $0x1, %r15d
leal -0x1(%r15), %eax
shlq $0x6, %rax
movq 0x28(%r13,%rax), %rdx
movq -0x30(%rbp), %rcx
cmpq 0x8(%rcx), %rdx
jne 0x4c08
testq %rdx, %rdx
je 0x4b81
addq %r13, %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x4c08
shlq $0x6, %rbx
movq 0x28(%r13,%rbx), %rdx
movq -0x30(%rbp), %rax
cmpq 0x28(%rax), %rdx
jne 0x4c08
testq %rdx, %rdx
je 0x4bb5
leaq (%rbx,%r13), %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq 0x20(%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x4c08
movl %r15d, %ebx
shlq $0x6, %rbx
movq 0x28(%r13,%rbx), %rdx
movq -0x30(%rbp), %rax
cmpq 0x48(%rax), %rdx
jne 0x4c08
testq %rdx, %rdx
je 0x4bec
leaq (%rbx,%r13), %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq 0x40(%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x4c08
movq -0x60(%rbp), %rax
leaq (%rax,%rbx), %rdi
addq $0x20, %rdi
movq -0x48(%rbp), %rsi
callq 0x2110
movq -0x38(%rbp), %rax
movq (%rax), %r12
leal 0x2(%r15), %ebx
movq (%r12,%r14,8), %r13
movq 0x8(%r12,%r14,8), %rax
subq %r13, %rax
sarq $0x6, %rax
incl %r15d
cmpq %rbx, %rax
ja 0x4b43
movq -0x68(%rbp), %rdi
leaq -0x60(%rbp), %r15
movq %r15, %rsi
callq 0x6664
movq %r15, %rdi
callq 0x603a
movq -0x40(%rbp), %rsi
incl %esi
movq -0x38(%rbp), %rax
movq (%rax), %rcx
movq 0x8(%rax), %rax
subq %rcx, %rax
sarq $0x3, %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rdx, %rax
cmpq %rsi, %rax
movq -0x30(%rbp), %rbx
ja 0x4b05
movq 0x80(%rbx), %rax
movabsq $0xe6f93c791, %rsi      # imm = 0xE6F93C791
movabsq $-0x1cdf278f22, %rcx    # imm = 0xFFFFFFE320D870DE
addq %rax, %rcx
cmpq %rsi, %rcx
jae 0x4e38
movq -0x38(%rbp), %rdx
movq (%rdx), %rcx
cmpq %rcx, 0x8(%rdx)
je 0x4e38
leaq 0x60(%rbx), %rax
movq %rax, -0x48(%rbp)
xorl %esi, %esi
leaq -0x60(%rbp), %r15
movq %rsi, -0x40(%rbp)
leaq (%rsi,%rsi,2), %r14
leaq (%rcx,%r14,8), %rsi
movq %r15, %rdi
callq 0x65d0
movq -0x38(%rbp), %rax
movq (%rax), %r12
movq (%r12,%r14,8), %rbx
movq 0x8(%r12,%r14,8), %rax
subq %rbx, %rax
cmpq $0x81, %rax
jb 0x4ddc
movl $0x2, %r13d
movl $0x3, %r15d
leal -0x2(%r15), %eax
shlq $0x6, %rax
movq 0x28(%rbx,%rax), %rdx
movq -0x30(%rbp), %rcx
cmpq 0x8(%rcx), %rdx
jne 0x4dbd
testq %rdx, %rdx
je 0x4d36
addq %rbx, %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x4dbd
leal -0x3(%r15), %eax
shlq $0x6, %rax
movq 0x28(%rbx,%rax), %rdx
movq -0x30(%rbp), %rcx
cmpq 0x28(%rcx), %rdx
jne 0x4dbd
testq %rdx, %rdx
je 0x4d6d
addq %rbx, %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq 0x20(%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x4dbd
shlq $0x6, %r13
movq 0x28(%rbx,%r13), %rdx
movq -0x30(%rbp), %rax
cmpq 0x48(%rax), %rdx
jne 0x4dbd
testq %rdx, %rdx
je 0x4da1
leaq (%rbx,%r13), %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq 0x40(%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x4dbd
movq -0x60(%rbp), %rax
leaq (%rax,%r13), %rdi
addq $0x20, %rdi
movq -0x48(%rbp), %rsi
callq 0x2110
movq -0x38(%rbp), %rax
movq (%rax), %r12
movl %r15d, %r13d
movq (%r12,%r14,8), %rbx
movq 0x8(%r12,%r14,8), %rax
subq %rbx, %rax
sarq $0x6, %rax
incl %r15d
cmpq %r13, %rax
ja 0x4cf8
movq -0x68(%rbp), %rdi
leaq -0x60(%rbp), %r15
movq %r15, %rsi
callq 0x6664
movq %r15, %rdi
callq 0x603a
movq -0x40(%rbp), %rsi
incl %esi
movq -0x38(%rbp), %rax
movq (%rax), %rcx
movq 0x8(%rax), %rax
subq %rcx, %rax
sarq $0x3, %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rdx, %rax
cmpq %rsi, %rax
movq -0x30(%rbp), %rbx
ja 0x4cb9
movq 0x80(%rbx), %rax
movabsq $0xe6f93c791, %rsi      # imm = 0xE6F93C791
movabsq $-0x2b4ebb56b3, %rcx    # imm = 0xFFFFFFD4B144A94D
addq %rax, %rcx
cmpq %rsi, %rcx
jae 0x4fdb
movq -0x38(%rbp), %rcx
movq (%rcx), %rax
cmpq %rax, 0x8(%rcx)
je 0x4fdb
leaq 0x60(%rbx), %rcx
movq %rcx, -0x48(%rbp)
xorl %esi, %esi
leaq -0x60(%rbp), %rbx
movq %rsi, -0x40(%rbp)
leaq (%rsi,%rsi,2), %r14
leaq (%rax,%r14,8), %rsi
movq %rbx, %rdi
callq 0x65d0
movq -0x38(%rbp), %rax
movq (%rax), %r15
movq (%r15,%r14,8), %r13
movq 0x8(%r15,%r14,8), %rax
subq %r13, %rax
cmpq $0x81, %rax
jb 0x4f94
movl $0x2, %ebx
movl $0x3, %r12d
leal -0x2(%r12), %eax
shlq $0x6, %rax
movq 0x28(%r13,%rax), %rdx
movq -0x30(%rbp), %rcx
cmpq 0x8(%rcx), %rdx
jne 0x4f75
testq %rdx, %rdx
je 0x4eea
addq %r13, %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x4f75
shlq $0x6, %rbx
movq 0x28(%r13,%rbx), %rdx
movq -0x30(%rbp), %rax
cmpq 0x28(%rax), %rdx
jne 0x4f75
testq %rdx, %rdx
je 0x4f1e
leaq (%rbx,%r13), %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq 0x20(%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x4f75
leal -0x3(%r12), %eax
movl %eax, %ebx
shlq $0x6, %rbx
movq 0x28(%r13,%rbx), %rdx
movq -0x30(%rbp), %rax
cmpq 0x48(%rax), %rdx
jne 0x4f75
testq %rdx, %rdx
je 0x4f59
leaq (%rbx,%r13), %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq 0x40(%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x4f75
movq -0x60(%rbp), %rax
leaq (%rax,%rbx), %rdi
addq $0x20, %rdi
movq -0x48(%rbp), %rsi
callq 0x2110
movq -0x38(%rbp), %rax
movq (%rax), %r15
movl %r12d, %ebx
movq (%r15,%r14,8), %r13
movq 0x8(%r15,%r14,8), %rax
subq %r13, %rax
sarq $0x6, %rax
incl %r12d
cmpq %rbx, %rax
ja 0x4eab
movq -0x68(%rbp), %rdi
leaq -0x60(%rbp), %rbx
movq %rbx, %rsi
callq 0x6664
movq %rbx, %rdi
callq 0x603a
movq -0x40(%rbp), %rsi
incl %esi
movq -0x38(%rbp), %rcx
movq (%rcx), %rax
movq 0x8(%rcx), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rdx, %rcx
cmpq %rsi, %rcx
ja 0x4e6d
movq -0x68(%rbp), %rax
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x501e
jmp 0x5033
jmp 0x5033
jmp 0x5033
jmp 0x501e
jmp 0x5033
jmp 0x5033
jmp 0x501e
jmp 0x501e
jmp 0x5033
jmp 0x501e
jmp 0x5033
jmp 0x5033
jmp 0x501e
jmp 0x5033
jmp 0x501e
jmp 0x5033
jmp 0x501e
jmp 0x501e
jmp 0x5033
jmp 0x501e
jmp 0x5033
jmp 0x501e
jmp 0x5033
movq %rax, %r14
jmp 0x503f
jmp 0x5033
jmp 0x5033
jmp 0x5033
jmp 0x5033
jmp 0x5033
jmp 0x5033
jmp 0x5033
jmp 0x5033
movq %rax, %r14
leaq -0x60(%rbp), %rdi
callq 0x603a
movq -0x68(%rbp), %rbx
leaq 0x18(%rbx), %rdi
callq 0x6960
movq %rbx, %rdi
callq 0x67cc
movq %r14, %rdi
callq 0x2320