// File: BenLangmead[P]bowtie/./sstring.h
// Function: bool sstr_suf_lt<S2bDnaString, S2bDnaString>(S2bDnaString const&, unsigned long, unsigned long, S2bDnaString const&, unsigned long, unsigned long, bool)
static inline bool sstr_suf_lt(
	const T1& s1, size_t suf1, size_t len1,
	const T2& s2, size_t suf2, size_t len2,
	bool endlt = true)
{
	assert_leq(suf1, len1);
	assert_leq(suf2, len2);
	size_t left1 = len1 - suf1;
	size_t left2 = len2 - suf2;
	size_t minleft = (left1 < left2 ? left1 : left2);
	for(size_t i = 0; i < minleft; i++) {
		if(s1[suf1+i] < s2[suf2+i]) {
			return true;
		} else if(s1[suf1+i] > s2[suf2+i]) {
			return false;
		}
	}
	if(left1 == left2) return false;
	return (left1 < left2) == endlt;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movb 0x10(%rbp), %al
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
andb $0x1, %al
movb %al, -0x39(%rbp)
movq -0x18(%rbp), %rax
cmpq -0x20(%rbp), %rax
jbe 0x1602b
movq 0x34043(%rip), %rdi     # 0x49fc0
leaq 0x2921f(%rip), %rsi     # 0x3f1a3
callq 0x5360
movq %rax, %rdi
movq -0x18(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x2921b(%rip), %rsi     # 0x3f1ba
callq 0x5360
movq %rax, %rdi
movq -0x20(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x2b5fe(%rip), %rsi     # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x33fb7(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x33feb(%rip), %rdi     # 0x49fc0
leaq 0x2c465(%rip), %rsi     # 0x42441
callq 0x5360
movq %rax, %rdi
leaq 0x2a79f(%rip), %rsi     # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0xcc, %esi
callq 0x5750
movq %rax, %rdi
movq 0x33f79(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0x2a657(%rip), %rdi     # 0x4066a
leaq 0x2c427(%rip), %rsi     # 0x42441
movl $0xcc, %edx
leaq 0x2c4e2(%rip), %rcx     # 0x42508
callq 0x51e0
movq -0x30(%rbp), %rax
cmpq -0x38(%rbp), %rax
jbe 0x160ee
movq 0x33f80(%rip), %rdi     # 0x49fc0
leaq 0x2915c(%rip), %rsi     # 0x3f1a3
callq 0x5360
movq %rax, %rdi
movq -0x30(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x29158(%rip), %rsi     # 0x3f1ba
callq 0x5360
movq %rax, %rdi
movq -0x38(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x2b53b(%rip), %rsi     # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x33ef4(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x33f28(%rip), %rdi     # 0x49fc0
leaq 0x2c3a2(%rip), %rsi     # 0x42441
callq 0x5360
movq %rax, %rdi
leaq 0x2a6dc(%rip), %rsi     # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0xcd, %esi
callq 0x5750
movq %rax, %rdi
movq 0x33eb6(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0x2a594(%rip), %rdi     # 0x4066a
leaq 0x2c364(%rip), %rsi     # 0x42441
movl $0xcd, %edx
leaq 0x2c41f(%rip), %rcx     # 0x42508
callq 0x51e0
movq -0x20(%rbp), %rax
subq -0x18(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x38(%rbp), %rax
subq -0x30(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x48(%rbp), %rax
cmpq -0x50(%rbp), %rax
jae 0x1611a
movq -0x48(%rbp), %rax
movq %rax, -0x68(%rbp)
jmp 0x16122
movq -0x50(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x68(%rbp), %rax
movq %rax, -0x58(%rbp)
movq $0x0, -0x60(%rbp)
movq -0x60(%rbp), %rax
cmpq -0x58(%rbp), %rax
jae 0x161cc
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
addq -0x60(%rbp), %rsi
callq 0x356a0
movsbl %al, %eax
movl %eax, -0x6c(%rbp)
movq -0x28(%rbp), %rdi
movq -0x30(%rbp), %rsi
addq -0x60(%rbp), %rsi
callq 0x356a0
movb %al, %cl
movl -0x6c(%rbp), %eax
movsbl %cl, %ecx
cmpl %ecx, %eax
jge 0x1617d
movb $0x1, -0x1(%rbp)
jmp 0x161ff
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
addq -0x60(%rbp), %rsi
callq 0x356a0
movsbl %al, %eax
movl %eax, -0x70(%rbp)
movq -0x28(%rbp), %rdi
movq -0x30(%rbp), %rsi
addq -0x60(%rbp), %rsi
callq 0x356a0
movb %al, %cl
movl -0x70(%rbp), %eax
movsbl %cl, %ecx
cmpl %ecx, %eax
jle 0x161b7
movb $0x0, -0x1(%rbp)
jmp 0x161ff
jmp 0x161b9
jmp 0x161bb
movq -0x60(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x60(%rbp)
jmp 0x16132
movq -0x48(%rbp), %rax
cmpq -0x50(%rbp), %rax
jne 0x161dc
movb $0x0, -0x1(%rbp)
jmp 0x161ff
movq -0x48(%rbp), %rax
cmpq -0x50(%rbp), %rax
setb %al
andb $0x1, %al
movzbl %al, %eax
movb -0x39(%rbp), %cl
andb $0x1, %cl
movzbl %cl, %ecx
cmpl %ecx, %eax
sete %al
andb $0x1, %al
movb %al, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x70, %rsp
popq %rbp
retq
nopw (%rax,%rax)