// File: /workspace/github_cpp_makefile_star2_O1/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
movq %rdx, %r15
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
subq (%rdx), %rax
movq %rsi, %rbx
sarq $0x3, %rax
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rcx, %rax
movq %rdi, -0x60(%rbp)
movq %rax, %rsi
callq 0x620a
movq %rbx, -0x30(%rbp)
cmpq $0x767ed6a, 0x80(%rbx) # imm = 0x767ED6A
jg 0x3f57
movq (%r15), %rax
cmpq %rax, 0x8(%r15)
je 0x3f57
movq -0x30(%rbp), %rcx
addq $0x60, %rcx
movq %rcx, -0x38(%rbp)
xorl %esi, %esi
leaq -0x58(%rbp), %rbx
movq %rsi, -0x40(%rbp)
leaq (%rsi,%rsi,2), %r14
leaq (%rax,%r14,8), %rsi
movq %rbx, %rdi
callq 0x6532
movq (%r15), %rax
movq (%rax,%r14,8), %rbx
movq 0x8(%rax,%r14,8), %rax
subq %rbx, %rax
cmpq $0x41, %rax
jb 0x3f14
movl $0x1, %r13d
movl $0x2, %r12d
leal -0x2(%r12), %eax
shlq $0x6, %rax
movq 0x28(%rbx,%rax), %rdx
movq -0x30(%rbp), %rcx
cmpq 0x8(%rcx), %rdx
jne 0x3ef2
testq %rdx, %rdx
je 0x3ea9
addq %rbx, %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x3ef2
shlq $0x6, %r13
movq 0x28(%rbx,%r13), %rdx
movq -0x30(%rbp), %rax
cmpq 0x48(%rax), %rdx
jne 0x3ef2
testq %rdx, %rdx
je 0x3edd
leaq (%rbx,%r13), %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq 0x40(%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x3ef2
movq -0x58(%rbp), %rax
leaq (%rax,%r13), %rdi
addq $0x20, %rdi
movq -0x38(%rbp), %rsi
callq 0x2110
movl %r12d, %r13d
movq (%r15), %rax
movq (%rax,%r14,8), %rbx
movq 0x8(%rax,%r14,8), %rax
subq %rbx, %rax
sarq $0x6, %rax
incl %r12d
cmpq %r13, %rax
ja 0x3e72
movq -0x60(%rbp), %rdi
leaq -0x58(%rbp), %rbx
movq %rbx, %rsi
callq 0x65c6
movq %rbx, %rdi
callq 0x5faa
movq -0x40(%rbp), %rsi
incl %esi
movq (%r15), %rax
movq 0x8(%r15), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rdx, %rcx
cmpq %rsi, %rcx
ja 0x3e39
movq $-0x767ed6b, %rax       # imm = 0xF8981295
movq -0x30(%rbp), %rcx
addq 0x80(%rcx), %rax
cmpq $0x767ed6a, %rax        # imm = 0x767ED6A
movq %r15, -0x40(%rbp)
ja 0x40ae
movq (%r15), %rax
cmpq %rax, 0x8(%r15)
je 0x40ae
movq -0x30(%rbp), %rcx
addq $0x60, %rcx
movq %rcx, -0x38(%rbp)
xorl %ebx, %ebx
leaq -0x58(%rbp), %r12
leaq (%rbx,%rbx,2), %r14
leaq (%rax,%r14,8), %rsi
movq %r12, %rdi
callq 0x6532
movq (%r15), %rax
movq (%rax,%r14,8), %r13
movq 0x8(%rax,%r14,8), %rax
subq %r13, %rax
cmpq $0x41, %rax
jb 0x406f
movl $0x1, %eax
xorl %r12d, %r12d
shlq $0x6, %rax
movq 0x28(%r13,%rax), %rdx
movq -0x30(%rbp), %rcx
cmpq 0x8(%rcx), %rdx
jne 0x4047
testq %rdx, %rdx
je 0x3ffb
addq %r13, %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x4047
movl %r12d, %r15d
shlq $0x6, %r15
movq 0x28(%r13,%r15), %rdx
movq -0x30(%rbp), %rax
cmpq 0x48(%rax), %rdx
jne 0x4047
testq %rdx, %rdx
je 0x4032
leaq (%r15,%r13), %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq 0x40(%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x4047
movq -0x58(%rbp), %rax
leaq (%rax,%r15), %rdi
addq $0x20, %rdi
movq -0x38(%rbp), %rsi
callq 0x2110
leal 0x2(%r12), %eax
movq -0x40(%rbp), %r15
movq (%r15), %rcx
movq (%rcx,%r14,8), %r13
movq 0x8(%rcx,%r14,8), %rcx
subq %r13, %rcx
sarq $0x6, %rcx
incl %r12d
cmpq %rax, %rcx
ja 0x3fc9
movq -0x60(%rbp), %rdi
leaq -0x58(%rbp), %r12
movq %r12, %rsi
callq 0x65c6
movq %r12, %rdi
callq 0x5faa
incl %ebx
movq (%r15), %rax
movq 0x8(%r15), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rdx, %rcx
cmpq %rbx, %rcx
ja 0x3f98
movq $-0xecfdad6, %rax       # imm = 0xF130252A
movq -0x30(%rbp), %rcx
addq 0x80(%rcx), %rax
cmpq $0x767ed6a, %rax        # imm = 0x767ED6A
ja 0x420b
movq (%r15), %rax
cmpq %rax, 0x8(%r15)
je 0x420b
movq -0x30(%rbp), %rcx
addq $0x60, %rcx
movq %rcx, -0x68(%rbp)
xorl %esi, %esi
leaq -0x58(%rbp), %rbx
movq %rsi, -0x38(%rbp)
leaq (%rsi,%rsi,2), %r14
leaq (%rax,%r14,8), %rsi
movq %rbx, %rdi
callq 0x6532
movq (%r15), %rax
movq (%rax,%r14,8), %rbx
movq 0x8(%rax,%r14,8), %rax
subq %rbx, %rax
cmpq $0x81, %rax
jb 0x41c8
movl $0x2, %r13d
movl $0x3, %r12d
leal -0x3(%r12), %eax
shlq $0x6, %rax
movq 0x28(%rbx,%rax), %rdx
movq -0x30(%rbp), %rcx
cmpq 0x8(%rcx), %rdx
jne 0x41a6
testq %rdx, %rdx
je 0x415d
addq %rbx, %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x41a6
shlq $0x6, %r13
movq 0x28(%rbx,%r13), %rdx
movq -0x30(%rbp), %rax
cmpq 0x48(%rax), %rdx
jne 0x41a6
testq %rdx, %rdx
je 0x4191
leaq (%rbx,%r13), %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq 0x40(%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x41a6
movq -0x58(%rbp), %rax
leaq (%rax,%r13), %rdi
addq $0x20, %rdi
movq -0x68(%rbp), %rsi
callq 0x2110
movl %r12d, %r13d
movq (%r15), %rax
movq (%rax,%r14,8), %rbx
movq 0x8(%rax,%r14,8), %rax
subq %rbx, %rax
sarq $0x6, %rax
incl %r12d
cmpq %r13, %rax
ja 0x4126
movq -0x60(%rbp), %rdi
leaq -0x58(%rbp), %rbx
movq %rbx, %rsi
callq 0x65c6
movq %rbx, %rdi
callq 0x5faa
movq -0x38(%rbp), %rsi
incl %esi
movq (%r15), %rax
movq 0x8(%r15), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rdx, %rcx
cmpq %rsi, %rcx
ja 0x40eb
movq $-0x1637c841, %rax      # imm = 0xE9C837BF
movq -0x30(%rbp), %rcx
addq 0x80(%rcx), %rax
cmpq $0x767ed6a, %rax        # imm = 0x767ED6A
ja 0x4366
movq (%r15), %rax
cmpq %rax, 0x8(%r15)
je 0x4366
movq -0x30(%rbp), %rcx
addq $0x60, %rcx
movq %rcx, -0x38(%rbp)
xorl %ebx, %ebx
leaq -0x58(%rbp), %r12
leaq (%rbx,%rbx,2), %r14
leaq (%rax,%r14,8), %rsi
movq %r12, %rdi
callq 0x6532
movq (%r15), %rax
movq (%rax,%r14,8), %r13
movq 0x8(%rax,%r14,8), %rax
subq %r13, %rax
cmpq $0x81, %rax
jb 0x4327
movl $0x2, %eax
movl $0x3, %r12d
shlq $0x6, %rax
movq 0x28(%r13,%rax), %rdx
movq -0x30(%rbp), %rcx
cmpq 0x8(%rcx), %rdx
jne 0x4301
testq %rdx, %rdx
je 0x42b0
addq %r13, %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x4301
leal -0x3(%r12), %eax
movl %eax, %r15d
shlq $0x6, %r15
movq 0x28(%r13,%r15), %rdx
movq -0x30(%rbp), %rax
cmpq 0x48(%rax), %rdx
jne 0x4301
testq %rdx, %rdx
je 0x42ec
leaq (%r15,%r13), %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq 0x40(%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x4301
movq -0x58(%rbp), %rax
leaq (%rax,%r15), %rdi
addq $0x20, %rdi
movq -0x38(%rbp), %rsi
callq 0x2110
movl %r12d, %eax
movq -0x40(%rbp), %r15
movq (%r15), %rcx
movq (%rcx,%r14,8), %r13
movq 0x8(%rcx,%r14,8), %rcx
subq %r13, %rcx
sarq $0x6, %rcx
incl %r12d
cmpq %rax, %rcx
ja 0x427e
movq -0x60(%rbp), %rdi
leaq -0x58(%rbp), %r12
movq %r12, %rsi
callq 0x65c6
movq %r12, %rdi
callq 0x5faa
incl %ebx
movq (%r15), %rax
movq 0x8(%r15), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rdx, %rcx
cmpq %rbx, %rcx
ja 0x4248
movq $-0x1d9fb5ac, %rax      # imm = 0xE2604A54
movq -0x30(%rbp), %rcx
addq 0x80(%rcx), %rax
cmpq $0x767ed6a, %rax        # imm = 0x767ED6A
ja 0x44fa
movq (%r15), %rax
cmpq %rax, 0x8(%r15)
je 0x44fa
addq $0x60, %rcx
movq %rcx, -0x38(%rbp)
xorl %esi, %esi
leaq -0x58(%rbp), %rbx
movq %rsi, -0x68(%rbp)
leaq (%rsi,%rsi,2), %r13
leaq (%rax,%r13,8), %rsi
movq %rbx, %rdi
callq 0x6532
movq (%r15), %rax
movq (%rax,%r13,8), %rbx
movq 0x8(%rax,%r13,8), %rax
subq %rbx, %rax
cmpq $0x81, %rax
jb 0x44b3
movl $0x2, %r12d
movl $0x3, %r14d
leal -0x2(%r14), %eax
shlq $0x6, %rax
movq 0x28(%rbx,%rax), %rdx
movq -0x30(%rbp), %rcx
movq 0x8(%rcx), %r15
cmpq %r15, %rdx
jne 0x4413
testq %rdx, %rdx
je 0x4444
addq %rbx, %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
je 0x4444
leal -0x3(%r14), %eax
shlq $0x6, %rax
movq 0x28(%rbx,%rax), %rdx
cmpq %r15, %rdx
jne 0x448d
testq %rdx, %rdx
je 0x4444
addq %rbx, %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x448d
shlq $0x6, %r12
movq 0x28(%rbx,%r12), %rdx
movq -0x30(%rbp), %rax
cmpq 0x48(%rax), %rdx
jne 0x448d
testq %rdx, %rdx
je 0x4478
leaq (%rbx,%r12), %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq 0x40(%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x448d
movq -0x58(%rbp), %rax
leaq (%rax,%r12), %rdi
addq $0x20, %rdi
movq -0x38(%rbp), %rsi
callq 0x2110
movl %r14d, %r12d
movq -0x40(%rbp), %r15
movq (%r15), %rax
movq (%rax,%r13,8), %rbx
movq 0x8(%rax,%r13,8), %rax
subq %rbx, %rax
sarq $0x6, %rax
incl %r14d
cmpq %r12, %rax
ja 0x43da
movq -0x60(%rbp), %rdi
leaq -0x58(%rbp), %rbx
movq %rbx, %rsi
callq 0x65c6
movq %rbx, %rdi
callq 0x5faa
movq -0x68(%rbp), %rsi
incl %esi
movq (%r15), %rax
movq 0x8(%r15), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rdx, %rcx
cmpq %rsi, %rcx
movq -0x30(%rbp), %rcx
ja 0x439f
movq $-0x2507a317, %rax      # imm = 0xDAF85CE9
addq 0x80(%rcx), %rax
cmpq $0x767ed6a, %rax        # imm = 0x767ED6A
ja 0x468c
movq (%r15), %rax
cmpq %rax, 0x8(%r15)
je 0x468c
addq $0x60, %rcx
movq %rcx, -0x38(%rbp)
xorl %esi, %esi
leaq -0x58(%rbp), %rbx
movq %rsi, -0x68(%rbp)
leaq (%rsi,%rsi,2), %r13
leaq (%rax,%r13,8), %rsi
movq %rbx, %rdi
callq 0x6532
movq (%r15), %rax
movq (%rax,%r13,8), %r12
movq 0x8(%rax,%r13,8), %rax
subq %r12, %rax
cmpq $0x81, %rax
jb 0x4645
movl $0x2, %ebx
movl $0x3, %r14d
leal -0x2(%r14), %eax
shlq $0x6, %rax
movq 0x28(%r12,%rax), %rdx
movq -0x30(%rbp), %rcx
movq 0x8(%rcx), %r15
cmpq %r15, %rdx
jne 0x45a2
testq %rdx, %rdx
je 0x45d0
addq %r12, %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
je 0x45d0
shlq $0x6, %rbx
movq 0x28(%r12,%rbx), %rdx
cmpq %r15, %rdx
jne 0x461f
testq %rdx, %rdx
je 0x45d0
leaq (%r12,%rbx), %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x461f
leal -0x3(%r14), %eax
movl %eax, %ebx
shlq $0x6, %rbx
movq 0x28(%r12,%rbx), %rdx
movq -0x30(%rbp), %rax
cmpq 0x48(%rax), %rdx
jne 0x461f
testq %rdx, %rdx
je 0x460a
leaq (%r12,%rbx), %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq 0x40(%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x461f
movq -0x58(%rbp), %rax
leaq (%rax,%rbx), %rdi
addq $0x20, %rdi
movq -0x38(%rbp), %rsi
callq 0x2110
movl %r14d, %ebx
movq -0x40(%rbp), %r15
movq (%r15), %rax
movq (%rax,%r13,8), %r12
movq 0x8(%rax,%r13,8), %rax
subq %r12, %rax
sarq $0x6, %rax
incl %r14d
cmpq %rbx, %rax
ja 0x4569
movq -0x60(%rbp), %rdi
leaq -0x58(%rbp), %rbx
movq %rbx, %rsi
callq 0x65c6
movq %rbx, %rdi
callq 0x5faa
movq -0x68(%rbp), %rsi
incl %esi
movq (%r15), %rax
movq 0x8(%r15), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rdx, %rcx
cmpq %rsi, %rcx
movq -0x30(%rbp), %rcx
ja 0x452f
movq $-0x2c6f9082, %rax      # imm = 0xD3906F7E
addq 0x80(%rcx), %rax
cmpq $0x767ed6a, %rax        # imm = 0x767ED6A
ja 0x484f
movq (%r15), %rax
cmpq %rax, 0x8(%r15)
je 0x484f
addq $0x60, %rcx
movq %rcx, -0x38(%rbp)
xorl %esi, %esi
leaq -0x58(%rbp), %rbx
movq %rsi, -0x68(%rbp)
leaq (%rsi,%rsi,2), %r13
leaq (%rax,%r13,8), %rsi
movq %rbx, %rdi
callq 0x6532
movq (%r15), %rax
movq (%rax,%r13,8), %r14
movq 0x8(%rax,%r13,8), %rax
subq %r14, %rax
cmpq $0xc1, %rax
jb 0x4808
movl $0x3, %ebx
movl $0x4, %r12d
leal -0x2(%r12), %eax
shlq $0x6, %rax
movq 0x28(%r14,%rax), %rdx
movq -0x30(%rbp), %rcx
movq 0x8(%rcx), %r15
cmpq %r15, %rdx
jne 0x4735
testq %rdx, %rdx
je 0x4799
addq %r14, %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
je 0x4799
leal -0x3(%r12), %eax
shlq $0x6, %rax
movq 0x28(%r14,%rax), %rdx
cmpq %r15, %rdx
jne 0x4767
testq %rdx, %rdx
je 0x4799
addq %r14, %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
je 0x4799
leal -0x4(%r12), %eax
shlq $0x6, %rax
movq 0x28(%r14,%rax), %rdx
cmpq %r15, %rdx
jne 0x47e2
testq %rdx, %rdx
je 0x4799
addq %r14, %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x47e2
shlq $0x6, %rbx
movq 0x28(%r14,%rbx), %rdx
movq -0x30(%rbp), %rax
cmpq 0x48(%rax), %rdx
jne 0x47e2
testq %rdx, %rdx
je 0x47cd
leaq (%r14,%rbx), %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq 0x40(%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x47e2
movq -0x58(%rbp), %rax
leaq (%rax,%rbx), %rdi
addq $0x20, %rdi
movq -0x38(%rbp), %rsi
callq 0x2110
movl %r12d, %ebx
movq -0x40(%rbp), %r15
movq (%r15), %rax
movq (%rax,%r13,8), %r14
movq 0x8(%rax,%r13,8), %rax
subq %r14, %rax
sarq $0x6, %rax
incl %r12d
cmpq %rbx, %rax
ja 0x46fb
movq -0x60(%rbp), %rdi
leaq -0x58(%rbp), %rbx
movq %rbx, %rsi
callq 0x65c6
movq %rbx, %rdi
callq 0x5faa
movq -0x68(%rbp), %rsi
incl %esi
movq (%r15), %rax
movq 0x8(%r15), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rdx, %rcx
cmpq %rsi, %rcx
movq -0x30(%rbp), %rcx
ja 0x46c1
movq $-0x33d77ded, %rax      # imm = 0xCC288213
addq 0x80(%rcx), %rax
cmpq $0x767ed6a, %rax        # imm = 0x767ED6A
ja 0x4a17
movq (%r15), %rax
cmpq %rax, 0x8(%r15)
je 0x4a17
addq $0x60, %rcx
movq %rcx, -0x38(%rbp)
xorl %esi, %esi
leaq -0x58(%rbp), %rbx
movq %rsi, -0x68(%rbp)
leaq (%rsi,%rsi,2), %r13
leaq (%rax,%r13,8), %rsi
movq %rbx, %rdi
callq 0x6532
movq (%r15), %rax
movq (%rax,%r13,8), %rbx
movq 0x8(%rax,%r13,8), %rax
subq %rbx, %rax
cmpq $0xc1, %rax
jb 0x49d0
movl $0x3, %r14d
movl $0x4, %r12d
leal -0x3(%r12), %eax
shlq $0x6, %rax
movq 0x28(%rbx,%rax), %rdx
movq -0x30(%rbp), %rcx
movq 0x8(%rcx), %r15
cmpq %r15, %rdx
jne 0x48f9
testq %rdx, %rdx
je 0x4959
addq %rbx, %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
je 0x4959
leal -0x2(%r12), %eax
shlq $0x6, %rax
movq 0x28(%rbx,%rax), %rdx
cmpq %r15, %rdx
jne 0x492b
testq %rdx, %rdx
je 0x4959
addq %rbx, %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
je 0x4959
shlq $0x6, %r14
movq 0x28(%rbx,%r14), %rdx
cmpq %r15, %rdx
jne 0x49aa
testq %rdx, %rdx
je 0x4959
leaq (%rbx,%r14), %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x49aa
leal -0x4(%r12), %eax
movl %eax, %r14d
shlq $0x6, %r14
movq 0x28(%rbx,%r14), %rdx
movq -0x30(%rbp), %rax
cmpq 0x48(%rax), %rdx
jne 0x49aa
testq %rdx, %rdx
je 0x4995
leaq (%rbx,%r14), %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq 0x40(%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x49aa
movq -0x58(%rbp), %rax
leaq (%rax,%r14), %rdi
addq $0x20, %rdi
movq -0x38(%rbp), %rsi
callq 0x2110
movl %r12d, %r14d
movq -0x40(%rbp), %r15
movq (%r15), %rax
movq (%rax,%r13,8), %rbx
movq 0x8(%rax,%r13,8), %rax
subq %rbx, %rax
sarq $0x6, %rax
incl %r12d
cmpq %r14, %rax
ja 0x48bf
movq -0x60(%rbp), %rdi
leaq -0x58(%rbp), %rbx
movq %rbx, %rsi
callq 0x65c6
movq %rbx, %rdi
callq 0x5faa
movq -0x68(%rbp), %rsi
incl %esi
movq (%r15), %rax
movq 0x8(%r15), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rdx, %rcx
cmpq %rsi, %rcx
movq -0x30(%rbp), %rcx
ja 0x4884
movabsq $0xe6f93c791, %rdx      # imm = 0xE6F93C791
movabsq $-0xe6f93c791, %rax     # imm = 0xFFFFFFF1906C386F
addq 0x80(%rcx), %rax
cmpq %rdx, %rax
jae 0x4bb8
movq (%r15), %rax
cmpq %rax, 0x8(%r15)
je 0x4bb8
addq $0x60, %rcx
movq %rcx, -0x38(%rbp)
xorl %esi, %esi
leaq -0x58(%rbp), %rbx
movq %rsi, -0x40(%rbp)
leaq (%rsi,%rsi,2), %r12
leaq (%rax,%r12,8), %rsi
movq %rbx, %rdi
callq 0x6532
movq (%r15), %rax
movq (%rax,%r12,8), %r13
movq 0x8(%rax,%r12,8), %rax
subq %r13, %rax
cmpq $0x81, %rax
jb 0x4b71
movl $0x2, %ebx
movl $0x1, %r14d
leal -0x1(%r14), %eax
shlq $0x6, %rax
movq 0x28(%r13,%rax), %rdx
movq -0x30(%rbp), %rcx
cmpq 0x8(%rcx), %rdx
jne 0x4b4e
testq %rdx, %rdx
je 0x4ace
addq %r13, %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x4b4e
shlq $0x6, %rbx
movq 0x28(%r13,%rbx), %rdx
movq -0x30(%rbp), %rax
cmpq 0x28(%rax), %rdx
jne 0x4b4e
testq %rdx, %rdx
je 0x4b02
leaq (%rbx,%r13), %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq 0x20(%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x4b4e
movl %r14d, %ebx
shlq $0x6, %rbx
movq 0x28(%r13,%rbx), %rdx
movq -0x30(%rbp), %rax
cmpq 0x48(%rax), %rdx
jne 0x4b4e
testq %rdx, %rdx
je 0x4b39
leaq (%rbx,%r13), %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq 0x40(%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x4b4e
movq -0x58(%rbp), %rax
leaq (%rax,%rbx), %rdi
addq $0x20, %rdi
movq -0x38(%rbp), %rsi
callq 0x2110
leal 0x2(%r14), %ebx
movq (%r15), %rax
movq (%rax,%r12,8), %r13
movq 0x8(%rax,%r12,8), %rax
subq %r13, %rax
sarq $0x6, %rax
incl %r14d
cmpq %rbx, %rax
ja 0x4a90
movq -0x60(%rbp), %rdi
leaq -0x58(%rbp), %rbx
movq %rbx, %rsi
callq 0x65c6
movq %rbx, %rdi
callq 0x5faa
movq -0x40(%rbp), %rsi
incl %esi
movq (%r15), %rax
movq 0x8(%r15), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rdx, %rcx
cmpq %rsi, %rcx
movq -0x30(%rbp), %rcx
ja 0x4a56
movabsq $-0x1cdf278f22, %rax    # imm = 0xFFFFFFE320D870DE
addq 0x80(%rcx), %rax
movabsq $0xe6f93c791, %rdx      # imm = 0xE6F93C791
cmpq %rdx, %rax
jae 0x4d59
movq (%r15), %rax
cmpq %rax, 0x8(%r15)
je 0x4d59
addq $0x60, %rcx
movq %rcx, -0x38(%rbp)
xorl %esi, %esi
leaq -0x58(%rbp), %rbx
movq %rsi, -0x40(%rbp)
leaq (%rsi,%rsi,2), %r12
leaq (%rax,%r12,8), %rsi
movq %rbx, %rdi
callq 0x6532
movq (%r15), %rax
movq (%rax,%r12,8), %rbx
movq 0x8(%rax,%r12,8), %rax
subq %rbx, %rax
cmpq $0x81, %rax
jb 0x4d12
movl $0x2, %r13d
movl $0x3, %r14d
leal -0x2(%r14), %eax
shlq $0x6, %rax
movq 0x28(%rbx,%rax), %rdx
movq -0x30(%rbp), %rcx
cmpq 0x8(%rcx), %rdx
jne 0x4cf0
testq %rdx, %rdx
je 0x4c70
addq %rbx, %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x4cf0
leal -0x3(%r14), %eax
shlq $0x6, %rax
movq 0x28(%rbx,%rax), %rdx
movq -0x30(%rbp), %rcx
cmpq 0x28(%rcx), %rdx
jne 0x4cf0
testq %rdx, %rdx
je 0x4ca7
addq %rbx, %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq 0x20(%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x4cf0
shlq $0x6, %r13
movq 0x28(%rbx,%r13), %rdx
movq -0x30(%rbp), %rax
cmpq 0x48(%rax), %rdx
jne 0x4cf0
testq %rdx, %rdx
je 0x4cdb
leaq (%rbx,%r13), %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq 0x40(%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x4cf0
movq -0x58(%rbp), %rax
leaq (%rax,%r13), %rdi
addq $0x20, %rdi
movq -0x38(%rbp), %rsi
callq 0x2110
movl %r14d, %r13d
movq (%r15), %rax
movq (%rax,%r12,8), %rbx
movq 0x8(%rax,%r12,8), %rax
subq %rbx, %rax
sarq $0x6, %rax
incl %r14d
cmpq %r13, %rax
ja 0x4c32
movq -0x60(%rbp), %rdi
leaq -0x58(%rbp), %rbx
movq %rbx, %rsi
callq 0x65c6
movq %rbx, %rdi
callq 0x5faa
movq -0x40(%rbp), %rsi
incl %esi
movq (%r15), %rax
movq 0x8(%r15), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rdx, %rcx
cmpq %rsi, %rcx
movq -0x30(%rbp), %rcx
ja 0x4bf7
movabsq $-0x2b4ebb56b3, %rax    # imm = 0xFFFFFFD4B144A94D
addq 0x80(%rcx), %rax
movabsq $0xe6f93c791, %rdx      # imm = 0xE6F93C791
cmpq %rdx, %rax
jae 0x4ef8
movq (%r15), %rax
cmpq %rax, 0x8(%r15)
je 0x4ef8
addq $0x60, %rcx
movq %rcx, -0x38(%rbp)
xorl %esi, %esi
leaq -0x58(%rbp), %rbx
movq %rsi, -0x40(%rbp)
leaq (%rsi,%rsi,2), %r12
leaq (%rax,%r12,8), %rsi
movq %rbx, %rdi
callq 0x6532
movq (%r15), %rax
movq (%rax,%r12,8), %r13
movq 0x8(%rax,%r12,8), %rax
subq %r13, %rax
cmpq $0x81, %rax
jb 0x4eb5
movl $0x2, %ebx
movl $0x3, %r14d
leal -0x2(%r14), %eax
shlq $0x6, %rax
movq 0x28(%r13,%rax), %rdx
movq -0x30(%rbp), %rcx
cmpq 0x8(%rcx), %rdx
jne 0x4e93
testq %rdx, %rdx
je 0x4e10
addq %r13, %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x4e93
shlq $0x6, %rbx
movq 0x28(%r13,%rbx), %rdx
movq -0x30(%rbp), %rax
cmpq 0x28(%rax), %rdx
jne 0x4e93
testq %rdx, %rdx
je 0x4e44
leaq (%rbx,%r13), %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq 0x20(%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x4e93
leal -0x3(%r14), %eax
movl %eax, %ebx
shlq $0x6, %rbx
movq 0x28(%r13,%rbx), %rdx
movq -0x30(%rbp), %rax
cmpq 0x48(%rax), %rdx
jne 0x4e93
testq %rdx, %rdx
je 0x4e7e
leaq (%rbx,%r13), %rax
addq $0x20, %rax
movq -0x30(%rbp), %rcx
movq 0x40(%rcx), %rsi
movq (%rax), %rdi
callq 0x21d0
testl %eax, %eax
jne 0x4e93
movq -0x58(%rbp), %rax
leaq (%rax,%rbx), %rdi
addq $0x20, %rdi
movq -0x38(%rbp), %rsi
callq 0x2110
movl %r14d, %ebx
movq (%r15), %rax
movq (%rax,%r12,8), %r13
movq 0x8(%rax,%r12,8), %rax
subq %r13, %rax
sarq $0x6, %rax
incl %r14d
cmpq %rbx, %rax
ja 0x4dd2
movq -0x60(%rbp), %rdi
leaq -0x58(%rbp), %rbx
movq %rbx, %rsi
callq 0x65c6
movq %rbx, %rdi
callq 0x5faa
movq -0x40(%rbp), %rsi
incl %esi
movq (%r15), %rax
movq 0x8(%r15), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rdx, %rcx
cmpq %rsi, %rcx
ja 0x4d98
movq -0x60(%rbp), %rax
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x4f3b
jmp 0x4f50
jmp 0x4f50
jmp 0x4f50
jmp 0x4f3b
jmp 0x4f50
jmp 0x4f50
jmp 0x4f3b
jmp 0x4f3b
jmp 0x4f50
jmp 0x4f3b
jmp 0x4f50
jmp 0x4f50
jmp 0x4f3b
jmp 0x4f50
jmp 0x4f3b
jmp 0x4f50
jmp 0x4f3b
jmp 0x4f3b
jmp 0x4f50
jmp 0x4f3b
jmp 0x4f50
jmp 0x4f3b
jmp 0x4f50
movq %rax, %r14
jmp 0x4f5c
jmp 0x4f50
jmp 0x4f50
jmp 0x4f50
jmp 0x4f50
jmp 0x4f50
jmp 0x4f50
jmp 0x4f50
jmp 0x4f50
movq %rax, %r14
leaq -0x58(%rbp), %rdi
callq 0x5faa
movq -0x60(%rbp), %rbx
leaq 0x18(%rbx), %rdi
callq 0x68bc
movq %rbx, %rdi
callq 0x672e
movq %r14, %rdi
callq 0x2320
nop