// File: szmer[P]brill/./src/rules.cpp
// Function: Rule::description[abi:cxx11]()
string Rule::description() {
  string res;
	res = "Change " + alter_tag + " to " + target + " when ";

	if(id < (RL_PRECEDING+1) * RULE_RANGE)
		res += "preceding tag is ";
	if(id >= RL_FOLLOWING * RULE_RANGE && id < (RL_FOLLOWING+1) * RULE_RANGE)
		res += "following tag is ";
	if(id >= RL_2BEFORE * RULE_RANGE && id < (RL_2BEFORE+1) * RULE_RANGE)
		res += "tag 2 before is ";
	if(id >= RL_2AFTER * RULE_RANGE && id < (RL_2AFTER+1) * RULE_RANGE)
		res += "tag 2 after is ";
	if(id >= RL_ONE_OF_2BEFORE * RULE_RANGE && id < (RL_ONE_OF_2BEFORE+1) * RULE_RANGE)
		res += "one of 2 tags before is ";
	if(id >= RL_ONE_OF_2AFTER * RULE_RANGE && id < (RL_ONE_OF_2AFTER+1) * RULE_RANGE)
		res += "one of 2 tags after is ";
	if(id >= RL_ONE_OF_3BEFORE * RULE_RANGE && id < (RL_ONE_OF_3BEFORE+1) * RULE_RANGE)
		res += "one of 3 tags before is ";
	if(id >= RL_ONE_OF_3AFTER * RULE_RANGE && id < (RL_ONE_OF_3AFTER+1) * RULE_RANGE)
		res += "one of 3 tags after is ";
	if(id >= EXTRL_PRECEDING_AND_FOLLOWING * EXT_RULE_RANGE && id < (EXTRL_PRECEDING_AND_FOLLOWING+1) * EXT_RULE_RANGE)
		res += "preceding and following tags are ";
	if(id >= EXTRL_1_AND_2_BEFORE * EXT_RULE_RANGE && id < (EXTRL_1_AND_2_BEFORE+1) * EXT_RULE_RANGE)
		res += "preceding and 2 before tags are ";
	if(id >= EXTRL_1_AND_2_AFTER * EXT_RULE_RANGE && id < (EXTRL_1_AND_2_AFTER+1) * EXT_RULE_RANGE)
		res += "following and 2 after tags are ";

	res += cue1 + " ";
	if(id >= EXT_RULE_RANGE)
    res += "and " + cue2 + " ";

  return res;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x120, %rsp            # imm = 0x120
movq %rdi, -0x120(%rbp)
movq %rdi, %rax
movq %rax, -0x118(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x110(%rbp)
movb $0x0, -0x11(%rbp)
callq 0x3320
movq -0x110(%rbp), %rdx
addq $0x40, %rdx
leaq 0xe16f(%rip), %rsi      # 0x131c9
leaq -0x98(%rbp), %rdi
callq 0x8070
jmp 0x5068
leaq 0xe162(%rip), %rdx      # 0x131d1
leaq -0x78(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x8020
jmp 0x5081
movq -0x110(%rbp), %rdx
addq $0x60, %rdx
leaq -0x58(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0x8f40
jmp 0x509b
leaq 0xe134(%rip), %rdx      # 0x131d6
leaq -0x38(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x8020
jmp 0x50b1
movq -0x120(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x32b0
leaq -0x38(%rbp), %rdi
callq 0x34b8
leaq -0x58(%rbp), %rdi
callq 0x34b8
leaq -0x78(%rbp), %rdi
callq 0x34b8
leaq -0x98(%rbp), %rdi
callq 0x34b8
movq -0x110(%rbp), %rax
cmpq $0x767ed6b, 0x80(%rax) # imm = 0x767ED6B
jge 0x518b
movq -0x120(%rbp), %rdi
leaq 0xe0cf(%rip), %rsi      # 0x131dd
callq 0x3200
jmp 0x5115
jmp 0x518b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x5571
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x517a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x5171
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x34b8
leaq -0x78(%rbp), %rdi
callq 0x34b8
leaq -0x98(%rbp), %rdi
callq 0x34b8
jmp 0x5571
movq -0x110(%rbp), %rax
cmpq $0x767ed6b, 0x80(%rax) # imm = 0x767ED6B
jl 0x51ca
movq -0x110(%rbp), %rax
cmpq $0xecfdad6, 0x80(%rax) # imm = 0xECFDAD6
jge 0x51ca
movq -0x120(%rbp), %rdi
leaq 0xe02e(%rip), %rsi      # 0x131ef
callq 0x3200
jmp 0x51c8
jmp 0x51ca
movq -0x110(%rbp), %rax
cmpq $0xecfdad6, 0x80(%rax) # imm = 0xECFDAD6
jl 0x5209
movq -0x110(%rbp), %rax
cmpq $0x1637c841, 0x80(%rax) # imm = 0x1637C841
jge 0x5209
movq -0x120(%rbp), %rdi
leaq 0xe001(%rip), %rsi      # 0x13201
callq 0x3200
jmp 0x5207
jmp 0x5209
movq -0x110(%rbp), %rax
cmpq $0x1637c841, 0x80(%rax) # imm = 0x1637C841
jl 0x5248
movq -0x110(%rbp), %rax
cmpq $0x1d9fb5ac, 0x80(%rax) # imm = 0x1D9FB5AC
jge 0x5248
movq -0x120(%rbp), %rdi
leaq 0xdfd3(%rip), %rsi      # 0x13212
callq 0x3200
jmp 0x5246
jmp 0x5248
movq -0x110(%rbp), %rax
cmpq $0x1d9fb5ac, 0x80(%rax) # imm = 0x1D9FB5AC
jl 0x5287
movq -0x110(%rbp), %rax
cmpq $0x2507a317, 0x80(%rax) # imm = 0x2507A317
jge 0x5287
movq -0x120(%rbp), %rdi
leaq 0xdfa4(%rip), %rsi      # 0x13222
callq 0x3200
jmp 0x5285
jmp 0x5287
movq -0x110(%rbp), %rax
cmpq $0x2507a317, 0x80(%rax) # imm = 0x2507A317
jl 0x52c6
movq -0x110(%rbp), %rax
cmpq $0x2c6f9082, 0x80(%rax) # imm = 0x2C6F9082
jge 0x52c6
movq -0x120(%rbp), %rdi
leaq 0xdf7e(%rip), %rsi      # 0x1323b
callq 0x3200
jmp 0x52c4
jmp 0x52c6
movq -0x110(%rbp), %rax
cmpq $0x2c6f9082, 0x80(%rax) # imm = 0x2C6F9082
jl 0x5305
movq -0x110(%rbp), %rax
cmpq $0x33d77ded, 0x80(%rax) # imm = 0x33D77DED
jge 0x5305
movq -0x120(%rbp), %rdi
leaq 0xdf57(%rip), %rsi      # 0x13253
callq 0x3200
jmp 0x5303
jmp 0x5305
movq -0x110(%rbp), %rax
cmpq $0x33d77ded, 0x80(%rax) # imm = 0x33D77DED
jl 0x5344
movq -0x110(%rbp), %rax
cmpq $0x3b3f6b58, 0x80(%rax) # imm = 0x3B3F6B58
jge 0x5344
movq -0x120(%rbp), %rdi
leaq 0xdf31(%rip), %rsi      # 0x1326c
callq 0x3200
jmp 0x5342
jmp 0x5344
movq -0x110(%rbp), %rax
movabsq $0xe6f93c791, %rcx      # imm = 0xE6F93C791
cmpq %rcx, 0x80(%rax)
jl 0x538f
movq -0x110(%rbp), %rax
movabsq $0x1cdf278f22, %rcx     # imm = 0x1CDF278F22
cmpq %rcx, 0x80(%rax)
jge 0x538f
movq -0x120(%rbp), %rdi
leaq 0xdefe(%rip), %rsi      # 0x13284
callq 0x3200
jmp 0x538d
jmp 0x538f
movq -0x110(%rbp), %rax
movabsq $0x1cdf278f22, %rcx     # imm = 0x1CDF278F22
cmpq %rcx, 0x80(%rax)
jl 0x53da
movq -0x110(%rbp), %rax
movabsq $0x2b4ebb56b3, %rcx     # imm = 0x2B4EBB56B3
cmpq %rcx, 0x80(%rax)
jge 0x53da
movq -0x120(%rbp), %rdi
leaq 0xded5(%rip), %rsi      # 0x132a6
callq 0x3200
jmp 0x53d8
jmp 0x53da
movq -0x110(%rbp), %rax
movabsq $0x2b4ebb56b3, %rcx     # imm = 0x2B4EBB56B3
cmpq %rcx, 0x80(%rax)
jl 0x5425
movq -0x110(%rbp), %rax
movabsq $0x39be4f1e44, %rcx     # imm = 0x39BE4F1E44
cmpq %rcx, 0x80(%rax)
jge 0x5425
movq -0x120(%rbp), %rdi
leaq 0xdeab(%rip), %rsi      # 0x132c7
callq 0x3200
jmp 0x5423
jmp 0x5425
movq -0x110(%rbp), %rsi
leaq 0xdf8d(%rip), %rdx      # 0x133c0
leaq -0xc8(%rbp), %rdi
callq 0x8f90
jmp 0x5441
movq -0x120(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x32e0
jmp 0x5456
leaq -0xc8(%rbp), %rdi
callq 0x34b8
movq -0x110(%rbp), %rax
movabsq $0xe6f93c791, %rcx      # imm = 0xE6F93C791
cmpq %rcx, 0x80(%rax)
jl 0x554b
movq -0x110(%rbp), %rdx
addq $0x20, %rdx
leaq 0xde55(%rip), %rsi      # 0x132e7
leaq -0x108(%rbp), %rdi
callq 0x8070
jmp 0x54a0
leaq 0xdf19(%rip), %rdx      # 0x133c0
leaq -0xe8(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0x8020
jmp 0x54bc
movq -0x120(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
callq 0x32e0
jmp 0x54d1
leaq -0xe8(%rbp), %rdi
callq 0x34b8
leaq -0x108(%rbp), %rdi
callq 0x34b8
jmp 0x554b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
leaq -0xc8(%rbp), %rdi
callq 0x34b8
jmp 0x5571
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x553d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
leaq -0xe8(%rbp), %rdi
callq 0x34b8
leaq -0x108(%rbp), %rdi
callq 0x34b8
jmp 0x5571
movb $0x1, -0x11(%rbp)
testb $0x1, -0x11(%rbp)
jne 0x5561
movq -0x120(%rbp), %rdi
callq 0x34b8
movq -0x118(%rbp), %rax
addq $0x120, %rsp            # imm = 0x120
popq %rbp
retq
movq -0x120(%rbp), %rdi
callq 0x34b8
movq -0xa0(%rbp), %rdi
callq 0x3400
nopl (%rax)