// File: mh0fm4[P]SCDC/src/components/dataset/dataset_inout.cc
// Function: scdc_dataset_inout_t* scdc_dataset_output_FX_create<_IO_FILE*>(_scdc_dataset_inout_t*, char const*, _scdc_args_t*, _IO_FILE*)
static scdc_dataset_output_t *scdc_dataset_output_FX_create(scdc_dataset_output_t *output, const char *conf, scdc_args_t *args, T fx)
{
  bool offset_set = false;
  bool offset_front = true;
  scdcint_t offset = 0;
  scdcint_t size = -1;
  scdcint_t chunk_size = -1;
  scdc_args_buf_t buffer = { 0, DEFAULT_DATASET_INOUT_BUF_SIZE };
  bool trunc = false;

  stringlist confs(':', conf);
  scdc_args xargs(args);

  scdc_dataset_inout_t *inout_redirect = 0;
  if (xargs.get<scdc_dataset_inout_t *>(SCDC_ARGS_TYPE_DATASET_INOUT_REDIRECT_PTR, &inout_redirect) != SCDC_ARG_REF_NULL && inout_redirect)
  {
    buffer.buf = SCDC_DATASET_INOUT_BUF_PTR(inout_redirect);
    buffer.buf_size = SCDC_DATASET_INOUT_BUF_SIZE(inout_redirect);
  }

  string c;
  scdcint_t i = 0;
  while (confs.front_pop(c))
  {
    if (c == "offset")
    {
      if (xargs.get<scdcint_t>(SCDC_ARGS_TYPE_SCDCINT, &offset) == SCDC_ARG_REF_NULL)
      {
        SCDC_ERROR("scdc_dataset_output_FX_create: getting file offset");
        return 0;
      }

      offset_set = true;

    } else if (c == "size")
    {
      if (xargs.get<scdcint_t>(SCDC_ARGS_TYPE_SCDCINT, &size) == SCDC_ARG_REF_NULL)
      {
        SCDC_ERROR("scdc_dataset_output_FX_create: getting file size");
        return 0;
      }

    } else if (c == "chunks")
    {
      if (xargs.get<scdcint_t>(SCDC_ARGS_TYPE_SCDCINT, &chunk_size) == SCDC_ARG_REF_NULL)
      {
        SCDC_ERROR("scdc_dataset_output_FX_create: getting chunk size");
        return 0;
      }

    } else if (c == "buffer")
    {
      if (xargs.get<scdc_args_buf_t>(SCDC_ARGS_TYPE_BUF, &buffer) == SCDC_ARG_REF_NULL)
      {
        SCDC_ERROR("scdc_dataset_output_FX_create: getting buffer");
        return 0;
      }

    } else if (c == "trunc")
    {
      trunc = true;

    } else
    {
      char r;

      if (!c.empty())
      switch (i)
      {
        case 0:
          r = toupper(c[c.size() - 1]);
          if (r == 'F' || r == 'B') { offset_front = (r == 'F'); c.resize(c.size() - 1); }
          scdc_args_string(c).get<scdcint_t>(c, SCDC_ARGS_TYPE_SCDCINT, &offset);
          offset_set = true;
          break;
        case 1: scdc_args_string(c).get<scdcint_t>(c, SCDC_ARGS_TYPE_SCDCINT, &size); break;
        case 2: scdc_args_string(c).get<scdcint_t>(c, SCDC_ARGS_TYPE_SCDCINT, &chunk_size); break;
        default: SCDC_FAIL("scdc_dataset_output_FX_create: ignoring parameter '" << c << "'"); break;
      }

      ++i;
    }
  }

  SCDC_TRACE("scdc_dataset_output_FX_create: offset: " << offset << ", size: " << size << ", chunks: " << chunk_size <<
             ", buffer: " << buffer.buf << " / " << buffer.buf_size << ", trunc: " << trunc);

  if (!output) return 0;

  if (!scdc_dataset_inout_alloc(output, (buffer.buf?0:buffer.buf_size), sizeof(inout_FX_data_t<T>))) return 0;

  if (buffer.buf)
  {
    SCDC_DATASET_INOUT_BUF_PTR(output) = buffer.buf;
    SCDC_DATASET_INOUT_BUF_SIZE(output) = buffer.buf_size;
  }

  output->intern->type = SCDC_DATASET_INOUT_TYPE_NONE;
  output->intern->destroy = NULL;

  strcpy(output->format, "data");

  inout_FX_data_t<T> *data = static_cast<inout_FX_data_t<T> *>(output->data);

  data->fx = fx;
  data->chunk_size = chunk_size;
  data->size_left = size;

  if (trunc && data->truncate(0) != 0)
  {
    SCDC_ERROR("scdc_dataset_output_FX_create: truncate file");
    return 0;
  }

  if (offset_set && data->seek(offset, (offset_front)?SEEK_SET:SEEK_END) < 0)
  {
    SCDC_ERROR("scdc_dataset_output_FX_create: seek to offset " << offset << " from " << ((offset_front)?"front":"back"));
    return 0;
  }

  SCDC_TRACE("scdc_dataset_output_FX_create: offset: " << data->tell());

  output->next = output_FX_next<T>;

  return output;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2c0, %rsp            # imm = 0x2C0
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movb $0x0, -0x29(%rbp)
movb $0x1, -0x2a(%rbp)
movq $0x0, -0x38(%rbp)
movq $-0x1, -0x40(%rbp)
movq $-0x1, -0x48(%rbp)
movups 0x5bfce(%rip), %xmm0    # 0xa77f0
movaps %xmm0, -0x60(%rbp)
movb $0x0, -0x61(%rbp)
movq -0x18(%rbp), %rdx
leaq -0x90(%rbp), %rdi
movl $0x3a, %esi
movq $-0x1, %rcx
callq 0x25a70
movq -0x20(%rbp), %rsi
leaq -0xc8(%rbp), %rdi
callq 0x25660
jmp 0x4b858
movq $0x0, -0xe0(%rbp)
leaq -0xc8(%rbp), %rdi
movl $0xe, %esi
leaq -0xe0(%rbp), %rdx
xorl %ecx, %ecx
callq 0x4d520
movq %rax, -0x138(%rbp)
jmp 0x4b886
movq -0x138(%rbp), %rax
cmpq $0x0, %rax
je 0x4b8eb
cmpq $0x0, -0xe0(%rbp)
je 0x4b8eb
movq -0xe0(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x60(%rbp)
movq -0xe0(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x58(%rbp)
jmp 0x4b8eb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xd0(%rbp)
movl %eax, -0xd4(%rbp)
jmp 0x4c496
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xd0(%rbp)
movl %eax, -0xd4(%rbp)
jmp 0x4c48a
leaq -0x100(%rbp), %rdi
callq 0xc960
movq $0x0, -0x108(%rbp)
leaq -0x90(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0x26730
movb %al, -0x139(%rbp)
jmp 0x4b91d
movb -0x139(%rbp), %al
testb $0x1, %al
jne 0x4b92c
jmp 0x4c0c7
leaq 0x5bc0e(%rip), %rsi     # 0xa7541
leaq -0x100(%rbp), %rdi
callq 0x25b80
movb %al, -0x13a(%rbp)
jmp 0x4b947
movb -0x13a(%rbp), %al
testb $0x1, %al
jne 0x4b956
jmp 0x4ba84
leaq -0xc8(%rbp), %rdi
movl $0x2, %esi
leaq -0x38(%rbp), %rdx
xorl %ecx, %ecx
callq 0x4d170
movq %rax, -0x148(%rbp)
jmp 0x4b976
movq -0x148(%rbp), %rax
cmpq $0x0, %rax
jne 0x4ba7b
jmp 0x4b989
leaq 0x88d18(%rip), %rax     # 0xd46a8
movq (%rax), %rdi
callq 0x2e8e0
cmpq $0x0, %rax
je 0x4ba60
leaq 0x88cff(%rip), %rax     # 0xd46a8
movq %rax, -0x158(%rbp)
movq (%rax), %rdi
callq 0x2e900
movq -0x158(%rbp), %rax
movq (%rax), %rdi
callq 0x2e8e0
movq %rax, %rdi
leaq 0x5aad7(%rip), %rsi     # 0xa64a8
callq 0xc670
movq %rax, -0x150(%rbp)
jmp 0x4b9df
movq -0x150(%rbp), %rdi
leaq 0x5b68f(%rip), %rsi     # 0xa707c
callq 0xc670
movq %rax, -0x160(%rbp)
jmp 0x4b9fb
movq -0x160(%rbp), %rdi
leaq 0x5bb0c(%rip), %rsi     # 0xa7515
callq 0xc670
movq %rax, -0x168(%rbp)
jmp 0x4ba17
movq -0x168(%rbp), %rdi
movq 0x8859b(%rip), %rsi     # 0xd3fc0
callq 0xc6d0
jmp 0x4ba2c
leaq 0x88c75(%rip), %rax     # 0xd46a8
movq (%rax), %rdi
callq 0x2e920
jmp 0x4ba60
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xd0(%rbp)
movl %eax, -0xd4(%rbp)
leaq -0x100(%rbp), %rdi
callq 0xc3e0
jmp 0x4c48a
jmp 0x4ba62
jmp 0x4ba64
movq $0x0, -0x8(%rbp)
movl $0x1, -0x10c(%rbp)
jmp 0x4c459
movb $0x1, -0x29(%rbp)
jmp 0x4c0c2
leaq 0x5bae9(%rip), %rsi     # 0xa7574
leaq -0x100(%rbp), %rdi
callq 0x25b80
movb %al, -0x169(%rbp)
jmp 0x4ba9f
movb -0x169(%rbp), %al
testb $0x1, %al
jne 0x4baae
jmp 0x4bbb3
leaq -0xc8(%rbp), %rdi
movl $0x2, %esi
leaq -0x40(%rbp), %rdx
xorl %ecx, %ecx
callq 0x4d170
movq %rax, -0x178(%rbp)
jmp 0x4bace
movq -0x178(%rbp), %rax
cmpq $0x0, %rax
jne 0x4bbae
jmp 0x4bae1
leaq 0x88bc0(%rip), %rax     # 0xd46a8
movq (%rax), %rdi
callq 0x2e8e0
cmpq $0x0, %rax
je 0x4bb93
leaq 0x88ba7(%rip), %rax     # 0xd46a8
movq %rax, -0x188(%rbp)
movq (%rax), %rdi
callq 0x2e900
movq -0x188(%rbp), %rax
movq (%rax), %rdi
callq 0x2e8e0
movq %rax, %rdi
leaq 0x5a97f(%rip), %rsi     # 0xa64a8
callq 0xc670
movq %rax, -0x180(%rbp)
jmp 0x4bb37
movq -0x180(%rbp), %rdi
leaq 0x5b537(%rip), %rsi     # 0xa707c
callq 0xc670
movq %rax, -0x190(%rbp)
jmp 0x4bb53
movq -0x190(%rbp), %rdi
leaq 0x5b9e7(%rip), %rsi     # 0xa7548
callq 0xc670
movq %rax, -0x198(%rbp)
jmp 0x4bb6f
movq -0x198(%rbp), %rdi
movq 0x88443(%rip), %rsi     # 0xd3fc0
callq 0xc6d0
jmp 0x4bb84
leaq 0x88b1d(%rip), %rax     # 0xd46a8
movq (%rax), %rdi
callq 0x2e920
jmp 0x4bb95
jmp 0x4bb97
movq $0x0, -0x8(%rbp)
movl $0x1, -0x10c(%rbp)
jmp 0x4c459
jmp 0x4c0c0
leaq 0x5b6eb(%rip), %rsi     # 0xa72a5
leaq -0x100(%rbp), %rdi
callq 0x25b80
movb %al, -0x199(%rbp)
jmp 0x4bbce
movb -0x199(%rbp), %al
testb $0x1, %al
jne 0x4bbdd
jmp 0x4bce2
leaq -0xc8(%rbp), %rdi
movl $0x2, %esi
leaq -0x48(%rbp), %rdx
xorl %ecx, %ecx
callq 0x4d170
movq %rax, -0x1a8(%rbp)
jmp 0x4bbfd
movq -0x1a8(%rbp), %rax
cmpq $0x0, %rax
jne 0x4bcdd
jmp 0x4bc10
leaq 0x88a91(%rip), %rax     # 0xd46a8
movq (%rax), %rdi
callq 0x2e8e0
cmpq $0x0, %rax
je 0x4bcc2
leaq 0x88a78(%rip), %rax     # 0xd46a8
movq %rax, -0x1b8(%rbp)
movq (%rax), %rdi
callq 0x2e900
movq -0x1b8(%rbp), %rax
movq (%rax), %rdi
callq 0x2e8e0
movq %rax, %rdi
leaq 0x5a850(%rip), %rsi     # 0xa64a8
callq 0xc670
movq %rax, -0x1b0(%rbp)
jmp 0x4bc66
movq -0x1b0(%rbp), %rdi
leaq 0x5b408(%rip), %rsi     # 0xa707c
callq 0xc670
movq %rax, -0x1c0(%rbp)
jmp 0x4bc82
movq -0x1c0(%rbp), %rdi
leaq 0x5b8e9(%rip), %rsi     # 0xa7579
callq 0xc670
movq %rax, -0x1c8(%rbp)
jmp 0x4bc9e
movq -0x1c8(%rbp), %rdi
movq 0x88314(%rip), %rsi     # 0xd3fc0
callq 0xc6d0
jmp 0x4bcb3
leaq 0x889ee(%rip), %rax     # 0xd46a8
movq (%rax), %rdi
callq 0x2e920
jmp 0x4bcc4
jmp 0x4bcc6
movq $0x0, -0x8(%rbp)
movl $0x1, -0x10c(%rbp)
jmp 0x4c459
jmp 0x4c0be
leaq 0x5de62(%rip), %rsi     # 0xa9b4b
leaq -0x100(%rbp), %rdi
callq 0x25b80
movb %al, -0x1c9(%rbp)
jmp 0x4bcfd
movb -0x1c9(%rbp), %al
testb $0x1, %al
jne 0x4bd0c
jmp 0x4be11
leaq -0xc8(%rbp), %rdi
movl $0x8, %esi
leaq -0x60(%rbp), %rdx
xorl %ecx, %ecx
callq 0x4d400
movq %rax, -0x1d8(%rbp)
jmp 0x4bd2c
movq -0x1d8(%rbp), %rax
cmpq $0x0, %rax
jne 0x4be0c
jmp 0x4bd3f
leaq 0x88962(%rip), %rax     # 0xd46a8
movq (%rax), %rdi
callq 0x2e8e0
cmpq $0x0, %rax
je 0x4bdf1
leaq 0x88949(%rip), %rax     # 0xd46a8
movq %rax, -0x1e8(%rbp)
movq (%rax), %rdi
callq 0x2e900
movq -0x1e8(%rbp), %rax
movq (%rax), %rdi
callq 0x2e8e0
movq %rax, %rdi
leaq 0x5a721(%rip), %rsi     # 0xa64a8
callq 0xc670
movq %rax, -0x1e0(%rbp)
jmp 0x4bd95
movq -0x1e0(%rbp), %rdi
leaq 0x5b2d9(%rip), %rsi     # 0xa707c
callq 0xc670
movq %rax, -0x1f0(%rbp)
jmp 0x4bdb1
movq -0x1f0(%rbp), %rdi
leaq 0x5b7ec(%rip), %rsi     # 0xa75ab
callq 0xc670
movq %rax, -0x1f8(%rbp)
jmp 0x4bdcd
movq -0x1f8(%rbp), %rdi
movq 0x881e5(%rip), %rsi     # 0xd3fc0
callq 0xc6d0
jmp 0x4bde2
leaq 0x888bf(%rip), %rax     # 0xd46a8
movq (%rax), %rdi
callq 0x2e920
jmp 0x4bdf3
jmp 0x4bdf5
movq $0x0, -0x8(%rbp)
movl $0x1, -0x10c(%rbp)
jmp 0x4c459
jmp 0x4c0bc
leaq 0x5b7c1(%rip), %rsi     # 0xa75d9
leaq -0x100(%rbp), %rdi
callq 0x25b80
movb %al, -0x1f9(%rbp)
jmp 0x4be2c
movb -0x1f9(%rbp), %al
testb $0x1, %al
jne 0x4be38
jmp 0x4be41
movb $0x1, -0x61(%rbp)
jmp 0x4c0ba
leaq -0x100(%rbp), %rdi
callq 0xcb60
testb $0x1, %al
jne 0x4c0a8
movq -0x108(%rbp), %rax
movq %rax, -0x208(%rbp)
testq %rax, %rax
je 0x4be93
jmp 0x4be6a
movq -0x208(%rbp), %rax
subq $0x1, %rax
je 0x4bf56
jmp 0x4be7d
movq -0x208(%rbp), %rax
subq $0x2, %rax
je 0x4bf85
jmp 0x4bfb4
leaq -0x100(%rbp), %rdi
movq %rdi, -0x218(%rbp)
callq 0xc460
movq -0x218(%rbp), %rdi
movq %rax, %rsi
decq %rsi
callq 0xcd00
movq %rax, -0x210(%rbp)
jmp 0x4bec1
movq -0x210(%rbp), %rax
movsbl (%rax), %edi
callq 0xcc40
movb %al, -0x10d(%rbp)
movsbl -0x10d(%rbp), %eax
cmpl $0x46, %eax
je 0x4beee
movsbl -0x10d(%rbp), %eax
cmpl $0x42, %eax
jne 0x4bf23
movb -0x10d(%rbp), %al
subb $0x46, %al
sete -0x2a(%rbp)
leaq -0x100(%rbp), %rdi
movq %rdi, -0x220(%rbp)
callq 0xc460
movq -0x220(%rbp), %rdi
movq %rax, %rsi
decq %rsi
callq 0xc940
jmp 0x4bf21
jmp 0x4bf23
leaq -0x118(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0x4d5b0
jmp 0x4bf38
leaq -0x100(%rbp), %rdi
movl $0x2, %esi
leaq -0x38(%rbp), %rdx
callq 0x4d5d0
movb $0x1, -0x29(%rbp)
jmp 0x4c0a6
leaq -0x120(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0x4d5b0
jmp 0x4bf6b
leaq -0x100(%rbp), %rdi
movl $0x2, %esi
leaq -0x40(%rbp), %rdx
callq 0x4d5d0
jmp 0x4c0a6
leaq -0x128(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0x4d5b0
jmp 0x4bf9a
leaq -0x100(%rbp), %rdi
movl $0x2, %esi
leaq -0x48(%rbp), %rdx
callq 0x4d5d0
jmp 0x4c0a6
jmp 0x4bfb6
leaq 0x886eb(%rip), %rax     # 0xd46a8
movq (%rax), %rdi
callq 0x257e0
cmpq $0x0, %rax
je 0x4c0a0
leaq 0x886d2(%rip), %rax     # 0xd46a8
movq %rax, -0x230(%rbp)
movq (%rax), %rdi
callq 0x25800
movq -0x230(%rbp), %rax
movq (%rax), %rdi
callq 0x257e0
movq %rax, %rdi
leaq 0x5a1b2(%rip), %rsi     # 0xa61b0
callq 0xc670
movq %rax, -0x228(%rbp)
jmp 0x4c00c
movq -0x228(%rbp), %rdi
leaq 0x5b062(%rip), %rsi     # 0xa707c
callq 0xc670
movq %rax, -0x238(%rbp)
jmp 0x4c028
movq -0x238(%rbp), %rdi
leaq 0x5b5a9(%rip), %rsi     # 0xa75df
callq 0xc670
movq %rax, -0x240(%rbp)
jmp 0x4c044
movq -0x240(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0xc5b0
movq %rax, -0x248(%rbp)
jmp 0x4c060
movq -0x248(%rbp), %rdi
leaq 0x5c365(%rip), %rsi     # 0xa83d3
callq 0xc670
movq %rax, -0x250(%rbp)
jmp 0x4c07c
movq -0x250(%rbp), %rdi
movq 0x87f36(%rip), %rsi     # 0xd3fc0
callq 0xc6d0
jmp 0x4c091
leaq 0x88610(%rip), %rax     # 0xd46a8
movq (%rax), %rdi
callq 0x25820
jmp 0x4c0a2
jmp 0x4c0a4
jmp 0x4c0a6
jmp 0x4c0a8
movq -0x108(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x108(%rbp)
jmp 0x4c0bc
jmp 0x4c0be
jmp 0x4c0c0
jmp 0x4c0c2
jmp 0x4b902
jmp 0x4c0c9
jmp 0x4c0cb
jmp 0x4c0cd
cmpq $0x0, -0x10(%rbp)
jne 0x4c0eb
movq $0x0, -0x8(%rbp)
movl $0x1, -0x10c(%rbp)
jmp 0x4c459
movq -0x10(%rbp), %rax
movq %rax, -0x258(%rbp)
cmpq $0x0, -0x60(%rbp)
je 0x4c108
xorl %eax, %eax
movq %rax, -0x260(%rbp)
jmp 0x4c113
movq -0x58(%rbp), %rax
movq %rax, -0x260(%rbp)
movq -0x258(%rbp), %rdi
movq -0x260(%rbp), %rsi
movl $0x18, %edx
callq 0x47500
testb $0x1, %al
jne 0x4c146
movq $0x0, -0x8(%rbp)
movl $0x1, -0x10c(%rbp)
jmp 0x4c459
cmpq $0x0, -0x60(%rbp)
je 0x4c165
movq -0x60(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x58(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq $0x0, 0x8(%rax)
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq $0x0, 0x20(%rax)
movq -0x10(%rbp), %rdi
leaq 0x5b0ac(%rip), %rsi     # 0xa723c
callq 0xc610
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rax
movq %rax, -0x130(%rbp)
movq -0x28(%rbp), %rcx
movq -0x130(%rbp), %rax
movq %rcx, (%rax)
movq -0x48(%rbp), %rcx
movq -0x130(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x40(%rbp), %rcx
movq -0x130(%rbp), %rax
movq %rcx, 0x10(%rax)
testb $0x1, -0x61(%rbp)
je 0x4c2c3
movq -0x130(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x43740
cmpq $0x0, %rax
je 0x4c2c3
jmp 0x4c1f6
leaq 0x884ab(%rip), %rax     # 0xd46a8
movq (%rax), %rdi
callq 0x2e8e0
cmpq $0x0, %rax
je 0x4c2a8
leaq 0x88492(%rip), %rax     # 0xd46a8
movq %rax, -0x270(%rbp)
movq (%rax), %rdi
callq 0x2e900
movq -0x270(%rbp), %rax
movq (%rax), %rdi
callq 0x2e8e0
movq %rax, %rdi
leaq 0x5a26a(%rip), %rsi     # 0xa64a8
callq 0xc670
movq %rax, -0x268(%rbp)
jmp 0x4c24c
movq -0x268(%rbp), %rdi
leaq 0x5ae22(%rip), %rsi     # 0xa707c
callq 0xc670
movq %rax, -0x278(%rbp)
jmp 0x4c268
movq -0x278(%rbp), %rdi
leaq 0x5b39d(%rip), %rsi     # 0xa7613
callq 0xc670
movq %rax, -0x280(%rbp)
jmp 0x4c284
movq -0x280(%rbp), %rdi
movq 0x87d2e(%rip), %rsi     # 0xd3fc0
callq 0xc6d0
jmp 0x4c299
leaq 0x88408(%rip), %rax     # 0xd46a8
movq (%rax), %rdi
callq 0x2e920
jmp 0x4c2aa
jmp 0x4c2ac
movq $0x0, -0x8(%rbp)
movl $0x1, -0x10c(%rbp)
jmp 0x4c459
testb $0x1, -0x29(%rbp)
je 0x4c432
movq -0x130(%rbp), %rdi
movq -0x38(%rbp), %rsi
movb -0x2a(%rbp), %al
notb %al
movzbl %al, %edx
andl $0x1, %edx
addl %edx, %edx
callq 0x43690
movq %rax, -0x288(%rbp)
jmp 0x4c2f3
movq -0x288(%rbp), %rax
cmpq $0x0, %rax
jge 0x4c432
jmp 0x4c306
leaq 0x8839b(%rip), %rax     # 0xd46a8
movq (%rax), %rdi
callq 0x2e8e0
cmpq $0x0, %rax
je 0x4c41a
leaq 0x88382(%rip), %rax     # 0xd46a8
movq %rax, -0x298(%rbp)
movq (%rax), %rdi
callq 0x2e900
movq -0x298(%rbp), %rax
movq (%rax), %rdi
callq 0x2e8e0
movq %rax, %rdi
leaq 0x5a15a(%rip), %rsi     # 0xa64a8
callq 0xc670
movq %rax, -0x290(%rbp)
jmp 0x4c35c
movq -0x290(%rbp), %rdi
leaq 0x5ad12(%rip), %rsi     # 0xa707c
callq 0xc670
movq %rax, -0x2a0(%rbp)
jmp 0x4c378
movq -0x2a0(%rbp), %rdi
leaq 0x5b2ba(%rip), %rsi     # 0xa7640
callq 0xc670
movq %rax, -0x2a8(%rbp)
jmp 0x4c394
movq -0x2a8(%rbp), %rdi
movq -0x38(%rbp), %rsi
callq 0xc340
movq %rax, -0x2b0(%rbp)
jmp 0x4c3ad
movq -0x2b0(%rbp), %rdi
leaq 0x5afb4(%rip), %rsi     # 0xa736f
callq 0xc670
movq %rax, -0x2b8(%rbp)
jmp 0x4c3c9
movq -0x2b8(%rbp), %rdi
movb -0x2a(%rbp), %cl
leaq 0x5af9c(%rip), %rax     # 0xa7376
leaq 0x5af9b(%rip), %rsi     # 0xa737c
testb $0x1, %cl
cmovneq %rax, %rsi
callq 0xc670
movq %rax, -0x2c0(%rbp)
jmp 0x4c3f6
movq -0x2c0(%rbp), %rdi
movq 0x87bbc(%rip), %rsi     # 0xd3fc0
callq 0xc6d0
jmp 0x4c40b
leaq 0x88296(%rip), %rax     # 0xd46a8
movq (%rax), %rdi
callq 0x2e920
jmp 0x4c41c
jmp 0x4c41e
movq $0x0, -0x8(%rbp)
movl $0x1, -0x10c(%rbp)
jmp 0x4c459
jmp 0x4c434
jmp 0x4c436
jmp 0x4c438
movq -0x10(%rbp), %rax
leaq 0x9d(%rip), %rcx        # 0x4c4e0
movq %rcx, 0x38(%rax)
movq -0x10(%rbp), %rax
movq %rax, -0x8(%rbp)
movl $0x1, -0x10c(%rbp)
leaq -0x100(%rbp), %rdi
callq 0xc3e0
leaq -0xc8(%rbp), %rdi
callq 0x256b0
leaq -0x90(%rbp), %rdi
callq 0x25c90
movq -0x8(%rbp), %rax
addq $0x2c0, %rsp            # imm = 0x2C0
popq %rbp
retq
leaq -0xc8(%rbp), %rdi
callq 0x256b0
leaq -0x90(%rbp), %rdi
callq 0x25c90
movq -0xd0(%rbp), %rdi
callq 0xcba0
nop