// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/core/encseq.c
// Function: sequence2specialcharinfo
static void sequence2specialcharinfo(GtSpecialcharinfo *specialcharinfo,
                                     const GtUchar *seq,
                                     const GtUword len,
                                     GtAlphabet *a,
                                     GtLogger *logger)
{
  GtUchar charcode;
  GtUword currentpos,
                lastspecialrangelength = 0,
                lastnonspecialrangelength = 0,
                lastwildcardrangelength = 0,
                md5_blockcount = 0;
  bool specialprefix = true, wildcardprefix = true;
  GtDiscDistri *distspecialrangelength,
               *distwildcardrangelength;
  GtMD5Encoder *md5enc = NULL;
  char md5_blockbuf[64];
  GT_UNUSED char md5_outbuf[33];
  unsigned char md5_output[16];

  specialcharinfo->specialcharacters = 0;
  specialcharinfo->wildcards = 0;
  specialcharinfo->lengthofspecialprefix = 0;
  specialcharinfo->lengthofwildcardprefix = 0;
  distspecialrangelength = gt_disc_distri_new();
  distwildcardrangelength = gt_disc_distri_new();

  md5enc = gt_md5_encoder_new();
  for (currentpos = 0; currentpos < len; currentpos++) {
    char cc = '\0';
    bool outoistab = false;
    charcode = seq[currentpos];
#undef WITHEQUALLENGTH_DES_SSP
#undef WITHOISTAB
#undef WITHORIGDIST
#undef WITHCOUNTMINMAX
#undef WITHMD5FP
#include "encseq_charproc.gen"
  }
  if (lastspecialrangelength > 0)
    gt_disc_distri_add(distspecialrangelength, lastspecialrangelength);
  if (lastwildcardrangelength > 0)
    gt_disc_distri_add(distwildcardrangelength, lastwildcardrangelength);
  specialcharinfo->lengthofspecialsuffix = lastspecialrangelength;
  specialcharinfo->lengthofwildcardsuffix = lastwildcardrangelength;
  specialcharinfo->realspecialranges
    = calcswranges("special", false, NULL, distspecialrangelength, logger);
  specialcharinfo->realwildcardranges
    = calcswranges("wildcard", true, NULL, distwildcardrangelength, logger);
  specialcharinfo->specialranges = specialcharinfo->realspecialranges;
  specialcharinfo->wildcardranges = specialcharinfo->realwildcardranges;
  gt_disc_distri_delete(distspecialrangelength);
  gt_disc_distri_delete(distwildcardrangelength);
  gt_md5_encoder_delete(md5enc);
}

