// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/core/sequence_buffer_dust.c
// Function: gt_dust_masker_next_with_original
int gt_dust_masker_next_with_original(GtDustMasker *dust_masker,
                                      GtSequenceBuffer* sb,
                                      GtUchar *val, char *orig, GtError* err)
{
  int retval;

  if (dust_masker->masking_done) {
    retval = gt_sequence_buffer_next_with_original_raw(sb, val, orig, err);
    if (retval == -1) {
      return -1;
    }
    if (retval == 0) {
      if (dust_masker->echo) {
        if (dust_masker->current_pos_local % 60 != 0) {
          printf("\n");
        }
      }

      dust_masker->current_region_index = 0;
      dust_masker->current_pos_total = 0;
      dust_masker->current_pos_local = 0;
      return 0;
    }
    if (dust_masker->current_region_index <
        dust_masker->masked_regions.nextfreeGtDustRange) {
      GtDustRange range;
      range = dust_masker->masked_regions.spaceGtDustRange[
                         dust_masker->current_region_index];
      if (dust_masker->current_pos_total >= range.begin) {
        if (dust_masker->current_pos_total <= range.end &&
            *val != GT_SEPARATOR) {
          if (*orig >= 'A' && *orig <= 'Z') {
            *orig += 32;
          }
          *val = GT_WILDCARD;
        } else {
          dust_masker->current_region_index++;
        }
      }
    }
    dust_masker->current_pos_total++;
    dust_masker->current_pos_local++;
    if (dust_masker->echo) {
      if (*val == GT_SEPARATOR) {
        if (dust_masker->current_pos_local % 60 != 1) {
          printf("\n");
        }
        dust_masker->current_pos_local = 0;
      } else {
        printf("%c",*orig);
        if (dust_masker->current_pos_local % 60 == 0) {
          printf("\n");
        }
      }
    }
  } else {
    if (!dust_masker->buf_initialized) {
      GtUword idx;
      for (idx = 0; idx < dust_masker->buf_size; idx++) {
        retval = gt_dust_masker_shift_window(dust_masker, sb, err);
        if (retval == -1) {
          return -1;
        } else {
          if (retval == 0) {
            break;
          }
        }
      }
      dust_masker->buf_initialized = true;
    }
    if (dust_masker->buf_remaining > 0) {
      dust_masker->buf_remaining--;
      dust_masker->mask_length
        = GT_MAX(dust_masker->mask_length,
                 dust_masker->buf[dust_masker->buf_readpos].mask_length);

      if (dust_masker->linker > 1) {
        dust_masker->next_mask
          = GT_MAX(dust_masker->next_mask,
                   dust_masker->buf[dust_masker->buf_readpos].next_mask);
        if (dust_masker->mask_length > 0) {
          dust_masker->mask_length = GT_MAX(dust_masker->mask_length,
                                            dust_masker->next_mask);
        }
        if (dust_masker->next_mask > 0) {
          dust_masker->next_mask--;
        }
      }

      *val = dust_masker->buf[dust_masker->buf_readpos].val;
      *orig = dust_masker->buf[dust_masker->buf_readpos].orig;
      if (dust_masker->mask_length > 0 && *val != GT_SEPARATOR) {
        if (*orig >= 'A' && *orig <= 'Z') {
          *orig += 32;
        }
        *val = GT_WILDCARD;
      }

      /* Insert into masked_regions */
      if (dust_masker->mask_length > 0) {
        if (dust_masker->current_is_masked == false) {
          GT_GETNEXTFREEINARRAY(dust_masker->current_region,
                                &dust_masker->masked_regions,
                                GtDustRange, GT_ARRAYEXTENDSIZE);
          dust_masker->current_region->begin = dust_masker->current_pos_total;
        }
        dust_masker->current_region->end = dust_masker->current_pos_total;
        dust_masker->current_is_masked = true;
        dust_masker->mask_length--;
      } else {
        dust_masker->current_is_masked = false;
      }
      dust_masker->buf_readpos++;
      wrap_value_once(&dust_masker->buf_readpos, dust_masker->buf_size);
    } else {
      dust_masker->masking_done = true;
      dust_masker->current_pos_total = 0;
      return 0;
    }
    dust_masker->current_pos_total++;
    retval = gt_dust_masker_shift_window(dust_masker, sb, err);
    if (retval == -1) {
      return -1;
    }
  }
  return 1;
}

