// File: mh0fm4[P]SCDC/src/lib/scdc/scdc.cc
// Function: scdc_context::init(char const*, _scdc_args_t*)
bool init(const char *conf, scdc_args_t *args)
    {
      SCDC_TRACE("scdc-context: " << __func__ << ": '" << conf << "'");

      SCDC_TRACE("scdc-context: " << __func__ << ": data: " << data);

      if (data) return false;

      scdcint_t result_size = SCDC_RESULT_STR_MIN_SIZE;
      bool no_config = false;
      bool no_direct = false;

      stringlist confs(':', conf);

      while (confs.size() > 0)
      {
        string c = confs.front_pop();

        if (c == "no_config") no_config = true;
        else if (c == "no_direct") no_direct = true;
        else if (c.size() > 0)
        {
          SCDC_TRACE("scdc-context: " << __func__ << ": unknown parameter '" << c << "'");
        }
      }

      data = new _scdc_context_data_t;

      data->result = static_cast<scdc_result_t *>(::operator new(SCDC_RESULT_EXTENT(result_size)));
      SCDC_RESULT_SET_SIZE(data->result, result_size);
      SCDC_RESULT_SET_EMPTY(data->result);

      scdc_nodeport_pool::init();
      scdc_nodeconn_pool::init();

      data->nodeconns.set_nodeport_pool(&data->nodeports);

      if (!no_config)
      {
        data->dp_config = scdc_dataprov_open("", "config", &scdc_main_config_hook);

      } else data->dp_config = SCDC_DATAPROV_NULL;

      if (!no_direct)
      {
        data->np_direct = scdc_nodeport_open("direct", "");
        scdc_nodeport_start(data->np_direct, SCDC_NODEPORT_START_ASYNC_UNTIL_CANCEL);

      } else data->np_direct = SCDC_NODEPORT_NULL;

      return true;
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xc0, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x90(%rbp)
jmp 0x25164
jmp 0x25166
jmp 0x25168
movq -0x90(%rbp), %rax
cmpq $0x0, 0x48(%rax)
je 0x2517f
movb $0x0, -0x1(%rbp)
jmp 0x2543d
movq $0x200, -0x28(%rbp)     # imm = 0x200
movb $0x0, -0x29(%rbp)
movb $0x0, -0x2a(%rbp)
movq -0x18(%rbp), %rdx
leaq -0x58(%rbp), %rdi
movl $0x3a, %esi
movq $-0x1, %rcx
callq 0x25a70
leaq -0x58(%rbp), %rdi
callq 0x25ae0
movq %rax, -0x98(%rbp)
jmp 0x251ba
movq -0x98(%rbp), %rax
cmpq $0x0, %rax
jbe 0x25294
leaq -0x88(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x25b00
jmp 0x251dd
leaq 0x81081(%rip), %rsi     # 0xa6265
leaq -0x88(%rbp), %rdi
callq 0x25b80
movb %al, -0x99(%rbp)
jmp 0x251f8
movb -0x99(%rbp), %al
testb $0x1, %al
jne 0x25204
jmp 0x25238
movb $0x1, -0x29(%rbp)
jmp 0x25283
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x25432
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x88(%rbp), %rdi
callq 0xc3e0
jmp 0x25432
leaq 0x81030(%rip), %rsi     # 0xa626f
leaq -0x88(%rbp), %rdi
callq 0x25b80
movb %al, -0x9a(%rbp)
jmp 0x25253
movb -0x9a(%rbp), %al
testb $0x1, %al
jne 0x2525f
jmp 0x25265
movb $0x1, -0x2a(%rbp)
jmp 0x25281
leaq -0x88(%rbp), %rdi
callq 0xc460
cmpq $0x0, %rax
jbe 0x2527f
jmp 0x25279
jmp 0x2527b
jmp 0x2527d
jmp 0x2527f
jmp 0x25281
jmp 0x25283
leaq -0x88(%rbp), %rdi
callq 0xc3e0
jmp 0x251a8
movl $0xe0, %edi
callq 0xc690
movq %rax, -0xa8(%rbp)
jmp 0x252a7
movq -0xa8(%rbp), %rdi
callq 0x25bb0
jmp 0x252b5
movq -0x90(%rbp), %rax
movq -0xa8(%rbp), %rcx
movq %rcx, 0x48(%rax)
movq -0x28(%rbp), %rdi
addq $0x8, %rdi
callq 0xc690
movq %rax, -0xb0(%rbp)
jmp 0x252dd
movq -0x90(%rbp), %rax
movq -0xb0(%rbp), %rdx
movq 0x48(%rax), %rcx
movq %rdx, (%rcx)
movq -0x28(%rbp), %rdx
movq 0x48(%rax), %rcx
movq (%rcx), %rcx
movq %rdx, (%rcx)
movq 0x48(%rax), %rax
movq (%rax), %rax
movb $0x0, 0x8(%rax)
callq 0x530f0
jmp 0x25312
callq 0x25c60
jmp 0x25319
movq -0x90(%rbp), %rax
movq 0x48(%rax), %rsi
movq %rsi, %rdi
addq $0x98, %rdi
addq $0x68, %rsi
callq 0x25c70
jmp 0x25339
testb $0x1, -0x29(%rbp)
jne 0x253a1
leaq 0x8125e(%rip), %rdi     # 0xa65a4
leaq 0x80f97(%rip), %rsi     # 0xa62e4
leaq 0xac80c(%rip), %rdx     # 0xd1b60
xorl %eax, %eax
callq 0x22200
movq %rax, -0xb8(%rbp)
jmp 0x25364
movq -0xb8(%rbp), %rcx
movq -0x90(%rbp), %rax
movq 0x48(%rax), %rax
movq %rcx, 0xd0(%rax)
jmp 0x253b7
movq -0xa8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
movl $0xe0, %esi
callq 0xc6a0
jmp 0x25432
movq -0x90(%rbp), %rax
movq 0x48(%rax), %rax
movq $0x0, 0xd0(%rax)
testb $0x1, -0x2a(%rbp)
jne 0x2540d
leaq 0x80eae(%rip), %rdi     # 0xa6272
leaq 0x811d9(%rip), %rsi     # 0xa65a4
xorl %eax, %eax
callq 0x22440
movq %rax, -0xc0(%rbp)
jmp 0x253db
movq -0x90(%rbp), %rax
movq -0xc0(%rbp), %rdx
movq 0x48(%rax), %rcx
movq %rdx, 0xd8(%rcx)
movq 0x48(%rax), %rax
movq 0xd8(%rax), %rdi
movl $0x4, %esi
callq 0x22550
jmp 0x2540b
jmp 0x25423
movq -0x90(%rbp), %rax
movq 0x48(%rax), %rax
movq $0x0, 0xd8(%rax)
movb $0x1, -0x1(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x25c90
jmp 0x2543d
leaq -0x58(%rbp), %rdi
callq 0x25c90
jmp 0x2544b
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0xc0, %rsp
popq %rbp
retq
movq -0x60(%rbp), %rdi
callq 0xcba0
nopw %cs:(%rax,%rax)
nop