// Assembly:
subq $0x108, %rsp            # imm = 0x108
movq %rdi, 0x100(%rsp)
movq %rsi, 0xf8(%rsp)
movq %rdx, 0xf0(%rsp)
movq %rcx, 0xe8(%rsp)
movq %r8, 0xe0(%rsp)
movq $0x0, 0xc8(%rsp)
movq $0x0, 0xc0(%rsp)
movq $0x0, 0xb8(%rsp)
movq $0x0, 0xb0(%rsp)
movb $0x1, 0xaf(%rsp)
movb $0x1, 0xae(%rsp)
movq $0x0, 0x90(%rsp)
movq 0x100(%rsp), %rax
movq $0x0, (%rax)
movq 0x100(%rsp), %rax
movq $0x0, 0x28(%rax)
movq 0x100(%rsp), %rax
movq $0x0, 0x18(%rax)
movq 0x100(%rsp), %rax
movq $0x0, 0x40(%rax)
callq 0x112810
movq %rax, 0xa0(%rsp)
callq 0x112810
movq %rax, 0x98(%rsp)
callq 0x147c80
movq %rax, 0x90(%rsp)
movq $0x0, 0xd0(%rsp)
movq 0xd0(%rsp), %rax
cmpq 0xf0(%rsp), %rax
jae 0x128565
movb $0x0, 0xf(%rsp)
movb $0x0, 0xe(%rsp)
movq 0xf8(%rsp), %rax
movq 0xd0(%rsp), %rcx
movb (%rax,%rcx), %al
movb %al, 0xdf(%rsp)
movzbl 0xdf(%rsp), %eax
cmpl $0xfe, %eax
jge 0x1282db
testb $0x1, 0xaf(%rsp)
je 0x1281ac
movb $0x0, 0xaf(%rsp)
testb $0x1, 0xae(%rsp)
je 0x1281be
movb $0x0, 0xae(%rsp)
cmpq $0x0, 0xc8(%rsp)
jbe 0x1281ea
movq 0xa0(%rsp), %rdi
movq 0xc8(%rsp), %rsi
callq 0x112830
movq $0x0, 0xc8(%rsp)
cmpq $0x0, 0xb8(%rsp)
jbe 0x128216
movq 0x98(%rsp), %rdi
movq 0xb8(%rsp), %rsi
callq 0x112830
movq $0x0, 0xb8(%rsp)
movq 0xc0(%rsp), %rax
addq $0x1, %rax
movq %rax, 0xc0(%rsp)
cmpq $0x0, 0x90(%rsp)
je 0x1282d6
cmpq $0x40, 0xb0(%rsp)
jne 0x12826a
movq 0x90(%rsp), %rdi
leaq 0x50(%rsp), %rsi
movq 0xb0(%rsp), %rdx
callq 0x147dc0
movq $0x0, 0xb0(%rsp)
testb $0x1, 0xe(%rsp)
je 0x12829a
movsbl 0xf(%rsp), %edi
callq 0xbbb0
movb %al, %cl
movq 0xb0(%rsp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, 0xb0(%rsp)
movb %cl, 0x50(%rsp,%rax)
jmp 0x1282d4
movq 0xe8(%rsp), %rdi
movzbl 0xdf(%rsp), %esi
callq 0x10ac90
movsbl %al, %edi
callq 0xbbb0
movb %al, %cl
movq 0xb0(%rsp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, 0xb0(%rsp)
movb %cl, 0x50(%rsp,%rax)
jmp 0x1282d6
jmp 0x12854a
cmpq $0x0, 0xc0(%rsp)
jbe 0x12831c
movq 0xc0(%rsp), %rax
movq 0x100(%rsp), %rcx
cmpq 0x50(%rcx), %rax
jbe 0x128310
movq 0xc0(%rsp), %rcx
movq 0x100(%rsp), %rax
movq %rcx, 0x50(%rax)
movq $0x0, 0xc0(%rsp)
movzbl 0xdf(%rsp), %eax
cmpl $0xfe, %eax
jne 0x128426
testb $0x1, 0xae(%rsp)
je 0x12834d
movq 0x100(%rsp), %rax
movq 0x40(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x40(%rax)
movq 0xb8(%rsp), %rax
addq $0x1, %rax
movq %rax, 0xb8(%rsp)
movq 0x100(%rsp), %rax
movq 0x28(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x28(%rax)
cmpq $0x0, 0x90(%rsp)
je 0x128421
cmpq $0x40, 0xb0(%rsp)
jne 0x1283b5
movq 0x90(%rsp), %rdi
leaq 0x50(%rsp), %rsi
movq 0xb0(%rsp), %rdx
callq 0x147dc0
movq $0x0, 0xb0(%rsp)
testb $0x1, 0xe(%rsp)
je 0x1283e5
movsbl 0xf(%rsp), %edi
callq 0xbbb0
movb %al, %cl
movq 0xb0(%rsp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, 0xb0(%rsp)
movb %cl, 0x50(%rsp,%rax)
jmp 0x12841f
movq 0xe8(%rsp), %rdi
movzbl 0xdf(%rsp), %esi
callq 0x10ac90
movsbl %al, %edi
callq 0xbbb0
movb %al, %cl
movq 0xb0(%rsp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, 0xb0(%rsp)
movb %cl, 0x50(%rsp,%rax)
jmp 0x128421
jmp 0x128506
jmp 0x128428
movzbl 0xdf(%rsp), %eax
cmpl $0xff, %eax
je 0x12846f
movq 0x8bb9a(%rip), %rax     # 0x1b3fd8
movq (%rax), %rdi
leaq 0x35c1e(%rip), %rsi     # 0x15e066
leaq 0x61a10(%rip), %rdx     # 0x189e5f
leaq 0x61ed0(%rip), %rcx     # 0x18a326
leaq 0x61a25(%rip), %r8      # 0x189e82
movl $0x4a, %r9d
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x128471
testb $0x1, 0xae(%rsp)
je 0x128483
movb $0x0, 0xae(%rsp)
cmpq $0x0, 0xb8(%rsp)
jbe 0x1284af
movq 0x98(%rsp), %rdi
movq 0xb8(%rsp), %rsi
callq 0x112830
movq $0x0, 0xb8(%rsp)
cmpq $0x0, 0x90(%rsp)
je 0x128504
movq 0x90(%rsp), %rdi
leaq 0x50(%rsp), %rsi
movq 0xb0(%rsp), %rdx
callq 0x147dc0
movq 0x90(%rsp), %rdi
leaq 0x10(%rsp), %rsi
leaq 0x20(%rsp), %rdx
callq 0x148940
movq 0x90(%rsp), %rdi
callq 0x147d30
movq $0x0, 0xb0(%rsp)
jmp 0x128506
testb $0x1, 0xaf(%rsp)
je 0x128524
movq 0x100(%rsp), %rax
movq 0x18(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x18(%rax)
movq 0x100(%rsp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
movq 0xc8(%rsp), %rax
addq $0x1, %rax
movq %rax, 0xc8(%rsp)
jmp 0x12854c
movq 0xd0(%rsp), %rax
addq $0x1, %rax
movq %rax, 0xd0(%rsp)
jmp 0x12814d
cmpq $0x0, 0xc8(%rsp)
jbe 0x128585
movq 0xa0(%rsp), %rdi
movq 0xc8(%rsp), %rsi
callq 0x112830
cmpq $0x0, 0xb8(%rsp)
jbe 0x1285a5
movq 0x98(%rsp), %rdi
movq 0xb8(%rsp), %rsi
callq 0x112830
movq 0xc8(%rsp), %rcx
movq 0x100(%rsp), %rax
movq %rcx, 0x20(%rax)
movq 0xb8(%rsp), %rcx
movq 0x100(%rsp), %rax
movq %rcx, 0x48(%rax)
movq 0xa0(%rsp), %rcx
movq 0xe0(%rsp), %r8
leaq 0x5d505(%rip), %rdi     # 0x185ae9
xorl %esi, %esi
xorl %eax, %eax
movl %eax, %edx
callq 0x136ef0
movq %rax, %rcx
movq 0x100(%rsp), %rax
movq %rcx, 0x10(%rax)
movq 0x98(%rsp), %rcx
movq 0xe0(%rsp), %r8
leaq 0x6272b(%rip), %rdi     # 0x18ad40
movl $0x1, %esi
xorl %eax, %eax
movl %eax, %edx
callq 0x136ef0
movq %rax, %rcx
movq 0x100(%rsp), %rax
movq %rcx, 0x38(%rax)
movq 0x100(%rsp), %rax
movq 0x10(%rax), %rcx
movq 0x100(%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0x100(%rsp), %rax
movq 0x38(%rax), %rcx
movq 0x100(%rsp), %rax
movq %rcx, 0x30(%rax)
movq 0xa0(%rsp), %rdi
callq 0x113380
movq 0x98(%rsp), %rdi
callq 0x113380
movq 0x90(%rsp), %rdi
callq 0x148e70
addq $0x108, %rsp            # imm = 0x108
retq
nopw %cs:(%rax,%rax)