// Assembly:
subq $0x78, %rsp
movq %rdi, 0x68(%rsp)
movq %rsi, 0x60(%rsp)
movq %rdx, 0x58(%rsp)
movq %rcx, 0x50(%rsp)
movq %r8, 0x48(%rsp)
movq 0x68(%rsp), %rax
testb $0x1, 0x389(%rax)
je 0x9c911
movq 0x60(%rsp), %rdi
movq 0x58(%rsp), %rsi
movq 0x50(%rsp), %rdx
movq 0x48(%rsp), %rcx
callq 0x9be40
movl %eax, 0x44(%rsp)
cmpl $-0x1, 0x44(%rsp)
jne 0x9c6f0
movl $0xffffffff, 0x74(%rsp) # imm = 0xFFFFFFFF
jmp 0x9ce29
cmpl $0x0, 0x44(%rsp)
jne 0x9c76e
movq 0x68(%rsp), %rax
testb $0x1, 0x3b8(%rax)
je 0x9c731
movq 0x68(%rsp), %rax
movq 0x368(%rax), %rax
movl $0x3c, %ecx
xorl %edx, %edx
divq %rcx
cmpq $0x0, %rdx
je 0x9c72f
leaq 0xd94bd(%rip), %rdi     # 0x175be5
movb $0x0, %al
callq 0xb070
jmp 0x9c731
movq 0x68(%rsp), %rax
movq $0x0, 0x3b0(%rax)
movq 0x68(%rsp), %rax
movq $0x0, 0x360(%rax)
movq 0x68(%rsp), %rax
movq $0x0, 0x368(%rax)
movl $0x0, 0x74(%rsp)
jmp 0x9ce29
movq 0x68(%rsp), %rax
movq 0x3b0(%rax), %rax
movq 0x68(%rsp), %rcx
cmpq 0x3a0(%rcx), %rax
jae 0x9c83d
movq 0x68(%rsp), %rax
movq 0x390(%rax), %rax
movq 0x68(%rsp), %rcx
movq 0x3b0(%rcx), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq (%rax), %rcx
movq %rcx, 0x30(%rsp)
movq 0x8(%rax), %rax
movq %rax, 0x38(%rsp)
movq 0x68(%rsp), %rax
movq 0x360(%rax), %rax
cmpq 0x30(%rsp), %rax
jb 0x9c83b
movq 0x68(%rsp), %rax
movq 0x360(%rax), %rax
cmpq 0x38(%rsp), %rax
ja 0x9c822
movq 0x58(%rsp), %rax
movzbl (%rax), %eax
cmpl $0xff, %eax
je 0x9c822
movq 0x50(%rsp), %rax
movsbl (%rax), %eax
cmpl $0x41, %eax
jl 0x9c818
movq 0x50(%rsp), %rax
movsbl (%rax), %eax
cmpl $0x5a, %eax
jg 0x9c818
movq 0x50(%rsp), %rax
movsbl (%rax), %ecx
addl $0x20, %ecx
movb %cl, (%rax)
movq 0x58(%rsp), %rax
movb $-0x2, (%rax)
jmp 0x9c839
movq 0x68(%rsp), %rax
movq 0x3b0(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x3b0(%rax)
jmp 0x9c83b
jmp 0x9c83d
movq 0x68(%rsp), %rax
movq 0x360(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x360(%rax)
movq 0x68(%rsp), %rax
movq 0x368(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x368(%rax)
movq 0x68(%rsp), %rax
testb $0x1, 0x3b8(%rax)
je 0x9c90c
movq 0x58(%rsp), %rax
movzbl (%rax), %eax
cmpl $0xff, %eax
jne 0x9c8c8
movq 0x68(%rsp), %rax
movq 0x368(%rax), %rax
movl $0x3c, %ecx
xorl %edx, %edx
divq %rcx
cmpq $0x1, %rdx
je 0x9c8b6
leaq 0xd9336(%rip), %rdi     # 0x175be5
movb $0x0, %al
callq 0xb070
movq 0x68(%rsp), %rax
movq $0x0, 0x368(%rax)
jmp 0x9c90a
movq 0x50(%rsp), %rax
movsbl (%rax), %esi
leaq 0xdc234(%rip), %rdi     # 0x178b0b
movb $0x0, %al
callq 0xb070
movq 0x68(%rsp), %rax
movq 0x368(%rax), %rax
movl $0x3c, %ecx
xorl %edx, %edx
divq %rcx
cmpq $0x0, %rdx
jne 0x9c908
leaq 0xd92e4(%rip), %rdi     # 0x175be5
movb $0x0, %al
callq 0xb070
jmp 0x9c90a
jmp 0x9c90c
jmp 0x9ce21
movq 0x68(%rsp), %rax
testb $0x1, 0x8(%rax)
jne 0x9c987
movq $0x0, 0x28(%rsp)
movq 0x28(%rsp), %rax
movq 0x68(%rsp), %rcx
cmpq 0x28(%rcx), %rax
jae 0x9c97e
movq 0x68(%rsp), %rdi
movq 0x60(%rsp), %rsi
movq 0x48(%rsp), %rdx
callq 0x9ce40
movl %eax, 0x44(%rsp)
cmpl $-0x1, 0x44(%rsp)
jne 0x9c961
movl $0xffffffff, 0x74(%rsp) # imm = 0xFFFFFFFF
jmp 0x9ce29
cmpl $0x0, 0x44(%rsp)
jne 0x9c96a
jmp 0x9c97e
jmp 0x9c96c
jmp 0x9c96e
movq 0x28(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x28(%rsp)
jmp 0x9c925
movq 0x68(%rsp), %rax
movb $0x1, 0x8(%rax)
movq 0x68(%rsp), %rax
cmpq $0x0, 0x20(%rax)
jbe 0x9cdb9
movq 0x68(%rsp), %rax
movq 0x20(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x20(%rax)
movq 0x68(%rsp), %rax
movq 0x378(%rax), %rax
movq 0x68(%rsp), %rcx
movq (%rcx), %rcx
movq 0x68(%rsp), %rdx
movq 0x10(%rdx), %rdx
shlq $0x5, %rdx
addq %rdx, %rcx
cmpq 0x8(%rcx), %rax
jbe 0x9c9e5
movq 0x68(%rsp), %rax
movq 0x378(%rax), %rax
movq %rax, 0x18(%rsp)
jmp 0x9ca06
movq 0x68(%rsp), %rax
movq (%rax), %rax
movq 0x68(%rsp), %rcx
movq 0x10(%rcx), %rcx
shlq $0x5, %rcx
addq %rcx, %rax
movq 0x8(%rax), %rax
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rcx
movq 0x68(%rsp), %rax
movq %rcx, 0x378(%rax)
movq 0x68(%rsp), %rax
cmpq $0x1, 0x3c8(%rax)
jbe 0x9cb1f
movq 0x68(%rsp), %rax
movq 0x380(%rax), %rax
movq 0x68(%rsp), %rcx
movq (%rcx), %rcx
movq 0x68(%rsp), %rdx
movq 0x10(%rdx), %rdx
shlq $0x5, %rdx
addq %rdx, %rcx
cmpq 0x10(%rcx), %rax
jbe 0x9ca67
movq 0x68(%rsp), %rax
movq 0x380(%rax), %rax
movq %rax, 0x10(%rsp)
jmp 0x9ca88
movq 0x68(%rsp), %rax
movq (%rax), %rax
movq 0x68(%rsp), %rcx
movq 0x10(%rcx), %rcx
shlq $0x5, %rcx
addq %rcx, %rax
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
movq 0x10(%rsp), %rcx
movq 0x68(%rsp), %rax
movq %rcx, 0x380(%rax)
movq 0x68(%rsp), %rax
cmpq $0x0, 0x378(%rax)
jbe 0x9caf7
movq 0x68(%rsp), %rax
movq 0x378(%rax), %rax
movq 0x68(%rsp), %rcx
cmpq 0x380(%rcx), %rax
jbe 0x9cad5
movq 0x68(%rsp), %rax
movq 0x378(%rax), %rax
movq %rax, 0x8(%rsp)
jmp 0x9cae6
movq 0x68(%rsp), %rax
movq 0x380(%rax), %rax
movq %rax, 0x8(%rsp)
movq 0x8(%rsp), %rcx
movq 0x68(%rsp), %rax
movq %rcx, 0x378(%rax)
movq 0x68(%rsp), %rax
cmpq $0x0, 0x380(%rax)
jbe 0x9cb1d
movq 0x68(%rsp), %rax
movq 0x380(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x380(%rax)
jmp 0x9cb1f
movq 0x68(%rsp), %rax
movq (%rax), %rax
movq 0x68(%rsp), %rcx
movq 0x10(%rcx), %rcx
shlq $0x5, %rcx
addq %rcx, %rax
movb (%rax), %cl
movq 0x58(%rsp), %rax
movb %cl, (%rax)
movq 0x68(%rsp), %rax
movq (%rax), %rax
movq 0x68(%rsp), %rcx
movq 0x10(%rcx), %rcx
shlq $0x5, %rcx
addq %rcx, %rax
movb 0x1(%rax), %cl
movq 0x50(%rsp), %rax
movb %cl, (%rax)
movq 0x68(%rsp), %rax
cmpq $0x0, 0x378(%rax)
jbe 0x9cbaf
movq 0x58(%rsp), %rax
movzbl (%rax), %eax
cmpl $0xff, %eax
je 0x9cbaf
movq 0x50(%rsp), %rax
movsbl (%rax), %eax
cmpl $0x41, %eax
jl 0x9cba7
movq 0x50(%rsp), %rax
movsbl (%rax), %eax
cmpl $0x5a, %eax
jg 0x9cba7
movq 0x50(%rsp), %rax
movsbl (%rax), %ecx
addl $0x20, %ecx
movb %cl, (%rax)
movq 0x58(%rsp), %rax
movb $-0x2, (%rax)
movq 0x68(%rsp), %rax
cmpq $0x0, 0x378(%rax)
jbe 0x9cd83
movq 0x68(%rsp), %rax
movb 0x388(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x9cd42
jmp 0x9cbdd
jmp 0x9cbdf
movq 0x68(%rsp), %rax
movq 0x3a0(%rax), %rax
addq $0x0, %rax
movq 0x68(%rsp), %rcx
cmpq 0x398(%rcx), %rax
jb 0x9cca1
movq $0x64, 0x20(%rsp)
xorl %eax, %eax
cmpq 0x20(%rsp), %rax
jbe 0x9cc4b
movq 0x1173be(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0xc1442(%rip), %rsi     # 0x15e066
leaq 0xd4671(%rip), %rdx     # 0x17129c
leaq 0xd467b(%rip), %rcx     # 0x1712ad
leaq 0xd4643(%rip), %r8      # 0x17127c
movl $0x1b7, %r9d            # imm = 0x1B7
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x9cc4d
movq 0x20(%rsp), %rcx
movq 0x68(%rsp), %rax
addq 0x398(%rax), %rcx
movq %rcx, 0x398(%rax)
movq 0x68(%rsp), %rax
movq 0x390(%rax), %rdi
movq 0x68(%rsp), %rax
movq 0x398(%rax), %rsi
shlq $0x4, %rsi
leaq 0xd45f4(%rip), %rdx     # 0x17127c
movl $0x1b7, %ecx            # imm = 0x1B7
callq 0xd730
movq %rax, %rcx
movq 0x68(%rsp), %rax
movq %rcx, 0x390(%rax)
jmp 0x9cca3
movq 0x68(%rsp), %rax
cmpq $0x0, 0x390(%rax)
jne 0x9ccea
movq 0x11731f(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0xc13a3(%rip), %rsi     # 0x15e066
leaq 0xd4605(%rip), %rdx     # 0x1712cf
leaq 0xd45dc(%rip), %rcx     # 0x1712ad
leaq 0xd45a4(%rip), %r8      # 0x17127c
movl $0x1b7, %r9d            # imm = 0x1B7
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x9ccec
jmp 0x9ccee
movq 0x68(%rsp), %rax
movq 0x390(%rax), %rcx
movq 0x68(%rsp), %rdx
movq 0x3a0(%rdx), %rax
movq %rax, %rsi
addq $0x1, %rsi
movq %rsi, 0x3a0(%rdx)
shlq $0x4, %rax
addq %rax, %rcx
movq 0x68(%rsp), %rax
movq %rcx, 0x3a8(%rax)
movq 0x68(%rsp), %rax
movq 0x360(%rax), %rcx
movq 0x68(%rsp), %rax
movq 0x3a8(%rax), %rax
movq %rcx, (%rax)
movq 0x68(%rsp), %rax
movq 0x360(%rax), %rcx
movq 0x68(%rsp), %rax
movq 0x3a8(%rax), %rax
movq %rcx, 0x8(%rax)
movq 0x68(%rsp), %rax
movb $0x1, 0x388(%rax)
movq 0x68(%rsp), %rax
movq 0x378(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x378(%rax)
jmp 0x9cd8f
movq 0x68(%rsp), %rax
movb $0x0, 0x388(%rax)
movq 0x68(%rsp), %rax
movq 0x10(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x10(%rax)
movq 0x68(%rsp), %rdi
addq $0x10, %rdi
movq 0x68(%rsp), %rax
movq 0x28(%rax), %rsi
callq 0x9d350
jmp 0x9cddf
movq 0x68(%rsp), %rax
movb $0x1, 0x389(%rax)
movq 0x68(%rsp), %rax
movq $0x0, 0x360(%rax)
movl $0x0, 0x74(%rsp)
jmp 0x9ce29
movq 0x68(%rsp), %rax
movq 0x360(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x360(%rax)
movq 0x68(%rsp), %rdi
movq 0x60(%rsp), %rsi
movq 0x48(%rsp), %rdx
callq 0x9ce40
movl %eax, 0x44(%rsp)
cmpl $-0x1, 0x44(%rsp)
jne 0x9ce1f
movl $0xffffffff, 0x74(%rsp) # imm = 0xFFFFFFFF
jmp 0x9ce29
jmp 0x9ce21
movl $0x1, 0x74(%rsp)
movl 0x74(%rsp), %eax
addq $0x78, %rsp
retq
nopw %cs:(%rax,%rax)